Merge "Fix an issue that "Learn More" button was not showing up." into sc-dev am: 2e391ecf75 am: eca224b047

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14920834

Change-Id: If07d6fc9d74c47ed938412a5bf9c9cf7f9b61ab7
This commit is contained in:
BK Choi
2021-06-14 15:25:36 +00:00
committed by Automerger Merge Worker
2 changed files with 72 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settingslib.enterprise;
import static java.util.Objects.requireNonNull;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -42,9 +43,10 @@ public abstract class ActionDisabledLearnMoreButtonLauncher {
requireNonNull(enforcedAdmin, "enforcedAdmin cannot be null");
// The "Learn more" button appears only if the restriction is enforced by an admin in the
// same profile group. Otherwise the admin package and its policies are not accessible to
// the current user.
if (isSameProfileGroup(context, enforcementAdminUserId)) {
// same profile group or by the device owner. Otherwise the admin package and its policies
// are not accessible to the current user.
if (isSameProfileGroup(context, enforcementAdminUserId)
|| isEnforcedByDeviceOwnerOnSystemUserMode(context, enforcementAdminUserId)) {
setLearnMoreButton(() -> showAdminPolicies(context, enforcedAdmin));
}
}
@@ -90,6 +92,15 @@ public abstract class ActionDisabledLearnMoreButtonLauncher {
return um.isSameProfileGroup(enforcementAdminUserId, um.getUserHandle());
}
private boolean isEnforcedByDeviceOwnerOnSystemUserMode(
Context context, int enforcementAdminUserId) {
if (enforcementAdminUserId != UserHandle.USER_SYSTEM) {
return false;
}
DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
return enforcementAdminUserId == dpm.getDeviceOwnerUserId();
}
/**
* Shows the help page using the given {@code url}.
*/

View File

@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertThrows;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@@ -61,6 +62,9 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
@Mock
private Context mContext;
@Mock
private DevicePolicyManager mDevicePolicyManager;
@Mock
private UserManager mUserManager;
@@ -77,6 +81,7 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
public void setUp() {
when(mContext.getUserId()).thenReturn(CONTEXT_USER_ID);
when(mUserManager.getUserHandle()).thenReturn(CONTEXT_USER_ID);
when(mContext.getSystemService(DevicePolicyManager.class)).thenReturn(mDevicePolicyManager);
when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
}
@@ -95,8 +100,9 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_differentProfileGroup() {
public void testSetupLearnMoreButtonToShowAdminPolicies_differentProfileGroup_noDeviceOwner() {
mockDifferentProfileGroup();
mockEnforcementAdminIsNotDeviceOwner();
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, ENFORCEMENT_ADMIN_USER_ID,
ENFORCED_ADMIN);
@@ -105,8 +111,34 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_sameProfileGroup_noComponent() {
public void testSetupLearnMoreButtonToShowAdminPolicies_differentGroup_noSystemDeviceOwner() {
mockDifferentProfileGroup();
mockDeviceOwner(ENFORCEMENT_ADMIN_USER_ID);
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, ENFORCEMENT_ADMIN_USER_ID,
ENFORCED_ADMIN);
verify(mLauncher, never()).setLearnMoreButton(any());
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_differentGroup_systemDeviceOwner() {
mockDifferentProfileGroup();
mockDeviceOwner(UserHandle.USER_SYSTEM);
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, UserHandle.USER_SYSTEM,
ENFORCED_ADMIN_WITHOUT_COMPONENT);
tapLearnMore();
verify(mLauncher, never()).launchShowAdminPolicies(any(), any(), any());
verify(mLauncher).launchShowAdminSettings(mContext);
verifyFinishSelf();
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_sameProfileGroup_noDeviceOwner() {
mockSameProfileGroup();
mockEnforcementAdminIsNotDeviceOwner();
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, ENFORCEMENT_ADMIN_USER_ID,
ENFORCED_ADMIN_WITHOUT_COMPONENT);
@@ -118,8 +150,23 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_sameProfileGroup_withComponent() {
public void testSetupLearnMoreButtonToShowAdminPolicies_sameProfileGroup_noSystemDeviceOwner() {
mockSameProfileGroup();
mockDeviceOwner(ENFORCEMENT_ADMIN_USER_ID);
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, ENFORCEMENT_ADMIN_USER_ID,
ENFORCED_ADMIN_WITHOUT_COMPONENT);
tapLearnMore();
verify(mLauncher, never()).launchShowAdminPolicies(any(), any(), any());
verify(mLauncher).launchShowAdminSettings(mContext);
verifyFinishSelf();
}
@Test
public void testSetupLearnMoreButtonToShowAdminPolicies_showsLearnMoreButton_withComponent() {
mockSameProfileGroup();
mockEnforcementAdminIsNotDeviceOwner();
mLauncher.setupLearnMoreButtonToShowAdminPolicies(mContext, ENFORCEMENT_ADMIN_USER_ID,
ENFORCED_ADMIN);
@@ -164,6 +211,14 @@ public final class ActionDisabledLearnMoreButtonLauncherTest {
.thenReturn(true);
}
private void mockEnforcementAdminIsNotDeviceOwner() {
when(mDevicePolicyManager.getDeviceOwnerUserId()).thenReturn(ENFORCEMENT_ADMIN_USER_ID + 1);
}
private void mockDeviceOwner(int userId) {
when(mDevicePolicyManager.getDeviceOwnerUserId()).thenReturn(userId);
}
private void tapLearnMore() {
verify(mLauncher).setLearnMoreButton(mLearnMoreActionCaptor.capture());
mLearnMoreActionCaptor.getValue().run();