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
This commit is contained in:
Winson Chung
2019-05-02 16:43:34 -07:00
parent 9a4fa9bf0d
commit cfd0a66f7b
7 changed files with 47 additions and 7 deletions

View File

@@ -39,7 +39,7 @@ public class SystemNavigationEdgeToEdgePreferenceController extends
@VisibleForTesting @VisibleForTesting
public SystemNavigationEdgeToEdgePreferenceController(Context context, public SystemNavigationEdgeToEdgePreferenceController(Context context,
IOverlayManager overlayManager, String key) { IOverlayManager overlayManager, String key) {
super(context, overlayManager, key); super(context, overlayManager, key, NAV_BAR_MODE_GESTURAL_OVERLAY);
} }
@Override @Override

View File

@@ -39,7 +39,7 @@ public class SystemNavigationLegacyPreferenceController extends
@VisibleForTesting @VisibleForTesting
public SystemNavigationLegacyPreferenceController(Context context, public SystemNavigationLegacyPreferenceController(Context context,
IOverlayManager overlayManager, String key) { IOverlayManager overlayManager, String key) {
super(context, overlayManager, key); super(context, overlayManager, key, NAV_BAR_MODE_3BUTTON_OVERLAY);
} }
@Override @Override

View File

@@ -52,16 +52,18 @@ public abstract class SystemNavigationPreferenceController extends GesturePrefer
protected final IOverlayManager mOverlayManager; protected final IOverlayManager mOverlayManager;
protected PreferenceScreen mPreferenceScreen; protected PreferenceScreen mPreferenceScreen;
private final String mOverlayPackage;
public SystemNavigationPreferenceController(Context context, IOverlayManager overlayManager, public SystemNavigationPreferenceController(Context context, IOverlayManager overlayManager,
String key) { String key, String overlayPackage) {
super(context, key); super(context, key);
mOverlayManager = overlayManager; mOverlayManager = overlayManager;
mOverlayPackage = overlayPackage;
} }
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return isGestureAvailable(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; return isGestureAvailable(mContext, mOverlayPackage) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
@Override @Override
@@ -105,23 +107,43 @@ public abstract class SystemNavigationPreferenceController extends GesturePrefer
return PREF_KEY_VIDEO; return PREF_KEY_VIDEO;
} }
static boolean isGestureAvailable(Context context) { 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( if (!context.getResources().getBoolean(
com.android.internal.R.bool.config_swipe_up_gesture_setting_available)) { com.android.internal.R.bool.config_swipe_up_gesture_setting_available)) {
return false; return false;
} }
// Skip if the recents component is not defined
final ComponentName recentsComponentName = ComponentName.unflattenFromString( final ComponentName recentsComponentName = ComponentName.unflattenFromString(
context.getString(com.android.internal.R.string.config_recentsComponentName)); context.getString(com.android.internal.R.string.config_recentsComponentName));
if (recentsComponentName == null) { if (recentsComponentName == null) {
return false; return false;
} }
// Skip if the overview proxy service exists
final PackageManager pm = context.getPackageManager();
final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP) final Intent quickStepIntent = new Intent(ACTION_QUICKSTEP)
.setPackage(recentsComponentName.getPackageName()); .setPackage(recentsComponentName.getPackageName());
if (context.getPackageManager().resolveService(quickStepIntent, if (pm.resolveService(quickStepIntent, PackageManager.MATCH_SYSTEM_ONLY) == null) {
PackageManager.MATCH_SYSTEM_ONLY) == null) {
return false; 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; return true;
} }

View File

@@ -39,7 +39,7 @@ public class SystemNavigationSwipeUpPreferenceController extends
@VisibleForTesting @VisibleForTesting
public SystemNavigationSwipeUpPreferenceController(Context context, public SystemNavigationSwipeUpPreferenceController(Context context,
IOverlayManager overlayManager, String key) { IOverlayManager overlayManager, String key) {
super(context, overlayManager, key); super(context, overlayManager, key, NAV_BAR_MODE_2BUTTON_OVERLAY);
} }
@Override @Override

View File

@@ -130,6 +130,12 @@ public class SystemNavigationEdgeToEdgePreferenceControllerTest {
.isFalse(); .isFalse();
} }
@Test
public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() {
assertThat(SystemNavigationEdgeToEdgePreferenceController.isGestureAvailable(mContext,
"com.package.fake")).isFalse();
}
@Test @Test
public void testIsChecked_defaultIsEdgeToEdge_shouldReturnTrue() { public void testIsChecked_defaultIsEdgeToEdge_shouldReturnTrue() {
SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode, SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode,

View File

@@ -130,6 +130,12 @@ public class SystemNavigationLegacyPreferenceControllerTest {
SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext)).isFalse(); SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext)).isFalse();
} }
@Test
public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() {
assertThat(SystemNavigationLegacyPreferenceController.isGestureAvailable(mContext,
"com.package.fake")).isFalse();
}
@Test @Test
public void testIsChecked_defaultIsLegacy_shouldReturnTrue() { public void testIsChecked_defaultIsLegacy_shouldReturnTrue() {
SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode, SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode,

View File

@@ -130,6 +130,12 @@ public class SystemNavigationSwipeUpPreferenceControllerTest {
.isFalse(); .isFalse();
} }
@Test
public void testIsGestureAvailable_noOverlayPackage_shouldReturnFalse() {
assertThat(SystemNavigationSwipeUpPreferenceController.isGestureAvailable(mContext,
"com.package.fake")).isFalse();
}
@Test @Test
public void testIsChecked_defaultIsSwipeUp_shouldReturnTrue() { public void testIsChecked_defaultIsSwipeUp_shouldReturnTrue() {
SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode, SettingsShadowResources.overrideResource(R.integer.config_navBarInteractionMode,