From cfd0a66f7bcc65cc40aa456a365809db0f529424 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 2 May 2019 16:43:34 -0700 Subject: [PATCH] Disable settings preferences when the packages do not exist Bug: 131273934 Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationLegacyPreferenceControllerTest Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationSwipeUpPreferenceControllerTest Test: make RunSettingsRoboTests ROBOTEST_FILTER=SystemNavigationEdgeToEdgePreferenceControllerTest Change-Id: I5b12831d0eacbaa9c8b13d7a7b380b8c99f20009 --- ...igationEdgeToEdgePreferenceController.java | 2 +- ...mNavigationLegacyPreferenceController.java | 2 +- .../SystemNavigationPreferenceController.java | 30 ++++++++++++++++--- ...NavigationSwipeUpPreferenceController.java | 2 +- ...ionEdgeToEdgePreferenceControllerTest.java | 6 ++++ ...igationLegacyPreferenceControllerTest.java | 6 ++++ ...gationSwipeUpPreferenceControllerTest.java | 6 ++++ 7 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java index 11ff0949b05..959b6ca8ab3 100644 --- a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java +++ b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java @@ -39,7 +39,7 @@ public class SystemNavigationEdgeToEdgePreferenceController extends @VisibleForTesting public SystemNavigationEdgeToEdgePreferenceController(Context context, IOverlayManager overlayManager, String key) { - super(context, overlayManager, key); + super(context, overlayManager, key, NAV_BAR_MODE_GESTURAL_OVERLAY); } @Override diff --git a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java index 0b197845599..1adf8ef6cfa 100644 --- a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java +++ b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java @@ -39,7 +39,7 @@ public class SystemNavigationLegacyPreferenceController extends @VisibleForTesting public SystemNavigationLegacyPreferenceController(Context context, IOverlayManager overlayManager, String key) { - super(context, overlayManager, key); + super(context, overlayManager, key, NAV_BAR_MODE_3BUTTON_OVERLAY); } @Override diff --git a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java index f2c8252be39..664e7bb2b42 100644 --- a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java +++ b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java @@ -52,16 +52,18 @@ public abstract class SystemNavigationPreferenceController extends GesturePrefer protected final IOverlayManager mOverlayManager; protected PreferenceScreen mPreferenceScreen; + private final String mOverlayPackage; public SystemNavigationPreferenceController(Context context, IOverlayManager overlayManager, - String key) { + String key, String overlayPackage) { super(context, key); mOverlayManager = overlayManager; + mOverlayPackage = overlayPackage; } @Override public int getAvailabilityStatus() { - return isGestureAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + return isGestureAvailable(mContext, mOverlayPackage) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override @@ -105,23 +107,43 @@ public abstract class SystemNavigationPreferenceController extends GesturePrefer return PREF_KEY_VIDEO; } + static boolean isGestureAvailable(Context context) { + return isGestureAvailable(context, null /* overlayPackage */); + } + + static boolean isGestureAvailable(Context context, String overlayPackage) { + // Skip if the swipe up settings are not available if (!context.getResources().getBoolean( com.android.internal.R.bool.config_swipe_up_gesture_setting_available)) { return false; } + // Skip if the recents component is not defined final ComponentName recentsComponentName = ComponentName.unflattenFromString( context.getString(com.android.internal.R.string.config_recentsComponentName)); if (recentsComponentName == null) { return false; } + + // Skip if the overview proxy service exists + final PackageManager pm = context.getPackageManager(); final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP) .setPackage(recentsComponentName.getPackageName()); - if (context.getPackageManager().resolveService(quickStepIntent, - PackageManager.MATCH_SYSTEM_ONLY) == null) { + if (pm.resolveService(quickStepIntent, PackageManager.MATCH_SYSTEM_ONLY) == null) { return false; } + + // Skip if the required overlay package is defined but doesn't exist + if (overlayPackage != null) { + try { + return pm.getPackageInfo(overlayPackage, 0 /* flags */) != null; + } catch (PackageManager.NameNotFoundException e) { + // Not found, just return unavailable + return false; + } + } + return true; } diff --git a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java index 26c2201a1e5..5db16726aa3 100644 --- a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java +++ b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java @@ -39,7 +39,7 @@ public class SystemNavigationSwipeUpPreferenceController extends @VisibleForTesting public SystemNavigationSwipeUpPreferenceController(Context context, IOverlayManager overlayManager, String key) { - super(context, overlayManager, key); + super(context, overlayManager, key, NAV_BAR_MODE_2BUTTON_OVERLAY); } @Override diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java index 740ff2cae29..03c0b7364d3 100644 --- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java @@ -130,6 +130,12 @@ public class SystemNavigationEdgeToEdgePreferenceControllerTest { .isFalse(); } + @Test + public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() { + assertThat(SystemNavigationEdgeToEdgePreferenceController.isGestureAvailable(mContext, + "com.package.fake")).isFalse(); + } + @Test public void testIsChecked_defaultIsEdgeToEdge_shouldReturnTrue() { SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode, diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java index 2c4f88a09ad..4f9e9f14b85 100644 --- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java @@ -130,6 +130,12 @@ public class SystemNavigationLegacyPreferenceControllerTest { SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext)).isFalse(); } + @Test + public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() { + assertThat(SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext, + "com.package.fake")).isFalse(); + } + @Test public void testIsChecked_defaultIsLegacy_shouldReturnTrue() { SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode, diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java index 177d4987d1d..509080bc3a5 100644 --- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java @@ -130,6 +130,12 @@ public class SystemNavigationSwipeUpPreferenceControllerTest { .isFalse(); } + @Test + public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() { + assertThat(SystemNavigationSwipeUpPreferenceController.isGestureAvailable(mContext, + "com.package.fake")).isFalse(); + } + @Test public void testIsChecked_defaultIsSwipeUp_shouldReturnTrue() { SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode,