Loading src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java +12 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -41,6 +43,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre private final RoleManager mRoleManager; private boolean mRoleVisible; private boolean mAppQualified; private PreferenceScreen mPreferenceScreen; Loading @@ -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(); }); Loading Loading @@ -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 Loading tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +49 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBase.java +12 −3 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -41,6 +43,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre private final RoleManager mRoleManager; private boolean mRoleVisible; private boolean mAppQualified; private PreferenceScreen mPreferenceScreen; Loading @@ -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(); }); Loading Loading @@ -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 Loading
tests/robotests/src/com/android/settings/applications/appinfo/DefaultAppShortcutPreferenceControllerBaseTest.java +49 −12 Original line number Diff line number Diff line Loading @@ -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 Loading