From 98fc9b139c4bfd2b6637d02ad5e0bb3de32f7251 Mon Sep 17 00:00:00 2001 From: Soroosh Mariooryad Date: Tue, 8 Aug 2017 11:21:32 -0700 Subject: [PATCH] Extending SearchFeatureProvider API to provide timeout Bug: 38197948 Test: RunSettingsRoboTests Change-Id: I5b04085ba93061dafe8977b42ebe5092bc9a9d09 --- src/com/android/settings/search/SearchFeatureProvider.java | 7 +++++++ src/com/android/settings/search/SearchResultsAdapter.java | 6 ++---- .../android/settings/search/SearchResultsAdapterTest.java | 2 ++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java index 900cefc3a53..956808d3857 100644 --- a/src/com/android/settings/search/SearchFeatureProvider.java +++ b/src/com/android/settings/search/SearchFeatureProvider.java @@ -137,6 +137,13 @@ public interface SearchFeatureProvider { return false; } + /** + * @return smart ranking timeout in milliseconds. + */ + default long smartSearchRankingTimeoutMs(Context context) { + return 300L; + } + /** * Prepare for search ranking predictions to avoid latency on the first prediction call. */ diff --git a/src/com/android/settings/search/SearchResultsAdapter.java b/src/com/android/settings/search/SearchResultsAdapter.java index 7b886a46cd0..5fedc523583 100644 --- a/src/com/android/settings/search/SearchResultsAdapter.java +++ b/src/com/android/settings/search/SearchResultsAdapter.java @@ -64,9 +64,6 @@ public class SearchResultsAdapter extends RecyclerView.Adapter @VisibleForTesting static final int MSG_RANKING_TIMED_OUT = 1; - // TODO(b/38197948): Tune this timeout based on latency of static and async rankings. Also, we - // should add a gservices flag to control this. - private static final long RANKING_TIMEOUT_MS = 300; private final SearchFragment mFragment; private final Context mContext; private final List mSearchResults; @@ -245,8 +242,9 @@ public class SearchResultsAdapter extends RecyclerView.Adapter mAsyncRankingState = PENDING_RESULTS; mSearchFeatureProvider.cancelPendingSearchQuery(mContext); final Handler handler = getHandler(); + final long timeoutMs = mSearchFeatureProvider.smartSearchRankingTimeoutMs(mContext); handler.sendMessageDelayed( - handler.obtainMessage(MSG_RANKING_TIMED_OUT), RANKING_TIMEOUT_MS); + handler.obtainMessage(MSG_RANKING_TIMED_OUT), timeoutMs); mSearchFeatureProvider.querySearchResults(mContext, query, this); } else { mAsyncRankingState = DISABLED; diff --git a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java index e605ec1729b..a2afb3570c6 100644 --- a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java @@ -83,6 +83,8 @@ public class SearchResultsAdapterTest { mLoaderClassName = DatabaseResultLoader.class.getName(); when(mFragment.getContext()).thenReturn(mMockContext); when(mMockContext.getApplicationContext()).thenReturn(mContext); + when(mSearchFeatureProvider.smartSearchRankingTimeoutMs(any(Context.class))) + .thenReturn(300L); mAdapter = new SearchResultsAdapter(mFragment, mSearchFeatureProvider); }