Misc logging improvements

- Log ACTION_SEARCH_RESULTS whenever a search query is performed.
  eg, type "qu" will result 2 such logging events.
- Remove historam logging to search result click count (already logged
  as ACTION_CLICK_SETTINGS_SEARCH_RESULT)

Change-Id: Ia207b34702e0f24a7885e47d093f6cce1314ebc4
Fixes: 67743512
Fixes: 64939544
Test: robotests
This commit is contained in:
Fan Zhang
2017-10-18 15:27:13 -07:00
parent 5317e70be1
commit 5c4780f799
3 changed files with 11 additions and 14 deletions

View File

@@ -49,4 +49,8 @@ public abstract class InstrumentedFragment extends ObservableFragment implements
mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity()); mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity());
super.onResume(); super.onResume();
} }
protected final VisibilityLoggerMixin getVisibilityLogger() {
return mVisibilityLoggerMixin;
}
} }

View File

@@ -75,7 +75,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
private static final String STATE_QUERY = "state_query"; private static final String STATE_QUERY = "state_query";
private static final String STATE_SHOWING_SAVED_QUERY = "state_showing_saved_query"; private static final String STATE_SHOWING_SAVED_QUERY = "state_showing_saved_query";
private static final String STATE_NEVER_ENTERED_QUERY = "state_never_entered_query"; private static final String STATE_NEVER_ENTERED_QUERY = "state_never_entered_query";
private static final String STATE_RESULT_CLICK_COUNT = "state_result_click_count";
static final class SearchLoaderId { static final class SearchLoaderId {
// Search Query IDs // Search Query IDs
@@ -96,17 +95,12 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
@VisibleForTesting @VisibleForTesting
AtomicInteger mUnfinishedLoadersCount = new AtomicInteger(NUM_QUERY_LOADERS); AtomicInteger mUnfinishedLoadersCount = new AtomicInteger(NUM_QUERY_LOADERS);
// Logging
@VisibleForTesting
static final String RESULT_CLICK_COUNT = "settings_search_result_click_count";
@VisibleForTesting @VisibleForTesting
String mQuery; String mQuery;
private boolean mNeverEnteredQuery = true; private boolean mNeverEnteredQuery = true;
@VisibleForTesting @VisibleForTesting
boolean mShowingSavedQuery; boolean mShowingSavedQuery;
private int mResultClickCount;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
@VisibleForTesting @VisibleForTesting
SavedQueryController mSavedQueryController; SavedQueryController mSavedQueryController;
@@ -161,7 +155,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
if (savedInstanceState != null) { if (savedInstanceState != null) {
mQuery = savedInstanceState.getString(STATE_QUERY); mQuery = savedInstanceState.getString(STATE_QUERY);
mNeverEnteredQuery = savedInstanceState.getBoolean(STATE_NEVER_ENTERED_QUERY); mNeverEnteredQuery = savedInstanceState.getBoolean(STATE_NEVER_ENTERED_QUERY);
mResultClickCount = savedInstanceState.getInt(STATE_RESULT_CLICK_COUNT);
mShowingSavedQuery = savedInstanceState.getBoolean(STATE_SHOWING_SAVED_QUERY); mShowingSavedQuery = savedInstanceState.getBoolean(STATE_SHOWING_SAVED_QUERY);
} else { } else {
mShowingSavedQuery = true; mShowingSavedQuery = true;
@@ -244,7 +237,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
super.onStop(); super.onStop();
final Activity activity = getActivity(); final Activity activity = getActivity();
if (activity != null && activity.isFinishing()) { if (activity != null && activity.isFinishing()) {
mMetricsFeatureProvider.histogram(activity, RESULT_CLICK_COUNT, mResultClickCount);
if (mNeverEnteredQuery) { if (mNeverEnteredQuery) {
mMetricsFeatureProvider.action(activity, mMetricsFeatureProvider.action(activity,
MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY); MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY);
@@ -258,7 +250,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
outState.putString(STATE_QUERY, mQuery); outState.putString(STATE_QUERY, mQuery);
outState.putBoolean(STATE_NEVER_ENTERED_QUERY, mNeverEnteredQuery); outState.putBoolean(STATE_NEVER_ENTERED_QUERY, mNeverEnteredQuery);
outState.putBoolean(STATE_SHOWING_SAVED_QUERY, mShowingSavedQuery); outState.putBoolean(STATE_SHOWING_SAVED_QUERY, mShowingSavedQuery);
outState.putInt(STATE_RESULT_CLICK_COUNT, mResultClickCount);
} }
@Override @Override
@@ -276,7 +267,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
mNoResultsView.setVisibility(View.GONE); mNoResultsView.setVisibility(View.GONE);
} }
mResultClickCount = 0;
mNeverEnteredQuery = false; mNeverEnteredQuery = false;
mQuery = query; mQuery = query;
@@ -335,7 +325,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
if (mUnfinishedLoadersCount.decrementAndGet() != 0) { if (mUnfinishedLoadersCount.decrementAndGet() != 0) {
return; return;
} }
mSearchAdapter.notifyResultsLoaded(); mSearchAdapter.notifyResultsLoaded();
} }
@@ -372,7 +361,6 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
logSearchResultClicked(resultViewHolder, result, logTaggedData); logSearchResultClicked(resultViewHolder, result, logTaggedData);
mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result); mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
mSavedQueryController.saveQuery(mQuery); mSavedQueryController.saveQuery(mQuery);
mResultClickCount++;
} }
public void onSearchResultsDisplayed(int resultCount) { public void onSearchResultsDisplayed(int resultCount) {
@@ -384,6 +372,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O
mNoResultsView.setVisibility(View.GONE); mNoResultsView.setVisibility(View.GONE);
mResultsRecyclerView.scrollToPosition(0); mResultsRecyclerView.scrollToPosition(0);
} }
mMetricsFeatureProvider.action(
getVisibilityLogger(), MetricsEvent.ACTION_SEARCH_RESULTS, 1);
mSearchFeatureProvider.showFeedbackButton(this, getView()); mSearchFeatureProvider.showFeedbackButton(this, getView());
} }

View File

@@ -43,6 +43,7 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import com.android.settings.testutils.DatabaseTestUtils; import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -207,8 +208,6 @@ public class SearchFragmentTest {
verify(mFeatureFactory.metricsFeatureProvider, never()).action( verify(mFeatureFactory.metricsFeatureProvider, never()).action(
any(Context.class), any(Context.class),
eq(MetricsProto.MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY)); eq(MetricsProto.MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY));
verify(mFeatureFactory.metricsFeatureProvider).histogram(
any(Context.class), eq(SearchFragment.RESULT_CLICK_COUNT), eq(0));
verify(mFeatureFactory.searchFeatureProvider) verify(mFeatureFactory.searchFeatureProvider)
.getDatabaseSearchLoader(any(Context.class), anyString()); .getDatabaseSearchLoader(any(Context.class), anyString());
verify(mFeatureFactory.searchFeatureProvider) verify(mFeatureFactory.searchFeatureProvider)
@@ -231,6 +230,10 @@ public class SearchFragmentTest {
any(Context.class), any(Context.class),
anyInt(), anyInt(),
eq(MetricsProto.MetricsEvent.SETTINGS_SEARCH_NO_RESULT)); eq(MetricsProto.MetricsEvent.SETTINGS_SEARCH_NO_RESULT));
verify(mFeatureFactory.metricsFeatureProvider).action(
any(VisibilityLoggerMixin.class),
eq(MetricsProto.MetricsEvent.ACTION_SEARCH_RESULTS),
eq(1));
} }
@Test @Test