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

Commit e5fdbedd authored by Joe Antonetti's avatar Joe Antonetti Committed by Android (Google) Code Review
Browse files

Merge "[Handoff][8/N] Store HandoffActivityData on ActivityRecord" into main

parents 215b82c5 371e5e8f
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.os.UserHandle.getCallingUserId;

import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.app.HandoffActivityData;
import android.content.ComponentName;
import android.content.ContentProvider;
import android.content.Intent;
@@ -95,9 +96,13 @@ public class ActivityClient {

    /** Reports {@link Activity#onStop()} is done. */
    public void activityStopped(IBinder token, Bundle state, PersistableBundle persistentState,
            CharSequence description) {
            HandoffActivityData handoffActivityData, CharSequence description) {
        try {
            getActivityClientController().activityStopped(token, state, persistentState,
            getActivityClientController().activityStopped(
                token,
                state,
                persistentState,
                handoffActivityData,
                description);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
+12 −0
Original line number Diff line number Diff line
@@ -648,6 +648,7 @@ public final class ActivityThread extends ClientTransactionHandler
        boolean hideForNow;
        Configuration createdConfig;
        Configuration overrideConfig;
        HandoffActivityData handoffActivityData;
        @NonNull
        private final ActivityWindowInfo mActivityWindowInfo = new ActivityWindowInfo();
        @NonNull
@@ -6311,6 +6312,10 @@ public final class ActivityThread extends ClientTransactionHandler
        stopInfo.setActivity(r);
        stopInfo.setState(r.state);
        stopInfo.setPersistentState(r.persistentState);
        if (android.companion.Flags.enableTaskContinuity()) {
            stopInfo.setHandoffActivityData(r.handoffActivityData);
        }

        pendingActions.setStopInfo(stopInfo);
        mSomeActivitiesChanged = true;
    }
@@ -6851,6 +6856,13 @@ public final class ActivityThread extends ClientTransactionHandler
    private void callActivityOnSaveInstanceState(ActivityClientRecord r) {
        r.state = new Bundle();
        r.state.setAllowFds(false);

        if (android.companion.Flags.enableTaskContinuity() && r.activity.isHandoffEnabled()) {
            final HandoffActivityDataRequestInfo requestInfo
                    = new HandoffActivityDataRequestInfo(false /* isActiveRequest */);
            r.handoffActivityData = r.activity.onHandoffActivityDataRequested(requestInfo);
        }

        if (r.isPersistable()) {
            r.persistentState = new PersistableBundle();
            mInstrumentation.callActivityOnSaveInstanceState(r.activity, r.state,
+4 −1
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@ public final class HandoffFailureCode {
            HANDOFF_FAILURE_UNKNOWN_TASK,
            HANDOFF_FAILURE_INTERNAL_ERROR,
            HANDOFF_FAILURE_EMPTY_TASK,
            HANDOFF_FAILURE_UNSUPPORTED_TASK
            HANDOFF_FAILURE_UNSUPPORTED_TASK,
            HANDOFF_FAILURE_APP_DID_NOT_REPORT_HANDOFF_DATA,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface FailureCode {}
@@ -53,4 +54,6 @@ public final class HandoffFailureCode {
    public static final int HANDOFF_FAILURE_EMPTY_TASK = 5;
    /** The handoff task data request was for a task whose top activity does not support handoff. */
    public static final int HANDOFF_FAILURE_UNSUPPORTED_TASK = 6;
    /** Handoff task data was not reported by the app, despite the app supporting handoff. */
    public static final int HANDOFF_FAILURE_APP_DID_NOT_REPORT_HANDOFF_DATA = 7;
}
 No newline at end of file
+7 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app;

import android.app.ActivityManager;
import android.app.HandoffActivityData;
import android.app.IRequestFinishCallback;
import android.app.PictureInPictureParams;
import android.content.ComponentName;
@@ -52,8 +53,12 @@ interface IActivityClientController {
     * there won't be other lifecycle changes.
     */
    void activityPaused(in IBinder token);
    oneway void activityStopped(in IBinder token, in Bundle state,
            in PersistableBundle persistentState, in CharSequence description);
    oneway void activityStopped(
        in IBinder token,
        in Bundle state,
        in PersistableBundle persistentState,
        in HandoffActivityData handoffActivityData,
        in CharSequence description);
    oneway void activityDestroyed(in IBinder token);
    oneway void activityLocalRelaunch(in IBinder token);
    oneway void activityRelaunched(in IBinder token);
+11 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.ActivityThread.DEBUG_MEMORY_TRIM;

import android.app.ActivityClient;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.HandoffActivityData;
import android.os.Build;
import android.os.Bundle;
import android.os.PersistableBundle;
@@ -98,6 +99,7 @@ public class PendingTransactionActions {
        private ActivityClientRecord mActivity;
        private Bundle mState;
        private PersistableBundle mPersistentState;
        private HandoffActivityData mHandoffActivityData;
        private CharSequence mDescription;

        public void setActivity(ActivityClientRecord activity) {
@@ -112,6 +114,10 @@ public class PendingTransactionActions {
            mPersistentState = persistentState;
        }

        public void setHandoffActivityData(HandoffActivityData handoffActivityData) {
            mHandoffActivityData = handoffActivityData;
        }

        public void setDescription(CharSequence description) {
            mDescription = description;
        }
@@ -133,7 +139,11 @@ public class PendingTransactionActions {
                if (DEBUG_MEMORY_TRIM) Slog.v(TAG, "Reporting activity stopped: " + mActivity);
                // TODO(lifecycler): Use interface callback instead of AMS.
                ActivityClient.getInstance().activityStopped(
                        mActivity.token, mState, mPersistentState, mDescription);
                    mActivity.token,
                    mState,
                    mPersistentState,
                    mHandoffActivityData,
                    mDescription);
            } catch (RuntimeException runtimeException) {
                // Collect the statistics about bundle
                final String bundleStats = collectBundleStates();
Loading