package co.smartreceipts.android.rating; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import javax.inject.Inject; import co.smartreceipts.android.R; import co.smartreceipts.android.analytics.Analytics; import co.smartreceipts.android.analytics.events.Events; import co.smartreceipts.android.utils.IntentUtils; import dagger.android.support.AndroidSupportInjection; /** * Dialog Fragment which asks if user wants to rate the app */ public class RatingDialogFragment extends DialogFragment { @Inject Analytics analytics; @Inject AppRatingManager appRatingManager; @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); super.onAttach(context); } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Context context = getContext(); AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle(context.getString(R.string.apprating_dialog_title, getApplicationName())) .setMessage(R.string.apprating_dialog_message) .setNegativeButton(R.string.apprating_dialog_negative, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { analytics.record(Events.Ratings.UserSelectedNever); dismiss(); } }) .setNeutralButton(R.string.apprating_dialog_neutral, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { analytics.record(Events.Ratings.UserSelectedLater); prorogueRatingPrompt(); } }) .setPositiveButton(R.string.apprating_dialog_positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { analytics.record(Events.Ratings.UserSelectedRate); launchRatingIntent(); } }); return builder.create(); } private void launchRatingIntent() { Context context = getContext(); if (context != null) { context.startActivity(IntentUtils.getRatingIntent(context)); } } private void prorogueRatingPrompt() { appRatingManager.prorogueRatingPrompt(); } private String getApplicationName() { final PackageManager packageManager = getContext().getPackageManager(); try { ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getContext().getPackageName(), 0); return packageManager.getApplicationLabel(applicationInfo).toString(); } catch (final PackageManager.NameNotFoundException e) { return null; } } }