diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 1c7e22d8112..12f036a12cb 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -42,6 +42,7 @@ import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.Tile; +import java.util.ArrayList; import java.util.List; public class DashboardSummary extends InstrumentedFragment @@ -63,6 +64,8 @@ public class DashboardSummary extends InstrumentedFragment private static final String SUGGESTIONS = "suggestions"; private static final String EXTRA_SCROLL_POSITION = "scroll_position"; + private static final String EXTRA_SUGGESTION_SHOWN_LOGGED = "suggestions_shown_logged"; + private static final String EXTRA_SUGGESTION_HIDDEN_LOGGED = "suggestions_hidden_logged"; private FocusRecyclerView mDashboard; private DashboardAdapter mAdapter; @@ -71,6 +74,8 @@ public class DashboardSummary extends InstrumentedFragment private SuggestionParser mSuggestionParser; private LinearLayoutManager mLayoutManager; private SuggestionsChecks mSuggestionsChecks; + private ArrayList mSuggestionsShownLogged; + private ArrayList mSuggestionsHiddenLogged; @Override protected int getMetricsCategory() { @@ -90,6 +95,15 @@ public class DashboardSummary extends InstrumentedFragment mSuggestionParser = new SuggestionParser(context, context.getSharedPreferences(SUGGESTIONS, 0), R.xml.suggestion_ordering); mSuggestionsChecks = new SuggestionsChecks(getContext()); + if (savedInstanceState == null) { + mSuggestionsShownLogged = new ArrayList<>(); + mSuggestionsHiddenLogged = new ArrayList<>(); + } else { + mSuggestionsShownLogged = + savedInstanceState.getStringArrayList(EXTRA_SUGGESTION_SHOWN_LOGGED); + mSuggestionsHiddenLogged = + savedInstanceState.getStringArrayList(EXTRA_SUGGESTION_HIDDEN_LOGGED); + } if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); } @@ -112,12 +126,6 @@ public class DashboardSummary extends InstrumentedFragment MetricsLogger.visible(getContext(), c.getMetricsConstant()); } } - if (mAdapter.getSuggestions() != null) { - for (Tile suggestion : mAdapter.getSuggestions()) { - MetricsLogger.action(getContext(), MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, - DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion)); - } - } if (DEBUG_TIMING) Log.d(TAG, "onStart took " + (System.currentTimeMillis() - startTime) + " ms"); } @@ -136,9 +144,15 @@ public class DashboardSummary extends InstrumentedFragment if (mAdapter.getSuggestions() == null) { return; } - for (Tile suggestion : mAdapter.getSuggestions()) { - MetricsLogger.action(getContext(), MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION, - DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion)); + if (!getActivity().isChangingConfigurations()) { + for (Tile suggestion : mAdapter.getSuggestions()) { + String id = DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion); + if (!mSuggestionsHiddenLogged.contains(id)) { + mSuggestionsHiddenLogged.add(id); + MetricsLogger.action(getContext(), + MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION, id); + } + } } } @@ -169,6 +183,8 @@ public class DashboardSummary extends InstrumentedFragment if (mAdapter != null) { mAdapter.onSaveInstanceState(outState); } + outState.putStringArrayList(EXTRA_SUGGESTION_HIDDEN_LOGGED, mSuggestionsHiddenLogged); + outState.putStringArrayList(EXTRA_SUGGESTION_SHOWN_LOGGED, mSuggestionsShownLogged); } @Override @@ -222,9 +238,17 @@ public class DashboardSummary extends InstrumentedFragment protected List doInBackground(Void... params) { List suggestions = mSuggestionParser.getSuggestions(); for (int i = 0; i < suggestions.size(); i++) { - if (mSuggestionsChecks.isSuggestionComplete(suggestions.get(i))) { - mAdapter.disableSuggestion(suggestions.get(i)); + Tile suggestion = suggestions.get(i); + if (mSuggestionsChecks.isSuggestionComplete(suggestion)) { + mAdapter.disableSuggestion(suggestion); suggestions.remove(i--); + } else { + String id = DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion); + if (!mSuggestionsShownLogged.contains(id)) { + mSuggestionsShownLogged.add(id); + MetricsLogger.action(getContext(), + MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id); + } } } return suggestions;