diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java index 847285d3269..e6714b6a65a 100644 --- a/src/com/android/settings/search/SearchFragment.java +++ b/src/com/android/settings/search/SearchFragment.java @@ -418,6 +418,9 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O taggedData.add(Pair.create( 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 ea395b0c0b9..42e4bb52b70 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 6dc8a3d0498..e02c5173da2 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 503054bb001..9c1453ffa7b 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