From 55bb0c258d4f66dde2834f9be0c454b33afcc49b Mon Sep 17 00:00:00 2001 From: Soroosh Mariooryad Date: Fri, 30 Jun 2017 11:47:09 -0700 Subject: [PATCH] Log async ranking state in Settings search ranking Bug: 62072727 Test: RunSettingsRoboTests Change-Id: I2140c41d01f18a1e4b9e3f505e0afa4a8757d049 --- src/com/android/settings/search/SearchFragment.java | 3 +++ .../android/settings/search/SearchResultsAdapter.java | 19 ++++++++++++++----- .../android/settings/search/SearchFragmentTest.java | 2 ++ .../settings/search/SearchResultsAdapterTest.java | 9 +++++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java index 847285d326..e6714b6a65 100644 --- a/src/com/android/settings/search/SearchFragment.java +++ b/src/com/android/settings/search/SearchFragment.java @@ -419,6 +419,9 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O MetricsEvent.FIELD_SETTINGS_SEARCH_RESULT_RANK, resultViewHolder.getAdapterPosition())); taggedData.add(Pair.create( + MetricsEvent.FIELD_SETTINGS_SEARCH_RESULT_ASYNC_RANKING_STATE, + mSearchAdapter.getAsyncRankingState())); + taggedData.add(Pair.create( MetricsEvent.FIELD_SETTINGS_SEARCH_QUERY_LENGTH, TextUtils.isEmpty(mQuery) ? 0 : mQuery.length())); diff --git a/src/com/android/settings/search/SearchResultsAdapter.java b/src/com/android/settings/search/SearchResultsAdapter.java index ea395b0c0b..42e4bb52b7 100644 --- a/src/com/android/settings/search/SearchResultsAdapter.java +++ b/src/com/android/settings/search/SearchResultsAdapter.java @@ -77,11 +77,16 @@ public class SearchResultsAdapter extends RecyclerView.Adapter @IntDef({DISABLED, PENDING_RESULTS, SUCCEEDED, FAILED, TIMED_OUT}) @Retention(RetentionPolicy.SOURCE) private @interface AsyncRankingState {} - private static final int DISABLED = 0; - private static final int PENDING_RESULTS = 1; - private static final int SUCCEEDED = 2; - private static final int FAILED = 3; - private static final int TIMED_OUT = 4; + @VisibleForTesting + static final int DISABLED = 0; + @VisibleForTesting + static final int PENDING_RESULTS = 1; + @VisibleForTesting + static final int SUCCEEDED = 2; + @VisibleForTesting + static final int FAILED = 3; + @VisibleForTesting + static final int TIMED_OUT = 4; private @AsyncRankingState int mAsyncRankingState; public SearchResultsAdapter(SearchFragment fragment, @@ -244,6 +249,10 @@ public class SearchResultsAdapter extends RecyclerView.Adapter } } + @AsyncRankingState int getAsyncRankingState() { + return mAsyncRankingState; + } + /** * Merge the results from each of the loaders into one list for the adapter. * Prioritizes results from the local database over installed apps. diff --git a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java index 6dc8a3d049..e02c5173da 100644 --- a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java @@ -443,6 +443,8 @@ public class SearchFragmentTest { eq("test_setting"), argThat(pairMatches(MetricsProto.MetricsEvent.FIELD_SETTINGS_SEARCH_RESULT_COUNT)), argThat(pairMatches(MetricsProto.MetricsEvent.FIELD_SETTINGS_SEARCH_RESULT_RANK)), + argThat(pairMatches(MetricsProto.MetricsEvent + .FIELD_SETTINGS_SEARCH_RESULT_ASYNC_RANKING_STATE)), argThat(pairMatches(MetricsProto.MetricsEvent.FIELD_SETTINGS_SEARCH_QUERY_LENGTH))); verify(mFeatureFactory.searchFeatureProvider).searchResultClicked(nullable(Context.class), diff --git a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java index 503054bb00..9c1453ffa7 100644 --- a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java @@ -220,6 +220,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[5]); // appCharlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.SUCCEEDED); } @Test @@ -245,6 +246,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[5]); // appCharlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.SUCCEEDED); } @Test @@ -270,6 +272,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[2]); // charlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.FAILED); } @Test @@ -295,6 +298,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[2]); // charlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.FAILED); } @Test @@ -321,6 +325,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[2]); // charlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.TIMED_OUT); } @Test @@ -348,6 +353,7 @@ public class SearchResultsAdapterTest { assertThat(results.get(5).title).isEqualTo(TITLES[2]); // charlie verify(mFragment).onSearchResultsDisplayed(mSearchResultsCountCaptor.capture()); assertThat(mSearchResultsCountCaptor.getValue()).isEqualTo(6); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.TIMED_OUT); } @Test @@ -451,6 +457,7 @@ public class SearchResultsAdapterTest { mAdapter.notifyResultsLoaded(); verify(mSearchFeatureProvider, never()).querySearchResults( any(Context.class), anyString(), any(SearchResultsRankerCallback.class)); + assertThat(mAdapter.getAsyncRankingState()).isEqualTo(SearchResultsAdapter.DISABLED); } @Test @@ -460,6 +467,8 @@ public class SearchResultsAdapterTest { mAdapter.notifyResultsLoaded(); verify(mSearchFeatureProvider, times(1)).querySearchResults( any(Context.class), anyString(), any(SearchResultsRankerCallback.class)); + assertThat(mAdapter.getAsyncRankingState()) + .isEqualTo(SearchResultsAdapter.PENDING_RESULTS); } @Test -- 2.11.0