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

Commit 617e745c authored by Hai Zhang's avatar Hai Zhang
Browse files

Use PermissionControllerService.isRoleVisible() in app info shortcut.

Use the new PermissionControllerService.isRoleVisible() to hide roles
that are not visible.

Bug: 124452117
Bug: 124457823
Test: manual
Change-Id: I4c61a2760dc62ecd8a52fba9e133e96a447c4a29
parent 3064ca58
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import com.android.internal.util.CollectionUtils;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

import java.util.concurrent.Executor;

/*
 * Abstract base controller for the default app shortcut preferences that launches the default app
 * settings with the corresponding default app highlighted.
@@ -41,6 +43,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre

    private final RoleManager mRoleManager;

    private boolean mRoleVisible;

    private boolean mAppQualified;

    private PreferenceScreen mPreferenceScreen;
@@ -56,8 +60,13 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre

        final PermissionControllerManager permissionControllerManager =
                mContext.getSystemService(PermissionControllerManager.class);
        permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName,
                mContext.getMainExecutor(), qualified -> {
        final Executor executor = mContext.getMainExecutor();
        permissionControllerManager.isRoleVisible(mRoleName, executor, visible -> {
            mRoleVisible = visible;
            refreshAvailability();
        });
        permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, executor,
                qualified -> {
                    mAppQualified = qualified;
                    refreshAvailability();
                });
@@ -85,7 +94,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
        if (mContext.getSystemService(UserManager.class).isManagedProfile()) {
            return DISABLED_FOR_USER;
        }
        return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
        return mRoleVisible && mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }

    @Override
+49 −12
Original line number Diff line number Diff line
@@ -101,35 +101,72 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {

    @Test
    public void
    getAvailabilityStatus_noCallbackForIsApplicationNotQualifiedForRole_shouldReturnUnsupported() {
    getAvailabilityStatus_noCallback_shouldReturnUnsupported() {
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void
    getAvailabilityStatus_noCallbackForIsRoleNotVisible_shouldReturnUnsupported() {
        setApplicationIsQualifiedForRole(true);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void getAvailabilityStatus_RoleIsNotVisible_shouldReturnUnsupported() {
        setRoleIsVisible(false);
        setApplicationIsQualifiedForRole(true);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void
    getAvailabilityStatus_noCallbackForIsApplicationQualifiedForRole_shouldReturnUnsupported() {
        setRoleIsVisible(true);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void getAvailabilityStatus_applicationIsNotQualifiedForRole_shouldReturnUnsupported() {
        final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass(
                Consumer.class);
        verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq(
                TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture());
        final Consumer<Boolean> callback = callbackCaptor.getValue();
        callback.accept(false);
        setRoleIsVisible(true);
        setApplicationIsQualifiedForRole(false);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
    }

    @Test
    public void getAvailabilityStatus_applicationIsQualifiedForRole_shouldReturnAvailable() {
    public void getAvailabilityStatus_RoleVisibleAndApplicationQualified_shouldReturnAvailable() {
        setRoleIsVisible(true);
        setApplicationIsQualifiedForRole(true);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
    }

    private void setRoleIsVisible(boolean visible) {
        final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass(
                Consumer.class);
        verify(mPermissionControllerManager).isRoleVisible(eq(TEST_ROLE_NAME), any(Executor.class),
                callbackCaptor.capture());
        final Consumer<Boolean> callback = callbackCaptor.getValue();
        callback.accept(visible);
    }

    private void setApplicationIsQualifiedForRole(boolean qualified) {
        final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass(
                Consumer.class);
        verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq(
                TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture());
        final Consumer<Boolean> callback = callbackCaptor.getValue();
        callback.accept(true);

        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
        callback.accept(qualified);
    }

    @Test