diff --git a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java index fa0b0329538..43ff2150659 100644 --- a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java +++ b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java @@ -62,7 +62,7 @@ public class EmergencyGestureEntrypointPreferenceController extends BasePreferen @Override public void updateState(Preference preference) { super.updateState(preference); - final boolean canHandleClicks = !mUseCustomIntent || mIntent != null; + final boolean canHandleClicks = canHandleClicks(); if (preference != null) { preference.setEnabled(canHandleClicks); } @@ -86,6 +86,9 @@ public class EmergencyGestureEntrypointPreferenceController extends BasePreferen if (!isConfigEnabled) { return UNSUPPORTED_ON_DEVICE; } + if (!canHandleClicks()) { + return UNSUPPORTED_ON_DEVICE; + } return AVAILABLE; } @@ -117,6 +120,13 @@ public class EmergencyGestureEntrypointPreferenceController extends BasePreferen return mUseCustomIntent; } + /** + * Whether or not this setting can react to user click + */ + private boolean canHandleClicks() { + return !mUseCustomIntent || mIntent != null; + } + private boolean canResolveIntent(Intent intent) { final ResolveInfo resolveActivity = mContext.getPackageManager() .resolveActivity(intent, 0); diff --git a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java index 916937284a0..65fa1873c8d 100644 --- a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java @@ -52,14 +52,13 @@ public class EmergencyGestureEntrypointPreferenceControllerTest { private Context mContext; private ShadowPackageManager mPackageManager; - private EmergencyGestureEntrypointPreferenceController mController; private static final String PREF_KEY = "gesture_emergency_button"; @Before public void setUp() { mContext = ApplicationProvider.getApplicationContext(); mPackageManager = Shadows.shadowOf(mContext.getPackageManager()); - mController = new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); + } @After @@ -69,24 +68,18 @@ public class EmergencyGestureEntrypointPreferenceControllerTest { @Test public void constructor_hasCustomPackageConfig_shouldSetIntent() { - final ResolveInfo info = new ResolveInfo(); - info.activityInfo = new ActivityInfo(); - info.activityInfo.packageName = TEST_PKG_NAME; - info.activityInfo.name = TEST_CLASS_NAME; - - mPackageManager.addResolveInfoForIntent(SETTING_INTENT, info); - SettingsShadowResources.overrideResource( R.bool.config_show_emergency_gesture_settings, Boolean.TRUE); - SettingsShadowResources.overrideResource( R.string.emergency_gesture_settings_package, TEST_PKG_NAME); + prepareCustomIntent(); - mController = new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); + EmergencyGestureEntrypointPreferenceController controller = + new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); - assertThat(mController.mIntent).isNotNull(); + assertThat(controller.mIntent).isNotNull(); } @Test @@ -94,8 +87,10 @@ public class EmergencyGestureEntrypointPreferenceControllerTest { SettingsShadowResources.overrideResource( R.bool.config_show_emergency_gesture_settings, Boolean.TRUE); + EmergencyGestureEntrypointPreferenceController controller = + new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); - assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); } @Test @@ -103,7 +98,34 @@ public class EmergencyGestureEntrypointPreferenceControllerTest { SettingsShadowResources.overrideResource( R.bool.config_show_emergency_gesture_settings, Boolean.FALSE); + EmergencyGestureEntrypointPreferenceController controller = + new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); - assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + } + + @Test + public void getAvailabilityStatus_noSuitableIntent_shouldReturnUnsupported() { + SettingsShadowResources.overrideResource( + R.bool.config_show_emergency_gesture_settings, + Boolean.TRUE); + // Provide override package name but don't provide resolvable intent + SettingsShadowResources.overrideResource( + R.string.emergency_gesture_settings_package, + TEST_PKG_NAME); + + EmergencyGestureEntrypointPreferenceController controller = + new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY); + + assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + } + + private void prepareCustomIntent() { + final ResolveInfo info = new ResolveInfo(); + info.activityInfo = new ActivityInfo(); + info.activityInfo.packageName = TEST_PKG_NAME; + info.activityInfo.name = TEST_CLASS_NAME; + + mPackageManager.addResolveInfoForIntent(SETTING_INTENT, info); } }