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

Commit edc50ee0 authored by Miriam Polzer's avatar Miriam Polzer
Browse files

Remove static Environment dependency from DPE

DPE was reading the policy folder from the static Environment.

There already is class that wraps the logic for folders, use that one
instead. Following DRY and making dependencies visible like this makes
the code a bit easier to test and change.

Test: atest FrameworksServicesTests_devicepolicy
Test: atest CtsDevicePolicyTestCases
Bug: 416180519
Flag: EXEMPT refactoring
Change-Id: If194581f1b71716b2e7b86c28c2594848c2c804b
parent 881b8d64
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ final class DevicePolicyEngine {

    private final Context mContext;
    private final UserManager mUserManager;
    private final PolicyPathProvider mPolicyPathProvider;

    // TODO(b/256849338): add more granular locks
    private final Object mLock;
@@ -153,11 +154,12 @@ final class DevicePolicyEngine {
    DevicePolicyEngine(
            @NonNull Context context,
            @NonNull DeviceAdminServiceController deviceAdminServiceController,
            @NonNull Object lock) {
            @NonNull Object lock, @NonNull PolicyPathProvider policyPathProvider) {
        mContext = Objects.requireNonNull(context);
        mDeviceAdminServiceController = Objects.requireNonNull(deviceAdminServiceController);
        mLock = Objects.requireNonNull(lock);
        mUserManager = mContext.getSystemService(UserManager.class);
        mPolicyPathProvider = Objects.requireNonNull(policyPathProvider);
        mLocalPolicies = new HashMap<>();
        mGlobalPolicies = new HashMap<>();
        mEnforcingAdmins = new SparseArray<>();
@@ -2424,7 +2426,8 @@ final class DevicePolicyEngine {
    private void write() {
        synchronized (mLock) {
            Log.d(TAG, "Writing device policies to file.");
            new DevicePoliciesReaderWriter().writeToFileLocked();
            new DevicePoliciesReaderWriter(mPolicyPathProvider.getDataSystemDirectory())
                .writeToFileLocked();
        }
    }

@@ -2434,7 +2437,8 @@ final class DevicePolicyEngine {
        Log.d(TAG, "Reading device policies from file.");
        synchronized (mLock) {
            clear();
            new DevicePoliciesReaderWriter().readFromFileLocked();
            new DevicePoliciesReaderWriter(mPolicyPathProvider.getDataSystemDirectory())
                .readFromFileLocked();
        }
    }

@@ -2446,7 +2450,8 @@ final class DevicePolicyEngine {
     */
    void createBackup(String backupId) {
        synchronized (mLock) {
            DevicePoliciesReaderWriter.createBackup(backupId);
            DevicePoliciesReaderWriter.createBackup(backupId,
                mPolicyPathProvider.getDataSystemDirectory());
        }
    }

@@ -2558,17 +2563,17 @@ final class DevicePolicyEngine {

        private final File mFile;

        private static File getFileName() {
            return new File(Environment.getDataSystemDirectory(), DEVICE_POLICIES_XML);
        private static File getFileName(File dataSystemDirectory) {
            return new File(dataSystemDirectory, DEVICE_POLICIES_XML);
        }

        private DevicePoliciesReaderWriter() {
            mFile = getFileName();
        private DevicePoliciesReaderWriter(File dataSystemDirectory) {
            mFile = getFileName(dataSystemDirectory);
        }

        public static void createBackup(String backupId) {
        public static void createBackup(String backupId, File dataSystemDirectory) {
            try {
                File backupDirectory = new File(Environment.getDataSystemDirectory(),
                File backupDirectory = new File(dataSystemDirectory,
                        BACKUP_DIRECTORY);
                backupDirectory.mkdir();
                Path backupPath = Path.of(backupDirectory.getPath(),
@@ -2576,7 +2581,7 @@ final class DevicePolicyEngine {
                if (backupPath.toFile().exists()) {
                    Log.w(TAG, "Backup already exist: " + backupPath);
                } else {
                    Files.copy(getFileName().toPath(), backupPath,
                    Files.copy(getFileName(dataSystemDirectory).toPath(), backupPath,
                            StandardCopyOption.REPLACE_EXISTING);
                    Log.i(TAG, "Backup created at " + backupPath);
                }
+1 −1
Original line number Diff line number Diff line
@@ -2219,7 +2219,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        mOwners = makeOwners(injector, pathProvider);
        mDevicePolicyEngine = new DevicePolicyEngine(
                mContext, mDeviceAdminServiceController, getLockObject());
                mContext, mDeviceAdminServiceController, getLockObject(), mPathProvider);
        if (!mHasFeature) {
            // Skip the rest of the initialization
+4 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.devicepolicy

import android.app.admin.DevicePolicyManager
import android.app.admin.IntegerPolicyValue
import com.android.server.devicepolicy.PolicyPathProvider
import android.app.admin.PolicyUpdateResult
import android.content.ComponentName
import android.os.UserHandle
@@ -41,6 +42,7 @@ class DevicePolicyEngineTest {

    private val deviceAdminServiceController = mock<DeviceAdminServiceController>()
    private val userManager = mock<UserManager>()
    private val policyPathProvider = object : PolicyPathProvider {}

    private val lock = Any()
    private lateinit var devicePolicyEngine: DevicePolicyEngine
@@ -49,7 +51,8 @@ class DevicePolicyEngineTest {
    fun setUp() {
        LocalServices.removeServiceForTest(UserManager::class.java)
        LocalServices.addService(UserManager::class.java, userManager)
        devicePolicyEngine = DevicePolicyEngine(context, deviceAdminServiceController, lock)
        devicePolicyEngine = DevicePolicyEngine(context, deviceAdminServiceController, lock,
            policyPathProvider)

        if (LocalManagerRegistry.getManager(RoleManagerLocal::class.java) == null) {
            LocalManagerRegistry.addManager(RoleManagerLocal::class.java, mock<RoleManagerLocal>())