diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 44555db8b0a..190c55b9ebb 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1688,14 +1688,12 @@ android:value="true" /> - - - @@ -2908,7 +2906,7 @@ android:value="true" /> - diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index cd479a5e141..089ffac390d 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -21,8 +21,6 @@ import android.util.FeatureFlagUtils; import com.android.settings.applications.AppOpsSummary; import com.android.settings.enterprise.EnterprisePrivacySettings; -import com.android.settings.fingerprint.FingerprintEnrollIntroduction; -import com.android.settings.password.ChooseLockGeneric; /** * Top-level Settings activity @@ -157,12 +155,6 @@ public class Settings extends SettingsActivity { public static class ManageExternalSourcesActivity extends SettingsActivity { /* empty */ } public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ } - - public static class WifiCallingSuggestionActivity extends SettingsActivity { /* empty */ } - public static class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction { - /* empty */ - } - public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ } public static class DoubleTapPowerSuggestionActivity extends SettingsActivity { /* empty */ } public static class DoubleTwistSuggestionActivity extends SettingsActivity { /* empty */ } public static class AmbientDisplaySuggestionActivity extends SettingsActivity { /* empty */ } diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java index 86708232e41..0f8bccc660d 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java @@ -54,7 +54,7 @@ public interface SuggestionFeatureProvider { boolean isSmartSuggestionEnabled(Context context); /** Return true if the suggestion has already been completed and does not need to be shown */ - boolean isSuggestionCompleted(Context context, @NonNull ComponentName suggestion); + boolean isSuggestionComplete(Context context, @NonNull ComponentName suggestion); /** * Returns the {@link SharedPreferences} that holds metadata for suggestions. diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index d4002b255c3..02a9223fec6 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -39,13 +39,18 @@ import com.android.settings.Settings.DoubleTwistSuggestionActivity; import com.android.settings.Settings.NightDisplaySuggestionActivity; import com.android.settings.Settings.SwipeToNotificationSuggestionActivity; import com.android.settings.core.instrumentation.MetricsFeatureProvider; +import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity; +import com.android.settings.fingerprint.FingerprintSuggestionActivity; 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.overlay.FeatureFactory; +import com.android.settings.password.ScreenLockSuggestionActivity; import com.android.settings.support.NewDeviceIntroSuggestionActivity; +import com.android.settings.wallpaper.WallpaperSuggestionActivity; +import com.android.settings.wifi.WifiCallingSuggestionActivity; import com.android.settingslib.drawer.Tile; import com.android.settingslib.suggestions.SuggestionParser; @@ -96,12 +101,21 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider } @Override - public boolean isSuggestionCompleted(Context context, @NonNull ComponentName component) { + public boolean isSuggestionComplete(Context context, @NonNull ComponentName component) { final String className = component.getClassName(); - if (className.equals(NightDisplaySuggestionActivity.class.getName())) { + if (className.equals(WallpaperSuggestionActivity.class.getName())) { + return WallpaperSuggestionActivity.isSuggestionComplete(context); + } else if (className.equals(FingerprintSuggestionActivity.class.getName())) { + return FingerprintSuggestionActivity.isSuggestionComplete(context); + } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) { + return FingerprintEnrollSuggestionActivity.isSuggestionComplete(context); + } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) { + return ScreenLockSuggestionActivity.isSuggestionComplete(context); + } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) { + return WifiCallingSuggestionActivity.isSuggestionComplete(context); + } else if (className.equals(NightDisplaySuggestionActivity.class.getName())) { return hasUsedNightDisplay(context); - } - if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) { + } else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) { return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context); } else if (className.equals(DoubleTapPowerSuggestionActivity.class.getName())) { return DoubleTapPowerPreferenceController diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java index eb969a55f8d..7121e417a7d 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionsChecks.java @@ -16,23 +16,10 @@ package com.android.settings.dashboard.suggestions; -import android.app.KeyguardManager; -import android.app.WallpaperManager; -import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; -import android.hardware.fingerprint.FingerprintManager; -import android.support.annotation.VisibleForTesting; -import com.android.ims.ImsManager; -import com.android.settings.Settings.FingerprintEnrollSuggestionActivity; -import com.android.settings.Settings.ScreenLockSuggestionActivity; -import com.android.settings.Settings.WifiCallingSuggestionActivity; -import com.android.settings.Utils; -import com.android.settings.fingerprint.FingerprintSuggestionActivity; import com.android.settings.overlay.FeatureFactory; -import com.android.settings.wallpaper.WallpaperSuggestionActivity; -import com.android.settings.wrapper.WallpaperManagerWrapper; import com.android.settingslib.drawer.Tile; /** @@ -43,69 +30,17 @@ public class SuggestionsChecks { private static final String TAG = "SuggestionsChecks"; private final Context mContext; - private final WallpaperManagerWrapper mWallpaperManager; - public SuggestionsChecks(Context context) { mContext = context.getApplicationContext(); - mWallpaperManager = new WallpaperManagerWrapper(mContext); } public boolean isSuggestionComplete(Tile suggestion) { ComponentName component = suggestion.intent.getComponent(); - String className = component.getClassName(); - if (className.equals(WallpaperSuggestionActivity.class.getName())) { - return hasWallpaperSet(); - } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) { - return isWifiCallingUnavailableOrEnabled(); - } else if (className.equals(FingerprintSuggestionActivity.class.getName())) { - return !Utils.hasFingerprintHardware(mContext) || !isFingerprintEnabled() - || isNotSingleFingerprintEnrolled(); - } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) { - return isDeviceSecured(); - } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) { - final FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); - if (manager == null || !isFingerprintEnabled() - || !Utils.hasFingerprintHardware(mContext)) { - return true; - } - return manager.hasEnrolledFingerprints(); - } final SuggestionFeatureProvider provider = FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext); - return provider.isSuggestionCompleted(mContext, component); + return provider.isSuggestionComplete(mContext, component); } - private boolean isDeviceSecured() { - KeyguardManager km = mContext.getSystemService(KeyguardManager.class); - return km.isKeyguardSecure(); - } - - private boolean isNotSingleFingerprintEnrolled() { - FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); - return manager == null || manager.getEnrolledFingerprints().size() != 1; - } - - public boolean isWifiCallingUnavailableOrEnabled() { - if (!ImsManager.isWfcEnabledByPlatform(mContext) || - !ImsManager.isWfcProvisionedOnDevice(mContext)) { - return true; - } - return ImsManager.isWfcEnabledByUser(mContext) - && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext); - } - - @VisibleForTesting - boolean hasWallpaperSet() { - return mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0; - } - - private boolean isFingerprintEnabled() { - DevicePolicyManager dpManager = - (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); - final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */ - mContext.getUserId()); - return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0; - } } diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.java b/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.java new file mode 100644 index 00000000000..4a4d08d353e --- /dev/null +++ b/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivity.java @@ -0,0 +1,33 @@ +/* + * 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.fingerprint; + +import android.content.Context; + +import com.android.settings.Utils; + +public class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction { + + public static boolean isSuggestionComplete(Context context) { + if (!Utils.hasFingerprintHardware(context) + || !FingerprintSuggestionActivity.isFingerprintEnabled(context) + || !Utils.hasFingerprintHardware(context)) { + return true; + } + return Utils.getFingerprintManagerOrNull(context).hasEnrolledFingerprints(); + } +} diff --git a/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java b/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java index e1a4183d480..fa6aeb42210 100644 --- a/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java +++ b/src/com/android/settings/fingerprint/FingerprintSuggestionActivity.java @@ -16,9 +16,13 @@ package com.android.settings.fingerprint; +import android.app.admin.DevicePolicyManager; +import android.content.Context; +import android.hardware.fingerprint.FingerprintManager; import android.widget.Button; import com.android.settings.R; +import com.android.settings.Utils; public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntroduction { @@ -36,4 +40,23 @@ public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntrodu setResult(RESULT_CANCELED); super.finish(); } + + public static boolean isSuggestionComplete(Context context) { + return !Utils.hasFingerprintHardware(context) + || !isFingerprintEnabled(context) + || isNotSingleFingerprintEnrolled(context); + } + + private static boolean isNotSingleFingerprintEnrolled(Context context) { + final FingerprintManager manager = Utils.getFingerprintManagerOrNull(context); + return manager == null || manager.getEnrolledFingerprints().size() != 1; + } + + static boolean isFingerprintEnabled(Context context) { + final DevicePolicyManager dpManager = + (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); + final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */ + context.getUserId()); + return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0; + } } diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java index 970b6a70e88..bee9893d9a2 100644 --- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java +++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java @@ -16,10 +16,13 @@ package com.android.settings.gestures; +import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED; + import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.provider.Settings; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import com.android.settings.R; @@ -28,12 +31,12 @@ import com.android.settings.search.InlineSwitchPayload; import com.android.settings.search.ResultPayload; import com.android.settingslib.core.lifecycle.Lifecycle; -import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED; - public class DoubleTapPowerPreferenceController extends GesturePreferenceController { - private final int ON = 0; - private final int OFF = 1; + @VisibleForTesting + static final int ON = 0; + @VisibleForTesting + static final int OFF = 1; private static final String PREF_KEY_VIDEO = "gesture_double_tap_power_video"; private final String mDoubleTapPowerKey; @@ -81,7 +84,7 @@ public class DoubleTapPowerPreferenceController extends GesturePreferenceControl protected boolean isSwitchPrefEnabled() { final int cameraDisabled = Settings.Secure.getInt(mContext.getContentResolver(), SECURE_KEY, ON); - return cameraDisabled == 0; + return cameraDisabled == ON; } @Override diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java index e64c0cf43f1..e1b444cd368 100644 --- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java +++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java @@ -16,6 +16,8 @@ package com.android.settings.gestures; +import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP; + import android.annotation.UserIdInt; import android.content.Context; import android.content.Intent; @@ -30,8 +32,6 @@ import com.android.settings.search.InlineSwitchPayload; import com.android.settings.search.ResultPayload; import com.android.settingslib.core.lifecycle.Lifecycle; -import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP; - public class PickupGesturePreferenceController extends GesturePreferenceController { private final int ON = 1; @@ -56,8 +56,8 @@ public class PickupGesturePreferenceController extends GesturePreferenceControll public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) { AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context); - return !ambientConfig.pulseOnPickupAvailable() - || prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false); + return prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false) + || !ambientConfig.pulseOnPickupAvailable(); } @Override diff --git a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java index 6f334a512f9..b50968f27eb 100644 --- a/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java +++ b/src/com/android/settings/gestures/SwipeToNotificationPreferenceController.java @@ -16,6 +16,8 @@ package com.android.settings.gestures; +import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED; + import android.content.Context; import android.content.SharedPreferences; import android.provider.Settings; @@ -24,8 +26,6 @@ import android.support.v7.preference.Preference; import com.android.settings.Utils; import com.android.settingslib.core.lifecycle.Lifecycle; -import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED; - public class SwipeToNotificationPreferenceController extends GesturePreferenceController { private static final int ON = 1; @@ -45,11 +45,12 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) { return !isGestureAvailable(context) || prefs.getBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, - false); + false); } private static boolean isGestureAvailable(Context context) { - return Utils.hasFingerprintHardware(context) && context.getResources() + return Utils.hasFingerprintHardware(context) + && context.getResources() .getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys); } diff --git a/src/com/android/settings/password/ScreenLockSuggestionActivity.java b/src/com/android/settings/password/ScreenLockSuggestionActivity.java new file mode 100644 index 00000000000..56beb01edbe --- /dev/null +++ b/src/com/android/settings/password/ScreenLockSuggestionActivity.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.password; + +import android.app.KeyguardManager; +import android.content.Context; + +public class ScreenLockSuggestionActivity extends ChooseLockGeneric { + + public static boolean isSuggestionComplete(Context context) { + KeyguardManager km = context.getSystemService(KeyguardManager.class); + return km.isKeyguardSecure(); + } +} diff --git a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java index 90c5888f32b..ca37b640c48 100644 --- a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java +++ b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java @@ -17,6 +17,8 @@ package com.android.settings.wallpaper; import android.app.Activity; +import android.app.WallpaperManager; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; @@ -25,6 +27,7 @@ import android.support.annotation.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.Utils; +import com.android.settings.wrapper.WallpaperManagerWrapper; public class WallpaperSuggestionActivity extends Activity { @@ -53,4 +56,10 @@ public class WallpaperSuggestionActivity extends Activity { MetricsProto.MetricsEvent.DASHBOARD_SUMMARY); } + @VisibleForTesting + public static boolean isSuggestionComplete(Context context) { + final WallpaperManagerWrapper manager = new WallpaperManagerWrapper(context); + return manager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0; + } + } diff --git a/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java b/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java new file mode 100644 index 00000000000..c3c7adb2687 --- /dev/null +++ b/src/com/android/settings/wifi/WifiCallingSuggestionActivity.java @@ -0,0 +1,34 @@ +/* + * 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.wifi; + +import android.content.Context; + +import com.android.ims.ImsManager; +import com.android.settings.SettingsActivity; + +public class WifiCallingSuggestionActivity extends SettingsActivity { + + public static boolean isSuggestionComplete(Context context) { + if (!ImsManager.isWfcEnabledByPlatform(context) || + !ImsManager.isWfcProvisionedOnDevice(context)) { + return true; + } + return ImsManager.isWfcEnabledByUser(context) + && ImsManager.isNonTtyOrTtyOnVolteEnabled(context); + } +} diff --git a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java index 3dcf6ab6d04..e080aa36be1 100644 --- a/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java +++ b/tests/robotests/src/com/android/internal/hardware/AmbientDisplayConfiguration.java @@ -24,7 +24,11 @@ import android.content.Context; */ public class AmbientDisplayConfiguration { - public AmbientDisplayConfiguration(Context context) {} + private final Context mContext; + + public AmbientDisplayConfiguration(Context context) { + mContext = context; + } public boolean pulseOnPickupAvailable() { return false; 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 deb860d9978..69b76fa8a31 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -19,7 +19,6 @@ package com.android.settings.dashboard.suggestions; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; @@ -31,7 +30,6 @@ import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; import android.provider.Settings.Secure; @@ -41,18 +39,8 @@ import android.util.Pair; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity; -import com.android.settings.Settings.AmbientDisplaySuggestionActivity; -import com.android.settings.Settings.DoubleTapPowerSuggestionActivity; -import com.android.settings.Settings.DoubleTwistSuggestionActivity; import com.android.settings.Settings.NightDisplaySuggestionActivity; -import com.android.settings.Settings.SwipeToNotificationSuggestionActivity; import com.android.settings.TestConfig; -import com.android.settings.gestures.DoubleTapPowerSettings; -import com.android.settings.gestures.DoubleTapScreenSettings; -import com.android.settings.gestures.PickupGestureSettings; -import com.android.settings.gestures.SwipeToNotificationSettings; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; @@ -78,19 +66,13 @@ import java.util.ArrayList; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) -@Config( - manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION, - shadows = {ShadowSecureSettings.class, - SettingsShadowResources.class, - SettingsShadowSystemProperties.class - } -) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { + ShadowSecureSettings.class, + SettingsShadowResources.class, + SettingsShadowSystemProperties.class +}) public class SuggestionFeatureProviderImplTest { - private static final String DOUBLE_TWIST_SENSOR_NAME = "double_twist_sensor_name"; - private static final String DOUBLE_TWIST_SENSOR_VENDOR = "double_twist_sensor_vendor"; - @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @Mock @@ -105,8 +87,6 @@ public class SuggestionFeatureProviderImplTest { private PackageManager mPackageManager; @Mock private FingerprintManager mFingerprintManager; - @Mock - private SharedPreferences mSharedPreferences; @Captor private ArgumentCaptor mTaggedDataCaptor = ArgumentCaptor.forClass(Pair.class); @@ -134,6 +114,7 @@ public class SuggestionFeatureProviderImplTest { @After public void tearDown() { + SettingsShadowResources.reset(); SettingsShadowSystemProperties.clear(); } @@ -143,158 +124,6 @@ public class SuggestionFeatureProviderImplTest { .isEqualTo("com.android.settings.intelligence"); } - @Test - public void isSuggestionCompleted_doubleTapPower_trueWhenNotAvailable() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, false); - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - DoubleTapPowerSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_doubleTapPower_falseWhenNotVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true); - // No stored value in shared preferences if not visited yet. - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - DoubleTapPowerSuggestionActivity.class))).isFalse(); - } - - @Test - public void isSuggestionCompleted_doubleTapPower_trueWhenVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true); - mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean( - DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - DoubleTapPowerSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() { - SettingsShadowResources.overrideResource( - R.string.gesture_double_twist_sensor_name, "nonexistant name"); - SettingsShadowResources.overrideResource( - R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor"); - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - DoubleTwistSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_ambientDisplay_falseWhenNotVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeComponent, "foo"); - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar"); - // No stored value in shared preferences if not visited yet. - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - AmbientDisplaySuggestionActivity.class))).isFalse(); - } - - @Test - public void isSuggestionCompleted_ambientDisplay_trueWhenVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeComponent, "foo"); - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar"); - mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean( - DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - AmbientDisplaySuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_ambientDisplayPickup_falseWhenNotVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeComponent, "foo"); - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_dozePulsePickup, true); - // No stored value in shared preferences if not visited yet. - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - AmbientDisplaySuggestionActivity.class))).isFalse(); - } - - @Test - public void isSuggestionCompleted_ambientDisplayPickup_trueWhenVisited() { - SettingsShadowResources.overrideResource( - com.android.internal.R.string.config_dozeComponent, "foo"); - SettingsShadowResources.overrideResource( - com.android.internal.R.bool.config_dozePulsePickup, true); - mProvider.getSharedPrefs(RuntimeEnvironment.application).edit().putBoolean( - PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); - - assertThat(mProvider.isSuggestionCompleted(RuntimeEnvironment.application, - new ComponentName(RuntimeEnvironment.application, - AmbientDisplayPickupSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_swipeToNotification_trueWhenNotHardwareNotAvailable() { - stubFingerprintSupported(true); - when(mFingerprintManager.isHardwareDetected()).thenReturn(false); - when(mContext.getResources(). - getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) - .thenReturn(true); - - assertThat(mProvider.isSuggestionCompleted(mContext, - new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_swipeToNotification_trueWhenNotAvailable() { - stubFingerprintSupported(true); - when(mFingerprintManager.isHardwareDetected()).thenReturn(true); - when(mContext.getResources(). - getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) - .thenReturn(false); - - assertThat(mProvider.isSuggestionCompleted(mContext, - new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue(); - } - - @Test - public void isSuggestionCompleted_swipeToNotification_falseWhenNotVisited() { - stubFingerprintSupported(true); - when(mFingerprintManager.isHardwareDetected()).thenReturn(true); - when(mContext.getResources(). - getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) - .thenReturn(true); - // No stored value in shared preferences if not visited yet. - - assertThat(mProvider.isSuggestionCompleted(mContext, - new ComponentName(mContext, - SwipeToNotificationSuggestionActivity.class))).isFalse(); - } - - @Test - public void isSuggestionCompleted_swipeToNotification_trueWhenVisited() { - stubFingerprintSupported(true); - when(mFingerprintManager.isHardwareDetected()).thenReturn(true); - when(mContext.getResources(). - getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) - .thenReturn(true); - when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences); - when(mSharedPreferences.getBoolean( - SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, false)).thenReturn(true); - - assertThat(mProvider.isSuggestionCompleted(mContext, - new ComponentName(mContext, SwipeToNotificationSuggestionActivity.class))).isTrue(); - } - @Test public void isSuggestionEnabled_isLowMemoryDevice_shouldReturnFalse() { when(mActivityManager.isLowRamDevice()).thenReturn(true); @@ -325,7 +154,6 @@ public class SuggestionFeatureProviderImplTest { assertThat(mProvider.isSuggestionV2Enabled(mContext)).isFalse(); } - @Test public void dismissSuggestion_noParserOrSuggestion_noop() { mProvider.dismissSuggestion(mContext, null, (Tile) null); @@ -423,11 +251,6 @@ public class SuggestionFeatureProviderImplTest { PackageManager.DONT_KILL_APP); } - private void stubFingerprintSupported(boolean enabled) { - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) - .thenReturn(enabled); - } - @Test public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() { final List suggestions = new ArrayList<>(); @@ -463,7 +286,7 @@ public class SuggestionFeatureProviderImplTest { LocalDateTime.now().toString()); final ComponentName componentName = new ComponentName(mContext, NightDisplaySuggestionActivity.class); - assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue(); + assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue(); } @Test @@ -471,7 +294,7 @@ public class SuggestionFeatureProviderImplTest { Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1); final ComponentName componentName = new ComponentName(mContext, NightDisplaySuggestionActivity.class); - assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue(); + assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue(); } @Test @@ -481,13 +304,13 @@ public class SuggestionFeatureProviderImplTest { Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1); final ComponentName componentName = new ComponentName(mContext, NightDisplaySuggestionActivity.class); - assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isTrue(); + assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue(); } @Test public void nightDisplaySuggestion_isNotCompleted_byDefault() { final ComponentName componentName = new ComponentName(mContext, NightDisplaySuggestionActivity.class); - assertThat(mProvider.isSuggestionCompleted(mContext, componentName)).isFalse(); + assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isFalse(); } } diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java similarity index 63% rename from tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java rename to tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java index 0165fffd8ea..e299fd599f2 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionsChecksTest.java +++ b/tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollSuggestionActivityTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.dashboard.suggestions; +package com.android.settings.fingerprint; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; @@ -22,19 +22,13 @@ import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.when; -import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; -import android.content.ComponentName; import android.content.Context; -import android.content.Intent; import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; -import com.android.settings.Settings; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.wrapper.WallpaperManagerWrapper; -import com.android.settingslib.drawer.Tile; import org.junit.Before; import org.junit.Test; @@ -42,12 +36,10 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; -import org.robolectric.util.ReflectionHelpers; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class SuggestionsChecksTest { +public class FingerprintEnrollSuggestionActivityTest { @Mock private Context mContext; @@ -57,16 +49,10 @@ public class SuggestionsChecksTest { private FingerprintManager mFingerprintManager; @Mock private DevicePolicyManager mDevicePolicyManager; - @Mock - private WallpaperManagerWrapper mWallpaperManager; - private SuggestionsChecks mSuggestionsChecks; @Before public void setUp() { MockitoAnnotations.initMocks(this); - - when(mContext.getApplicationContext()).thenReturn(mContext); - mSuggestionsChecks = new SuggestionsChecks(mContext); when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mContext.getSystemService(eq(Context.DEVICE_POLICY_SERVICE))) .thenReturn(mDevicePolicyManager); @@ -80,8 +66,8 @@ public class SuggestionsChecksTest { stubFingerprintSupported(true); when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(true); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); - Tile tile = createFingerprintTile(); - assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue(); + + assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue(); } @Test @@ -89,8 +75,8 @@ public class SuggestionsChecksTest { stubFingerprintSupported(true); when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false); when(mFingerprintManager.isHardwareDetected()).thenReturn(true); - Tile tile = createFingerprintTile(); - assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isFalse(); + + assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isFalse(); } @Test @@ -98,15 +84,15 @@ public class SuggestionsChecksTest { stubFingerprintSupported(true); when(mFingerprintManager.hasEnrolledFingerprints()).thenReturn(false); when(mFingerprintManager.isHardwareDetected()).thenReturn(false); - Tile tile = createFingerprintTile(); - assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue(); + + assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue(); } @Test public void testFingerprintEnrollmentIntroductionIsCompleteWhenFingerprintNotSupported() { stubFingerprintSupported(false); - Tile tile = createFingerprintTile(); - assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue(); + + assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue(); } @Test @@ -117,40 +103,11 @@ public class SuggestionsChecksTest { when(mDevicePolicyManager.getKeyguardDisabledFeatures(any(), anyInt())) .thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT); - Tile tile = createFingerprintTile(); - assertThat(mSuggestionsChecks.isSuggestionComplete(tile)).isTrue(); + assertThat(FingerprintEnrollSuggestionActivity.isSuggestionComplete(mContext)).isTrue(); } private void stubFingerprintSupported(boolean enabled) { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) .thenReturn(enabled); } - - private Tile createFingerprintTile() { - final Tile tile = new Tile(); - tile.intent = new Intent(); - tile.intent.setComponent(new ComponentName(mContext, - Settings.FingerprintEnrollSuggestionActivity.class)); - return tile; - } - - @Test - public void hasWallpaperSet_no_shouldReturnFalse() { - ReflectionHelpers.setField(mSuggestionsChecks, "mWallpaperManager", mWallpaperManager); - when(mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM)) - .thenReturn(0); - - assertThat(mSuggestionsChecks.hasWallpaperSet()) - .isFalse(); - } - - @Test - public void hasWallpaperSet_yes_shouldReturnTrue() { - ReflectionHelpers.setField(mSuggestionsChecks, "mWallpaperManager", mWallpaperManager); - when(mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM)) - .thenReturn(100); - - assertThat(mSuggestionsChecks.hasWallpaperSet()) - .isTrue(); - } } diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java index 9c9a546dde8..0c804b364e6 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java @@ -16,18 +16,29 @@ package com.android.settings.gestures; +import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED; +import static com.android.settings.gestures.DoubleTapPowerPreferenceController.OFF; +import static com.android.settings.gestures.DoubleTapPowerPreferenceController.ON; +import static com.android.settings.gestures.DoubleTapPowerPreferenceController.isSuggestionComplete; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + import android.content.ContentResolver; import android.content.Context; +import android.content.SharedPreferences; import android.provider.Settings; -import android.support.v7.preference.PreferenceScreen; +import com.android.settings.TestConfig; +import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; import com.android.settings.search.InlinePayload; import com.android.settings.search.InlineSwitchPayload; import com.android.settings.search.ResultPayload; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; - +import com.android.settings.testutils.shadow.SettingsShadowResources; +import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; import com.android.settings.testutils.shadow.ShadowSecureSettings; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,20 +47,15 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowApplication; - -import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { + SettingsShadowResources.class +}) public class DoubleTapPowerPreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; - @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private PreferenceScreen mScreen; private DoubleTapPowerPreferenceController mController; private static final String KEY_DOUBLE_TAP_POWER = "gesture_double_tap_power"; @@ -59,6 +65,11 @@ public class DoubleTapPowerPreferenceControllerTest { mController = new DoubleTapPowerPreferenceController(mContext, null, KEY_DOUBLE_TAP_POWER); } + @After + public void tearDown() { + SettingsShadowResources.reset(); + } + @Test public void isAvailable_configIsTrue_shouldReturnTrue() { when(mContext.getResources(). @@ -80,9 +91,9 @@ public class DoubleTapPowerPreferenceControllerTest { @Test public void testSwitchEnabled_configIsNotSet_shouldReturnTrue() { // Set the setting to be enabled. - final Context context = ShadowApplication.getInstance().getApplicationContext(); + final Context context = RuntimeEnvironment.application; Settings.System.putInt(context.getContentResolver(), - CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 0); + CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, ON); mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER); assertThat(mController.isSwitchPrefEnabled()).isTrue(); @@ -91,9 +102,9 @@ public class DoubleTapPowerPreferenceControllerTest { @Test public void testSwitchEnabled_configIsSet_shouldReturnFalse() { // Set the setting to be disabled. - final Context context = ShadowApplication.getInstance().getApplicationContext(); + final Context context = RuntimeEnvironment.application; Settings.System.putInt(context.getContentResolver(), - CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, 1); + CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED, OFF); mController = new DoubleTapPowerPreferenceController(context, null, KEY_DOUBLE_TAP_POWER); assertThat(mController.isSwitchPrefEnabled()).isFalse(); @@ -138,4 +149,43 @@ public class DoubleTapPowerPreferenceControllerTest { newValue = 1 - newValue; // DoubleTapPower is a non-standard switch assertThat(newValue).isEqualTo(currentValue); } + + @Test + public void isSuggestionCompleted_doubleTapPower_trueWhenNotAvailable() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, false); + + assertThat( + isSuggestionComplete(RuntimeEnvironment.application, null/* prefs */)) + .isTrue(); + } + + @Test + public void isSuggestionCompleted_doubleTapPower_falseWhenNotVisited() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true); + // No stored value in shared preferences if not visited yet. + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + assertThat( + isSuggestionComplete(RuntimeEnvironment.application, prefs)) + .isFalse(); + } + + @Test + public void isSuggestionCompleted_doubleTapPower_trueWhenVisited() { + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled, true); + // No stored value in shared preferences if not visited yet. + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + prefs.edit().putBoolean( + DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); + + assertThat( + isSuggestionComplete(RuntimeEnvironment.application, prefs)) + .isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java index 37f52de34e5..2565dc845db 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java @@ -16,18 +16,26 @@ package com.android.settings.gestures; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.when; + import android.content.ContentResolver; import android.content.Context; - +import android.content.SharedPreferences; import android.provider.Settings; + import com.android.internal.hardware.AmbientDisplayConfiguration; +import com.android.settings.TestConfig; +import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; import com.android.settings.search.InlinePayload; import com.android.settings.search.InlineSwitchPayload; import com.android.settings.search.ResultPayload; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; - +import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowSecureSettings; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,12 +45,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { + SettingsShadowResources.class +}) public class DoubleTapScreenPreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) @@ -60,6 +66,11 @@ public class DoubleTapScreenPreferenceControllerTest { mContext, null, mAmbientDisplayConfiguration, 0, KEY_DOUBLE_TAP_SCREEN); } + @After + public void tearDown() { + SettingsShadowResources.reset(); + } + @Test public void isAvailable_configIsTrue_shouldReturnTrue() { when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).thenReturn(true); @@ -125,4 +136,36 @@ public class DoubleTapScreenPreferenceControllerTest { assertThat(newValue).isEqualTo(currentValue); } + + @Test + public void isSuggestionCompleted_ambientDisplay_falseWhenNotVisited() { + SettingsShadowResources.overrideResource( + com.android.internal.R.string.config_dozeComponent, "foo"); + SettingsShadowResources.overrideResource( + com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar"); + // No stored value in shared preferences if not visited yet. + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + + assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs)) + .isFalse(); + } + + @Test + public void isSuggestionCompleted_ambientDisplay_trueWhenVisited() { + SettingsShadowResources.overrideResource( + com.android.internal.R.string.config_dozeComponent, "foo"); + SettingsShadowResources.overrideResource( + com.android.internal.R.string.config_dozeDoubleTapSensorType, "bar"); + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + + prefs.edit().putBoolean( + DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); + + assertThat(DoubleTapScreenPreferenceController.isSuggestionComplete(context, prefs)) + .isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java index aa8121c1c6d..a7516fc9ae0 100644 --- a/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/DoubleTwistPreferenceControllerTest.java @@ -16,38 +16,44 @@ package com.android.settings.gestures; -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorManager; -import android.os.UserManager; -import android.provider.Settings; - -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; -import com.android.settings.testutils.shadow.ShadowSecureSettings; - -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.annotation.Config; -import org.robolectric.shadows.ShadowApplication; - -import java.util.ArrayList; -import java.util.List; - import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorManager; +import android.os.UserManager; +import android.provider.Settings; + +import com.android.settings.R; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.shadow.SettingsShadowResources; +import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; import com.android.settings.testutils.shadow.ShadowDoubleTwistPreferenceController; +import com.android.settings.testutils.shadow.ShadowSecureSettings; + +import org.junit.After; +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.shadows.ShadowApplication; + +import java.util.ArrayList; +import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { + SettingsShadowResources.class +}) public class DoubleTwistPreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) @@ -64,6 +70,11 @@ public class DoubleTwistPreferenceControllerTest { mController = new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST); } + @After + public void tearDown() { + SettingsShadowResources.reset(); + } + @Test public void isAvailable_hasSensor_shouldReturnTrue() { // Mock sensors @@ -96,6 +107,18 @@ public class DoubleTwistPreferenceControllerTest { assertThat(mController.isAvailable()).isFalse(); } + @Test + public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() { + SettingsShadowResources.overrideResource( + R.string.gesture_double_twist_sensor_name, "nonexistant name"); + SettingsShadowResources.overrideResource( + R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor"); + + assertThat(DoubleTwistPreferenceController.isSuggestionComplete( + RuntimeEnvironment.application, null /* prefs */)) + .isTrue(); + } + @Test @Config(shadows = { ShadowDoubleTwistPreferenceController.class, @@ -103,9 +126,9 @@ public class DoubleTwistPreferenceControllerTest { public void onPreferenceChange_hasWorkProfile_shouldUpdateSettingForWorkProfileUser() { final int managedId = 2; ShadowSecureSettings.putIntForUser( - null, Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId); + null, Settings.Secure.CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED, 0, managedId); DoubleTwistPreferenceController controller = - spy(new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST)); + spy(new DoubleTwistPreferenceController(mContext, null, KEY_DOUBLE_TWIST)); ShadowDoubleTwistPreferenceController.setManagedProfileId(managedId); // enable the gesture diff --git a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java index a2a6923e463..8757a65906d 100644 --- a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java @@ -16,18 +16,26 @@ package com.android.settings.gestures; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.when; + import android.content.ContentResolver; import android.content.Context; - +import android.content.SharedPreferences; import android.provider.Settings; + import com.android.internal.hardware.AmbientDisplayConfiguration; +import com.android.settings.TestConfig; +import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; import com.android.settings.search.InlinePayload; import com.android.settings.search.InlineSwitchPayload; import com.android.settings.search.ResultPayload; import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; - +import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowSecureSettings; + +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,12 +45,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = { + SettingsShadowResources.class +}) public class PickupGesturePreferenceControllerTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) @@ -61,6 +67,12 @@ public class PickupGesturePreferenceControllerTest { mContext, null, mAmbientDisplayConfiguration, 0, KEY_PICK_UP); } + @After + public void tearDown() { + SettingsShadowResources.reset(); + ShadowSecureSettings.clear(); + } + @Test public void isAvailable_configIsTrue_shouldReturnTrue() { when(mAmbientDisplayConfiguration.pulseOnPickupAvailable()).thenReturn(true); @@ -140,4 +152,20 @@ public class PickupGesturePreferenceControllerTest { assertThat(newValue).isEqualTo(currentValue); } + + @Test + public void isSuggestionCompleted_ambientDisplayPickup_trueWhenVisited() { + when(mContext.getResources().getBoolean(anyInt())) + .thenReturn(true); + when(mContext.getResources().getString(anyInt())) + .thenReturn("foo"); + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + prefs.edit().putBoolean( + PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, true).commit(); + + assertThat(PickupGesturePreferenceController.isSuggestionComplete(mContext, prefs)) + .isTrue(); + } } diff --git a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java index 063d7eb8bbb..f3cc2cae3a8 100644 --- a/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/SwipeToNotificationPreferenceControllerTest.java @@ -16,13 +16,19 @@ package com.android.settings.gestures; +import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; + import android.content.Context; +import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.hardware.fingerprint.FingerprintManager; import android.provider.Settings; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.dashboard.suggestions.SuggestionFeatureProviderImpl; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -30,17 +36,10 @@ 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.shadows.ShadowApplication; -import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED; -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) public class SwipeToNotificationPreferenceControllerTest { @@ -122,6 +121,54 @@ public class SwipeToNotificationPreferenceControllerTest { assertThat(mController.isSwitchPrefEnabled()).isFalse(); } + @Test + public void isSuggestionCompleted_configDisabled_shouldReturnTrue() { + stubFingerprintSupported(true); + when(mFingerprintManager.isHardwareDetected()).thenReturn(true); + when(mContext.getResources(). + getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) + .thenReturn(false); + + assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete( + mContext, null /* prefs */)) + .isTrue(); + } + + @Test + public void isSuggestionCompleted_notVisited_shouldReturnFalse() { + stubFingerprintSupported(true); + when(mFingerprintManager.isHardwareDetected()).thenReturn(true); + when(mContext.getResources(). + getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) + .thenReturn(true); + // No stored value in shared preferences if not visited yet. + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + + assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete(mContext, prefs)) + .isFalse(); + } + + @Test + public void isSuggestionCompleted_visited_shouldReturnTrue() { + stubFingerprintSupported(true); + when(mFingerprintManager.isHardwareDetected()).thenReturn(true); + when(mContext.getResources(). + getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys)) + .thenReturn(true); + // No stored value in shared preferences if not visited yet. + final Context context = RuntimeEnvironment.application; + final SharedPreferences prefs = new SuggestionFeatureProviderImpl(context) + .getSharedPrefs(context); + prefs.edit() + .putBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE, true) + .commit(); + + assertThat(SwipeToNotificationPreferenceController.isSuggestionComplete(mContext, prefs)) + .isTrue(); + } + private void stubFingerprintSupported(boolean enabled) { when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) .thenReturn(enabled); diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java index a7a9706638f..677bf418ca1 100644 --- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java +++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java @@ -68,7 +68,7 @@ public class SettingsSuggestionsTest { @Test public void wifiCallingSuggestion_isValid() { - assertSuggestionEquals("Settings$WifiCallingSuggestionActivity", + assertSuggestionEquals("com.android.settings.wifi.WifiCallingSuggestionActivity", CATEGORY_FIRST_IMPRESSION, R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary); } diff --git a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java index d8c08610403..49a678fce22 100644 --- a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java +++ b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java @@ -16,13 +16,18 @@ package com.android.settings.wallpaper; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; + import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.SubSettings; import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.wrapper.WallpaperManagerWrapper; import org.junit.Before; import org.junit.Test; @@ -32,14 +37,15 @@ import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.android.controller.ActivityController; import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowActivity; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.when; -import static org.robolectric.Shadows.shadowOf; - @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, + shadows = { + WallpaperSuggestionActivityTest.ShadowWallpaperManagerWrapper.class + }) public class WallpaperSuggestionActivityTest { @Mock @@ -62,4 +68,39 @@ public class WallpaperSuggestionActivityTest { assertThat(intent.getComponent().getClassName()).isEqualTo(SubSettings.class.getName()); } + + @Test + public void hasWallpaperSet_no_shouldReturnFalse() { + ShadowWallpaperManagerWrapper.setWallpaperId(0); + + assertThat(WallpaperSuggestionActivity.isSuggestionComplete(mContext)) + .isFalse(); + } + + @Test + public void hasWallpaperSet_yes_shouldReturnTrue() { + ShadowWallpaperManagerWrapper.setWallpaperId(100); + + assertThat(WallpaperSuggestionActivity.isSuggestionComplete(mContext)) + .isTrue(); + } + + @Implements(WallpaperManagerWrapper.class) + public static class ShadowWallpaperManagerWrapper { + + private static int sWallpaperId; + + public static void setWallpaperId(int id) { + sWallpaperId = id; + } + + public static void reset() { + sWallpaperId = 0; + } + + @Implementation + public int getWallpaperId(int which) { + return sWallpaperId; + } + } }