package com.gettingmobile.goodnews.tip; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import com.gettingmobile.android.app.actions.ActionContext; import com.gettingmobile.android.app.actions.MarketDetailsAction; import com.gettingmobile.goodnews.Application; import com.gettingmobile.goodnews.R; import com.gettingmobile.goodnews.settings.Settings; import java.util.Calendar; public class RatingRequestDialog { private static final String KEY_TIMESTAMP = "rating_request_next_time"; private static final String KEY_REQUEST_AGAIN = "rating_request_again"; private static final int DAYS = 5; private static boolean check = true; public static void showIfApplicable(ActionContext<? extends Application> context) { if (check) { final Settings settings = context.getApp().getSettings(); final Calendar nextShowTime = settings.getTimestamp(KEY_TIMESTAMP); if (nextShowTime == null) { /* * the app has been newly installed and we are called for the first time. So let's initialize */ rescheduleRequest(context.getApp()); } else { /* * check whether we should display */ if (settings.getBoolean(KEY_REQUEST_AGAIN)) { if (nextShowTime.before(Calendar.getInstance())) { showDialog(context); } } else { check = false; } } } } protected static void rescheduleRequest(Application app) { app.getSettings().setTimestampFromNow(KEY_TIMESTAMP, Calendar.DAY_OF_MONTH, DAYS); app.getSettings().setBoolean(KEY_REQUEST_AGAIN, true); } protected static void disableRequests(Application app) { app.getSettings().setBoolean(KEY_REQUEST_AGAIN, false); check = false; } protected static void showDialog(ActionContext<? extends Application> context) { /* * build the layout */ final LayoutInflater layoutInflater = (LayoutInflater) context.getApp().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View view = layoutInflater.inflate(R.layout.rating_request, null); /* * build the dialog */ final AlertDialog dlg = new AlertDialog.Builder(context.getActivity()) .setTitle(R.string.rating_request_title) .setIcon(R.drawable.icon) .setView(view) .create(); /* * register the listeners */ final View.OnClickListener clickListener = new ButtonClickListener(context, dlg); view.findViewById(R.id.rating_request_rate).setOnClickListener(clickListener); view.findViewById(R.id.rating_request_later).setOnClickListener(clickListener); view.findViewById(R.id.rating_request_no).setOnClickListener(clickListener); /* * show the dialog */ dlg.show(); } /* * inner classes */ static class ButtonClickListener implements View.OnClickListener { private final ActionContext<? extends Application> context; private final Dialog dlg; public ButtonClickListener(ActionContext<? extends Application> context, Dialog dlg) { this.context = context; this.dlg = dlg; } @Override public void onClick(View view) { dlg.dismiss(); if (view.getId() == R.id.rating_request_rate) { new MarketDetailsAction(context.getApp().getPackageName()).onFired(context); disableRequests(context.getApp()); } else if (view.getId() == R.id.rating_request_later) { rescheduleRequest(context.getApp()); } else if (view.getId() == R.id.rating_request_no) { disableRequests(context.getApp()); } } } }