From 6a8f11b2cf3ebaafed70adf64087ce861fa4cb79 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 28 Jan 2021 01:28:42 +0000 Subject: [PATCH] Hide esos setting if no app provides esos functionality When user disables OEM app that provides esos, the setting is hidden as well. See more details on bug. Bug: 178654110 Test: robotests Change-Id: I7a0763381d3321124f4208a58bb8e10cf884f7c1 --- ...GestureEntrypointPreferenceController.java | 12 ++++- ...ureEntrypointPreferenceControllerTest.java | 50 +++++++++++++------ 2 files changed, 47 insertions(+), 15 deletions(-) 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); } }