diff options
15 files changed, 73 insertions, 1229 deletions
diff --git a/services/core/java/com/android/server/pm/UserManagerInternal.java b/services/core/java/com/android/server/pm/UserManagerInternal.java index 0e6d5e5ed463..8dc94287688d 100644 --- a/services/core/java/com/android/server/pm/UserManagerInternal.java +++ b/services/core/java/com/android/server/pm/UserManagerInternal.java @@ -92,21 +92,6 @@ public abstract class UserManagerInternal { public abstract void setDevicePolicyUserRestrictions(int originatingUserId, @Nullable Bundle global, @Nullable RestrictionsSet local, boolean isDeviceOwner); - /** - * Returns the "base" user restrictions. - * - * Used by {@link com.android.server.devicepolicy.DevicePolicyManagerService} for upgrading - * from MNC. - */ - public abstract Bundle getBaseUserRestrictions(int userId); - - /** - * Called by {@link com.android.server.devicepolicy.DevicePolicyManagerService} for upgrading - * from MNC. - */ - public abstract void setBaseUserRestrictionsByDpmsForMigration(int userId, - Bundle baseRestrictions); - /** Return a user restriction. */ public abstract boolean getUserRestriction(int userId, String key); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index cb08c79a7048..358e71a70550 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -5900,33 +5900,6 @@ public class UserManagerService extends IUserManager.Stub { } @Override - public Bundle getBaseUserRestrictions(@UserIdInt int userId) { - synchronized (mRestrictionsLock) { - return mBaseUserRestrictions.getRestrictions(userId); - } - } - - @Override - public void setBaseUserRestrictionsByDpmsForMigration( - @UserIdInt int userId, Bundle baseRestrictions) { - synchronized (mRestrictionsLock) { - if (mBaseUserRestrictions.updateRestrictions(userId, - new Bundle(baseRestrictions))) { - invalidateEffectiveUserRestrictionsLR(userId); - } - } - - final UserData userData = getUserDataNoChecks(userId); - synchronized (mPackagesLock) { - if (userData != null) { - writeUserLP(userData); - } else { - Slog.w(LOG_TAG, "UserInfo not found for " + userId); - } - } - } - - @Override public boolean getUserRestriction(@UserIdInt int userId, String key) { return getUserRestrictions(userId).getBoolean(key); } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 35dbb157aaf4..18bffebb427c 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -382,8 +382,6 @@ import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.utils.Slogf; import com.android.server.wm.ActivityTaskManagerInternal; -import com.google.android.collect.Sets; - import org.xmlpull.v1.XmlPullParserException; import java.io.ByteArrayInputStream; @@ -2002,7 +2000,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { synchronized (getLockObject()) { mOwners.load(); setDeviceOwnershipSystemPropertyLocked(); - findOwnerComponentIfNecessaryLocked(); } } @@ -2387,139 +2384,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - private void findOwnerComponentIfNecessaryLocked() { - if (!mOwners.hasDeviceOwner()) { - return; - } - final ComponentName doComponentName = mOwners.getDeviceOwnerComponent(); - - if (!TextUtils.isEmpty(doComponentName.getClassName())) { - return; // Already a full component name. - } - - final ComponentName doComponent = findAdminComponentWithPackageLocked( - doComponentName.getPackageName(), - mOwners.getDeviceOwnerUserId()); - if (doComponent == null) { - Slogf.e(LOG_TAG, "Device-owner isn't registered as device-admin"); - } else { - mOwners.setDeviceOwnerWithRestrictionsMigrated( - doComponent, - mOwners.getDeviceOwnerName(), - mOwners.getDeviceOwnerUserId(), - !mOwners.getDeviceOwnerUserRestrictionsNeedsMigration()); - mOwners.writeDeviceOwner(); - if (VERBOSE_LOG) { - Slogf.v(LOG_TAG, "Device owner component filled in"); - } - } - } - - /** - * We didn't use to persist user restrictions for each owners but only persisted in user - * manager. - */ - private void migrateUserRestrictionsIfNecessaryLocked() { - boolean migrated = false; - // Migrate for the DO. Basically all restrictions should be considered to be set by DO, - // except for the "system controlled" ones. - if (mOwners.getDeviceOwnerUserRestrictionsNeedsMigration()) { - if (VERBOSE_LOG) { - Slogf.v(LOG_TAG, "Migrating DO user restrictions"); - } - migrated = true; - - // Migrate user 0 restrictions to DO. - final ActiveAdmin deviceOwnerAdmin = getDeviceOwnerAdminLocked(); - - migrateUserRestrictionsForUser(UserHandle.SYSTEM, deviceOwnerAdmin, - /* exceptionList =*/ null, /* isDeviceOwner =*/ true); - - // Push DO user restrictions to user manager. - pushUserRestrictions(UserHandle.USER_SYSTEM); - - mOwners.setDeviceOwnerUserRestrictionsMigrated(); - } - - // Migrate for POs. - - // The following restrictions can be set on secondary users by the device owner, so we - // assume they're not from the PO. - final Set<String> secondaryUserExceptionList = Sets.newArraySet( - UserManager.DISALLOW_OUTGOING_CALLS, - UserManager.DISALLOW_SMS); - - for (UserInfo ui : mUserManager.getUsers()) { - final int userId = ui.id; - if (mOwners.getProfileOwnerUserRestrictionsNeedsMigration(userId)) { - if (VERBOSE_LOG) { - Slogf.v(LOG_TAG, "Migrating PO user restrictions for user %d", userId); - } - migrated = true; - - final ActiveAdmin profileOwnerAdmin = getProfileOwnerAdminLocked(userId); - - final Set<String> exceptionList = - (userId == UserHandle.USER_SYSTEM) ? null : secondaryUserExceptionList; - - migrateUserRestrictionsForUser(ui.getUserHandle(), profileOwnerAdmin, - exceptionList, /* isDeviceOwner =*/ false); - - // Note if a secondary user has no PO but has a DA that disables camera, we - // don't get here and won't push the camera user restriction to UserManager - // here. That's okay because we'll push user restrictions anyway when a user - // starts. But we still do it because we want to let user manager persist - // upon migration. - pushUserRestrictions(userId); - - mOwners.setProfileOwnerUserRestrictionsMigrated(userId); - } - } - if (VERBOSE_LOG && migrated) { - Slogf.v(LOG_TAG, "User restrictions migrated."); - } - } - - private void migrateUserRestrictionsForUser(UserHandle user, ActiveAdmin admin, - Set<String> exceptionList, boolean isDeviceOwner) { - final Bundle origRestrictions = mUserManagerInternal.getBaseUserRestrictions( - user.getIdentifier()); - - final Bundle newBaseRestrictions = new Bundle(); - final Bundle newOwnerRestrictions = new Bundle(); - - for (String key : origRestrictions.keySet()) { - if (!origRestrictions.getBoolean(key)) { - continue; - } - final boolean canOwnerChange = isDeviceOwner - ? UserRestrictionsUtils.canDeviceOwnerChange(key) - : UserRestrictionsUtils.canProfileOwnerChange(key, user.getIdentifier()); - - if (!canOwnerChange || (exceptionList!= null && exceptionList.contains(key))) { - newBaseRestrictions.putBoolean(key, true); - } else { - newOwnerRestrictions.putBoolean(key, true); - } - } - - if (VERBOSE_LOG) { - Slogf.v(LOG_TAG, "origRestrictions=%s", origRestrictions); - Slogf.v(LOG_TAG, "newBaseRestrictions=%s", newBaseRestrictions); - Slogf.v(LOG_TAG, "newOwnerRestrictions=%s", newOwnerRestrictions); - } - mUserManagerInternal.setBaseUserRestrictionsByDpmsForMigration(user.getIdentifier(), - newBaseRestrictions); - - if (admin != null) { - admin.ensureUserRestrictions().clear(); - admin.ensureUserRestrictions().putAll(newOwnerRestrictions); - } else { - Slogf.w(LOG_TAG, "ActiveAdmin for DO/PO not found. user=" + user.getIdentifier()); - } - saveSettingsLocked(user.getIdentifier()); - } - /** * Fix left-over restrictions and auto-time policy during COMP -> COPE migration. * @@ -2555,27 +2419,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - private ComponentName findAdminComponentWithPackageLocked(String packageName, int userId) { - final DevicePolicyData policy = getUserData(userId); - final int n = policy.mAdminList.size(); - ComponentName found = null; - int nFound = 0; - for (int i = 0; i < n; i++) { - final ActiveAdmin admin = policy.mAdminList.get(i); - if (packageName.equals(admin.info.getPackageName())) { - // Found! - if (nFound == 0) { - found = admin.info.getComponent(); - } - nFound++; - } - } - if (nFound > 1) { - Slogf.w(LOG_TAG, "Multiple DA found; assume the first one is DO."); - } - return found; - } - /** * Set an alarm for an upcoming event - expiration warning, expiration, or post-expiration * reminders. Clears alarm if no expirations are configured. @@ -3197,7 +3040,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { private void onLockSettingsReady() { synchronized (getLockObject()) { - migrateUserRestrictionsIfNecessaryLocked(); fixupAutoTimeRestrictionDuringOrganizationOwnedDeviceMigration(); } getUserData(UserHandle.USER_SYSTEM); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java index 37da7b428148..859183c80191 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/Owners.java @@ -79,8 +79,6 @@ class Owners { private static final boolean DEBUG = false; // DO NOT SUBMIT WITH TRUE - private static final String DEVICE_OWNER_XML_LEGACY = "device_owner.xml"; - // XML storing device owner info, system update policy and pending OTA update information. private static final String DEVICE_OWNER_XML = "device_owner_2.xml"; @@ -89,7 +87,6 @@ class Owners { private static final String TAG_ROOT = "root"; private static final String TAG_DEVICE_OWNER = "device-owner"; - private static final String TAG_DEVICE_INITIALIZER = "device-initializer"; private static final String TAG_SYSTEM_UPDATE_POLICY = "system-update-policy"; private static final String TAG_FREEZE_PERIOD_RECORD = "freeze-record"; private static final String TAG_PENDING_OTA_INFO = "pending-ota-info"; @@ -107,7 +104,6 @@ class Owners { private static final String ATTR_REMOTE_BUGREPORT_URI = "remoteBugreportUri"; private static final String ATTR_REMOTE_BUGREPORT_HASH = "remoteBugreportHash"; private static final String ATTR_USERID = "userId"; - private static final String ATTR_USER_RESTRICTIONS_MIGRATED = "userRestrictionsMigrated"; private static final String ATTR_FREEZE_RECORD_START = "start"; private static final String ATTR_FREEZE_RECORD_END = "end"; // Legacy attribute, its presence would mean the profile owner associated with it is @@ -180,35 +176,14 @@ class Owners { */ void load() { synchronized (mLock) { - // First, try to read from the legacy file. - final File legacy = getLegacyConfigFile(); - final List<UserInfo> users = mUserManager.getAliveUsers(); - if (readLegacyOwnerFileLocked(legacy)) { - if (DEBUG) { - Log.d(TAG, "Legacy config file found."); - } - - // Legacy file exists, write to new files and remove the legacy one. - writeDeviceOwner(); - for (int userId : getProfileOwnerKeys()) { - writeProfileOwner(userId); - } - if (DEBUG) { - Log.d(TAG, "Deleting legacy config file"); - } - if (!legacy.delete()) { - Slog.e(TAG, "Failed to remove the legacy setting file"); - } - } else { - // No legacy file, read from the new format files. - new DeviceOwnerReadWriter().readFromFileLocked(); + new DeviceOwnerReadWriter().readFromFileLocked(); - for (UserInfo ui : users) { - new ProfileOwnerReadWriter(ui.id).readFromFileLocked(); - } + for (UserInfo ui : users) { + new ProfileOwnerReadWriter(ui.id).readFromFileLocked(); } + mUserManagerInternal.setDeviceManaged(hasDeviceOwner()); for (UserInfo ui : users) { mUserManagerInternal.setUserManaged(ui.id, hasProfileOwner(ui.id)); @@ -338,23 +313,11 @@ class Owners { return; } synchronized (mLock) { - // For a newly set DO, there's no need for migration. - setDeviceOwnerWithRestrictionsMigrated(admin, ownerName, userId, - /* userRestrictionsMigrated =*/ true); - } - } - - // Note this should be only called during migration. Normally when DO is set, - // userRestrictionsMigrated should always be true. - void setDeviceOwnerWithRestrictionsMigrated(ComponentName admin, String ownerName, int userId, - boolean userRestrictionsMigrated) { - synchronized (mLock) { // A device owner is allowed to access device identifiers. Even though this flag // is not currently checked for device owner, it is set to true here so that it is // semantically compatible with the meaning of this flag. - mDeviceOwner = new OwnerInfo(ownerName, admin, userRestrictionsMigrated, - /* remoteBugreportUri =*/ null, /* remoteBugreportHash =*/ - null, /* isOrganizationOwnedDevice =*/true); + mDeviceOwner = new OwnerInfo(ownerName, admin, /* remoteBugreportUri =*/ null, + /* remoteBugreportHash =*/ null, /* isOrganizationOwnedDevice =*/ true); mDeviceOwnerUserId = userId; mUserManagerInternal.setDeviceManaged(true); @@ -385,8 +348,8 @@ class Owners { synchronized (mLock) { // For a newly set PO, there's no need for migration. mProfileOwners.put(userId, new OwnerInfo(ownerName, admin, - /* userRestrictionsMigrated =*/ true, /* remoteBugreportUri =*/ null, - /* remoteBugreportHash =*/ null, /* isOrganizationOwnedDevice =*/ false)); + /* remoteBugreportUri =*/ null, /* remoteBugreportHash =*/ null, + /* isOrganizationOwnedDevice =*/ false)); mUserManagerInternal.setUserManaged(userId, true); notifyChangeLocked(); } @@ -404,8 +367,7 @@ class Owners { synchronized (mLock) { final OwnerInfo ownerInfo = mProfileOwners.get(userId); final OwnerInfo newOwnerInfo = new OwnerInfo(target.getPackageName(), target, - ownerInfo.userRestrictionsMigrated, ownerInfo.remoteBugreportUri, - ownerInfo.remoteBugreportHash, /* isOrganizationOwnedDevice =*/ + ownerInfo.remoteBugreportUri, ownerInfo.remoteBugreportHash, ownerInfo.isOrganizationOwnedDevice); mProfileOwners.put(userId, newOwnerInfo); notifyChangeLocked(); @@ -423,10 +385,8 @@ class Owners { } // We don't set a name because it's not used anyway. // See DevicePolicyManagerService#getDeviceOwnerName - mDeviceOwner = new OwnerInfo(null, target, - mDeviceOwner.userRestrictionsMigrated, mDeviceOwner.remoteBugreportUri, - mDeviceOwner.remoteBugreportHash, /* isOrganizationOwnedDevice =*/ - mDeviceOwner.isOrganizationOwnedDevice); + mDeviceOwner = new OwnerInfo(null, target, mDeviceOwner.remoteBugreportUri, + mDeviceOwner.remoteBugreportHash, mDeviceOwner.isOrganizationOwnedDevice); if (previousDeviceOwnerType != null) { mDeviceOwnerTypes.put(mDeviceOwner.packageName, previousDeviceOwnerType); } @@ -570,35 +530,6 @@ class Owners { } } - /** - * @return true if user restrictions need to be migrated for DO. - */ - boolean getDeviceOwnerUserRestrictionsNeedsMigration() { - synchronized (mLock) { - return mDeviceOwner != null && !mDeviceOwner.userRestrictionsMigrated; - } - } - - /** - * @return true if user restrictions need to be migrated for PO. - */ - boolean getProfileOwnerUserRestrictionsNeedsMigration(int userId) { - synchronized (mLock) { - OwnerInfo profileOwner = mProfileOwners.get(userId); - return profileOwner != null && !profileOwner.userRestrictionsMigrated; - } - } - - /** Sets the user restrictions migrated flag, and also writes to the file. */ - void setDeviceOwnerUserRestrictionsMigrated() { - synchronized (mLock) { - if (mDeviceOwner != null) { - mDeviceOwner.userRestrictionsMigrated = true; - } - writeDeviceOwner(); - } - } - /** Sets the remote bugreport uri and hash, and also writes to the file. */ void setDeviceOwnerRemoteBugreportUriAndHash(String remoteBugreportUri, String remoteBugreportHash) { @@ -611,17 +542,6 @@ class Owners { } } - /** Sets the user restrictions migrated flag, and also writes to the file. */ - void setProfileOwnerUserRestrictionsMigrated(int userId) { - synchronized (mLock) { - OwnerInfo profileOwner = mProfileOwners.get(userId); - if (profileOwner != null) { - profileOwner.userRestrictionsMigrated = true; - } - writeProfileOwner(userId); - } - } - /** Set whether the profile owner manages an organization-owned device, then write to file. */ void setProfileOwnerOfOrganizationOwnedDevice(int userId, boolean isOrganizationOwnedDevice) { synchronized (mLock) { @@ -696,72 +616,6 @@ class Owners { } } - private boolean readLegacyOwnerFileLocked(File file) { - if (!file.exists()) { - // Already migrated or the device has no owners. - return false; - } - try { - InputStream input = new AtomicFile(file).openRead(); - TypedXmlPullParser parser = Xml.resolvePullParser(input); - int type; - while ((type = parser.next()) != TypedXmlPullParser.END_DOCUMENT) { - if (type != TypedXmlPullParser.START_TAG) { - continue; - } - - String tag = parser.getName(); - if (tag.equals(TAG_DEVICE_OWNER)) { - String name = parser.getAttributeValue(null, ATTR_NAME); - String packageName = parser.getAttributeValue(null, ATTR_PACKAGE); - mDeviceOwner = new OwnerInfo(name, packageName, - /* userRestrictionsMigrated =*/ false, /* remoteBugreportUri =*/ null, - /* remoteBugreportHash =*/ null, /* isOrganizationOwnedDevice =*/ true); - mDeviceOwnerUserId = UserHandle.USER_SYSTEM; - } else if (tag.equals(TAG_DEVICE_INITIALIZER)) { - // Deprecated tag - } else if (tag.equals(TAG_PROFILE_OWNER)) { - String profileOwnerPackageName = parser.getAttributeValue(null, ATTR_PACKAGE); - String profileOwnerName = parser.getAttributeValue(null, ATTR_NAME); - String profileOwnerComponentStr = - parser.getAttributeValue(null, ATTR_COMPONENT_NAME); - int userId = parser.getAttributeInt(null, ATTR_USERID); - OwnerInfo profileOwnerInfo = null; - if (profileOwnerComponentStr != null) { - ComponentName admin = ComponentName.unflattenFromString( - profileOwnerComponentStr); - if (admin != null) { - profileOwnerInfo = new OwnerInfo(profileOwnerName, admin, - /* userRestrictionsMigrated =*/ false, null, - null, /* isOrganizationOwnedDevice =*/ false); - } else { - // This shouldn't happen but switch from package name -> component name - // might have written bad device owner files. b/17652534 - Slog.e(TAG, "Error parsing device-owner file. Bad component name " + - profileOwnerComponentStr); - } - } - if (profileOwnerInfo == null) { - profileOwnerInfo = new OwnerInfo(profileOwnerName, profileOwnerPackageName, - /* userRestrictionsMigrated =*/ false, - /* remoteBugreportUri =*/ null, /* remoteBugreportHash =*/ - null, /* isOrganizationOwnedDevice =*/ false); - } - mProfileOwners.put(userId, profileOwnerInfo); - } else if (TAG_SYSTEM_UPDATE_POLICY.equals(tag)) { - mSystemUpdatePolicy = SystemUpdatePolicy.restoreFromXml(parser); - } else { - throw new XmlPullParserException( - "Unexpected tag in device owner file: " + tag); - } - } - input.close(); - } catch (XmlPullParserException | IOException e) { - Slog.e(TAG, "Error parsing device-owner file", e); - } - return true; - } - void writeDeviceOwner() { synchronized (mLock) { if (DEBUG) { @@ -1047,9 +901,6 @@ class Owners { mDeviceOwnerUserId); break; } - case TAG_DEVICE_INITIALIZER: - // Deprecated tag - break; case TAG_SYSTEM_UPDATE_POLICY: mSystemUpdatePolicy = SystemUpdatePolicy.restoreFromXml(parser); break; @@ -1087,7 +938,6 @@ class Owners { default: Slog.e(TAG, "Unexpected tag: " + tag); return false; - } return true; } @@ -1136,30 +986,16 @@ class Owners { public final String name; public final String packageName; public final ComponentName admin; - public boolean userRestrictionsMigrated; public String remoteBugreportUri; public String remoteBugreportHash; public boolean isOrganizationOwnedDevice; - public OwnerInfo(String name, String packageName, boolean userRestrictionsMigrated, - String remoteBugreportUri, String remoteBugreportHash, - boolean isOrganizationOwnedDevice) { - this.name = name; - this.packageName = packageName; - this.admin = new ComponentName(packageName, ""); - this.userRestrictionsMigrated = userRestrictionsMigrated; - this.remoteBugreportUri = remoteBugreportUri; - this.remoteBugreportHash = remoteBugreportHash; - this.isOrganizationOwnedDevice = isOrganizationOwnedDevice; - } - - public OwnerInfo(String name, ComponentName admin, boolean userRestrictionsMigrated, + OwnerInfo(String name, ComponentName admin, String remoteBugreportUri, String remoteBugreportHash, boolean isOrganizationOwnedDevice) { this.name = name; this.admin = admin; this.packageName = admin.getPackageName(); - this.userRestrictionsMigrated = userRestrictionsMigrated; this.remoteBugreportUri = remoteBugreportUri; this.remoteBugreportHash = remoteBugreportHash; this.isOrganizationOwnedDevice = isOrganizationOwnedDevice; @@ -1167,14 +1003,12 @@ class Owners { public void writeToXml(TypedXmlSerializer out, String tag) throws IOException { out.startTag(null, tag); - out.attribute(null, ATTR_PACKAGE, packageName); if (name != null) { out.attribute(null, ATTR_NAME, name); } if (admin != null) { out.attribute(null, ATTR_COMPONENT_NAME, admin.flattenToString()); } - out.attributeBoolean(null, ATTR_USER_RESTRICTIONS_MIGRATED, userRestrictionsMigrated); if (remoteBugreportUri != null) { out.attribute(null, ATTR_REMOTE_BUGREPORT_URI, remoteBugreportUri); } @@ -1189,14 +1023,9 @@ class Owners { } public static OwnerInfo readFromXml(TypedXmlPullParser parser) { - final String packageName = parser.getAttributeValue(null, ATTR_PACKAGE); final String name = parser.getAttributeValue(null, ATTR_NAME); final String componentName = parser.getAttributeValue(null, ATTR_COMPONENT_NAME); - final String userRestrictionsMigratedStr = - parser.getAttributeValue(null, ATTR_USER_RESTRICTIONS_MIGRATED); - final boolean userRestrictionsMigrated = - ("true".equals(userRestrictionsMigratedStr)); final String remoteBugreportUri = parser.getAttributeValue(null, ATTR_REMOTE_BUGREPORT_URI); final String remoteBugreportHash = parser.getAttributeValue(null, @@ -1210,23 +1039,18 @@ class Owners { final boolean isOrgOwnedDevice = ("true".equals(isOrgOwnedDeviceStr)) | canAccessDeviceIds; - // Has component name? If so, return [name, component] - if (componentName != null) { - final ComponentName admin = ComponentName.unflattenFromString(componentName); - if (admin != null) { - return new OwnerInfo(name, admin, userRestrictionsMigrated, - remoteBugreportUri, remoteBugreportHash, isOrgOwnedDevice); - } else { - // This shouldn't happen but switch from package name -> component name - // might have written bad device owner files. b/17652534 - Slog.e(TAG, "Error parsing owner file. Bad component name " + - componentName); - } + if (componentName == null) { + Slog.e(TAG, "Owner component not found"); + return null; + } + final ComponentName admin = ComponentName.unflattenFromString(componentName); + if (admin == null) { + Slog.e(TAG, "Owner component not parsable: " + componentName); + return null; } - // Else, build with [name, package] - return new OwnerInfo(name, packageName, userRestrictionsMigrated, remoteBugreportUri, - remoteBugreportHash, isOrgOwnedDevice); + return new OwnerInfo( + name, admin, remoteBugreportUri, remoteBugreportHash, isOrgOwnedDevice); } public void dump(IndentingPrintWriter pw) { @@ -1284,11 +1108,6 @@ class Owners { } @VisibleForTesting - File getLegacyConfigFile() { - return new File(mInjector.environmentGetDataSystemDirectory(), DEVICE_OWNER_XML_LEGACY); - } - - @VisibleForTesting File getDeviceOwnerFile() { return new File(mInjector.environmentGetDataSystemDirectory(), DEVICE_OWNER_XML); } diff --git a/services/tests/servicestests/assets/OwnersTest/device_owner_1.xml b/services/tests/servicestests/assets/OwnersTest/device_owner_1.xml new file mode 100644 index 000000000000..d150b293fb08 --- /dev/null +++ b/services/tests/servicestests/assets/OwnersTest/device_owner_1.xml @@ -0,0 +1,6 @@ +<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> +<root> + <device-owner package="com.afwsamples.testdpc" name="" component="com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver" isPoOrganizationOwnedDevice="true" /> + <device-owner-context userId="0" /> + <system-update-policy policy_type="2" install_window_start="0" install_window_end="540" /> +</root>
\ No newline at end of file diff --git a/services/tests/servicestests/assets/OwnersTest/profile_owner_1.xml b/services/tests/servicestests/assets/OwnersTest/profile_owner_1.xml new file mode 100644 index 000000000000..1f78b711ddab --- /dev/null +++ b/services/tests/servicestests/assets/OwnersTest/profile_owner_1.xml @@ -0,0 +1,4 @@ +<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> +<root> + <profile-owner package="com.afwsamples.testdpc" name="com.afwsamples.testdpc" component="com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver" /> +</root>
\ No newline at end of file diff --git a/services/tests/servicestests/assets/OwnersTest/test01/input.xml b/services/tests/servicestests/assets/OwnersTest/test01/input.xml deleted file mode 100644 index db3e974f5d07..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test01/input.xml +++ /dev/null @@ -1 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> diff --git a/services/tests/servicestests/assets/OwnersTest/test02/input.xml b/services/tests/servicestests/assets/OwnersTest/test02/input.xml deleted file mode 100644 index 321842b27452..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test02/input.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> -<device-owner package="com.google.android.testdpc" /> diff --git a/services/tests/servicestests/assets/OwnersTest/test03/input.xml b/services/tests/servicestests/assets/OwnersTest/test03/input.xml deleted file mode 100644 index 1bbfdadf6ebb..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test03/input.xml +++ /dev/null @@ -1,3 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> -<profile-owner package="com.google.android.testdpc0" name="0" userId="10" component="com.google.android.testdpc/com.google.android.testdpc.DeviceAdminReceiver0" /> -<profile-owner package="com.google.android.testdpc1" name="1" userId="11" /> diff --git a/services/tests/servicestests/assets/OwnersTest/test04/input.xml b/services/tests/servicestests/assets/OwnersTest/test04/input.xml deleted file mode 100644 index 8be51d9a45e9..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test04/input.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> -<device-owner package="com.google.android.testdpc" /> -<profile-owner package="com.google.android.testdpc0" name="0" userId="10" component="com.google.android.testdpc/com.google.android.testdpc.DeviceAdminReceiver0" /> -<profile-owner package="com.google.android.testdpc1" name="1" userId="11" /> -<device-initializer package="com.google.android.testdpcx" name="di" component="com.google.android.testdpcx/receiver" /> -<system-update-policy policy_type="5" /> diff --git a/services/tests/servicestests/assets/OwnersTest/test05/input.xml b/services/tests/servicestests/assets/OwnersTest/test05/input.xml deleted file mode 100644 index dbcb8588654e..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test05/input.xml +++ /dev/null @@ -1,3 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> -<device-initializer package="com.google.android.testdpcx" name="di" component="com.google.android.testdpcx/receiver" /> - diff --git a/services/tests/servicestests/assets/OwnersTest/test06/input.xml b/services/tests/servicestests/assets/OwnersTest/test06/input.xml deleted file mode 100644 index 794622b0b995..000000000000 --- a/services/tests/servicestests/assets/OwnersTest/test06/input.xml +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version='1.0' encoding='utf-8' standalone='yes' ?> -<system-update-policy policy_type="5" /> diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java index 9ba7a9ac0e2e..8bb619f1976a 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceMigrationTest.java @@ -27,7 +27,6 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,7 +36,6 @@ import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; -import android.os.Bundle; import android.os.IpcDataCache; import android.os.UserHandle; import android.os.UserManager; @@ -55,8 +53,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.io.File; -import java.util.HashMap; -import java.util.Map; import java.util.Set; @Presubmit @@ -87,226 +83,9 @@ public class DevicePolicyManagerServiceMigrationTest extends DpmTestBase { .thenReturn(true); } - @Test - public void testMigration() throws Exception { - final File user10dir = getServices().addUser(10, 0, USER_TYPE_EMPTY); - final File user11dir = getServices().addUser(11, 0, - UserManager.USER_TYPE_PROFILE_MANAGED); - getServices().addUser(12, 0, USER_TYPE_EMPTY); - - setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID); - setUpPackageManagerForAdmin(admin2, UserHandle.getUid(10, 123)); - setUpPackageManagerForAdmin(admin3, UserHandle.getUid(11, 456)); - - // Create the legacy owners & policies file. - DpmTestUtils.writeToFile( - (new File(getServices().dataDir, "device_owner.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest/legacy_device_owner.xml")); - - DpmTestUtils.writeToFile( - (new File(getServices().systemUserDataDir, "device_policies.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest/legacy_device_policies.xml")); - - DpmTestUtils.writeToFile( - (new File(user10dir, "device_policies.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest/legacy_device_policies_10.xml")); - DpmTestUtils.writeToFile( - (new File(user11dir, "device_policies.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest/legacy_device_policies_11.xml")); - - // Set up UserManager - when(getServices().userManagerInternal.getBaseUserRestrictions( - eq(USER_SYSTEM))).thenReturn(DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_RECORD_AUDIO)); - - when(getServices().userManagerInternal.getBaseUserRestrictions( - eq(10))).thenReturn(DpmTestUtils.newRestrictions( - UserManager.DISALLOW_REMOVE_USER, - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS, - UserManager.DISALLOW_WALLPAPER, - UserManager.DISALLOW_RECORD_AUDIO)); - - when(getServices().userManagerInternal.getBaseUserRestrictions( - eq(11))).thenReturn(DpmTestUtils.newRestrictions( - UserManager.DISALLOW_REMOVE_USER, - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS, - UserManager.DISALLOW_WALLPAPER, - UserManager.DISALLOW_RECORD_AUDIO)); - - final Map<Integer, Bundle> newBaseRestrictions = new HashMap<>(); - - doAnswer(invocation -> { - Integer userId = (Integer) invocation.getArguments()[0]; - Bundle bundle = (Bundle) invocation.getArguments()[1]; - - newBaseRestrictions.put(userId, bundle); - - return null; - }).when(getServices().userManagerInternal).setBaseUserRestrictionsByDpmsForMigration( - anyInt(), any(Bundle.class)); - - // Initialize DPM/DPMS and let it migrate the persisted information. - // (Need clearCallingIdentity() to pass permission checks.) - - final DevicePolicyManagerServiceTestable dpms; - - final long ident = mContext.binder.clearCallingIdentity(); - try { - dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext); - - dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY); - dpms.systemReady(SystemService.PHASE_BOOT_COMPLETED); - } finally { - mContext.binder.restoreCallingIdentity(ident); - } - - assertThat(dpms.mOwners.hasDeviceOwner()).isTrue(); - assertThat(dpms.mOwners.hasProfileOwner(USER_SYSTEM)).isFalse(); - assertThat(dpms.mOwners.hasProfileOwner(10)).isTrue(); - assertThat(dpms.mOwners.hasProfileOwner(11)).isTrue(); - assertThat(dpms.mOwners.hasProfileOwner(12)).isFalse(); - - // Now all information should be migrated. - assertThat(dpms.mOwners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(dpms.mOwners.getProfileOwnerUserRestrictionsNeedsMigration(USER_SYSTEM)) - .isFalse(); - assertThat(dpms.mOwners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(dpms.mOwners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(dpms.mOwners.getProfileOwnerUserRestrictionsNeedsMigration(12)).isFalse(); - - // Check the new base restrictions. - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_RECORD_AUDIO - ), - newBaseRestrictions.get(USER_SYSTEM)); - - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS, - UserManager.DISALLOW_RECORD_AUDIO, - UserManager.DISALLOW_WALLPAPER - ), - newBaseRestrictions.get(10)); - - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS, - UserManager.DISALLOW_WALLPAPER, - UserManager.DISALLOW_RECORD_AUDIO - ), - newBaseRestrictions.get(11)); - - // Check the new owner restrictions. - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER - ), - dpms.getDeviceOwnerAdminLocked().ensureUserRestrictions()); - - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_REMOVE_USER - ), - dpms.getProfileOwnerAdminLocked(10).ensureUserRestrictions()); - - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_REMOVE_USER - ), - dpms.getProfileOwnerAdminLocked(11).ensureUserRestrictions()); - } - - @Test - public void testMigration2_profileOwnerOnUser0() throws Exception { - setUpPackageManagerForAdmin(admin2, DpmMockContext.CALLER_SYSTEM_USER_UID); - - // Create the legacy owners & policies file. - DpmTestUtils.writeToFile( - (new File(getServices().dataDir, "device_owner.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest2/legacy_device_owner.xml")); - - DpmTestUtils.writeToFile( - (new File(getServices().systemUserDataDir, "device_policies.xml")).getAbsoluteFile(), - DpmTestUtils.readAsset(mRealTestContext, - "DevicePolicyManagerServiceMigrationTest2/legacy_device_policies.xml")); - - // Set up UserManager - when(getServices().userManagerInternal.getBaseUserRestrictions( - eq(USER_SYSTEM))).thenReturn(DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_RECORD_AUDIO, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS)); - - final Map<Integer, Bundle> newBaseRestrictions = new HashMap<>(); - - doAnswer(invocation -> { - Integer userId = (Integer) invocation.getArguments()[0]; - Bundle bundle = (Bundle) invocation.getArguments()[1]; - - newBaseRestrictions.put(userId, bundle); - - return null; - }).when(getServices().userManagerInternal).setBaseUserRestrictionsByDpmsForMigration( - anyInt(), any(Bundle.class)); - - // Initialize DPM/DPMS and let it migrate the persisted information. - // (Need clearCallingIdentity() to pass permission checks.) - - final DevicePolicyManagerServiceTestable dpms; - - final long ident = mContext.binder.clearCallingIdentity(); - try { - dpms = new DevicePolicyManagerServiceTestable(getServices(), mContext); - - dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY); - dpms.systemReady(SystemService.PHASE_BOOT_COMPLETED); - } finally { - mContext.binder.restoreCallingIdentity(ident); - } - assertThat(dpms.mOwners.hasDeviceOwner()).isFalse(); - assertThat(dpms.mOwners.hasProfileOwner(USER_SYSTEM)).isTrue(); - - // Now all information should be migrated. - assertThat(dpms.mOwners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(dpms.mOwners.getProfileOwnerUserRestrictionsNeedsMigration(USER_SYSTEM)) - .isFalse(); - - // Check the new base restrictions. - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_RECORD_AUDIO - ), - newBaseRestrictions.get(USER_SYSTEM)); - - // Check the new owner restrictions. - DpmTestUtils.assertRestrictions( - DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADD_USER, - UserManager.DISALLOW_SMS, - UserManager.DISALLOW_OUTGOING_CALLS - ), - dpms.getProfileOwnerAdminLocked(USER_SYSTEM).ensureUserRestrictions()); - } - // Test setting default restrictions for managed profile. @Test - public void testMigration3_managedProfileOwner() throws Exception { + public void testMigration_managedProfileOwner() throws Exception { // Create a managed profile user. final File user10dir = getServices().addUser(10, 0, UserManager.USER_TYPE_PROFILE_MANAGED); diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 7b11876d0aa9..45d101a4a426 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -1665,39 +1665,6 @@ public class DevicePolicyManagerTest extends DpmTestBase { assertThat(deviceOwner.getUid()).isEqualTo(DpmMockContext.CALLER_SYSTEM_USER_UID); } - /** - * This essentially tests - * {@code DevicePolicyManagerService.findOwnerComponentIfNecessaryLocked()}. (which is - * private.) - * - * We didn't use to persist the DO component class name, but now we do, and the above method - * finds the right component from a package name upon migration. - */ - @Test - public void testDeviceOwnerMigration() throws Exception { - checkDeviceOwnerWithMultipleDeviceAdmins(); - - // Overwrite the device owner setting and clears the class name. - dpms.mOwners.setDeviceOwner( - new ComponentName(admin2.getPackageName(), ""), - "owner-name", CALLER_USER_HANDLE); - dpms.mOwners.writeDeviceOwner(); - - // Make sure the DO component name doesn't have a class name. - assertThat(dpms.getDeviceOwnerComponent(/* callingUserOnly= */ false).getClassName()) - .isEmpty(); - - // Then create a new DPMS to have it load the settings from files. - when(getServices().userManager.getUserRestrictions(any(UserHandle.class))) - .thenReturn(new Bundle()); - initializeDpms(); - - // Now the DO component name is a full name. - // *BUT* because both admin1 and admin2 belong to the same package, we think admin1 is the - // DO. - assertThat(dpms.getDeviceOwnerComponent(/* callingUserOnly =*/ false)).isEqualTo(admin1); - } - @Test public void testSetGetApplicationRestriction() { setAsProfileOwner(admin1); diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java index d1706f857c13..37ba8a42da86 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/OwnersTest.java @@ -18,29 +18,22 @@ package com.android.server.devicepolicy; import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_DEFAULT; import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED; +import static android.app.admin.SystemUpdatePolicy.TYPE_INSTALL_WINDOWED; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.verify; - import android.content.ComponentName; import android.os.IpcDataCache; -import android.os.UserHandle; import android.test.suitebuilder.annotation.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.server.devicepolicy.DevicePolicyManagerServiceTestable.OwnersTestable; -import com.google.android.collect.Lists; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import java.util.ArrayList; -import java.util.List; - /** * Tests for the DeviceOwner object that saves & loads device and policy owner information. * @@ -52,8 +45,7 @@ import java.util.List; @RunWith(AndroidJUnit4.class) public class OwnersTest extends DpmTestBase { - private static final List<String> DEVICE_OWNER_PROTECTED_PACKAGES = - Lists.newArrayList("package_1", "package_2"); + private static final String TESTDPC_PACKAGE = "com.afwsamples.testdpc"; @Before public void setUp() throws Exception { @@ -63,572 +55,66 @@ public class OwnersTest extends DpmTestBase { } @Test - public void testUpgrade01() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test01/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - // File was empty, so no new files should be created. - assertThat(owners.getDeviceOwnerFile().exists()).isFalse(); - - assertThat(owners.getProfileOwnerFile(10).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(11).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(21).exists()).isFalse(); - - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - - owners.setDeviceOwnerType(owners.getDeviceOwnerPackageName(), - DEVICE_OWNER_TYPE_FINANCED, /* isAdminTestOnly= */ false); - // There is no device owner, so the default owner type should be returned. - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - } - - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - } - - @Test - public void testUpgrade02() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test02/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - assertThat(owners.getDeviceOwnerFile().exists()).isTrue(); // TODO Check content - - assertThat(owners.getProfileOwnerFile(10).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(11).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(21).exists()).isFalse(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerName()).isEqualTo(null); - assertThat(owners.getDeviceOwnerPackageName()).isEqualTo("com.google.android.testdpc"); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_SYSTEM); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerName()).isEqualTo(null); - assertThat(owners.getDeviceOwnerPackageName()).isEqualTo("com.google.android.testdpc"); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_SYSTEM); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - } - - @Test - public void testUpgrade03() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test03/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - assertThat(owners.getDeviceOwnerFile().exists()).isFalse(); - - assertThat(owners.getProfileOwnerFile(10).exists()).isTrue(); - assertThat(owners.getProfileOwnerFile(11).exists()).isTrue(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(21).exists()).isFalse(); - - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getProfileOwnerKeys()).hasSize(2); - assertThat(owners.getProfileOwnerComponent(10)) - .isEqualTo(new ComponentName("com.google.android.testdpc", - "com.google.android.testdpc.DeviceAdminReceiver0")); - assertThat(owners.getProfileOwnerName(10)).isEqualTo("0"); - assertThat(owners.getProfileOwnerPackage(10)).isEqualTo("com.google.android.testdpc"); - - assertThat(owners.getProfileOwnerComponent(11)) - .isEqualTo(new ComponentName("com.google.android.testdpc1", "")); - assertThat(owners.getProfileOwnerName(11)).isEqualTo("1"); - assertThat(owners.getProfileOwnerPackage(11)).isEqualTo("com.google.android.testdpc1"); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getProfileOwnerKeys()).hasSize(2); - assertThat(owners.getProfileOwnerComponent(10)) - .isEqualTo(new ComponentName("com.google.android.testdpc", - "com.google.android.testdpc.DeviceAdminReceiver0")); - assertThat(owners.getProfileOwnerName(10)).isEqualTo("0"); - assertThat(owners.getProfileOwnerPackage(10)).isEqualTo("com.google.android.testdpc"); - - assertThat(owners.getProfileOwnerComponent(11)) - .isEqualTo(new ComponentName("com.google.android.testdpc1", "")); - assertThat(owners.getProfileOwnerName(11)).isEqualTo("1"); - assertThat(owners.getProfileOwnerPackage(11)).isEqualTo("com.google.android.testdpc1"); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - } - - /** - * Note this also tests {@link Owners#setDeviceOwnerUserRestrictionsMigrated()} - * and {@link Owners#setProfileOwnerUserRestrictionsMigrated(int)}. - */ - @Test - public void testUpgrade04() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test04/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - assertThat(owners.getDeviceOwnerFile().exists()).isTrue(); - - assertThat(owners.getProfileOwnerFile(10).exists()).isTrue(); - assertThat(owners.getProfileOwnerFile(11).exists()).isTrue(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(21).exists()).isFalse(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerName()).isEqualTo(null); - assertThat(owners.getDeviceOwnerPackageName()).isEqualTo("com.google.android.testdpc"); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_SYSTEM); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getSystemUpdatePolicy()).isNotNull(); - assertThat(owners.getSystemUpdatePolicy().getPolicyType()).isEqualTo(5); - - assertThat(owners.getProfileOwnerKeys()).hasSize(2); - assertThat(owners.getProfileOwnerComponent(10)) - .isEqualTo(new ComponentName("com.google.android.testdpc", - "com.google.android.testdpc.DeviceAdminReceiver0")); - assertThat(owners.getProfileOwnerName(10)).isEqualTo("0"); - assertThat(owners.getProfileOwnerPackage(10)).isEqualTo("com.google.android.testdpc"); - - assertThat(owners.getProfileOwnerComponent(11)) - .isEqualTo(new ComponentName("com.google.android.testdpc1", "")); - assertThat(owners.getProfileOwnerName(11)).isEqualTo("1"); - assertThat(owners.getProfileOwnerPackage(11)).isEqualTo("com.google.android.testdpc1"); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerName()).isEqualTo(null); - assertThat(owners.getDeviceOwnerPackageName()).isEqualTo("com.google.android.testdpc"); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_SYSTEM); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getSystemUpdatePolicy()).isNotNull(); - assertThat(owners.getSystemUpdatePolicy().getPolicyType()).isEqualTo(5); - - assertThat(owners.getProfileOwnerKeys()).hasSize(2); - assertThat(owners.getProfileOwnerComponent(10)) - .isEqualTo(new ComponentName("com.google.android.testdpc", - "com.google.android.testdpc.DeviceAdminReceiver0")); - assertThat(owners.getProfileOwnerName(10)).isEqualTo("0"); - assertThat(owners.getProfileOwnerPackage(10)).isEqualTo("com.google.android.testdpc"); - - assertThat(owners.getProfileOwnerComponent(11)) - .isEqualTo(new ComponentName("com.google.android.testdpc1", "")); - assertThat(owners.getProfileOwnerName(11)).isEqualTo("1"); - assertThat(owners.getProfileOwnerPackage(11)).isEqualTo("com.google.android.testdpc1"); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - - owners.setDeviceOwnerUserRestrictionsMigrated(); - - owners.setDeviceOwnerType(owners.getDeviceOwnerPackageName(), - DEVICE_OWNER_TYPE_FINANCED, /* isAdminTestOnly= */ false); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_FINANCED); - - owners.setDeviceOwnerProtectedPackages( - owners.getDeviceOwnerPackageName(), DEVICE_OWNER_PROTECTED_PACKAGES); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEqualTo(DEVICE_OWNER_PROTECTED_PACKAGES); - verify(getServices().packageManagerInternal) - .setDeviceOwnerProtectedPackages( - owners.getDeviceOwnerPackageName(), DEVICE_OWNER_PROTECTED_PACKAGES); - } - - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_FINANCED); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEqualTo(DEVICE_OWNER_PROTECTED_PACKAGES); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - - owners.setProfileOwnerUserRestrictionsMigrated(11); - - owners.setDeviceOwnerType(owners.getDeviceOwnerPackageName(), - DEVICE_OWNER_TYPE_DEFAULT, /* isAdminTestOnly= */ false); - // The previous device owner type should persist. - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_FINANCED); - - owners.setDeviceOwnerProtectedPackages( - owners.getDeviceOwnerPackageName(), new ArrayList<>()); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - verify(getServices().packageManagerInternal) - .setDeviceOwnerProtectedPackages( - owners.getDeviceOwnerPackageName(), new ArrayList<>()); - } - - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); - - assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_FINANCED); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isTrue(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - - owners.setProfileOwnerUserRestrictionsMigrated(11); - } - } - - @Test - public void testUpgrade05() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test05/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - // Note device initializer is no longer supported. No need to write the DO file. - assertThat(owners.getDeviceOwnerFile().exists()).isFalse(); - - assertThat(owners.getProfileOwnerFile(10).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(11).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); + public void loadProfileOwner() throws Exception { + getServices().addUsers(10); - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - - - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } - - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); + final OwnersTestable owners = new OwnersTestable(getServices()); - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); + DpmTestUtils.writeToFile(owners.getProfileOwnerFile(10), + DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/profile_owner_1.xml")); + owners.load(); - assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); + assertThat(owners.hasDeviceOwner()).isFalse(); + assertThat(owners.getSystemUpdatePolicy()).isNull(); - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } + assertThat(owners.getProfileOwnerKeys()).hasSize(1); + assertThat(owners.getProfileOwnerComponent(10)) + .isEqualTo(new ComponentName(TESTDPC_PACKAGE, + "com.afwsamples.testdpc.DeviceAdminReceiver")); } @Test - public void testUpgrade06() throws Exception { - getServices().addUsers(10, 11, 20, 21); - - // First, migrate. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test06/input.xml")); - - owners.load(); - - // The legacy file should be removed. - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - assertThat(owners.getDeviceOwnerFile().exists()).isTrue(); - - assertThat(owners.getProfileOwnerFile(10).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(11).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(20).exists()).isFalse(); - - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); - - assertThat(owners.getSystemUpdatePolicy()).isNotNull(); - assertThat(owners.getSystemUpdatePolicy().getPolicyType()).isEqualTo(5); + public void loadDeviceOwner() throws Exception { + final OwnersTestable owners = new OwnersTestable(getServices()); - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } + DpmTestUtils.writeToFile(owners.getDeviceOwnerFile(), + DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/device_owner_1.xml")); - // Then re-read and check. - { - final OwnersTestable owners = new OwnersTestable(getServices()); - owners.load(); + owners.load(); - assertThat(owners.hasDeviceOwner()).isFalse(); - assertThat(owners.getDeviceOwnerUserId()).isEqualTo(UserHandle.USER_NULL); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - assertThat(owners.getProfileOwnerKeys()).isEmpty(); + assertThat(owners.hasDeviceOwner()).isTrue(); - assertThat(owners.getSystemUpdatePolicy()).isNotNull(); - assertThat(owners.getSystemUpdatePolicy().getPolicyType()).isEqualTo(5); + assertThat(owners.getProfileOwnerKeys()).hasSize(0); + assertThat(owners.getDeviceOwnerComponent()) + .isEqualTo(new ComponentName(TESTDPC_PACKAGE, + "com.afwsamples.testdpc.DeviceAdminReceiver")); - assertThat(owners.getDeviceOwnerUserRestrictionsNeedsMigration()).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)).isFalse(); - assertThat(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)).isFalse(); - } + assertThat(owners.getSystemUpdatePolicy().getPolicyType()).isEqualTo(TYPE_INSTALL_WINDOWED); } @Test - public void testRemoveExistingFiles() throws Exception { - getServices().addUsers(10, 11, 20, 21); - + public void testDeviceOwnerType() throws Exception { final OwnersTestable owners = new OwnersTestable(getServices()); - // First, migrate to create new-style config files. - DpmTestUtils.writeToFile(owners.getLegacyConfigFile(), - DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test04/input.xml")); + DpmTestUtils.writeToFile(owners.getDeviceOwnerFile(), + DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/device_owner_1.xml")); owners.load(); - assertThat(owners.getLegacyConfigFile().exists()).isFalse(); - - assertThat(owners.getDeviceOwnerFile().exists()).isTrue(); - assertThat(owners.getDeviceOwnerType(owners.getDeviceOwnerPackageName())).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(owners.getDeviceOwnerPackageName())) - .isEmpty(); - assertThat(owners.getProfileOwnerFile(10).exists()).isTrue(); - assertThat(owners.getProfileOwnerFile(11).exists()).isTrue(); - - String previousDeviceOwnerPackageName = owners.getDeviceOwnerPackageName(); - owners.setDeviceOwnerType(previousDeviceOwnerPackageName, DEVICE_OWNER_TYPE_FINANCED, - /* isAdminTestOnly= */ false); - assertThat(owners.getDeviceOwnerType(previousDeviceOwnerPackageName)).isEqualTo( - DEVICE_OWNER_TYPE_FINANCED); - owners.setDeviceOwnerProtectedPackages( - previousDeviceOwnerPackageName, DEVICE_OWNER_PROTECTED_PACKAGES); - assertThat(owners.getDeviceOwnerProtectedPackages(previousDeviceOwnerPackageName)) - .isEqualTo(DEVICE_OWNER_PROTECTED_PACKAGES); - verify(getServices().packageManagerInternal) - .setDeviceOwnerProtectedPackages( - owners.getDeviceOwnerPackageName(), DEVICE_OWNER_PROTECTED_PACKAGES); - - // Then clear all information and save. - owners.clearDeviceOwner(); - owners.clearSystemUpdatePolicy(); - owners.removeProfileOwner(10); - owners.removeProfileOwner(11); - - owners.writeDeviceOwner(); - owners.writeProfileOwner(10); - owners.writeProfileOwner(11); - owners.writeProfileOwner(20); - owners.writeProfileOwner(21); + assertThat(owners.getDeviceOwnerType(TESTDPC_PACKAGE)) + .isEqualTo(DEVICE_OWNER_TYPE_DEFAULT); - // Now all files should be removed. - assertThat(owners.getDeviceOwnerFile().exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(10).exists()).isFalse(); - assertThat(owners.getProfileOwnerFile(11).exists()).isFalse(); + // Should be able to set DO type to "financed". + owners.setDeviceOwnerType( + TESTDPC_PACKAGE, DEVICE_OWNER_TYPE_FINANCED, /* isAdminTestOnly= */ false); + assertThat(owners.getDeviceOwnerType(TESTDPC_PACKAGE)) + .isEqualTo(DEVICE_OWNER_TYPE_FINANCED); - assertThat(owners.getDeviceOwnerType(previousDeviceOwnerPackageName)).isEqualTo( - DEVICE_OWNER_TYPE_DEFAULT); - assertThat(owners.getDeviceOwnerProtectedPackages(previousDeviceOwnerPackageName)) - .isEmpty(); - verify(getServices().packageManagerInternal) - .setDeviceOwnerProtectedPackages( - previousDeviceOwnerPackageName, new ArrayList<>()); + // Once set, DO type cannot be changed. + owners.setDeviceOwnerType( + TESTDPC_PACKAGE, DEVICE_OWNER_TYPE_DEFAULT, /* isAdminTestOnly= */ false); + assertThat(owners.getDeviceOwnerType(TESTDPC_PACKAGE)) + .isEqualTo(DEVICE_OWNER_TYPE_FINANCED); } } |