package com.android.settings;
+import android.app.Activity;
+import android.content.BroadcastReceiver;
import android.os.Bundle;
import android.support.v14.preference.PreferenceFragment;
import com.android.internal.logging.MetricsLogger;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.overlay.SurveyFeatureProvider;
/**
* Instrumented fragment that logs visibility state.
* {@link com.android.settings.InstrumentedFragment}.
*/
protected abstract int getMetricsCategory();
+ private BroadcastReceiver mReceiver;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
public void onResume() {
super.onResume();
MetricsLogger.visible(getActivity(), getMetricsCategory());
+
+ Activity activity = getActivity();
+ // guard against the activity not existing yet or the feature being disabled
+ if (activity != null) {
+ SurveyFeatureProvider provider =
+ FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
+ if (provider != null) {
+ // Try to download a survey if there is none available, show the survey otherwise
+ String id = provider.getSurveyId(activity, getClass().getSimpleName());
+ if (provider.getSurveyExpirationDate(activity, id) <= -1) {
+ // register the receiver to show the survey on completion.
+ mReceiver = provider.createAndRegisterReceiver(activity);
+ provider.downloadSurvey(activity, id, "fakeData");
+ } else {
+ provider.showSurveyIfAvailable(activity, id);
+ }
+ }
+ }
}
@Override
public void onPause() {
+ Activity activity = getActivity();
+ if (mReceiver != null && activity != null) {
+ SurveyFeatureProvider provider =
+ FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
+ provider.unregisterReceiver(activity, mReceiver);
+ mReceiver = null;
+ }
+
super.onPause();
MetricsLogger.hidden(getActivity(), getMetricsCategory());
}
package com.android.settings;
+import android.app.Activity;
+import android.content.BroadcastReceiver;
import android.support.v14.preference.PreferenceFragment;
import com.android.internal.logging.MetricsLogger;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.overlay.SurveyFeatureProvider;
/**
* Instrumented preference fragment that logs visibility state.
* {@link com.android.settings.InstrumentedFragment}.
*/
protected abstract int getMetricsCategory();
+ private BroadcastReceiver mReceiver;
@Override
public void onResume() {
super.onResume();
MetricsLogger.visible(getActivity(), getMetricsCategory());
+
+ Activity activity = getActivity();
+ // guard against the activity not existing yet or the feature being disabled
+ if (activity != null) {
+ SurveyFeatureProvider provider =
+ FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
+ if (provider != null) {
+ // Try to download a survey if there is none available, show the survey otherwise
+ String id = provider.getSurveyId(activity, getClass().getSimpleName());
+ if (provider.getSurveyExpirationDate(activity, id) <= -1) {
+ // register the receiver to show the survey on completion.
+ mReceiver = provider.createAndRegisterReceiver(activity);
+ provider.downloadSurvey(activity, id, "fakeData");
+ } else {
+ provider.showSurveyIfAvailable(activity, id);
+ }
+ }
+ }
}
@Override
public void onPause() {
+ Activity activity = getActivity();
+ if (mReceiver != null && activity != null) {
+ SurveyFeatureProvider provider =
+ FeatureFactory.getFactory(activity).getSurveyFeatureProvider(activity);
+ provider.unregisterReceiver(activity, mReceiver);
+ mReceiver = null;
+ }
+
super.onPause();
MetricsLogger.hidden(getActivity(), getMetricsCategory());
}
*
* @param activity The host activity to show the survey in.
* @param surveyId A unique Id representing a survey to download.
+ * @return A boolean indicating if a survey was shown or not.
*/
- void showSurveyIfAvailable(Activity activity, String surveyId);
+ boolean showSurveyIfAvailable(Activity activity, String surveyId);
/**
* A helper method to get the surveyId. Implementers should create a mapping of
* keys to surveyIds and provide them via this function.
*
* @param context A valid context.
- * @param key The key to get the surveyId for.
+ * @param simpleKey The simple name of the key to get the surveyId for.
* @return The unique Id as a string or null on error.
*/
- String getSurveyId(Context context, String key);
+ String getSurveyId(Context context, String simpleKey);
+
+ /**
+ * Removes the survey for {@code siteId} if it expired, then returns the expiration date (as a
+ * unix timestamp) for the remaining survey should it exist and be ready to show. Returns -1 if
+ * no valid survey exists after removing the potentially expired one.
+ *
+ * @param context the calling context.
+ * @param surveyId the site ID.
+ * @return the unix timestamp for the available survey for the given {@coe siteId} or -1 if
+ * there is none available.
+ */
+ long getSurveyExpirationDate(Context context, String surveyId);
+
+ /**
+ * Registers an activity to show surveys/prompts as soon as they are downloaded. The receiver
+ * should be unregistered prior to destroying the activity to avoid undefined behavior by
+ * calling {@link #unregisterReceiver(Activity, BroadcastReceiver)}.
+ * @param activity The activity that should show surveys once they are downloaded.
+ * @return the broadcast receiver listening for survey downloads. Must be unregistered before
+ * leaving the activity.
+ */
+ BroadcastReceiver createAndRegisterReceiver(Activity activity);
+
+ /**
+ * Unregisters the broadcast receiver for this activity. Should only be called once per activity
+ * after a call to {@link #createAndRegisterReceiver(Activity)}.
+ * @param activity The activity that was used to register the BroadcastReceiver.
+ */
+ void unregisterReceiver(Activity activity, BroadcastReceiver receiver);
}