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

Commit d8b73f83 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use PermissionControllerService.isRoleVisible() in app info shortcut."

parents 30784fdd 617e745c
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