From 6dc124025d2b21cdc54c143e9cb54aab68b3f0d8 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Wed, 29 Sep 2021 13:28:20 +0800 Subject: [PATCH] Removing TaskFragment token from LaunchActivityItem The token was needed because the TaskFragment info may not sent to the organizer before activity created. The token is no longer necessary because the TaskFragment info is now ensured to be updated before activity created. Bug: 200303250 Test: wm presubmit Change-Id: I69a42fa35efde4fc7f37ab50334de5de146da90d --- core/java/android/app/ActivityThread.java | 7 +----- .../servertransaction/LaunchActivityItem.java | 20 ++++++----------- .../servertransaction/ObjectPoolTests.java | 2 +- .../app/servertransaction/TestUtils.java | 8 +------ .../TransactionParcelTests.java | 1 - .../activity/ActivityThreadClientTest.java | 2 +- .../extensions/embedding/SplitController.java | 22 +------------------ .../server/wm/ActivityTaskSupervisor.java | 6 +---- .../com/android/server/wm/TaskFragment.java | 4 ---- 9 files changed, 13 insertions(+), 59 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 80554d7939f28..d0680f8c92688 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -526,9 +526,6 @@ public final class ActivityThread extends ClientTransactionHandler // A reusable token for other purposes, e.g. content capture, translation. It shouldn't be // used without security checks public IBinder shareableActivityToken; - // The token of the initial TaskFragment that embedded this activity. Do not rely on it - // after creation because the activity could be reparented. - @Nullable public IBinder mInitialTaskFragmentToken; int ident; @UnsupportedAppUsage Intent intent; @@ -622,8 +619,7 @@ public final class ActivityThread extends ClientTransactionHandler List pendingNewIntents, ActivityOptions activityOptions, boolean isForward, ProfilerInfo profilerInfo, ClientTransactionHandler client, IBinder assistToken, FixedRotationAdjustments fixedRotationAdjustments, - IBinder shareableActivityToken, boolean launchedFromBubble, - IBinder initialTaskFragmentToken) { + IBinder shareableActivityToken, boolean launchedFromBubble) { this.token = token; this.assistToken = assistToken; this.shareableActivityToken = shareableActivityToken; @@ -645,7 +641,6 @@ public final class ActivityThread extends ClientTransactionHandler mActivityOptions = activityOptions; mPendingFixedRotationAdjustments = fixedRotationAdjustments; mLaunchedFromBubble = launchedFromBubble; - mInitialTaskFragmentToken = initialTaskFragmentToken; init(); } diff --git a/core/java/android/app/servertransaction/LaunchActivityItem.java b/core/java/android/app/servertransaction/LaunchActivityItem.java index 37cbccb897358..34e4fcdb9140e 100644 --- a/core/java/android/app/servertransaction/LaunchActivityItem.java +++ b/core/java/android/app/servertransaction/LaunchActivityItem.java @@ -73,7 +73,6 @@ public class LaunchActivityItem extends ClientTransactionItem { private IBinder mAssistToken; private IBinder mShareableActivityToken; private boolean mLaunchedFromBubble; - private IBinder mTaskFragmentToken; /** * It is only non-null if the process is the first time to launch activity. It is only an * optimization for quick look up of the interface so the field is ignored for comparison. @@ -87,7 +86,7 @@ public class LaunchActivityItem extends ClientTransactionItem { mOverrideConfig, mCompatInfo, mReferrer, mVoiceInteractor, mState, mPersistentState, mPendingResults, mPendingNewIntents, mActivityOptions, mIsForward, mProfilerInfo, client, mAssistToken, mFixedRotationAdjustments, mShareableActivityToken, - mLaunchedFromBubble, mTaskFragmentToken); + mLaunchedFromBubble); client.addLaunchingActivity(token, r); client.updateProcessState(mProcState, false); client.updatePendingConfiguration(mCurConfig); @@ -125,7 +124,7 @@ public class LaunchActivityItem extends ClientTransactionItem { boolean isForward, ProfilerInfo profilerInfo, IBinder assistToken, IActivityClientController activityClientController, FixedRotationAdjustments fixedRotationAdjustments, IBinder shareableActivityToken, - boolean launchedFromBubble, IBinder taskFragmentToken) { + boolean launchedFromBubble) { LaunchActivityItem instance = ObjectPool.obtain(LaunchActivityItem.class); if (instance == null) { instance = new LaunchActivityItem(); @@ -134,7 +133,7 @@ public class LaunchActivityItem extends ClientTransactionItem { voiceInteractor, procState, state, persistentState, pendingResults, pendingNewIntents, activityOptions, isForward, profilerInfo, assistToken, activityClientController, fixedRotationAdjustments, shareableActivityToken, - launchedFromBubble, taskFragmentToken); + launchedFromBubble); return instance; } @@ -142,7 +141,7 @@ public class LaunchActivityItem extends ClientTransactionItem { @Override public void recycle() { setValues(this, null, 0, null, null, null, null, null, null, 0, null, null, null, null, - null, false, null, null, null, null, null, false, null); + null, false, null, null, null, null, null, false); ObjectPool.recycle(this); } @@ -173,7 +172,6 @@ public class LaunchActivityItem extends ClientTransactionItem { dest.writeTypedObject(mFixedRotationAdjustments, flags); dest.writeStrongBinder(mShareableActivityToken); dest.writeBoolean(mLaunchedFromBubble); - dest.writeStrongBinder(mTaskFragmentToken); } /** Read from Parcel. */ @@ -192,8 +190,7 @@ public class LaunchActivityItem extends ClientTransactionItem { in.readStrongBinder(), IActivityClientController.Stub.asInterface(in.readStrongBinder()), in.readTypedObject(FixedRotationAdjustments.CREATOR), in.readStrongBinder(), - in.readBoolean(), - in.readStrongBinder()); + in.readBoolean()); } public static final @NonNull Creator CREATOR = @@ -232,8 +229,7 @@ public class LaunchActivityItem extends ClientTransactionItem { && Objects.equals(mProfilerInfo, other.mProfilerInfo) && Objects.equals(mAssistToken, other.mAssistToken) && Objects.equals(mFixedRotationAdjustments, other.mFixedRotationAdjustments) - && Objects.equals(mShareableActivityToken, other.mShareableActivityToken) - && Objects.equals(mTaskFragmentToken, other.mTaskFragmentToken); + && Objects.equals(mShareableActivityToken, other.mShareableActivityToken); } @Override @@ -256,7 +252,6 @@ public class LaunchActivityItem extends ClientTransactionItem { result = 31 * result + Objects.hashCode(mAssistToken); result = 31 * result + Objects.hashCode(mFixedRotationAdjustments); result = 31 * result + Objects.hashCode(mShareableActivityToken); - result = 31 * result + Objects.hashCode(mTaskFragmentToken); return result; } @@ -306,7 +301,7 @@ public class LaunchActivityItem extends ClientTransactionItem { ActivityOptions activityOptions, boolean isForward, ProfilerInfo profilerInfo, IBinder assistToken, IActivityClientController activityClientController, FixedRotationAdjustments fixedRotationAdjustments, IBinder shareableActivityToken, - boolean launchedFromBubble, IBinder taskFragmentToken) { + boolean launchedFromBubble) { instance.mIntent = intent; instance.mIdent = ident; instance.mInfo = info; @@ -328,6 +323,5 @@ public class LaunchActivityItem extends ClientTransactionItem { instance.mFixedRotationAdjustments = fixedRotationAdjustments; instance.mShareableActivityToken = shareableActivityToken; instance.mLaunchedFromBubble = launchedFromBubble; - instance.mTaskFragmentToken = taskFragmentToken; } } diff --git a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java index 50639be57f22c..3e261a7113acf 100644 --- a/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/ObjectPoolTests.java @@ -157,7 +157,7 @@ public class ObjectPoolTests { .setPendingResults(resultInfoList()).setPendingNewIntents(referrerIntentList()) .setIsForward(true).setAssistToken(assistToken) .setShareableActivityToken(shareableActivityToken) - .setTaskFragmentToken(new Binder()).build(); + .build(); LaunchActivityItem emptyItem = new LaunchActivityItemBuilder().build(); LaunchActivityItem item = itemSupplier.get(); diff --git a/core/tests/coretests/src/android/app/servertransaction/TestUtils.java b/core/tests/coretests/src/android/app/servertransaction/TestUtils.java index 1173c9210ed5e..75da0bfba5812 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TestUtils.java +++ b/core/tests/coretests/src/android/app/servertransaction/TestUtils.java @@ -112,7 +112,6 @@ class TestUtils { private IBinder mShareableActivityToken; private FixedRotationAdjustments mFixedRotationAdjustments; private boolean mLaunchedFromBubble; - private IBinder mTaskFragmentToken; LaunchActivityItemBuilder setIntent(Intent intent) { mIntent = intent; @@ -214,18 +213,13 @@ class TestUtils { return this; } - LaunchActivityItemBuilder setTaskFragmentToken(IBinder taskFragmentToken) { - mTaskFragmentToken = taskFragmentToken; - return this; - } - LaunchActivityItem build() { return LaunchActivityItem.obtain(mIntent, mIdent, mInfo, mCurConfig, mOverrideConfig, mCompatInfo, mReferrer, mVoiceInteractor, mProcState, mState, mPersistentState, mPendingResults, mPendingNewIntents, mActivityOptions, mIsForward, mProfilerInfo, mAssistToken, null /* activityClientController */, mFixedRotationAdjustments, - mShareableActivityToken, mLaunchedFromBubble, mTaskFragmentToken); + mShareableActivityToken, mLaunchedFromBubble); } } } diff --git a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java index 98c9afd2eb6bf..df0c64c810c66 100644 --- a/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java +++ b/core/tests/coretests/src/android/app/servertransaction/TransactionParcelTests.java @@ -209,7 +209,6 @@ public class TransactionParcelTests { .setPendingNewIntents(referrerIntentList()).setIsForward(true) .setAssistToken(new Binder()).setFixedRotationAdjustments(fixedRotationAdjustments) .setShareableActivityToken(new Binder()) - .setTaskFragmentToken(new Binder()) .build(); writeAndPrepareForReading(item); diff --git a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java index 516a5d288c0f2..269d8424a78f3 100644 --- a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java +++ b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java @@ -299,7 +299,7 @@ public class ActivityThreadClientTest { null /* activityOptions */, true /* isForward */, null /* profilerInfo */, mThread /* client */, null /* asssitToken */, null /* fixedRotationAdjustments */, null /* shareableActivityToken */, - false /* launchedFromBubble */, null /* taskfragmentToken */); + false /* launchedFromBubble */); } @Override diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java index e1c8b11a835cf..42b438041d7a2 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java @@ -172,7 +172,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen void handleActivityCreated(@NonNull Activity launchedActivity) { final List splitRules = getSplitRules(); final TaskFragmentContainer currentContainer = getContainerWithActivity( - launchedActivity.getActivityToken(), launchedActivity); + launchedActivity.getActivityToken()); // Check if the activity is configured to always be expanded. if (shouldExpand(launchedActivity, null, splitRules)) { @@ -262,29 +262,9 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen */ @Nullable TaskFragmentContainer getContainerWithActivity(@NonNull IBinder activityToken) { - return getContainerWithActivity(activityToken, null /* activityToAdd */); - } - - /** - * This method can only be called from {@link #onActivityCreated(Activity)}, use - * {@link #getContainerWithActivity(IBinder) } otherwise. - * - * Returns a container that this activity is registered with. The activity could be created - * before the container appeared, adding the activity to the container if so. - */ - @Nullable - private TaskFragmentContainer getContainerWithActivity(@NonNull IBinder activityToken, - Activity activityToAdd) { - final IBinder taskFragmentToken = ActivityThread.currentActivityThread().getActivityClient( - activityToken).mInitialTaskFragmentToken; for (TaskFragmentContainer container : mContainers) { if (container.hasActivity(activityToken)) { return container; - } else if (container.getTaskFragmentToken().equals(taskFragmentToken)) { - if (activityToAdd != null) { - container.addPendingAppearedActivity(activityToAdd); - } - return container; } } diff --git a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java index 76acca9917d19..4d8a6553d75b6 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityTaskSupervisor.java @@ -853,10 +853,6 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { proc.getThread(), r.appToken); final boolean isTransitionForward = r.isTransitionForward(); - IBinder fragmentToken = null; - if (r.getTaskFragment().getTaskFragmentOrganizerPid() == r.getPid()) { - fragmentToken = r.getTaskFragment().getFragmentToken(); - } clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent), System.identityHashCode(r), r.info, // TODO: Have this take the merged configuration instead of separate global @@ -868,7 +864,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks { results, newIntents, r.takeOptions(), isTransitionForward, proc.createProfilerInfoIfNeeded(), r.assistToken, activityClientController, r.createFixedRotationAdjustmentsIfNeeded(), r.shareableActivityToken, - r.getLaunchedFromBubble(), fragmentToken)); + r.getLaunchedFromBubble())); // Set desired final state. final ActivityLifecycleItem lifecycleItem; diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index fce279d8b805d..b2281f81cbe35 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -2099,10 +2099,6 @@ class TaskFragment extends WindowContainer { } } - int getTaskFragmentOrganizerPid() { - return mTaskFragmentOrganizerPid; - } - /** * Returns a {@link TaskFragmentInfo} with information from this TaskFragment. Should not be * called from {@link Task}.