Merge "New @TestApi: DevicePolicyManager.isNewUserDisclaimerAcknowledged()" into sc-v2-dev

This commit is contained in:
Yan Zhu
2022-02-22 03:44:53 +00:00
committed by Android (Google) Code Review
5 changed files with 62 additions and 4 deletions

View File

@@ -444,6 +444,7 @@ package android.app.admin {
method @NonNull @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public java.util.Set<java.lang.String> getPolicyExemptApps();
method public boolean isCurrentInputMethodSetByOwner();
method public boolean isFactoryResetProtectionPolicySupported();
method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public boolean isNewUserDisclaimerAcknowledged();
method @RequiresPermission(anyOf={"android.permission.MARK_DEVICE_ORGANIZATION_OWNED", "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"}, conditional=true) public void markProfileOwnerOnOrganizationOwnedDevice(@NonNull android.content.ComponentName);
method @NonNull public static String operationSafetyReasonToString(int);
method @NonNull public static String operationToString(int);

View File

@@ -3110,7 +3110,8 @@ public class DevicePolicyManager {
*
* @hide
*/
@RequiresPermission(android.Manifest.permission.MANAGE_USERS)
@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.INTERACT_ACROSS_USERS})
public void acknowledgeNewUserDisclaimer() {
if (mService != null) {
try {
@@ -3121,6 +3122,25 @@ public class DevicePolicyManager {
}
}
/**
* Checks whether the new managed user disclaimer was viewed by the current user.
*
* @hide
*/
@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.INTERACT_ACROSS_USERS})
@TestApi
public boolean isNewUserDisclaimerAcknowledged() {
if (mService != null) {
try {
return mService.isNewUserDisclaimerAcknowledged();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
return false;
}
/**
* Return true if the given administrator component is currently active (enabled) in the system.
*

View File

@@ -265,6 +265,7 @@ interface IDevicePolicyManager {
void clearLogoutUser();
List<UserHandle> getSecondaryUsers(in ComponentName who);
void acknowledgeNewUserDisclaimer();
boolean isNewUserDisclaimerAcknowledged();
void enableSystemApp(in ComponentName admin, in String callerPackage, in String packageName);
int enableSystemAppWithIntent(in ComponentName admin, in String callerPackage, in Intent intent);

View File

@@ -23,6 +23,7 @@ import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.os.FileUtils;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.DebugUtils;
@@ -83,7 +84,7 @@ class DevicePolicyData {
private static final String ATTR_NEW_USER_DISCLAIMER = "new-user-disclaimer";
// Values of ATTR_NEW_USER_DISCLAIMER
static final String NEW_USER_DISCLAIMER_SHOWN = "shown";
static final String NEW_USER_DISCLAIMER_ACKNOWLEDGED = "acked";
static final String NEW_USER_DISCLAIMER_NOT_NEEDED = "not_needed";
static final String NEW_USER_DISCLAIMER_NEEDED = "needed";
@@ -613,6 +614,28 @@ class DevicePolicyData {
}
}
boolean isNewUserDisclaimerAcknowledged() {
if (mNewUserDisclaimer == null) {
if (mUserId == UserHandle.USER_SYSTEM) {
return true;
}
Slogf.w(TAG, "isNewUserDisclaimerAcknowledged(%d): mNewUserDisclaimer is null",
mUserId);
return false;
}
switch (mNewUserDisclaimer) {
case NEW_USER_DISCLAIMER_ACKNOWLEDGED:
case NEW_USER_DISCLAIMER_NOT_NEEDED:
return true;
case NEW_USER_DISCLAIMER_NEEDED:
return false;
default:
Slogf.w(TAG, "isNewUserDisclaimerAcknowledged(%d): invalid value %d", mUserId,
mNewUserDisclaimer);
return false;
}
}
void dump(IndentingPrintWriter pw) {
pw.println();
pw.println("Enabled Device Admins (User " + mUserId + ", provisioningState: "

View File

@@ -10765,10 +10765,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
@Override
public void acknowledgeNewUserDisclaimer() {
CallerIdentity callerIdentity = getCallerIdentity();
canManageUsers(callerIdentity);
Preconditions.checkCallAuthorization(canManageUsers(callerIdentity)
|| hasCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS));
setShowNewUserDisclaimer(callerIdentity.getUserId(),
DevicePolicyData.NEW_USER_DISCLAIMER_SHOWN);
DevicePolicyData.NEW_USER_DISCLAIMER_ACKNOWLEDGED);
}
private void setShowNewUserDisclaimer(@UserIdInt int userId, String value) {
@@ -10800,6 +10801,18 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
mContext.sendBroadcastAsUser(intent, UserHandle.of(userId));
}
@Override
public boolean isNewUserDisclaimerAcknowledged() {
CallerIdentity callerIdentity = getCallerIdentity();
Preconditions.checkCallAuthorization(canManageUsers(callerIdentity)
|| hasCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS));
int userId = callerIdentity.getUserId();
synchronized (getLockObject()) {
DevicePolicyData policyData = getUserData(userId);
return policyData.isNewUserDisclaimerAcknowledged();
}
}
@Override
public boolean removeUser(ComponentName who, UserHandle userHandle) {
Objects.requireNonNull(who, "ComponentName is null");