[RESTRICT AUTOMERGE] Correct the behavior of ACTION_PACKAGE_DATA_CLEARED

This action should be only broadcasted when the user data is cleared
successfully. Broadcasting this action when failed case may result in
unexpected result.

Bug: 240267890
Test: manually using the PoC in the buganizer to ensure the symptom
      no longer exists.
Change-Id: I53b67eb0a200f9dfb6fa2559227b7c735f30624f
This commit is contained in:
Jackal Guo
2022-10-25 15:01:33 +08:00
parent 8a46d49bd4
commit 0587cd294a

View File

@@ -4296,20 +4296,24 @@ public class ActivityManagerService extends IActivityManager.Stub
finishForceStopPackageLocked(packageName, appInfo.uid); finishForceStopPackageLocked(packageName, appInfo.uid);
} }
} }
final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,
Uri.fromParts("package", packageName, null)); if (succeeded) {
intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); final Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,
intent.putExtra(Intent.EXTRA_UID, (appInfo != null) ? appInfo.uid : -1); Uri.fromParts("package", packageName, null /* fragment */));
intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId); intent.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
if (isInstantApp) { intent.putExtra(Intent.EXTRA_UID,
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName); (appInfo != null) ? appInfo.uid : Process.INVALID_UID);
broadcastIntentInPackage("android", null, SYSTEM_UID, uid, pid, intent, intent.putExtra(Intent.EXTRA_USER_HANDLE, resolvedUserId);
null, null, 0, null, null, permission.ACCESS_INSTANT_APPS, null, if (isInstantApp) {
false, false, resolvedUserId, false); intent.putExtra(Intent.EXTRA_PACKAGE_NAME, packageName);
} else { }
broadcastIntentInPackage("android", null, SYSTEM_UID, uid, pid, intent,
null, null, 0, null, null, null, null, false, false, resolvedUserId, broadcastIntentInPackage("android", null /* featureId */, SYSTEM_UID,
false); uid, pid, intent, null /* resolvedType */, null /* resultTo */,
0 /* resultCode */, null /* resultData */, null /* resultExtras */,
isInstantApp ? permission.ACCESS_INSTANT_APPS : null,
null /* bOptions */, false /* serialized */, false /* sticky */,
resolvedUserId, false /* allowBackgroundActivityStarts */);
} }
if (observer != null) { if (observer != null) {