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

This commit is contained in:
TreeHugger Robot
2019-03-04 22:49:23 +00:00
committed by Android (Google) Code Review
2 changed files with 61 additions and 15 deletions

View File

@@ -29,6 +29,8 @@ import com.android.internal.util.CollectionUtils;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.BasePreferenceController; 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 * Abstract base controller for the default app shortcut preferences that launches the default app
* settings with the corresponding default app highlighted. * settings with the corresponding default app highlighted.
@@ -41,6 +43,8 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
private final RoleManager mRoleManager; private final RoleManager mRoleManager;
private boolean mRoleVisible;
private boolean mAppQualified; private boolean mAppQualified;
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@@ -56,8 +60,13 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
final PermissionControllerManager permissionControllerManager = final PermissionControllerManager permissionControllerManager =
mContext.getSystemService(PermissionControllerManager.class); mContext.getSystemService(PermissionControllerManager.class);
permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, final Executor executor = mContext.getMainExecutor();
mContext.getMainExecutor(), qualified -> { permissionControllerManager.isRoleVisible(mRoleName, executor, visible -> {
mRoleVisible = visible;
refreshAvailability();
});
permissionControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, executor,
qualified -> {
mAppQualified = qualified; mAppQualified = qualified;
refreshAvailability(); refreshAvailability();
}); });
@@ -85,7 +94,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
if (mContext.getSystemService(UserManager.class).isManagedProfile()) { if (mContext.getSystemService(UserManager.class).isManagedProfile()) {
return DISABLED_FOR_USER; return DISABLED_FOR_USER;
} }
return mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE; return mRoleVisible && mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
@Override @Override

View File

@@ -101,35 +101,72 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
@Test @Test
public void 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( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
} }
@Test @Test
public void getAvailabilityStatus_applicationIsNotQualifiedForRole_shouldReturnUnsupported() { public void getAvailabilityStatus_applicationIsNotQualifiedForRole_shouldReturnUnsupported() {
final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass( setRoleIsVisible(true);
Consumer.class); setApplicationIsQualifiedForRole(false);
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);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
} }
@Test @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( final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass(
Consumer.class); Consumer.class);
verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq( verify(mPermissionControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq(
TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture()); TEST_PACKAGE_NAME), any(Executor.class), callbackCaptor.capture());
final Consumer<Boolean> callback = callbackCaptor.getValue(); final Consumer<Boolean> callback = callbackCaptor.getValue();
callback.accept(true); callback.accept(qualified);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
} }
@Test @Test