Add RoleControllerManager.isApplicationVisibleForRole().

Settings doesn't actually need to know whether an application
qualifies for a role, but only whether the default app setting should
be visible for an application. Qualification and visibility differs in
cases such as FallbackHome inside Settings which is a qualifying home
activity but should never be shown in default apps UI.

Fixes: 138636320
Test: manual
Change-Id: I2995b6fa5c7920d14fa644748db9c41b442ce53b
This commit is contained in:
Hai Zhang
2019-08-26 14:23:44 -07:00
parent 8d59885bc2
commit 51b76855f9
2 changed files with 17 additions and 17 deletions

View File

@@ -45,7 +45,7 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
private boolean mRoleVisible; private boolean mRoleVisible;
private boolean mAppQualified; private boolean mAppVisible;
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@@ -65,9 +65,9 @@ public abstract class DefaultAppShortcutPreferenceControllerBase extends BasePre
mRoleVisible = visible; mRoleVisible = visible;
refreshAvailability(); refreshAvailability();
}); });
roleControllerManager.isApplicationQualifiedForRole(mRoleName, mPackageName, executor, roleControllerManager.isApplicationVisibleForRole(mRoleName, mPackageName, executor,
qualified -> { visible -> {
mAppQualified = qualified; mAppVisible = visible;
refreshAvailability(); refreshAvailability();
}); });
} }
@@ -94,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 mRoleVisible && mAppQualified ? AVAILABLE : UNSUPPORTED_ON_DEVICE; return mRoleVisible && mAppVisible ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
} }
@Override @Override

View File

@@ -85,8 +85,8 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
} }
@Test @Test
public void constructor_callsIsApplicationQualifiedForRole() { public void constructor_callsIsApplicationVisibleForRole() {
verify(mRoleControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq( verify(mRoleControllerManager).isApplicationVisibleForRole(eq(TEST_ROLE_NAME), eq(
TEST_PACKAGE_NAME), any(Executor.class), any(Consumer.class)); TEST_PACKAGE_NAME), any(Executor.class), any(Consumer.class));
} }
@@ -108,7 +108,7 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
@Test @Test
public void public void
getAvailabilityStatus_noCallbackForIsRoleNotVisible_shouldReturnUnsupported() { getAvailabilityStatus_noCallbackForIsRoleNotVisible_shouldReturnUnsupported() {
setApplicationIsQualifiedForRole(true); setApplicationIsVisibleForRole(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
@@ -117,7 +117,7 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
@Test @Test
public void getAvailabilityStatus_RoleIsNotVisible_shouldReturnUnsupported() { public void getAvailabilityStatus_RoleIsNotVisible_shouldReturnUnsupported() {
setRoleIsVisible(false); setRoleIsVisible(false);
setApplicationIsQualifiedForRole(true); setApplicationIsVisibleForRole(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
@@ -125,7 +125,7 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
@Test @Test
public void public void
getAvailabilityStatus_noCallbackForIsApplicationQualifiedForRole_shouldReturnUnsupported() { getAvailabilityStatus_noCallbackForIsApplicationVisibleForRole_shouldReturnUnsupported() {
setRoleIsVisible(true); setRoleIsVisible(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
@@ -133,18 +133,18 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
} }
@Test @Test
public void getAvailabilityStatus_applicationIsNotQualifiedForRole_shouldReturnUnsupported() { public void getAvailabilityStatus_applicationIsNotVisibleForRole_shouldReturnUnsupported() {
setRoleIsVisible(true); setRoleIsVisible(true);
setApplicationIsQualifiedForRole(false); setApplicationIsVisibleForRole(false);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE); DefaultAppShortcutPreferenceControllerBase.UNSUPPORTED_ON_DEVICE);
} }
@Test @Test
public void getAvailabilityStatus_RoleVisibleAndApplicationQualified_shouldReturnAvailable() { public void getAvailabilityStatus_RoleVisibleAndApplicationVisible_shouldReturnAvailable() {
setRoleIsVisible(true); setRoleIsVisible(true);
setApplicationIsQualifiedForRole(true); setApplicationIsVisibleForRole(true);
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus()).isEqualTo(
DefaultAppShortcutPreferenceControllerBase.AVAILABLE); DefaultAppShortcutPreferenceControllerBase.AVAILABLE);
@@ -159,13 +159,13 @@ public class DefaultAppShortcutPreferenceControllerBaseTest {
callback.accept(visible); callback.accept(visible);
} }
private void setApplicationIsQualifiedForRole(boolean qualified) { private void setApplicationIsVisibleForRole(boolean visible) {
final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass( final ArgumentCaptor<Consumer<Boolean>> callbackCaptor = ArgumentCaptor.forClass(
Consumer.class); Consumer.class);
verify(mRoleControllerManager).isApplicationQualifiedForRole(eq(TEST_ROLE_NAME), eq( verify(mRoleControllerManager).isApplicationVisibleForRole(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(qualified); callback.accept(visible);
} }
@Test @Test