Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a6b808d authored by Felipe Leme's avatar Felipe Leme
Browse files

New @TestApi: DevicePolicyManager.isNewUserDisclaimerAcknowledged()

It also changes acknowledgeNewUserDisclaimer() to allow callers with
INTERACT_ACROSS_USERS permissions - that's more consistent with other
methods and allows it to be called by tests.

Test: atest com.android.cts.devicepolicy.DeviceOwnerTest#testCreateAndManageUser_newUserDisclaimer
Test: m update-api

Bug: 203822627
Bug: 215375992

Change-Id: I8b98a1af60db65c1b27f19cf3e93b21d33d88278
parent 2bbbc9a2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -63,9 +63,9 @@ package android.app {
package android.app.admin {

  public class DevicePolicyManager {
    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void acknowledgeNewUserDisclaimer();
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public void acknowledgeNewUserDisclaimer();
    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public android.os.UserHandle getLogoutUser();
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public int logoutUser();
    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public int logoutUser();
    field public static final String ACTION_SHOW_NEW_USER_DISCLAIMER = "android.app.action.SHOW_NEW_USER_DISCLAIMER";
  }

+1 −0
Original line number Diff line number Diff line
@@ -470,6 +470,7 @@ package android.app.admin {
    method @NonNull @RequiresPermission(android.Manifest.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.Manifest.permission.MARK_DEVICE_ORGANIZATION_OWNED, android.Manifest.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);
+22 −2
Original line number Diff line number Diff line
@@ -3506,7 +3506,8 @@ public class DevicePolicyManager {
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
    @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
            android.Manifest.permission.INTERACT_ACROSS_USERS})
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public void acknowledgeNewUserDisclaimer() {
        if (mService != null) {
@@ -3518,6 +3519,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.
     *
@@ -10096,7 +10116,7 @@ public class DevicePolicyManager {
     * @hide
     */
    @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
            android.Manifest.permission.CREATE_USERS})
            android.Manifest.permission.INTERACT_ACROSS_USERS})
    @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
    public @UserOperationResult int logoutUser() {
        // TODO(b/214336184): add CTS test
+1 −0
Original line number Diff line number Diff line
@@ -272,6 +272,7 @@ interface IDevicePolicyManager {
    int getLogoutUserId();
    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);
+24 −1
Original line number Diff line number Diff line
@@ -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: "
Loading