diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6782fc9f51069..aecc8ddec3d81 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -331,6 +331,7 @@ import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.Preconditions; +import com.android.permission.persistence.RuntimePermissionsPersistence; import com.android.server.AttributeCache; import com.android.server.DeviceIdleInternal; import com.android.server.EventLogTags; @@ -2590,7 +2591,7 @@ public class PackageManagerService extends IPackageManager.Stub (i, pm) -> new Settings(Environment.getDataDirectory(), i.getPermissionManagerServiceInternal().getPermissionSettings(), - lock), + RuntimePermissionsPersistence.createInstance(), lock), new Injector.LocalServicesProducer<>(ActivityTaskManagerInternal.class), new Injector.LocalServicesProducer<>(ActivityManagerInternal.class), new Injector.LocalServicesProducer<>(DeviceIdleInternal.class), diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 7106499f9b569..1805713387ae0 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -435,10 +435,11 @@ public final class Settings { } Settings(File dataDir, PermissionSettings permission, - Object lock) { + RuntimePermissionsPersistence runtimePermissionsPersistence, Object lock) { mLock = lock; mPermissions = permission; - mRuntimePermissionsPersistence = new RuntimePermissionPersistence(mLock); + mRuntimePermissionsPersistence = new RuntimePermissionPersistence( + runtimePermissionsPersistence, mLock); mSystemDir = new File(dataDir, "system"); mSystemDir.mkdirs(); @@ -5381,8 +5382,7 @@ public final class Settings { private String mExtendedFingerprint; - private final RuntimePermissionsPersistence mPersistence = - RuntimePermissionsPersistence.createInstance(); + private final RuntimePermissionsPersistence mPersistence; private final Handler mHandler = new MyHandler(); @@ -5407,7 +5407,9 @@ public final class Settings { // The mapping keys are user ids. private final SparseBooleanArray mPermissionUpgradeNeeded = new SparseBooleanArray(); - public RuntimePermissionPersistence(Object persistenceLock) { + public RuntimePermissionPersistence(RuntimePermissionsPersistence persistence, + Object persistenceLock) { + mPersistence = persistence; mPersistenceLock = persistenceLock; } diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index fa9ee19cba9d8..aa92ba49d190b 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -57,6 +57,7 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.permission.persistence.RuntimePermissionsPersistence; import com.android.server.LocalServices; import com.android.server.pm.permission.PermissionSettings; @@ -86,6 +87,8 @@ public class PackageManagerSettingsTests { @Mock PermissionSettings mPermissionSettings; + @Mock + RuntimePermissionsPersistence mRuntimePermissionsPersistence; @Before public void initializeMocks() { @@ -106,7 +109,8 @@ public class PackageManagerSettingsTests { writeOldFiles(); final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); verifyKeySetMetaData(settings); } @@ -119,7 +123,8 @@ public class PackageManagerSettingsTests { writeOldFiles(); final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); // write out, read back in and verify the same @@ -134,7 +139,8 @@ public class PackageManagerSettingsTests { writeOldFiles(); final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); assertThat(settings.getPackageLPr(PACKAGE_NAME_3), is(notNullValue())); assertThat(settings.getPackageLPr(PACKAGE_NAME_1), is(notNullValue())); @@ -155,12 +161,14 @@ public class PackageManagerSettingsTests { writeOldFiles(); final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); settings.writeLPr(); // Create Settings again to make it read from the new files - settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); PackageSetting ps = settings.getPackageLPr(PACKAGE_NAME_2); @@ -183,7 +191,7 @@ public class PackageManagerSettingsTests { writePackageRestrictions_noSuspendingPackageXml(0); final Object lock = new Object(); final Context context = InstrumentationRegistry.getTargetContext(); - final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, lock); + final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, lock); settingsUnderTest.mPackages.put(PACKAGE_NAME_1, createPackageSetting(PACKAGE_NAME_1)); settingsUnderTest.mPackages.put(PACKAGE_NAME_2, createPackageSetting(PACKAGE_NAME_2)); settingsUnderTest.readPackageRestrictionsLPr(0); @@ -206,7 +214,7 @@ public class PackageManagerSettingsTests { writePackageRestrictions_noSuspendParamsMapXml(0); final Object lock = new Object(); final Context context = InstrumentationRegistry.getTargetContext(); - final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, lock); + final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, lock); settingsUnderTest.mPackages.put(PACKAGE_NAME_1, createPackageSetting(PACKAGE_NAME_1)); settingsUnderTest.readPackageRestrictionsLPr(0); @@ -233,7 +241,8 @@ public class PackageManagerSettingsTests { @Test public void testReadWritePackageRestrictions_suspendInfo() { final Context context = InstrumentationRegistry.getTargetContext(); - final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, new Object()); + final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, + new Object()); final PackageSetting ps1 = createPackageSetting(PACKAGE_NAME_1); final PackageSetting ps2 = createPackageSetting(PACKAGE_NAME_2); final PackageSetting ps3 = createPackageSetting(PACKAGE_NAME_3); @@ -330,7 +339,8 @@ public class PackageManagerSettingsTests { @Test public void testReadWritePackageRestrictions_distractionFlags() { final Context context = InstrumentationRegistry.getTargetContext(); - final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, new Object()); + final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, + new Object()); final PackageSetting ps1 = createPackageSetting(PACKAGE_NAME_1); final PackageSetting ps2 = createPackageSetting(PACKAGE_NAME_2); final PackageSetting ps3 = createPackageSetting(PACKAGE_NAME_3); @@ -381,7 +391,8 @@ public class PackageManagerSettingsTests { writeOldFiles(); final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock); + Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); assertThat(settings.readLPw(createFakeUsers()), is(true)); // Enable/Disable a package @@ -558,8 +569,8 @@ public class PackageManagerSettingsTests { public void testUpdatePackageSetting03() { final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - final Settings testSettings01 = - new Settings(context.getFilesDir(), mPermissionSettings, lock); + final Settings testSettings01 = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); final SharedUserSetting testUserSetting01 = createSharedUserSetting( testSettings01, "TestUser", 10064, 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/); final PackageSetting testPkgSetting01 = @@ -673,8 +684,8 @@ public class PackageManagerSettingsTests { public void testCreateNewSetting03() { final Context context = InstrumentationRegistry.getContext(); final Object lock = new Object(); - final Settings testSettings01 = - new Settings(context.getFilesDir(), mPermissionSettings, lock); + final Settings testSettings01 = new Settings(context.getFilesDir(), mPermissionSettings, + mRuntimePermissionsPersistence, lock); final SharedUserSetting testUserSetting01 = createSharedUserSetting( testSettings01, "TestUser", 10064, 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/); final PackageSetting testPkgSetting01 = Settings.createNewSetting(