Merge "Extend set user protected packages for multi-user" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-05-19 15:14:39 +00:00
committed by Android (Google) Code Review
7 changed files with 220 additions and 45 deletions

View File

@@ -382,10 +382,10 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP
int deviceOwnerUserId, String deviceOwner, SparseArray<String> profileOwners);
/**
* Called by DevicePolicyManagerService to set the package names protected by the device
* owner.
* Called by Owners to set the package names protected by the device owner.
*/
public abstract void setDeviceOwnerProtectedPackages(List<String> packageNames);
public abstract void setDeviceOwnerProtectedPackages(
String deviceOwnerPackageName, List<String> packageNames);
/**
* Returns {@code true} if a given package can't be wiped. Otherwise, returns {@code false}.

View File

@@ -26514,8 +26514,10 @@ public class PackageManagerService extends IPackageManager.Stub
}
@Override
public void setDeviceOwnerProtectedPackages(List<String> packageNames) {
mProtectedPackages.setDeviceOwnerProtectedPackages(packageNames);
public void setDeviceOwnerProtectedPackages(
String deviceOwnerPackageName, List<String> packageNames) {
mProtectedPackages.setDeviceOwnerProtectedPackages(
deviceOwnerPackageName, packageNames);
}
@Override

View File

@@ -20,14 +20,15 @@ import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.content.Context;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.SparseArray;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
* Manages package names that need special protection.
@@ -55,7 +56,7 @@ public class ProtectedPackages {
@Nullable
@GuardedBy("this")
private List<String> mDeviceOwnerProtectedPackages;
private final ArrayMap<String, Set<String>> mDeviceOwnerProtectedPackages = new ArrayMap<>();
private final Context mContext;
@@ -78,8 +79,14 @@ public class ProtectedPackages {
: profileOwnerPackages.clone();
}
public synchronized void setDeviceOwnerProtectedPackages(List<String> packageNames) {
mDeviceOwnerProtectedPackages = new ArrayList<String>(packageNames);
/** Sets the protected packages for the device owner. */
public synchronized void setDeviceOwnerProtectedPackages(
String deviceOwnerPackageName, List<String> packageNames) {
if (packageNames.isEmpty()) {
mDeviceOwnerProtectedPackages.remove(deviceOwnerPackageName);
} else {
mDeviceOwnerProtectedPackages.put(deviceOwnerPackageName, new ArraySet<>(packageNames));
}
}
private synchronized boolean hasDeviceOwnerOrProfileOwner(int userId, String packageName) {
@@ -118,7 +125,17 @@ public class ProtectedPackages {
*/
private synchronized boolean isProtectedPackage(String packageName) {
return packageName != null && (packageName.equals(mDeviceProvisioningPackage)
|| ArrayUtils.contains(mDeviceOwnerProtectedPackages, packageName));
|| isDeviceOwnerProtectedPackage(packageName));
}
/** Returns {@code true} if the given package is a protected package set by any device owner. */
private synchronized boolean isDeviceOwnerProtectedPackage(String packageName) {
for (Set<String> protectedPackages : mDeviceOwnerProtectedPackages.values()) {
if (protectedPackages.contains(packageName)) {
return true;
}
}
return false;
}
/**

View File

@@ -1754,11 +1754,38 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
if (userHandle == UserHandle.USER_SYSTEM) {
mStateCache.setDeviceProvisioned(policy.mUserSetupComplete);
}
migrateDeviceOwnerProtectedPackagesToOwners(userHandle, policy);
}
return policy;
}
}
/**
* Only used by {@link #getUserData(int)} to migrate <b>existing</b> device owner protected
* packages that were stored in {@link DevicePolicyData#mUserControlDisabledPackages} to
* {@link Owners} because the device owner protected packages are now stored on a per device
* owner basis instead of on a per user basis.
*
* Any calls to {@link #setUserControlDisabledPackages(ComponentName, List)} would now store
* the device owner protected packages in {@link Owners} instead of {@link DevicePolicyData}.
* @param userHandle The device owner user
* @param policy The policy data of the device owner user
*/
private void migrateDeviceOwnerProtectedPackagesToOwners(
int userHandle, DevicePolicyData policy) {
ComponentName deviceOwnerComponent = getOwnerComponent(userHandle);
if (isDeviceOwner(deviceOwnerComponent, userHandle)
&& !policy.mUserControlDisabledPackages.isEmpty()) {
mOwners.setDeviceOwnerProtectedPackages(
deviceOwnerComponent.getPackageName(),
policy.mUserControlDisabledPackages);
policy.mUserControlDisabledPackages = new ArrayList<>();
saveSettingsLocked(userHandle);
}
}
/**
* Creates and loads the policy data from xml for data that is shared between
* various profiles of a user. In contrast to {@link #getUserData(int)}
@@ -2863,7 +2890,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
updateMaximumTimeToLockLocked(userHandle);
updateLockTaskPackagesLocked(policy.mLockTaskPackages, userHandle);
updateLockTaskFeaturesLocked(policy.mLockTaskFeatures, userHandle);
updateUserControlDisabledPackagesLocked(policy.mUserControlDisabledPackages);
if (policy.mStatusBarDisabled) {
setStatusBarDisabledInternal(policy.mStatusBarDisabled, userHandle);
}
@@ -2907,10 +2933,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
}
private void updateUserControlDisabledPackagesLocked(List<String> packages) {
mInjector.getPackageManagerInternal().setDeviceOwnerProtectedPackages(packages);
}
private void updateLockTaskFeaturesLocked(int flags, int userId) {
long ident = mInjector.binderClearCallingIdentity();
try {
@@ -8759,7 +8781,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
updateLockTaskPackagesLocked(policy.mLockTaskPackages, userId);
policy.mLockTaskFeatures = DevicePolicyManager.LOCK_TASK_FEATURE_NONE;
policy.mUserControlDisabledPackages.clear();
updateUserControlDisabledPackagesLocked(policy.mUserControlDisabledPackages);
saveSettingsLocked(userId);
try {
@@ -16199,14 +16220,14 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
@Override
public void setUserControlDisabledPackages(ComponentName who, List<String> packages) {
Objects.requireNonNull(who, "ComponentName is null");
Preconditions.checkNotNull(packages, "packages is null");
Objects.requireNonNull(packages, "packages is null");
final CallerIdentity caller = getCallerIdentity(who);
Preconditions.checkCallAuthorization(isDeviceOwner(caller));
checkCanExecuteOrThrowUnsafe(
DevicePolicyManager.OPERATION_SET_USER_CONTROL_DISABLED_PACKAGES);
synchronized (getLockObject()) {
setUserControlDisabledPackagesLocked(caller.getUserId(), packages);
mOwners.setDeviceOwnerProtectedPackages(who.getPackageName(), packages);
DevicePolicyEventLogger
.createEvent(DevicePolicyEnums.SET_USER_CONTROL_DISABLED_PACKAGES)
.setAdmin(who)
@@ -16215,15 +16236,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
}
}
private void setUserControlDisabledPackagesLocked(int userHandle, List<String> packages) {
final DevicePolicyData policy = getUserData(userHandle);
policy.mUserControlDisabledPackages = packages;
// Store the settings persistently.
saveSettingsLocked(userHandle);
updateUserControlDisabledPackagesLocked(packages);
}
@Override
public List<String> getUserControlDisabledPackages(ComponentName who) {
Objects.requireNonNull(who, "ComponentName is null");
@@ -16232,9 +16244,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
Preconditions.checkCallAuthorization(isDeviceOwner(caller));
synchronized (getLockObject()) {
final List<String> packages =
getUserData(caller.getUserId()).mUserControlDisabledPackages;
return packages == null ? Collections.EMPTY_LIST : packages;
return mOwners.getDeviceOwnerProtectedPackages(who.getPackageName());
}
}

View File

@@ -62,6 +62,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -97,10 +98,13 @@ class Owners {
// Holds "context" for device-owner, this must not be show up before device-owner.
private static final String TAG_DEVICE_OWNER_CONTEXT = "device-owner-context";
private static final String TAG_DEVICE_OWNER_TYPE = "device-owner-type";
private static final String TAG_DEVICE_OWNER_PROTECTED_PACKAGES =
"device-owner-protected-packages";
private static final String ATTR_NAME = "name";
private static final String ATTR_PACKAGE = "package";
private static final String ATTR_COMPONENT_NAME = "component";
private static final String ATTR_SIZE = "size";
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";
@@ -129,6 +133,8 @@ class Owners {
// Device owner type for a managed device.
private final ArrayMap<String, Integer> mDeviceOwnerTypes = new ArrayMap<>();
private final ArrayMap<String, List<String>> mDeviceOwnerProtectedPackages = new ArrayMap<>();
private int mDeviceOwnerUserId = UserHandle.USER_NULL;
// Internal state for the profile owner packages.
@@ -216,6 +222,12 @@ class Owners {
pushToActivityTaskManagerLocked();
pushToActivityManagerLocked();
pushToAppOpsLocked();
for (ArrayMap.Entry<String, List<String>> entry :
mDeviceOwnerProtectedPackages.entrySet()) {
mPackageManagerInternal.setDeviceOwnerProtectedPackages(
entry.getKey(), entry.getValue());
}
}
}
@@ -343,6 +355,12 @@ class Owners {
void clearDeviceOwner() {
synchronized (mLock) {
mDeviceOwnerTypes.remove(mDeviceOwner.packageName);
List<String> protectedPackages =
mDeviceOwnerProtectedPackages.remove(mDeviceOwner.packageName);
if (protectedPackages != null) {
mPackageManagerInternal.setDeviceOwnerProtectedPackages(
mDeviceOwner.packageName, new ArrayList<>());
}
mDeviceOwner = null;
mDeviceOwnerUserId = UserHandle.USER_NULL;
@@ -394,6 +412,12 @@ class Owners {
void transferDeviceOwnership(ComponentName target) {
synchronized (mLock) {
Integer previousDeviceOwnerType = mDeviceOwnerTypes.remove(mDeviceOwner.packageName);
List<String> previousProtectedPackages =
mDeviceOwnerProtectedPackages.remove(mDeviceOwner.packageName);
if (previousProtectedPackages != null) {
mPackageManagerInternal.setDeviceOwnerProtectedPackages(
mDeviceOwner.packageName, new ArrayList<>());
}
// We don't set a name because it's not used anyway.
// See DevicePolicyManagerService#getDeviceOwnerName
mDeviceOwner = new OwnerInfo(null, target,
@@ -403,6 +427,10 @@ class Owners {
if (previousDeviceOwnerType != null) {
mDeviceOwnerTypes.put(mDeviceOwner.packageName, previousDeviceOwnerType);
}
if (previousProtectedPackages != null) {
mDeviceOwnerProtectedPackages.put(
mDeviceOwner.packageName, previousProtectedPackages);
}
pushToPackageManagerLocked();
pushToActivityTaskManagerLocked();
pushToActivityManagerLocked();
@@ -583,7 +611,7 @@ class Owners {
}
}
/** Sets the user restrictions migrated flag, and also writes to the file. */
/** Sets the user restrictions migrated flag, and also writes to the file. */
void setProfileOwnerUserRestrictionsMigrated(int userId) {
synchronized (mLock) {
OwnerInfo profileOwner = mProfileOwners.get(userId);
@@ -594,8 +622,10 @@ class Owners {
}
}
/** Sets the indicator that the profile owner manages an organization-owned device,
* then write to file. */
/**
* Sets the indicator that the profile owner manages an organization-owned device,
* then write to file.
*/
void markProfileOwnerOfOrganizationOwnedDevice(int userId) {
synchronized (mLock) {
OwnerInfo profileOwner = mProfileOwners.get(userId);
@@ -640,6 +670,33 @@ class Owners {
}
}
void setDeviceOwnerProtectedPackages(String packageName, List<String> protectedPackages) {
synchronized (mLock) {
if (!hasDeviceOwner()) {
Slog.e(TAG,
"Attempting to set device owner protected packages when there is no "
+ "device owner");
return;
} else if (!mDeviceOwner.packageName.equals(packageName)) {
Slog.e(TAG, "Attempting to set device owner protected packages when the provided "
+ "package name " + packageName
+ " does not match the device owner package name");
return;
}
mDeviceOwnerProtectedPackages.put(packageName, protectedPackages);
mPackageManagerInternal.setDeviceOwnerProtectedPackages(packageName, protectedPackages);
writeDeviceOwner();
}
}
List<String> getDeviceOwnerProtectedPackages(String packageName) {
synchronized (mLock) {
return mDeviceOwnerProtectedPackages.containsKey(packageName)
? mDeviceOwnerProtectedPackages.get(packageName) : Collections.emptyList();
}
}
private boolean readLegacyOwnerFileLocked(File file) {
if (!file.exists()) {
// Already migrated or the device has no owners.
@@ -649,8 +706,8 @@ class Owners {
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) {
while ((type = parser.next()) != TypedXmlPullParser.END_DOCUMENT) {
if (type != TypedXmlPullParser.START_TAG) {
continue;
}
@@ -700,7 +757,7 @@ class Owners {
}
}
input.close();
} catch (XmlPullParserException|IOException e) {
} catch (XmlPullParserException | IOException e) {
Slog.e(TAG, "Error parsing device-owner file", e);
}
return true;
@@ -936,6 +993,21 @@ class Owners {
}
}
if (!mDeviceOwnerProtectedPackages.isEmpty()) {
for (ArrayMap.Entry<String, List<String>> entry :
mDeviceOwnerProtectedPackages.entrySet()) {
List<String> protectedPackages = entry.getValue();
out.startTag(null, TAG_DEVICE_OWNER_PROTECTED_PACKAGES);
out.attribute(null, ATTR_PACKAGE, entry.getKey());
out.attributeInt(null, ATTR_SIZE, protectedPackages.size());
for (int i = 0, size = protectedPackages.size(); i < size; i++) {
out.attribute(null, ATTR_NAME + i, protectedPackages.get(i));
}
out.endTag(null, TAG_DEVICE_OWNER_PROTECTED_PACKAGES);
}
}
if (mSystemUpdatePolicy != null) {
out.startTag(null, TAG_SYSTEM_UPDATE_POLICY);
mSystemUpdatePolicy.saveToXml(out);
@@ -1002,6 +1074,15 @@ class Owners {
DEVICE_OWNER_TYPE_DEFAULT);
mDeviceOwnerTypes.put(packageName, deviceOwnerType);
break;
case TAG_DEVICE_OWNER_PROTECTED_PACKAGES:
packageName = parser.getAttributeValue(null, ATTR_PACKAGE);
int protectedPackagesSize = parser.getAttributeInt(null, ATTR_SIZE, 0);
List<String> protectedPackages = new ArrayList<>();
for (int i = 0; i < protectedPackagesSize; i++) {
protectedPackages.add(parser.getAttributeValue(null, ATTR_NAME + i));
}
mDeviceOwnerProtectedPackages.put(packageName, protectedPackages);
break;
default:
Slog.e(TAG, "Unexpected tag: " + tag);
return false;

View File

@@ -6542,29 +6542,26 @@ public class DevicePolicyManagerTest extends DpmTestBase {
final List<String> testPackages = new ArrayList<>();
testPackages.add("package_1");
testPackages.add("package_2");
mContext.callerPermissions.add(android.Manifest.permission.MANAGE_DEVICE_ADMINS);
mServiceContext.permissions.add(permission.MANAGE_DEVICE_ADMINS);
setDeviceOwner();
dpm.setUserControlDisabledPackages(admin1, testPackages);
verify(getServices().packageManagerInternal).setDeviceOwnerProtectedPackages(testPackages);
verify(getServices().packageManagerInternal)
.setDeviceOwnerProtectedPackages(admin1.getPackageName(), testPackages);
assertThat(dpm.getUserControlDisabledPackages(admin1)).isEqualTo(testPackages);
}
@Test
public void testSetUserControlDisabledPackages_failingAsPO() throws Exception {
public void testSetUserControlDisabledPackages_failingAsPO() {
final List<String> testPackages = new ArrayList<>();
testPackages.add("package_1");
testPackages.add("package_2");
mContext.callerPermissions.add(android.Manifest.permission.MANAGE_DEVICE_ADMINS);
mServiceContext.permissions.add(permission.MANAGE_DEVICE_ADMINS);
setAsProfileOwner(admin1);
assertExpectException(SecurityException.class, /* messageRegex= */ null,
() -> dpm.setUserControlDisabledPackages(admin1, testPackages));
assertExpectException(SecurityException.class, /* messageRegex= */ null,
() -> dpm.getUserControlDisabledPackages(admin1));
}

View File

@@ -21,6 +21,8 @@ import static android.app.admin.DevicePolicyManager.DEVICE_OWNER_TYPE_FINANCED;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
import android.content.ComponentName;
import android.os.UserHandle;
import android.test.suitebuilder.annotation.SmallTest;
@@ -29,9 +31,14 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.server.devicepolicy.DevicePolicyManagerServiceTestable.OwnersTestable;
import com.google.android.collect.Lists;
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.
*
@@ -43,6 +50,9 @@ import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class OwnersTest extends DpmTestBase {
private static final List<String> DEVICE_OWNER_PROTECTED_PACKAGES =
Lists.newArrayList("package_1", "package_2");
@Test
public void testUpgrade01() throws Exception {
getServices().addUsers(10, 11, 20, 21);
@@ -71,6 +81,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -96,6 +108,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -136,6 +150,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -158,6 +174,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -198,6 +216,8 @@ public class OwnersTest extends DpmTestBase {
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))
@@ -228,6 +248,8 @@ public class OwnersTest extends DpmTestBase {
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))
@@ -282,6 +304,8 @@ public class OwnersTest extends DpmTestBase {
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);
@@ -316,6 +340,8 @@ public class OwnersTest extends DpmTestBase {
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);
@@ -344,6 +370,14 @@ public class OwnersTest extends DpmTestBase {
DEVICE_OWNER_TYPE_FINANCED);
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);
}
{
@@ -353,6 +387,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -367,6 +403,14 @@ public class OwnersTest extends DpmTestBase {
// 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<>());
}
{
@@ -376,6 +420,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -414,6 +460,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -435,6 +483,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -474,6 +524,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -495,6 +547,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -525,6 +579,8 @@ public class OwnersTest extends DpmTestBase {
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();
@@ -532,6 +588,13 @@ public class OwnersTest extends DpmTestBase {
owners.setDeviceOwnerType(previousDeviceOwnerPackageName, DEVICE_OWNER_TYPE_FINANCED);
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();
@@ -552,5 +615,10 @@ public class OwnersTest extends DpmTestBase {
assertThat(owners.getDeviceOwnerType(previousDeviceOwnerPackageName)).isEqualTo(
DEVICE_OWNER_TYPE_DEFAULT);
assertThat(owners.getDeviceOwnerProtectedPackages(previousDeviceOwnerPackageName))
.isEmpty();
verify(getServices().packageManagerInternal)
.setDeviceOwnerProtectedPackages(
previousDeviceOwnerPackageName, new ArrayList<>());
}
}