Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50f6026f authored by Marco Loaiza's avatar Marco Loaiza
Browse files

Don't pass deviceId in ActivityClientRecord

Refactor to pass it directly from the execute() method in
LaunchActivityItem.

- Removed TODO suggested in review of ag/20723446
- Also stopped sending INVALID id from WindowProcessController
  and always send the top activity deviceId to the app process.

Note: this will incur in a slight behavioral change: when an activity
is re-started, this will not count as the last activity started in terms
of which device ID is assigned to non-UI Contexts. This is not expected
to cause any problems and the behavior is documented in a new CTS test
that covers this case.

Bug: 263402465
Test: atest DeviceAssociationTests
Change-Id: I64e8342374cc41e47a671827751e3e04f88d85d5
parent c75f33a2
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -554,9 +554,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.
@@ -619,7 +616,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,
@@ -641,7 +638,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;
@@ -3872,7 +3868,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();
@@ -3885,7 +3881,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);
@@ -5942,7 +5938,7 @@ public final class ActivityThread extends ClientTransactionHandler
        r.startsNotResumed = startsNotResumed;
        r.overrideConfig = overrideConfig;

        handleLaunchActivity(r, pendingActions, customIntent);
        handleLaunchActivity(r, pendingActions, mLastReportedDeviceId, customIntent);
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -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,
+2 −2
Original line number Diff line number Diff line
@@ -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);
    }

+2 −1
Original line number Diff line number Diff line
@@ -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,
+3 −2
Original line number Diff line number Diff line
@@ -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 */,
Loading