diff options
| author | 2024-01-18 18:39:17 +0000 | |
|---|---|---|
| committer | 2024-01-18 18:39:17 +0000 | |
| commit | fc04788c2224e089f1343816dd3f995a99536ed2 (patch) | |
| tree | b09b473d366e678274207776b51a693c080f34c1 | |
| parent | fa283aee16e21184ac1d1430131da04da503c19a (diff) | |
| parent | 209c5b8b9d11df8cc7d4289cce40830a430795a3 (diff) | |
Merge "[pm] do not send UID_REMOVED broadcast if shared uid still exists" into main
| -rw-r--r-- | services/core/java/com/android/server/pm/RemovePackageHelper.java | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/Settings.java | 19 |
2 files changed, 13 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/pm/RemovePackageHelper.java b/services/core/java/com/android/server/pm/RemovePackageHelper.java index 3659cb779723..70352be01096 100644 --- a/services/core/java/com/android/server/pm/RemovePackageHelper.java +++ b/services/core/java/com/android/server/pm/RemovePackageHelper.java @@ -392,8 +392,7 @@ final class RemovePackageHelper { // Delete from mSettings final SparseBooleanArray changedUsers = new SparseBooleanArray(); synchronized (mPm.mLock) { - mPm.mSettings.removePackageLPw(packageName); - outInfo.mIsAppIdRemoved = true; + outInfo.mIsAppIdRemoved = mPm.mSettings.removePackageAndAppIdLPw(packageName); if (!mPm.mSettings.isDisabledSystemPackageLPr(packageName)) { final SharedUserSetting sus = mPm.mSettings.getSharedUserSettingLPr(deletedPs); // If we don't have a disabled system package to reinstall, the package is diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index b286b12dcf7d..a97652c8e167 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -92,7 +92,6 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.os.BackgroundThread; -import com.android.internal.pm.parsing.pkg.PackageImpl; import com.android.internal.pm.pkg.component.ParsedComponent; import com.android.internal.pm.pkg.component.ParsedIntentInfo; import com.android.internal.pm.pkg.component.ParsedPermission; @@ -1460,22 +1459,28 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile return false; } - int removePackageLPw(String name) { + + /** + * Remove package from mPackages and its corresponding AppId. + * + * @return True if the AppId has been removed. + * False if the app doesn't exist, or if the app has a shared UID and there are other apps that + * still use the same shared UID even after the target app is removed. + */ + boolean removePackageAndAppIdLPw(String name) { final PackageSetting p = mPackages.remove(name); if (p != null) { removeInstallerPackageStatus(name); SharedUserSetting sharedUserSetting = getSharedUserSettingLPr(p); if (sharedUserSetting != null) { sharedUserSetting.removePackage(p); - if (checkAndPruneSharedUserLPw(sharedUserSetting, false)) { - return sharedUserSetting.mAppId; - } + return checkAndPruneSharedUserLPw(sharedUserSetting, false); } else { removeAppIdLPw(p.getAppId()); - return p.getAppId(); + return true; } } - return -1; + return false; } /** |