Log settings suggestions events only once.

The show/hide settings suggestions events are logged every time Settings
is shown. Save the logged events into the state bundle so that when the
fragment is resumed, it does not re-log the suggestions events.

Also move the logging for the show suggestion event to when the suggestion
is loaded, as the suggestions can be empty when the fragment starts.

Change-Id: I644ea0012bad309e59fed0d48171915c955779cc
Fixes: 30108142
This commit is contained in:
Doris Ling
2016-08-02 14:45:58 -07:00
parent 0948ce0cdb
commit bfbb964cb1

View File

@@ -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<String> mSuggestionsShownLogged;
private ArrayList<String> 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;
}
if (!getActivity().isChangingConfigurations()) {
for (Tile suggestion : mAdapter.getSuggestions()) {
MetricsLogger.action(getContext(), MetricsEvent.ACTION_HIDE_SETTINGS_SUGGESTION,
DashboardAdapter.getSuggestionIdentifier(getContext(), suggestion));
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<Tile> doInBackground(Void... params) {
List<Tile> 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;