Merge changes from topics "cherrypick-device_id_activity-jjzdpul0z9", "cherrypick-recreate-activity" into udc-dev am: a717b6e467

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21468067

Change-Id: Ia549c5573cafaa0b9b00745399dc5c765d84e6a1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Marco Loaiza
2023-03-01 14:58:44 +00:00
committed by Automerger Merge Worker
6 changed files with 15 additions and 28 deletions

View File

@@ -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

View File

@@ -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,

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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 */,

View File

@@ -1432,8 +1432,7 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
return;
}
dispatchConfiguration(config, topActivityDeviceChanged ? mLastTopActivityDeviceId
: Context.DEVICE_ID_INVALID);
dispatchConfiguration(config);
}
private int getTopActivityDeviceId() {
@@ -1483,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) {
@@ -1513,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) {
@@ -1532,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);
}