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:
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user