diff options
author | 2025-03-10 11:26:10 -0700 | |
---|---|---|
committer | 2025-03-10 11:26:10 -0700 | |
commit | 68f764be1bd79b2d11e16bc07017a4eaa79e3d8c (patch) | |
tree | e8e37b412dfa60c2a64891ae1e9859016f3fdcab | |
parent | 988aa83bc7c7b4287091a67ac917e7d60316a633 (diff) | |
parent | aa68eb995a1a5ed9830c4a14a49aa22c4901f451 (diff) |
Merge "Fix collect extra intent keys on server" into main
-rw-r--r-- | core/java/android/content/Intent.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 038756148a32..bb62ac321202 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -12426,6 +12426,8 @@ public class Intent implements Parcelable, Cloneable { } private void collectNestedIntentKeysRecur(Set<Intent> visited, boolean forceUnparcel) { + // if forceUnparcel is false, do not unparcel the mExtras bundle. + // forceUnparcel will only be true when this method is called from system server. if (mExtras != null && (forceUnparcel || !mExtras.isParcelled()) && !mExtras.isEmpty()) { addExtendedFlags(EXTENDED_FLAG_NESTED_INTENT_KEYS_COLLECTED); for (String key : mExtras.keySet()) { @@ -12440,6 +12442,7 @@ public class Intent implements Parcelable, Cloneable { value = mExtras.get(key); } else { value = null; + removeExtendedFlags(EXTENDED_FLAG_NESTED_INTENT_KEYS_COLLECTED); } } catch (BadParcelableException e) { // This may still happen if the keys are collected on the system server side, in @@ -12459,6 +12462,13 @@ public class Intent implements Parcelable, Cloneable { } } + // if there is no extras in the bundle, we also mark the intent as keys are collected. + // isDefinitelyEmpty() will not unparceled the mExtras. This is the best we can do without + // unparceling the extra bundle. + if (mExtras == null || mExtras.isDefinitelyEmpty()) { + addExtendedFlags(EXTENDED_FLAG_NESTED_INTENT_KEYS_COLLECTED); + } + if (mClipData != null) { for (int i = 0; i < mClipData.getItemCount(); i++) { Intent intent = mClipData.getItemAt(i).mIntent; |