package com.kila.apprater_dialog.lars; import android.app.AlertDialog; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.widget.RatingBar; public class AppRaterDialog extends AlertDialog { protected AppRaterDialog(Context context) { super(context); } public static class Builder extends AlertDialog.Builder { private final Context context; private RatingBar ratingBar; private String packageName; private int minimumNumberOfStars; private String email; private String lowRateTitle; private String lowRateMessage; private String lowRateEmailButton; private String lowRateDismissButton; public Builder(Context context) { super(context); this.context = context; lowRateTitle = context.getString(R.string.star_title_improve_app); lowRateMessage = context.getString(R.string.star_message_improve_app); lowRateEmailButton = context.getString(R.string.star_mail_improve_app); lowRateDismissButton = context.getString(R.string.star_cancel_improve_app); } public AlertDialog.Builder setPositiveButton(String rateButtonText) { this.setPositiveButton(rateButtonText, new RateClickListener()); return this; } public void setNeutralButton(String notNowButtonText) { this.setNeutralButton(notNowButtonText, new OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }); } public void setNegativeButton(String neverButtonText) { this.setNegativeButton(neverButtonText, new OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { new ConditionManager(context).dontShowDialogAgain(); } }); } public void setMinimumNumberOfStars(int minimumNumberOfStars) { this.minimumNumberOfStars = minimumNumberOfStars; } public void showStars() { View view = LayoutInflater.from(context).inflate(R.layout.layout_with_stars, null); ratingBar = (RatingBar) view.findViewById(R.id.ratingBar); this.setView(view); } public void setEmail(String email) { this.email = email; } public void setLowRateTitle(String lowRateTitle) { this.lowRateTitle = lowRateTitle; } public void setLowRateMessage(String lowRateMessage) { this.lowRateMessage = lowRateMessage; } public void setLowRateEmailButton(String lowRateEmailButton) { this.lowRateEmailButton = lowRateEmailButton; } public void setLowRateDismissButton(String lowRateDismissButton) { this.lowRateDismissButton = lowRateDismissButton; } public void setPackageName(String packageName) { this.packageName = packageName; } private class RateClickListener implements OnClickListener { @Override public void onClick(DialogInterface dialogInterface, int i) { if (ratingBar != null) { if (ratingBar.getRating() >= minimumNumberOfStars) { openPlayStore(packageName); } else { if(email != null) { new AlertDialog.Builder(context) .setTitle(lowRateTitle) .setMessage(lowRateMessage) .setPositiveButton(lowRateEmailButton, new OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { openEmailApp(); } }) .setNegativeButton(lowRateDismissButton, new OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { } }).show(); } } } else { openPlayStore(packageName); } new ConditionManager(context).dontShowDialogAgain(); } private void openEmailApp() { Intent intent = new Intent(Intent.ACTION_SEND, Uri.fromParts( "mailto",email, null)); intent.setType("message/rfc822"); intent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {email}); Intent mailer = Intent.createChooser(intent, null); context.startActivity(mailer); } private void openPlayStore(String packageName) { try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName))); } catch (ActivityNotFoundException e){ context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName))); } } } } }