From ff4da23a654f281bc67a6503d54bf8a18320ef4e Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 9 Nov 2017 14:07:23 -0800 Subject: [PATCH] Create a feature flag for Search v2. Also moved all other flags in a common file so we can track them more easily. Bug: 68825426 Bug: 64938328 Test: rerun robotests Change-Id: I3fc805054cb960bedd965b1b907be759df50b95d --- .../android/settings/DeviceInfoSettings.java | 8 +-- src/com/android/settings/Settings.java | 4 +- .../android/settings/SettingsActivity.java | 14 ++-- .../android/settings/core/FeatureFlags.java | 28 ++++++++ .../core/InstrumentedPreferenceFragment.java | 8 +-- .../SuggestionFeatureProviderImpl.java | 6 +- .../DeviceModelPreferenceController.java | 4 +- .../HardwareInfoDialogFragment.java | 6 +- .../search/SearchFeatureProvider.java | 22 +++++++ .../settings/SettingsActivityTest.java | 15 ----- .../InstrumentedPreferenceFragmentTest.java | 15 ++--- .../SuggestionFeatureProviderImplTest.java | 5 +- .../search/SearchFeatureProviderImplTest.java | 65 +++++++++++++++++-- 13 files changed, 140 insertions(+), 60 deletions(-) create mode 100644 src/com/android/settings/core/FeatureFlags.java diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index 5c266454e7e..4cabccd6d11 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -16,6 +16,8 @@ package com.android.settings; +import static com.android.settings.core.FeatureFlags.DEVICE_INFO_V2; + import android.app.Activity; import android.app.Fragment; import android.content.Context; @@ -56,8 +58,6 @@ import java.util.List; public class DeviceInfoSettings extends DashboardFragment implements Indexable { - public static final String DEVICE_INFO_V2_FEATURE_FLAG = "device_info_v2"; - private static final String LOG_TAG = "DeviceInfoSettings"; private static final String KEY_LEGAL_CONTAINER = "legal_container"; @@ -89,7 +89,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { @Override protected int getPreferenceScreenResId() { - return FeatureFlagUtils.isEnabled(DEVICE_INFO_V2_FEATURE_FLAG) + return FeatureFlagUtils.isEnabled(DEVICE_INFO_V2) ? R.xml.device_info_settings_v2 : R.xml.device_info_settings; } @@ -126,7 +126,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { private static List buildPreferenceControllers(Context context, Activity activity, Fragment fragment, Lifecycle lifecycle) { - if (FeatureFlagUtils.isEnabled(DEVICE_INFO_V2_FEATURE_FLAG)) { + if (FeatureFlagUtils.isEnabled(DEVICE_INFO_V2)) { final List controllers = new ArrayList<>(); // Device name diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index cbae80cae43..279ff88dc1d 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -16,6 +16,8 @@ package com.android.settings; +import static com.android.settings.core.FeatureFlags.DEV_OPTION_V1; + import android.os.Bundle; import android.util.FeatureFlagUtils; @@ -65,7 +67,7 @@ public class Settings extends SettingsActivity { @Deprecated public static class DevelopmentSettingsActivity extends SettingsActivity { public static final boolean isEnabled() { - return FeatureFlagUtils.isEnabled("dev_option_v1"); + return FeatureFlagUtils.isEnabled(DEV_OPTION_V1); } } public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 7203e248bb5..1a013ccce72 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -62,7 +62,6 @@ import com.android.settings.core.instrumentation.SharedPreferencesLogger; import com.android.settings.dashboard.DashboardFeatureProvider; import com.android.settings.dashboard.DashboardSummary; import com.android.settings.overlay.FeatureFactory; -import com.android.settings.search.SearchActivity; import com.android.settings.wfd.WifiDisplaySettings; import com.android.settings.widget.SwitchBar; import com.android.settingslib.development.DevelopmentSettingsEnabler; @@ -76,7 +75,7 @@ import java.util.Set; public class SettingsActivity extends SettingsDrawerActivity implements PreferenceManager.OnPreferenceTreeClickListener, PreferenceFragment.OnPreferenceStartFragmentCallback, - ButtonBarHandler, FragmentManager.OnBackStackChangedListener, OnClickListener { + ButtonBarHandler, FragmentManager.OnBackStackChangedListener { private static final String LOG_TAG = "Settings"; @@ -329,8 +328,9 @@ public class SettingsActivity extends SettingsDrawerActivity if (mIsShowingDashboard) { findViewById(R.id.search_bar).setVisibility(View.VISIBLE); findViewById(R.id.action_bar).setVisibility(View.GONE); - Toolbar toolbar = findViewById(R.id.search_action_bar); - toolbar.setOnClickListener(this); + final Toolbar toolbar = findViewById(R.id.search_action_bar); + FeatureFactory.getFactory(this).getSearchFeatureProvider() + .initSearchToolbar(this, toolbar); setActionBar(toolbar); // Please forgive me for what I am about to do. @@ -959,10 +959,4 @@ public class SettingsActivity extends SettingsDrawerActivity return bitmap; } - - @Override - public void onClick(View v) { - Intent intent = new Intent(this, SearchActivity.class); - startActivity(intent); - } } diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java new file mode 100644 index 00000000000..f3bf3e7340a --- /dev/null +++ b/src/com/android/settings/core/FeatureFlags.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.core; + +/** + * This class keeps track of all feature flags in Settings. + */ +public class FeatureFlags { + public static final String DEVICE_INFO_V2 = "device_info_v2"; + public static final String DEV_OPTION_V1 = "dev_option_v1"; + public static final String SEARCH_V2 = "settings_search_v2"; + public static final String SUGGESTIONS_V2 = "new_settings_suggestion"; + public static final String USE_PREFERENCE_SCREEN_TITLE = "settings_use_preference_screen_title"; +} diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java index 5b95d6670c7..31a0c271423 100644 --- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java +++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java @@ -18,7 +18,6 @@ package com.android.settings.core; import android.content.Context; import android.os.Bundle; -import android.support.annotation.VisibleForTesting; import android.support.annotation.XmlRes; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; @@ -39,9 +38,8 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc implements Instrumentable { private static final String TAG = "InstrumentedPrefFrag"; - @VisibleForTesting - static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE = - "settings_use_preference_screen_title"; + + protected MetricsFeatureProvider mMetricsFeatureProvider; // metrics placeholder value. Only use this for development. @@ -85,7 +83,7 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc } public static boolean usePreferenceScreenTitle() { - return FeatureFlagUtils.isEnabled(FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE) || true; + return FeatureFlagUtils.isEnabled(FeatureFlags.USE_PREFERENCE_SCREEN_TITLE) || true; } protected final Context getPrefContext() { diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index 1be31b44e2e..14f0e2c09c5 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -16,6 +16,8 @@ package com.android.settings.dashboard.suggestions; +import static com.android.settings.core.FeatureFlags.SUGGESTIONS_V2; + import android.app.ActivityManager; import android.content.ComponentName; import android.content.ContentResolver; @@ -62,8 +64,6 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider private static final int EXCLUSIVE_SUGGESTION_MAX_COUNT = 3; private static final String SHARED_PREF_FILENAME = "suggestions"; - @VisibleForTesting - static final String FEATURE_FLAG_SUGGESTIONS_V2 = "new_settings_suggestion"; private final SuggestionRanker mSuggestionRanker; private final MetricsFeatureProvider mMetricsFeatureProvider; @@ -92,7 +92,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider } private static boolean isV2Enabled() { - return FeatureFlagUtils.isEnabled(FEATURE_FLAG_SUGGESTIONS_V2) || true; + return FeatureFlagUtils.isEnabled(SUGGESTIONS_V2) || true; } @Override diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java index e7fab5a1d11..5e7cd88d84d 100644 --- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java +++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java @@ -23,8 +23,8 @@ import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.FeatureFlagUtils; -import com.android.settings.DeviceInfoSettings; import com.android.settings.R; +import com.android.settings.core.FeatureFlags; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.DeviceInfoUtils; import com.android.settingslib.core.AbstractPreferenceController; @@ -51,7 +51,7 @@ public class DeviceModelPreferenceController extends AbstractPreferenceControlle super.displayPreference(screen); final Preference pref = screen.findPreference(KEY_DEVICE_MODEL); if (pref != null) { - if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) { + if (FeatureFlagUtils.isEnabled(FeatureFlags.DEVICE_INFO_V2)) { pref.setSummary(mContext.getResources().getString(R.string.model_summary, getDeviceModel())); } else { diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java index 3d825b909d4..c57a4e08f7e 100644 --- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java +++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java @@ -29,8 +29,8 @@ import android.view.View; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.DeviceInfoSettings; import com.android.settings.R; +import com.android.settings.core.FeatureFlags; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; public class HardwareInfoDialogFragment extends InstrumentedDialogFragment { @@ -59,7 +59,7 @@ public class HardwareInfoDialogFragment extends InstrumentedDialogFragment { DeviceModelPreferenceController.getDeviceModel()); // Serial number - if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) { + if (FeatureFlagUtils.isEnabled(FeatureFlags.DEVICE_INFO_V2)) { setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber()); } else { content.findViewById(R.id.serial_number_label).setVisibility(View.GONE); @@ -73,7 +73,7 @@ public class HardwareInfoDialogFragment extends InstrumentedDialogFragment { return builder.setView(content).create(); } - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + @VisibleForTesting void setText(View content, int labelViewId, int valueViewId, String value) { if (content == null) { return; diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java index 42afee929c8..d365ae5ded7 100644 --- a/src/com/android/settings/search/SearchFeatureProvider.java +++ b/src/com/android/settings/search/SearchFeatureProvider.java @@ -19,9 +19,13 @@ package com.android.settings.search; import android.annotation.NonNull; import android.content.ComponentName; import android.content.Context; +import android.content.Intent; +import android.util.FeatureFlagUtils; import android.util.Pair; import android.view.View; +import android.widget.Toolbar; +import com.android.settings.core.FeatureFlags; import com.android.settings.dashboard.SiteMapManager; import java.util.List; @@ -164,4 +168,22 @@ public interface SearchFeatureProvider { default FutureTask>> getRankerTask(Context context, String query) { return null; } + + /** + * Initializes the search toolbar. + */ + default void initSearchToolbar(Context context, Toolbar toolbar) { + if (context == null || toolbar == null) { + return; + } + toolbar.setOnClickListener(tb -> { + final Intent intent; + if (FeatureFlagUtils.isEnabled(FeatureFlags.SEARCH_V2)) { + intent = new Intent("com.android.settings.action.SETTINGS_SEARCH"); + } else { + intent = new Intent(context, SearchActivity.class); + } + context.startActivity(intent); + }); + } } diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java index fac136cc236..509ecdad1a9 100644 --- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java +++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java @@ -17,7 +17,6 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.doReturn; @@ -29,13 +28,11 @@ import static org.mockito.Mockito.when; import android.app.ActivityManager; import android.app.FragmentManager; import android.app.FragmentTransaction; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; -import com.android.settings.search.SearchActivity; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; @@ -46,7 +43,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowApplication; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -97,15 +93,4 @@ public class SettingsActivityTest { assertThat((boolean) bundle.get(SettingsActivity.SAVE_KEY_SHOW_HOME_AS_UP)).isTrue(); } - - @Test - public void testOnClick() { - doReturn("com.android.settings").when(mActivity).getPackageName(); - - mActivity.onClick(null); - - Intent intent = ShadowApplication.getInstance().getNextStartedActivity(); - assertThat(intent.getComponent()).isEqualTo( - new ComponentName("com.android.settings", SearchActivity.class.getName())); - } } diff --git a/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java index 30d60ccfab5..3837d816112 100644 --- a/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/core/InstrumentedPreferenceFragmentTest.java @@ -31,9 +31,9 @@ import android.util.FeatureFlagUtils; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; +import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; -import com.android.settings.TestConfig; import org.junit.After; import org.junit.Before; @@ -45,7 +45,7 @@ import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O, shadows = { SettingsShadowSystemProperties.class }) public class InstrumentedPreferenceFragmentTest { @@ -76,7 +76,7 @@ public class InstrumentedPreferenceFragmentTest { @Test public void onCreatePreferences_noPreferenceScreenResId_shouldNotAddPreference() { SettingsShadowSystemProperties.set( - FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE, + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.USE_PREFERENCE_SCREEN_TITLE, "true"); mFragment.onCreatePreferences(Bundle.EMPTY, null /* rootKey */); @@ -87,7 +87,7 @@ public class InstrumentedPreferenceFragmentTest { @Test public void onCreatePreferences_gotPreferenceScreenResId_shouldAddPreferences() { SettingsShadowSystemProperties.set( - FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE, + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.USE_PREFERENCE_SCREEN_TITLE, "true"); mFragment.setPreferenceScreenResId(R.xml.screen_pinning_settings); when(mFragment.getActivity()).thenReturn(mActivity); @@ -101,7 +101,7 @@ public class InstrumentedPreferenceFragmentTest { @Test public void onCreatePreferences_gotPrefScreenResIdAndTitle_shouldAddPreferencesAndSetTitle() { SettingsShadowSystemProperties.set( - FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE, + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.USE_PREFERENCE_SCREEN_TITLE, "true"); mFragment.setPreferenceScreenResId(R.xml.screen_pinning_settings); when(mFragment.getActivity()).thenReturn(mActivity); @@ -114,14 +114,11 @@ public class InstrumentedPreferenceFragmentTest { verify(mActivity).setTitle(title); } - private static class InstrumentedPreferenceFragmentTestable + public static class InstrumentedPreferenceFragmentTestable extends InstrumentedPreferenceFragment { private int mScreenId = -1; - public InstrumentedPreferenceFragmentTestable() { - } - @Override public int getMetricsCategory() { return MetricsEvent.VIEW_UNKNOWN; diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java index 8feef923f1b..b74453c0098 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -42,6 +42,7 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.Settings.NightDisplaySuggestionActivity; import com.android.settings.TestConfig; +import com.android.settings.core.FeatureFlags; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; @@ -67,7 +68,7 @@ import java.util.ArrayList; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O, shadows = { ShadowSecureSettings.class, SettingsShadowResources.class, SettingsShadowSystemProperties.class @@ -136,7 +137,7 @@ public class SuggestionFeatureProviderImplTest { public void isSuggestionV2Enabled_isNotLowMemoryDevice_sysPropOn_shouldReturnTrue() { when(mActivityManager.isLowRamDevice()).thenReturn(false); SettingsShadowSystemProperties.set( - FeatureFlagUtils.FFLAG_PREFIX + mProvider.FEATURE_FLAG_SUGGESTIONS_V2, "true"); + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.SUGGESTIONS_V2, "true"); assertThat(mProvider.isSuggestionV2Enabled(mContext)).isTrue(); } diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java index a529b0baf52..5b6c7ee9768 100644 --- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java @@ -18,13 +18,24 @@ package com.android.settings.search; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.robolectric.Shadows.shadowOf; import android.app.Activity; import android.content.ComponentName; +import android.content.Intent; +import android.util.FeatureFlagUtils; +import android.widget.Toolbar; + import com.android.settings.TestConfig; +import com.android.settings.core.FeatureFlags; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,13 +43,12 @@ import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.annotation.Config; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; - @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O, shadows = { + SettingsShadowSystemProperties.class +}) public class SearchFeatureProviderImplTest { + private SearchFeatureProviderImpl mProvider; private Activity mActivity; @@ -49,6 +59,11 @@ public class SearchFeatureProviderImplTest { mProvider = spy(new SearchFeatureProviderImpl()); } + @After + public void tearDown() { + SettingsShadowSystemProperties.clear(); + } + @Test public void getSiteMapManager_shouldCacheInstance() { final SiteMapManager manager1 = mProvider.getSiteMapManager(); @@ -75,13 +90,51 @@ public class SearchFeatureProviderImplTest { verify(mProvider).cleanQuery(eq(query)); } + @Test + public void initSearchToolbar_searchV2_shouldInitWithOnClickListener() { + mProvider.initSearchToolbar(mActivity, null); + // Should not crash. + + SettingsShadowSystemProperties.set( + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.SEARCH_V2, + "true"); + final Toolbar toolbar = new Toolbar(mActivity); + mProvider.initSearchToolbar(mActivity, toolbar); + + toolbar.performClick(); + + final Intent launchIntent = shadowOf(mActivity).getNextStartedActivity(); + + assertThat(launchIntent.getAction()) + .isEqualTo("com.android.settings.action.SETTINGS_SEARCH"); + } + + @Test + public void initSearchToolbar_searchV1_shouldInitWithOnClickListener() { + mProvider.initSearchToolbar(mActivity, null); + // Should not crash. + + SettingsShadowSystemProperties.set( + FeatureFlagUtils.FFLAG_PREFIX + FeatureFlags.SEARCH_V2, + "false"); + final Toolbar toolbar = new Toolbar(mActivity); + mProvider.initSearchToolbar(mActivity, toolbar); + + toolbar.performClick(); + + final Intent launchIntent = shadowOf(mActivity).getNextStartedActivity(); + + assertThat(launchIntent.getComponent().getClassName()) + .isEqualTo(SearchActivity.class.getName()); + } + @Test(expected = IllegalArgumentException.class) public void verifyLaunchSearchResultPageCaller_nullCaller_shouldCrash() { mProvider.verifyLaunchSearchResultPageCaller(mActivity, null /* caller */); } @Test(expected = SecurityException.class) - public void everifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { + public void verifyLaunchSearchResultPageCaller_badCaller_shouldCrash() { final ComponentName cn = new ComponentName("pkg", "class"); mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn); }