Loading services/core/java/com/android/server/pm/DeletePackageHelper.java +6 −1 Original line number Diff line number Diff line Loading @@ -435,6 +435,12 @@ final class DeletePackageHelper { } final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier(); if (outInfo != null) { // Remember which users are affected, before the installed states are modified outInfo.mRemovedUsers = (systemApp || userId == UserHandle.USER_ALL) ? ps.queryInstalledUsers(allUserHandles, /* installed= */true) : new int[]{userId}; } if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0) && userId != UserHandle.USER_ALL) { Loading Loading @@ -630,7 +636,6 @@ final class DeletePackageHelper { // Preserve data by setting flag flags |= PackageManager.DELETE_KEEP_DATA; } synchronized (mPm.mInstallLock) { deleteInstalledPackageLIF(deletedPs, true, flags, allUserHandles, outInfo, writeSettings); Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +2 −2 Original line number Diff line number Diff line Loading @@ -3556,7 +3556,7 @@ final class InstallPackageHelper { logCriticalInfo(Log.WARN, "System package " + packageName + " no longer exists; its data will be wiped"); mInjector.getHandler().post( () -> mRemovePackageHelper.removePackageData(ps, userIds, null, 0, false)); () -> mRemovePackageHelper.removePackageData(ps, userIds)); expectingBetter.put(ps.getPackageName(), ps.getPath()); } else { // we still have a disabled system package, but, it still might have Loading Loading @@ -3631,7 +3631,7 @@ final class InstallPackageHelper { // partition], completely remove the package data. final PackageSetting ps = mPm.mSettings.getPackageLPr(packageName); if (ps != null && mPm.mPackages.get(packageName) == null) { mRemovePackageHelper.removePackageData(ps, userIds, null, 0, false); mRemovePackageHelper.removePackageData(ps, userIds); } logCriticalInfo(Log.WARN, msg); } Loading services/core/java/com/android/server/pm/PackageRemovedInfo.java +3 −4 Original line number Diff line number Diff line Loading @@ -164,8 +164,7 @@ final class PackageRemovedInfo { } } public void populateUsers(int[] userIds, PackageSetting deletedPackageSetting) { mRemovedUsers = userIds; public void populateBroadcastUsers(PackageSetting deletedPackageSetting) { if (mRemovedUsers == null) { mBroadcastUsers = null; return; Loading @@ -173,8 +172,8 @@ final class PackageRemovedInfo { mBroadcastUsers = EMPTY_INT_ARRAY; mInstantUserIds = EMPTY_INT_ARRAY; for (int i = userIds.length - 1; i >= 0; --i) { final int userId = userIds[i]; for (int i = mRemovedUsers.length - 1; i >= 0; --i) { final int userId = mRemovedUsers[i]; if (deletedPackageSetting.getInstantApp(userId)) { mInstantUserIds = ArrayUtils.appendInt(mInstantUserIds, userId); } else { Loading services/core/java/com/android/server/pm/RemovePackageHelper.java +6 −8 Original line number Diff line number Diff line Loading @@ -295,25 +295,24 @@ final class RemovePackageHelper { outInfo.mInstallerPackageName = ps.getInstallSource().mInstallerPackageName; outInfo.mIsStaticSharedLib = pkg != null && pkg.getStaticSharedLibraryName() != null; outInfo.mRemovedAppId = ps.getAppId(); outInfo.mRemovedUsers = userIds; outInfo.mBroadcastUsers = userIds; outInfo.mBroadcastUsers = outInfo.mRemovedUsers; outInfo.mIsExternal = ps.isExternalStorage(); outInfo.mRemovedPackageVersionCode = ps.getVersionCode(); } } // Called to clean up disabled system packages public void removePackageData(final PackageSetting deletedPs, @NonNull int[] allUserHandles, PackageRemovedInfo outInfo, int flags, boolean writeSettings) { public void removePackageData(final PackageSetting deletedPs, @NonNull int[] allUserHandles) { synchronized (mPm.mInstallLock) { removePackageDataLIF(deletedPs, allUserHandles, outInfo, flags, writeSettings); removePackageDataLIF(deletedPs, allUserHandles, /* outInfo= */ null, /* flags= */ 0, /* writeSettings= */ false); } } /* * This method deletes the package from internal data structures. If the DELETE_KEEP_DATA * flag is not set, the data directory is removed as well. * make sure this flag is set for partially installed apps. If not its meaningless to * make sure this flag is set for partially installed apps. If not it's meaningless to * delete a partially installed application. */ @GuardedBy("mPm.mInstallLock") Loading @@ -328,8 +327,7 @@ final class RemovePackageHelper { outInfo.mInstallerPackageName = deletedPs.getInstallSource().mInstallerPackageName; outInfo.mIsStaticSharedLib = deletedPkg != null && deletedPkg.getStaticSharedLibraryName() != null; outInfo.populateUsers(deletedPs.queryInstalledUsers( mUserManagerInternal.getUserIds(), true), deletedPs); outInfo.populateBroadcastUsers(deletedPs); outInfo.mIsExternal = deletedPs.isExternalStorage(); outInfo.mRemovedPackageVersionCode = deletedPs.getVersionCode(); } Loading services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerServiceTest.java +7 −5 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ public class PackageManagerServiceTest { Assert.assertNull(pri.mBroadcastUsers); // populateUsers with nothing leaves nothing pri.populateUsers(null, setting); pri.populateBroadcastUsers(setting); Assert.assertNull(pri.mBroadcastUsers); // Create a real (non-null) PackageSetting and confirm that the removed Loading @@ -139,9 +139,10 @@ public class PackageManagerServiceTest { .setSecondaryCpuAbiString("secondaryCpuAbiString") .setCpuAbiOverrideString("cpuAbiOverrideString") .build(); pri.populateUsers(new int[]{ pri.mRemovedUsers = new int[]{ 1, 2, 3, 4, 5 }, setting); }; pri.populateBroadcastUsers(setting); Assert.assertNotNull(pri.mBroadcastUsers); Assert.assertEquals(5, pri.mBroadcastUsers.length); Assert.assertNotNull(pri.mInstantUserIds); Loading @@ -151,9 +152,10 @@ public class PackageManagerServiceTest { pri.mBroadcastUsers = null; final int EXCLUDED_USER_ID = 4; setting.setInstantApp(true, EXCLUDED_USER_ID); pri.populateUsers(new int[]{ pri.mRemovedUsers = new int[]{ 1, 2, 3, EXCLUDED_USER_ID, 5 }, setting); }; pri.populateBroadcastUsers(setting); Assert.assertNotNull(pri.mBroadcastUsers); Assert.assertEquals(4, pri.mBroadcastUsers.length); Assert.assertNotNull(pri.mInstantUserIds); Loading Loading
services/core/java/com/android/server/pm/DeletePackageHelper.java +6 −1 Original line number Diff line number Diff line Loading @@ -435,6 +435,12 @@ final class DeletePackageHelper { } final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier(); if (outInfo != null) { // Remember which users are affected, before the installed states are modified outInfo.mRemovedUsers = (systemApp || userId == UserHandle.USER_ALL) ? ps.queryInstalledUsers(allUserHandles, /* installed= */true) : new int[]{userId}; } if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0) && userId != UserHandle.USER_ALL) { Loading Loading @@ -630,7 +636,6 @@ final class DeletePackageHelper { // Preserve data by setting flag flags |= PackageManager.DELETE_KEEP_DATA; } synchronized (mPm.mInstallLock) { deleteInstalledPackageLIF(deletedPs, true, flags, allUserHandles, outInfo, writeSettings); Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +2 −2 Original line number Diff line number Diff line Loading @@ -3556,7 +3556,7 @@ final class InstallPackageHelper { logCriticalInfo(Log.WARN, "System package " + packageName + " no longer exists; its data will be wiped"); mInjector.getHandler().post( () -> mRemovePackageHelper.removePackageData(ps, userIds, null, 0, false)); () -> mRemovePackageHelper.removePackageData(ps, userIds)); expectingBetter.put(ps.getPackageName(), ps.getPath()); } else { // we still have a disabled system package, but, it still might have Loading Loading @@ -3631,7 +3631,7 @@ final class InstallPackageHelper { // partition], completely remove the package data. final PackageSetting ps = mPm.mSettings.getPackageLPr(packageName); if (ps != null && mPm.mPackages.get(packageName) == null) { mRemovePackageHelper.removePackageData(ps, userIds, null, 0, false); mRemovePackageHelper.removePackageData(ps, userIds); } logCriticalInfo(Log.WARN, msg); } Loading
services/core/java/com/android/server/pm/PackageRemovedInfo.java +3 −4 Original line number Diff line number Diff line Loading @@ -164,8 +164,7 @@ final class PackageRemovedInfo { } } public void populateUsers(int[] userIds, PackageSetting deletedPackageSetting) { mRemovedUsers = userIds; public void populateBroadcastUsers(PackageSetting deletedPackageSetting) { if (mRemovedUsers == null) { mBroadcastUsers = null; return; Loading @@ -173,8 +172,8 @@ final class PackageRemovedInfo { mBroadcastUsers = EMPTY_INT_ARRAY; mInstantUserIds = EMPTY_INT_ARRAY; for (int i = userIds.length - 1; i >= 0; --i) { final int userId = userIds[i]; for (int i = mRemovedUsers.length - 1; i >= 0; --i) { final int userId = mRemovedUsers[i]; if (deletedPackageSetting.getInstantApp(userId)) { mInstantUserIds = ArrayUtils.appendInt(mInstantUserIds, userId); } else { Loading
services/core/java/com/android/server/pm/RemovePackageHelper.java +6 −8 Original line number Diff line number Diff line Loading @@ -295,25 +295,24 @@ final class RemovePackageHelper { outInfo.mInstallerPackageName = ps.getInstallSource().mInstallerPackageName; outInfo.mIsStaticSharedLib = pkg != null && pkg.getStaticSharedLibraryName() != null; outInfo.mRemovedAppId = ps.getAppId(); outInfo.mRemovedUsers = userIds; outInfo.mBroadcastUsers = userIds; outInfo.mBroadcastUsers = outInfo.mRemovedUsers; outInfo.mIsExternal = ps.isExternalStorage(); outInfo.mRemovedPackageVersionCode = ps.getVersionCode(); } } // Called to clean up disabled system packages public void removePackageData(final PackageSetting deletedPs, @NonNull int[] allUserHandles, PackageRemovedInfo outInfo, int flags, boolean writeSettings) { public void removePackageData(final PackageSetting deletedPs, @NonNull int[] allUserHandles) { synchronized (mPm.mInstallLock) { removePackageDataLIF(deletedPs, allUserHandles, outInfo, flags, writeSettings); removePackageDataLIF(deletedPs, allUserHandles, /* outInfo= */ null, /* flags= */ 0, /* writeSettings= */ false); } } /* * This method deletes the package from internal data structures. If the DELETE_KEEP_DATA * flag is not set, the data directory is removed as well. * make sure this flag is set for partially installed apps. If not its meaningless to * make sure this flag is set for partially installed apps. If not it's meaningless to * delete a partially installed application. */ @GuardedBy("mPm.mInstallLock") Loading @@ -328,8 +327,7 @@ final class RemovePackageHelper { outInfo.mInstallerPackageName = deletedPs.getInstallSource().mInstallerPackageName; outInfo.mIsStaticSharedLib = deletedPkg != null && deletedPkg.getStaticSharedLibraryName() != null; outInfo.populateUsers(deletedPs.queryInstalledUsers( mUserManagerInternal.getUserIds(), true), deletedPs); outInfo.populateBroadcastUsers(deletedPs); outInfo.mIsExternal = deletedPs.isExternalStorage(); outInfo.mRemovedPackageVersionCode = deletedPs.getVersionCode(); } Loading
services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerServiceTest.java +7 −5 Original line number Diff line number Diff line Loading @@ -125,7 +125,7 @@ public class PackageManagerServiceTest { Assert.assertNull(pri.mBroadcastUsers); // populateUsers with nothing leaves nothing pri.populateUsers(null, setting); pri.populateBroadcastUsers(setting); Assert.assertNull(pri.mBroadcastUsers); // Create a real (non-null) PackageSetting and confirm that the removed Loading @@ -139,9 +139,10 @@ public class PackageManagerServiceTest { .setSecondaryCpuAbiString("secondaryCpuAbiString") .setCpuAbiOverrideString("cpuAbiOverrideString") .build(); pri.populateUsers(new int[]{ pri.mRemovedUsers = new int[]{ 1, 2, 3, 4, 5 }, setting); }; pri.populateBroadcastUsers(setting); Assert.assertNotNull(pri.mBroadcastUsers); Assert.assertEquals(5, pri.mBroadcastUsers.length); Assert.assertNotNull(pri.mInstantUserIds); Loading @@ -151,9 +152,10 @@ public class PackageManagerServiceTest { pri.mBroadcastUsers = null; final int EXCLUDED_USER_ID = 4; setting.setInstantApp(true, EXCLUDED_USER_ID); pri.populateUsers(new int[]{ pri.mRemovedUsers = new int[]{ 1, 2, 3, EXCLUDED_USER_ID, 5 }, setting); }; pri.populateBroadcastUsers(setting); Assert.assertNotNull(pri.mBroadcastUsers); Assert.assertEquals(4, pri.mBroadcastUsers.length); Assert.assertNotNull(pri.mInstantUserIds); Loading