Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cfd0a66f authored by Winson Chung's avatar Winson Chung
Browse files

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
parent 9a4fa9bf
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+26 −4
Original line number Diff line number Diff line
@@ -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;
    }

+1 −1
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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,
Loading