From 55ce7de7d06d9fd8ec153c4b6f5300fbe9349990 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Tue, 18 Jul 2017 15:43:26 -0700 Subject: [PATCH] Move Gesture settings up one level. Move System->Languages, input & gestures->Gestures to System->Gestures. Change-Id: Ie81876208383f69ebf1a0465d76c760d7dd9d95d Fix: 62276882 Test: make RunSettingsRoboTests --- AndroidManifest.xml | 12 +- res/drawable/ic_settings_gestures.xml | 9 +- res/drawable/ic_suggestion_gesture.xml | 28 ---- res/xml/gestures.xml | 52 ++++++++ res/xml/language_and_input.xml | 39 +----- res/xml/system_dashboard_fragment.xml | 7 + .../settings/gestures/GestureSettings.java | 123 ++++++++++++++++++ .../GesturesSettingPreferenceController.java | 86 ++++++++++++ .../language/LanguageAndInputSettings.java | 106 +++------------ .../search/SearchIndexableResources.java | 2 + .../system/SystemDashboardFragment.java | 2 + ...turesSettingsPreferenceControllerTest.java | 122 +++++++++++++++++ .../LanguageAndInputSettingsTest.java | 37 ------ .../system/SystemDashboardFragmentTest.java | 31 +++-- 14 files changed, 449 insertions(+), 207 deletions(-) delete mode 100644 res/drawable/ic_suggestion_gesture.xml create mode 100644 res/xml/gestures.xml create mode 100644 src/com/android/settings/gestures/GestureSettings.java create mode 100644 src/com/android/settings/gestures/GesturesSettingPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index fab5d0cb181..2d7a6a60e50 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -557,7 +557,7 @@ @@ -3193,7 +3193,7 @@ + android:icon="@drawable/ic_settings_gestures"> @@ -3215,7 +3215,7 @@ + android:icon="@drawable/ic_settings_gestures"> @@ -3237,7 +3237,7 @@ + android:icon="@drawable/ic_settings_gestures"> @@ -3259,7 +3259,7 @@ + android:icon="@drawable/ic_settings_gestures"> @@ -3281,7 +3281,7 @@ + android:icon="@drawable/ic_settings_gestures"> diff --git a/res/drawable/ic_settings_gestures.xml b/res/drawable/ic_settings_gestures.xml index d882cb3ecd2..4fe0bf37deb 100644 --- a/res/drawable/ic_settings_gestures.xml +++ b/res/drawable/ic_settings_gestures.xml @@ -16,10 +16,13 @@ + android:pathData="M20,20.2V24H6V5.3h8.7l2.4,-4H7.6c-2.2,0 -4,1.8 -4,4v21.3c0,2.2 1.8,4 4,4h10.7c2.2,0 4,-1.8 4,-4V14.9L20,20.2zM15.6,28h-5.3v-1.3h5.3V28z"/> + \ No newline at end of file diff --git a/res/drawable/ic_suggestion_gesture.xml b/res/drawable/ic_suggestion_gesture.xml deleted file mode 100644 index b90ad942e48..00000000000 --- a/res/drawable/ic_suggestion_gesture.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/res/xml/gestures.xml b/res/xml/gestures.xml new file mode 100644 index 00000000000..7f8df1bd00c --- /dev/null +++ b/res/xml/gestures.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml index 2996c78c289..95628efabfc 100644 --- a/res/xml/language_and_input.xml +++ b/res/xml/language_and_input.xml @@ -18,7 +18,7 @@ + android:title="@string/language_settings" > - - - - - - - - - - - - - - - - + + getPreferenceControllers(Context context) { + if (mAmbientDisplayConfig == null) { + mAmbientDisplayConfig = new AmbientDisplayConfiguration(context); + } + + return buildPreferenceControllers(context, getLifecycle(), mAmbientDisplayConfig); + } + + static List buildPreferenceControllers( + @NonNull Context context, @Nullable Lifecycle lifecycle, + @NonNull AmbientDisplayConfiguration ambientDisplayConfiguration) { + final List controllers = new ArrayList<>(); + controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST, + false /* assistOnly */)); + controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle, + KEY_SWIPE_DOWN)); + controllers.add(new DoubleTwistPreferenceController(context, lifecycle, KEY_DOUBLE_TWIST)); + controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle, + KEY_DOUBLE_TAP_POWER)); + controllers.add(new PickupGesturePreferenceController(context, lifecycle, + ambientDisplayConfiguration, UserHandle.myUserId(), KEY_PICK_UP)); + controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle, + ambientDisplayConfiguration, UserHandle.myUserId(), KEY_DOUBLE_TAP_SCREEN)); + return controllers; + } + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + @Override + public List getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.gestures; + return Arrays.asList(sir); + } + + @Override + public List getPreferenceControllers( + Context context) { + return buildPreferenceControllers(context, null, + new AmbientDisplayConfiguration(context)); + } + + @Override + public List getNonIndexableKeys(Context context) { + List keys = super.getNonIndexableKeys(context); + // Duplicates in summary and details pages. + keys.add(KEY_ASSIST); + keys.add(KEY_SWIPE_DOWN); + keys.add(KEY_DOUBLE_TAP_POWER); + keys.add(KEY_DOUBLE_TWIST); + keys.add(KEY_DOUBLE_TAP_SCREEN); + keys.add(KEY_PICK_UP); + + return keys; + } + }; +} diff --git a/src/com/android/settings/gestures/GesturesSettingPreferenceController.java b/src/com/android/settings/gestures/GesturesSettingPreferenceController.java new file mode 100644 index 00000000000..c1c0134cc68 --- /dev/null +++ b/src/com/android/settings/gestures/GesturesSettingPreferenceController.java @@ -0,0 +1,86 @@ +/* + * 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.gestures; + +import android.content.ContentResolver; +import android.content.Context; +import android.provider.Settings; +import android.support.v7.preference.Preference; + +import com.android.internal.hardware.AmbientDisplayConfiguration; +import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.AbstractPreferenceController; + +import java.util.List; + +public class GesturesSettingPreferenceController extends AbstractPreferenceController + implements PreferenceControllerMixin { + + private static final String KEY_GESTURES_SETTINGS = "gesture_settings"; + + private final AssistGestureFeatureProvider mFeatureProvider; + private List mGestureControllers; + + public GesturesSettingPreferenceController(Context context) { + super(context); + mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider(); + } + + @Override + public boolean isAvailable() { + if (mGestureControllers == null) { + mGestureControllers = GestureSettings.buildPreferenceControllers(mContext, + null /* lifecycle */, new AmbientDisplayConfiguration(mContext)); + } + boolean isAvailable = false; + for (AbstractPreferenceController controller : mGestureControllers) { + isAvailable = isAvailable || controller.isAvailable(); + } + return isAvailable; + } + + @Override + public String getPreferenceKey() { + return KEY_GESTURES_SETTINGS; + } + + @Override + public void updateState(Preference preference) { + if (!mFeatureProvider.isSensorAvailable(mContext)) { + preference.setSummary(""); + } + final ContentResolver contentResolver = mContext.getContentResolver(); + final boolean assistGestureEnabled = Settings.Secure.getInt( + contentResolver, Settings.Secure.ASSIST_GESTURE_ENABLED, 1) != 0; + final boolean assistGestureSilenceEnabled = Settings.Secure.getInt( + contentResolver, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 1) != 0; + final String summary; + if (mFeatureProvider.isSupported(mContext) && assistGestureEnabled) { + summary = mContext.getString( + R.string.language_input_gesture_summary_on_with_assist); + } else if (assistGestureSilenceEnabled) { + summary = mContext.getString( + R.string.language_input_gesture_summary_on_non_assist); + } else { + summary = mContext.getString(R.string.language_input_gesture_summary_off); + } + preference.setSummary(summary); + } + +} diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java index beeb3ab9be1..fbcb02f5cbc 100644 --- a/src/com/android/settings/language/LanguageAndInputSettings.java +++ b/src/com/android/settings/language/LanguageAndInputSettings.java @@ -21,35 +21,24 @@ import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; -import android.os.UserHandle; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.speech.tts.TtsEngines; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; -import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; -import com.android.settings.gestures.AssistGestureFeatureProvider; -import com.android.settings.gestures.AssistGesturePreferenceController; -import com.android.settings.gestures.DoubleTapPowerPreferenceController; -import com.android.settings.gestures.DoubleTapScreenPreferenceController; -import com.android.settings.gestures.DoubleTwistPreferenceController; -import com.android.settings.gestures.PickupGesturePreferenceController; -import com.android.settings.gestures.SwipeToNotificationPreferenceController; import com.android.settings.inputmethod.GameControllerPreferenceController; import com.android.settings.inputmethod.PhysicalKeyboardPreferenceController; import com.android.settings.inputmethod.SpellCheckerPreferenceController; import com.android.settings.inputmethod.VirtualKeyboardPreferenceController; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -63,14 +52,6 @@ public class LanguageAndInputSettings extends DashboardFragment { private static final String TAG = "LangAndInputSettings"; private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary"; - private static final String KEY_ASSIST = "gesture_assist_input_summary"; - private static final String KEY_SWIPE_DOWN = "gesture_swipe_down_fingerprint_input_summary"; - private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power_input_summary"; - private static final String KEY_DOUBLE_TWIST = "gesture_double_twist_input_summary"; - private static final String KEY_DOUBLE_TAP_SCREEN = "gesture_double_tap_screen_input_summary"; - private static final String KEY_PICK_UP = "gesture_pick_up_input_summary"; - - private AmbientDisplayConfiguration mAmbientDisplayConfig; @Override public int getMetricsCategory() { @@ -99,7 +80,7 @@ public class LanguageAndInputSettings extends DashboardFragment { if (activity == null) { return; } - activity.setTitle(R.string.language_input_gesture_title); + activity.setTitle(R.string.language_settings); } @Override @@ -109,16 +90,11 @@ public class LanguageAndInputSettings extends DashboardFragment { @Override protected List getPreferenceControllers(Context context) { - if (mAmbientDisplayConfig == null) { - mAmbientDisplayConfig = new AmbientDisplayConfiguration(context); - } - - return buildPreferenceControllers(context, getLifecycle(), mAmbientDisplayConfig); + return buildPreferenceControllers(context, getLifecycle()); } - private static List buildPreferenceControllers(@NonNull Context context, - @Nullable Lifecycle lifecycle, - @NonNull AmbientDisplayConfiguration ambientDisplayConfiguration) { + private static List buildPreferenceControllers( + @NonNull Context context, @Nullable Lifecycle lifecycle) { final List controllers = new ArrayList<>(); // Language controllers.add(new PhoneLanguagePreferenceController(context)); @@ -135,79 +111,41 @@ public class LanguageAndInputSettings extends DashboardFragment { } controllers.add(gameControllerPreferenceController); - // Gestures - controllers.add(new AssistGesturePreferenceController(context, lifecycle, KEY_ASSIST, - false /* assistOnly */)); - controllers.add(new SwipeToNotificationPreferenceController(context, lifecycle, - KEY_SWIPE_DOWN)); - controllers.add(new DoubleTwistPreferenceController(context, lifecycle, KEY_DOUBLE_TWIST)); - controllers.add(new DoubleTapPowerPreferenceController(context, lifecycle, - KEY_DOUBLE_TAP_POWER)); - controllers.add(new PickupGesturePreferenceController(context, lifecycle, - ambientDisplayConfiguration, UserHandle.myUserId(), KEY_PICK_UP)); - controllers.add(new DoubleTapScreenPreferenceController(context, lifecycle, - ambientDisplayConfiguration, UserHandle.myUserId(), KEY_DOUBLE_TAP_SCREEN)); controllers.add(new DefaultAutofillPreferenceController(context)); return controllers; } - @VisibleForTesting - void setAmbientDisplayConfig(AmbientDisplayConfiguration ambientConfig) { - mAmbientDisplayConfig = ambientConfig; - } - private static class SummaryProvider implements SummaryLoader.SummaryProvider { private final Context mContext; private final SummaryLoader mSummaryLoader; - private final AssistGestureFeatureProvider mFeatureProvider; public SummaryProvider(Context context, SummaryLoader summaryLoader) { mContext = context; mSummaryLoader = summaryLoader; - mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider(); } @Override public void setListening(boolean listening) { final ContentResolver contentResolver = mContext.getContentResolver(); if (listening) { - if (mFeatureProvider.isSensorAvailable(mContext)) { - final boolean assistGestureEnabled = Settings.Secure.getInt( - contentResolver, Settings.Secure.ASSIST_GESTURE_ENABLED, 1) != 0; - final boolean assistGestureSilenceEnabled = Settings.Secure.getInt( - contentResolver, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, - 1) != 0; - String summary; - if (mFeatureProvider.isSupported(mContext) && assistGestureEnabled) { - summary = mContext.getString( - R.string.language_input_gesture_summary_on_with_assist); - } else if (assistGestureSilenceEnabled) { - summary = mContext.getString( - R.string.language_input_gesture_summary_on_non_assist); - } else { - summary = mContext.getString(R.string.language_input_gesture_summary_off); - } - mSummaryLoader.setSummary(this, summary); - } else { - final String flattenComponent = Settings.Secure.getString( - contentResolver, Settings.Secure.DEFAULT_INPUT_METHOD); - if (!TextUtils.isEmpty(flattenComponent)) { - final PackageManager packageManage = mContext.getPackageManager(); - final String pkg = ComponentName.unflattenFromString(flattenComponent) + final String flattenComponent = Settings.Secure.getString( + contentResolver, Settings.Secure.DEFAULT_INPUT_METHOD); + if (!TextUtils.isEmpty(flattenComponent)) { + final PackageManager packageManage = mContext.getPackageManager(); + final String pkg = ComponentName.unflattenFromString(flattenComponent) .getPackageName(); - final InputMethodManager imm = (InputMethodManager) + final InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); - final List imis = imm.getInputMethodList(); - for (InputMethodInfo imi : imis) { - if (TextUtils.equals(imi.getPackageName(), pkg)) { - mSummaryLoader.setSummary(this, imi.loadLabel(packageManage)); - return; - } + final List imis = imm.getInputMethodList(); + for (InputMethodInfo imi : imis) { + if (TextUtils.equals(imi.getPackageName(), pkg)) { + mSummaryLoader.setSummary(this, imi.loadLabel(packageManage)); + return; } } - mSummaryLoader.setSummary(this, ""); } + mSummaryLoader.setSummary(this, ""); } } } @@ -226,9 +164,9 @@ public class LanguageAndInputSettings extends DashboardFragment { } @Override - public List getPreferenceControllers(Context context) { - return buildPreferenceControllers(context, null, - new AmbientDisplayConfiguration(context)); + public List getPreferenceControllers( + Context context) { + return buildPreferenceControllers(context, null); } @Override @@ -236,12 +174,6 @@ public class LanguageAndInputSettings extends DashboardFragment { List keys = super.getNonIndexableKeys(context); // Duplicates in summary and details pages. keys.add(KEY_TEXT_TO_SPEECH); - keys.add(KEY_ASSIST); - keys.add(KEY_SWIPE_DOWN); - keys.add(KEY_DOUBLE_TAP_POWER); - keys.add(KEY_DOUBLE_TWIST); - keys.add(KEY_DOUBLE_TAP_SCREEN); - keys.add(KEY_PICK_UP); return keys; } diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index dccdc653908..fef273b891e 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -58,6 +58,7 @@ import com.android.settings.gestures.AssistGestureSettings; import com.android.settings.gestures.DoubleTapPowerSettings; import com.android.settings.gestures.DoubleTapScreenSettings; import com.android.settings.gestures.DoubleTwistGestureSettings; +import com.android.settings.gestures.GestureSettings; import com.android.settings.gestures.PickupGestureSettings; import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment; @@ -167,6 +168,7 @@ public final class SearchIndexableResources { addIndex(DoubleTwistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures); addIndex(SwipeToNotificationSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures); + addIndex(GestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures); addIndex(LanguageAndInputSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language); addIndex(LocationSettings.class, R.xml.location_settings, R.drawable.ic_settings_location); addIndex(ScanningSettings.class, R.xml.location_scanning, R.drawable.ic_settings_location); diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java index 5d4e7da1228..2485cceb44d 100644 --- a/src/com/android/settings/system/SystemDashboardFragment.java +++ b/src/com/android/settings/system/SystemDashboardFragment.java @@ -25,6 +25,7 @@ import com.android.settings.backup.BackupSettingsActivityPreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController; import com.android.settings.deviceinfo.SystemUpdatePreferenceController; +import com.android.settings.gestures.GesturesSettingPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settingslib.core.AbstractPreferenceController; @@ -69,6 +70,7 @@ public class SystemDashboardFragment extends DashboardFragment { controllers.add(new SystemUpdatePreferenceController(context, UserManager.get(context))); controllers.add(new AdditionalSystemUpdatePreferenceController(context)); controllers.add(new BackupSettingsActivityPreferenceController(context)); + controllers.add(new GesturesSettingPreferenceController(context)); return controllers; } diff --git a/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java new file mode 100644 index 00000000000..e0f391d03e0 --- /dev/null +++ b/tests/robotests/src/com/android/settings/gestures/GesturesSettingsPreferenceControllerTest.java @@ -0,0 +1,122 @@ +/* + * 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.gestures; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.provider.Settings; +import android.support.v7.preference.Preference; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.ShadowSecureSettings; +import com.android.settingslib.core.AbstractPreferenceController; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class GesturesSettingsPreferenceControllerTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Activity mActivity; + @Mock + private Preference mPreference; + + private GesturesSettingPreferenceController mController; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mActivity); + mController = new GesturesSettingPreferenceController(mActivity); + } + + @Test + public void isAvailable_hasGesture_shouldReturnTrue() { + final List mControllers = new ArrayList<>(); + mControllers.add(new AbstractPreferenceController(RuntimeEnvironment.application) { + @Override + public boolean isAvailable() { + return true; + } + + @Override + public String getPreferenceKey() { + return "test_key"; + } + }); + ReflectionHelpers.setField(mController, "mGestureControllers", mControllers); + + assertThat(mController.isAvailable()).isTrue(); + } + + @Test + public void isAvailable_noGesture_shouldReturnFalse() { + ReflectionHelpers.setField(mController, "mGestureControllers", + new ArrayList()); + + assertThat(mController.isAvailable()).isFalse(); + } + + @Test + @Config(shadows = {ShadowSecureSettings.class}) + public void updateState_assistSupported_shouldSetToAssistGestureStatus() { + final FakeFeatureFactory featureFactory = + (FakeFeatureFactory) FakeFeatureFactory.getFactory(mActivity); + when(featureFactory.assistGestureFeatureProvider.isSupported(any(Context.class))) + .thenReturn(true); + when(featureFactory.assistGestureFeatureProvider.isSensorAvailable(any(Context.class))) + .thenReturn(true); + + final ContentResolver cr = mActivity.getContentResolver(); + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 0); + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 0); + mController.updateState(mPreference); + verify(mActivity).getString(R.string.language_input_gesture_summary_off); + + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 1); + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 0); + mController.updateState(mPreference); + verify(mActivity).getString(R.string.language_input_gesture_summary_on_with_assist); + + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 0); + Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 1); + mController.updateState(mPreference); + verify(mActivity).getString(R.string.language_input_gesture_summary_on_non_assist); + } + +} diff --git a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java index 4fadebfebb5..809fb3ae521 100644 --- a/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java +++ b/tests/robotests/src/com/android/settings/language/LanguageAndInputSettingsTest.java @@ -41,11 +41,9 @@ import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import android.view.textservice.TextServicesManager; -import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.dashboard.SummaryLoader; -import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import com.android.settings.testutils.shadow.ShadowSecureSettings; @@ -88,7 +86,6 @@ public class LanguageAndInputSettingsTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - FakeFeatureFactory.setupForTest(mActivity); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mock(UserManager.class)); when(mActivity.getSystemService(Context.INPUT_SERVICE)) .thenReturn(mock(InputManager.class)); @@ -157,39 +154,6 @@ public class LanguageAndInputSettingsTest { verify(loader).setSummary(provider, null); } - @Test - @Config(shadows = { - ShadowSecureSettings.class, - }) - public void testSummary_assistSupported_shouldSetToAssistGestureStatus() { - final FakeFeatureFactory featureFactory = - (FakeFeatureFactory) FakeFeatureFactory.getFactory(mActivity); - when(featureFactory.assistGestureFeatureProvider.isSupported(any(Context.class))) - .thenReturn(true); - when(featureFactory.assistGestureFeatureProvider.isSensorAvailable(any(Context.class))) - .thenReturn(true); - - final SummaryLoader loader = mock(SummaryLoader.class); - SummaryLoader.SummaryProvider provider = mFragment.SUMMARY_PROVIDER_FACTORY - .createSummaryProvider(mActivity, loader); - - final ContentResolver cr = mActivity.getContentResolver(); - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 0); - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 0); - provider.setListening(true); - verify(mActivity).getString(R.string.language_input_gesture_summary_off); - - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 1); - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 0); - provider.setListening(true); - verify(mActivity).getString(R.string.language_input_gesture_summary_on_with_assist); - - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_ENABLED, 0); - Settings.Secure.putInt(cr, Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENABLED, 1); - provider.setListening(true); - verify(mActivity).getString(R.string.language_input_gesture_summary_on_non_assist); - } - @Test public void testNonIndexableKeys_existInXmlLayout() { final Context context = spy(RuntimeEnvironment.application); @@ -236,7 +200,6 @@ public class LanguageAndInputSettingsTest { public TestFragment(Context context) { mContext = context; mLifecycle = mock(Lifecycle.class); - setAmbientDisplayConfig(mock(AmbientDisplayConfiguration.class)); } @Override diff --git a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java index 19f8ee27dda..cd2595300ce 100644 --- a/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/system/SystemDashboardFragmentTest.java @@ -16,14 +16,23 @@ package com.android.settings.system; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import android.content.Context; import android.os.UserManager; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; +import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowUserManager; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; @@ -31,19 +40,25 @@ import org.robolectric.annotation.Config; import java.util.List; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { - ShadowUserManager.class + ShadowUserManager.class, + SettingsShadowResources.class, }) public class SystemDashboardFragmentTest { + @Before + public void setup() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_supportSystemNavigationKeys, true); + } + + @After + public void tearDown() { + SettingsShadowResources.reset(); + } + @Test public void testNonIndexableKeys_existInXmlLayout() { final Context context = spy(RuntimeEnvironment.application);