diff options
author | 2023-03-01 14:48:46 +0000 | |
---|---|---|
committer | 2023-03-01 14:48:46 +0000 | |
commit | a717b6e467c1a0bf09d543f41e1a1aeca5057716 (patch) | |
tree | e078c2c71f51f83d9f762ac86bb8c3d2aef19f5c | |
parent | 60d3c059a1c83da2a2096203c02640577e7fd4c8 (diff) | |
parent | 50f6026fc3bf5532fea8539341a8c800d8faf3d6 (diff) |
Merge changes from topics "cherrypick-device_id_activity-jjzdpul0z9", "cherrypick-recreate-activity" into udc-dev
* changes:
Don't pass deviceId in ActivityClientRecord
Update deviceId from server process when activity is destroyed
6 files changed, 19 insertions, 33 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 50275abe249a..dfdfd0e2054e 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -558,9 +558,6 @@ public final class ActivityThread extends ClientTransactionHandler boolean hideForNow; Configuration createdConfig; Configuration overrideConfig; - // TODO(b/263402465): pass deviceId directly in LaunchActivityItem#execute - // The deviceId assigned by the server when this activity was first started. - int mDeviceId; // Used for consolidating configs before sending on to Activity. private Configuration tmpConfig = new Configuration(); // Callback used for updating activity override config and camera compat control state. @@ -623,7 +620,7 @@ public final class ActivityThread extends ClientTransactionHandler } public ActivityClientRecord(IBinder token, Intent intent, int ident, - ActivityInfo info, Configuration overrideConfig, int deviceId, + ActivityInfo info, Configuration overrideConfig, String referrer, IVoiceInteractor voiceInteractor, Bundle state, PersistableBundle persistentState, List<ResultInfo> pendingResults, List<ReferrerIntent> pendingNewIntents, ActivityOptions activityOptions, @@ -645,7 +642,6 @@ public final class ActivityThread extends ClientTransactionHandler this.isForward = isForward; this.profilerInfo = profilerInfo; this.overrideConfig = overrideConfig; - this.mDeviceId = deviceId; this.packageInfo = client.getPackageInfoNoCheck(activityInfo.applicationInfo); mActivityOptions = activityOptions; mLaunchedFromBubble = launchedFromBubble; @@ -3876,7 +3872,7 @@ public final class ActivityThread extends ClientTransactionHandler */ @Override public Activity handleLaunchActivity(ActivityClientRecord r, - PendingTransactionActions pendingActions, Intent customIntent) { + PendingTransactionActions pendingActions, int deviceId, Intent customIntent) { // If we are getting ready to gc after going to the background, well // we are back active so skip it. unscheduleGcIdler(); @@ -3889,7 +3885,7 @@ public final class ActivityThread extends ClientTransactionHandler // Make sure we are running with the most recent config. mConfigurationController.handleConfigurationChanged(null, null); - updateDeviceIdForNonUIContexts(r.mDeviceId); + updateDeviceIdForNonUIContexts(deviceId); if (localLOGV) Slog.v( TAG, "Handling launch of " + r); @@ -5946,7 +5942,7 @@ public final class ActivityThread extends ClientTransactionHandler r.startsNotResumed = startsNotResumed; r.overrideConfig = overrideConfig; - handleLaunchActivity(r, pendingActions, customIntent); + handleLaunchActivity(r, pendingActions, mLastReportedDeviceId, customIntent); } @Override diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java index 6bb38e7294b0..49fb794a0a25 100644 --- a/core/java/android/app/ClientTransactionHandler.java +++ b/core/java/android/app/ClientTransactionHandler.java @@ -188,7 +188,7 @@ public abstract class ClientTransactionHandler { /** Perform activity launch. */ public abstract Activity handleLaunchActivity(@NonNull ActivityClientRecord r, - PendingTransactionActions pendingActions, Intent customIntent); + PendingTransactionActions pendingActions, int deviceId, Intent customIntent); /** Perform activity start. */ public abstract void handleStartActivity(@NonNull ActivityClientRecord r, diff --git a/core/java/android/app/servertransaction/LaunchActivityItem.java b/core/java/android/app/servertransaction/LaunchActivityItem.java index 3d0aa2540068..5833f1b87254 100644 --- a/core/java/android/app/servertransaction/LaunchActivityItem.java +++ b/core/java/android/app/servertransaction/LaunchActivityItem.java @@ -96,11 +96,11 @@ public class LaunchActivityItem extends ClientTransactionItem { PendingTransactionActions pendingActions) { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityStart"); ActivityClientRecord r = new ActivityClientRecord(token, mIntent, mIdent, mInfo, - mOverrideConfig, mDeviceId, mReferrer, mVoiceInteractor, mState, mPersistentState, + mOverrideConfig, mReferrer, mVoiceInteractor, mState, mPersistentState, mPendingResults, mPendingNewIntents, mActivityOptions, mIsForward, mProfilerInfo, client, mAssistToken, mShareableActivityToken, mLaunchedFromBubble, mTaskFragmentToken); - client.handleLaunchActivity(r, pendingActions, null /* customIntent */); + client.handleLaunchActivity(r, pendingActions, mDeviceId, null /* customIntent */); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } diff --git a/core/java/android/app/servertransaction/TransactionExecutor.java b/core/java/android/app/servertransaction/TransactionExecutor.java index c8f7d100a398..bfab61f3ae90 100644 --- a/core/java/android/app/servertransaction/TransactionExecutor.java +++ b/core/java/android/app/servertransaction/TransactionExecutor.java @@ -32,6 +32,7 @@ import static android.app.servertransaction.TransactionExecutorHelper.transactio import android.app.ActivityThread.ActivityClientRecord; import android.app.ClientTransactionHandler; +import android.content.Context; import android.os.IBinder; import android.util.IntArray; import android.util.Slog; @@ -218,7 +219,7 @@ public class TransactionExecutor { switch (state) { case ON_CREATE: mTransactionHandler.handleLaunchActivity(r, mPendingActions, - null /* customIntent */); + Context.DEVICE_ID_INVALID, null /* customIntent */); break; case ON_START: mTransactionHandler.handleStartActivity(r, mPendingActions, diff --git a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java index 539eb6253f4d..be2c27de637c 100644 --- a/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java +++ b/core/tests/mockingcoretests/src/android/app/activity/ActivityThreadClientTest.java @@ -51,6 +51,7 @@ import android.app.ActivityThread.ActivityClientRecord; import android.app.LoadedApk; import android.app.servertransaction.PendingTransactionActions; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; @@ -293,7 +294,7 @@ public class ActivityThreadClientTest { private Activity launchActivity(ActivityClientRecord r) { return mThread.handleLaunchActivity(r, null /* pendingActions */, - null /* customIntent */); + Context.DEVICE_ID_DEFAULT, null /* customIntent */); } private void startActivity(ActivityClientRecord r) { @@ -347,7 +348,7 @@ public class ActivityThreadClientTest { doNothing().when(packageInfo).updateApplicationInfo(any(), any()); return new ActivityClientRecord(mock(IBinder.class), Intent.makeMainActivity(component), - 0 /* ident */, info, new Configuration(), 0 /*deviceId */, null /* referrer */, + 0 /* ident */, info, new Configuration(), null /* referrer */, null /* voiceInteractor */, null /* state */, null /* persistentState */, null /* pendingResults */, null /* pendingNewIntents */, null /* activityOptions */, true /* isForward */, null /* profilerInfo */, diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index 7c0318d2bee4..aa10291a0364 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -210,7 +210,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio /** Whether {@link #mLastReportedConfiguration} is deferred by the cached state. */ private volatile boolean mHasCachedConfiguration; - private int mTopActivityDeviceId = Context.DEVICE_ID_DEFAULT; + private int mLastTopActivityDeviceId = Context.DEVICE_ID_DEFAULT; /** * Registered {@link DisplayArea} as a listener to override config changes. {@code null} if not * registered. @@ -1411,8 +1411,9 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio // If deviceId for the top-activity changed, schedule passing it to the app process. boolean topActivityDeviceChanged = false; int deviceId = getTopActivityDeviceId(); - if (deviceId != mTopActivityDeviceId) { + if (deviceId != mLastTopActivityDeviceId) { topActivityDeviceChanged = true; + mLastTopActivityDeviceId = deviceId; } final Configuration config = getConfiguration(); @@ -1431,15 +1432,12 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio return; } - // TODO(b/263402938): Add tests that capture the deviceId dispatch to the client. - mTopActivityDeviceId = deviceId; - dispatchConfiguration(config, topActivityDeviceChanged ? mTopActivityDeviceId - : Context.DEVICE_ID_INVALID); + dispatchConfiguration(config); } private int getTopActivityDeviceId() { ActivityRecord topActivity = getTopNonFinishingActivity(); - int updatedDeviceId = mTopActivityDeviceId; + int updatedDeviceId = Context.DEVICE_ID_DEFAULT; if (topActivity != null && topActivity.mDisplayContent != null) { updatedDeviceId = mAtm.mTaskSupervisor.getDeviceIdForDisplayId( topActivity.mDisplayContent.mDisplayId); @@ -1484,10 +1482,6 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio } void dispatchConfiguration(Configuration config) { - dispatchConfiguration(config, getTopActivityDeviceId()); - } - - void dispatchConfiguration(Configuration config, int deviceId) { mHasPendingConfigurationChange = false; if (mThread == null) { if (Build.IS_DEBUGGABLE && mHasImeService) { @@ -1514,16 +1508,10 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio } } - scheduleConfigurationChange(mThread, config, deviceId); + scheduleConfigurationChange(mThread, config); } private void scheduleConfigurationChange(IApplicationThread thread, Configuration config) { - // By default send invalid deviceId as no-op signal so it's not updated on the client side. - scheduleConfigurationChange(thread, config, Context.DEVICE_ID_INVALID); - } - - private void scheduleConfigurationChange(IApplicationThread thread, Configuration config, - int deviceId) { ProtoLog.v(WM_DEBUG_CONFIGURATION, "Sending to proc %s new config %s", mName, config); if (Build.IS_DEBUGGABLE && mHasImeService) { @@ -1533,7 +1521,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio mHasCachedConfiguration = false; try { mAtm.getLifecycleManager().scheduleTransaction(thread, - ConfigurationChangeItem.obtain(config, deviceId)); + ConfigurationChangeItem.obtain(config, mLastTopActivityDeviceId)); } catch (Exception e) { Slog.e(TAG_CONFIGURATION, "Failed to schedule configuration change: " + mOwner, e); } |