Merge "Use PermissionControllerService.isRoleVisible() in app info shortcut."
This commit is contained in:
committed by
Android (Google) Code Review
commit
d8b73f832f
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user