From 0ca782ab18d0669227e0d7f168a01c1c863698d0 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 6 Jun 2017 12:37:52 -0700 Subject: [PATCH] Add logging to track search no-result case Change-Id: Iea95468c33e6663c0dad374954468947575bb3df Fix: 37211659 Test: make RunSettingsRoboTests --- .../settings/search/SearchFragment.java | 10 +++++++--- .../search/IntentSearchViewHolderTest.java | 8 ++++---- .../settings/search/SearchFragmentTest.java | 20 +++++++++++++++++-- .../search/SearchResultsAdapterTest.java | 16 ++++++--------- 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java index d1645c3b2ce..90b46af89f1 100644 --- a/src/com/android/settings/search/SearchFragment.java +++ b/src/com/android/settings/search/SearchFragment.java @@ -106,7 +106,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O RecyclerView mResultsRecyclerView; @VisibleForTesting SearchView mSearchView; - private LinearLayout mNoResultsView; + @VisibleForTesting + LinearLayout mNoResultsView; @VisibleForTesting final RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() { @@ -215,8 +216,9 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O final boolean isEmptyQuery = TextUtils.isEmpty(query); // Hide no-results-view when the new query is not a super-string of the previous - if ((mQuery != null) && (mNoResultsView.getVisibility() == View.VISIBLE) - && (query.length() < mQuery.length())) { + if (mQuery != null + && mNoResultsView.getVisibility() == View.VISIBLE + && query.length() < mQuery.length()) { mNoResultsView.setVisibility(View.GONE); } @@ -311,6 +313,8 @@ public class SearchFragment extends InstrumentedFragment implements SearchView.O public void onSearchResultsDisplayed(int resultCount) { if (resultCount == 0) { mNoResultsView.setVisibility(View.VISIBLE); + mMetricsFeatureProvider.visible(getContext(), getMetricsCategory(), + MetricsEvent.SETTINGS_SEARCH_NO_RESULT); } else { mNoResultsView.setVisibility(View.GONE); mResultsRecyclerView.scrollToPosition(0); diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java index 85ce88b5249..c46afbc5db7 100644 --- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java @@ -45,7 +45,6 @@ import java.util.Objects; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; @@ -162,9 +161,10 @@ public class IntentSearchViewHolderTest { public void testBindElements_dynamicSummary_visibilityIsGone() { String dynamicSummary = "%s"; SearchResult result = new Builder() - .addTitle(TITLE) - .addSummary(dynamicSummary) - .addPayload(new IntentPayload(null)) + .setTitle(TITLE) + .setSummary(dynamicSummary) + .setPayload(new ResultPayload(null)) + .setStableId(1) .build(); mHolder.onBind(mFragment, result); diff --git a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java index ea4f7f3b259..2d6414bab3e 100644 --- a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java @@ -54,6 +54,7 @@ import java.util.Set; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.eq; @@ -90,8 +91,7 @@ public class SearchFragmentTest { public void setUp() { MockitoAnnotations.initMocks(this); - FakeFeatureFactory.setupForTest(mContext); - mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); + mFeatureFactory = FakeFeatureFactory.setupForTest(mContext); } @After @@ -195,6 +195,22 @@ public class SearchFragmentTest { assertThat(mQueryCaptor.getValue()).isEqualTo(testQuery); } + @Test + public void onSearchResultsDisplayed_noResult_shouldShowNoResultView() { + ActivityController activityController = + Robolectric.buildActivity(SearchActivity.class); + activityController.setup(); + SearchFragment fragment = spy((SearchFragment) activityController.get().getFragmentManager() + .findFragmentById(R.id.main_content)); + fragment.onSearchResultsDisplayed(0 /* count */); + + assertThat(fragment.mNoResultsView.getVisibility()).isEqualTo(View.VISIBLE); + verify(mFeatureFactory.metricsFeatureProvider).visible( + any(Context.class), + anyInt(), + eq(MetricsProto.MetricsEvent.SETTINGS_SEARCH_NO_RESULT)); + } + @Test public void queryTextChangeToEmpty_shouldLoadSavedQueryAndNotInitializeSearch() { when(mFeatureFactory.searchFeatureProvider diff --git a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java index c6a54511883..aaacaf8e0f9 100644 --- a/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchResultsAdapterTest.java @@ -31,7 +31,6 @@ import com.android.settings.TestConfig; import com.android.settings.search.SearchResult.Builder; import com.android.settings.search.ranking.SearchResultsRankerCallback; -import static org.junit.Assert.assertNull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -43,15 +42,6 @@ import org.robolectric.Robolectric; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowLooper; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyList; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -60,6 +50,12 @@ import java.util.Objects; import java.util.Set; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)