Merge "Disable settings preferences when the packages do not exist" into qt-dev
diff --git a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
index 337ad2e..0c5adc4 100644
--- a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
@@ -39,7 +39,7 @@
@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 728c5df..7ac9a03 100644
--- a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
@@ -39,7 +39,7 @@
@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 f2c8252..664e7bb 100644
--- a/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationPreferenceController.java
@@ -52,16 +52,18 @@
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 @@
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 cf2886f..592b231 100644
--- a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
@@ -39,7 +39,7 @@
@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 a23f8da..5c02101 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
@@ -131,6 +131,12 @@
}
@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,
NAV_BAR_MODE_GESTURAL);
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
index dc9e3d9..ebb1eb0 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
@@ -131,6 +131,12 @@
}
@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,
NAV_BAR_MODE_3BUTTON);
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
index 955ea0c..f8a0b58 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
@@ -131,6 +131,12 @@
}
@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,
NAV_BAR_MODE_2BUTTON);