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

Commit af26d35c authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Synchronize window config updates (4/n)" into main

parents 48b1df7f aa550580
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -3655,15 +3655,16 @@ public final class ActivityThread extends ClientTransactionHandler
    }

    @UnsupportedAppUsage
    public final void sendActivityResult(
            IBinder token, String id, int requestCode,
    public void sendActivityResult(
            IBinder activityToken, String id, int requestCode,
            int resultCode, Intent data) {
        if (DEBUG_RESULTS) Slog.v(TAG, "sendActivityResult: id=" + id
                + " req=" + requestCode + " res=" + resultCode + " data=" + data);
        ArrayList<ResultInfo> list = new ArrayList<ResultInfo>();
        list.add(new ResultInfo(id, requestCode, resultCode, data));
        final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread, token);
        clientTransaction.addCallback(ActivityResultItem.obtain(list));
        final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread,
                activityToken);
        clientTransaction.addCallback(ActivityResultItem.obtain(activityToken, list));
        try {
            mAppThread.scheduleTransaction(clientTransaction);
        } catch (RemoteException e) {
@@ -4365,16 +4366,16 @@ public final class ActivityThread extends ClientTransactionHandler

    private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) {
        final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token);
        transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.activity.isFinishing(),
                /* userLeaving */ true, r.activity.mConfigChangeFlags, /* dontReport */ false,
                /* autoEnteringPip */ false));
        transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.token,
                r.activity.isFinishing(), /* userLeaving */ true, r.activity.mConfigChangeFlags,
                /* dontReport */ false, /* autoEnteringPip */ false));
        executeTransaction(transaction);
    }

    private void scheduleResume(ActivityClientRecord r) {
        final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token);
        transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(/* isForward */ false,
                /* shouldSendCompatFakeFocus */ false));
        transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(r.token,
                /* isForward */ false, /* shouldSendCompatFakeFocus */ false));
        executeTransaction(transaction);
    }

@@ -5958,8 +5959,8 @@ public final class ActivityThread extends ClientTransactionHandler
                        ? r.createdConfig : mConfigurationController.getConfiguration(),
                r.overrideConfig);
        final ActivityRelaunchItem activityRelaunchItem = ActivityRelaunchItem.obtain(
                null /* pendingResults */, null /* pendingIntents */, 0 /* configChanges */,
                mergedConfiguration, r.mPreserveWindow);
                r.token, null /* pendingResults */, null /* pendingIntents */,
                0 /* configChanges */, mergedConfiguration, r.mPreserveWindow);
        // Make sure to match the existing lifecycle state in the end of the transaction.
        final ActivityLifecycleItem lifecycleRequest =
                TransactionExecutorHelper.getLifecycleRequestForCurrentState(r);
+26 −17
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
        CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration);
        // Notify the client of an upcoming change in the token configuration. This ensures that
        // batches of config change items only process the newest configuration.
        client.updatePendingActivityConfiguration(token, mConfiguration);
        client.updatePendingActivityConfiguration(getActivityToken(), mConfiguration);
    }

    @Override
@@ -61,8 +61,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client,
            @Nullable IBinder token) {
        // TODO(b/260873529): Update ClientTransaction to bundle multiple activity config updates.
        return client.getActivity(token);
        return client.getActivity(getActivityToken());
    }

    // ObjectPoolItem implementation
@@ -70,7 +69,9 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    private ActivityConfigurationChangeItem() {}

    /** Obtain an instance initialized with provided params. */
    public static ActivityConfigurationChangeItem obtain(@NonNull Configuration config) {
    @NonNull
    public static ActivityConfigurationChangeItem obtain(@NonNull IBinder activityToken,
            @NonNull Configuration config) {
        if (config == null) {
            throw new IllegalArgumentException("Config must not be null.");
        }
@@ -80,6 +81,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
        if (instance == null) {
            instance = new ActivityConfigurationChangeItem();
        }
        instance.setActivityToken(activityToken);
        instance.mConfiguration = config;

        return instance;
@@ -87,6 +89,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {

    @Override
    public void recycle() {
        super.recycle();
        mConfiguration = Configuration.EMPTY;
        ObjectPool.recycle(this);
    }
@@ -96,18 +99,20 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {

    /** Write to Parcel. */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeTypedObject(mConfiguration, flags);
    }

    /** Read from Parcel. */
    private ActivityConfigurationChangeItem(Parcel in) {
    private ActivityConfigurationChangeItem(@NonNull Parcel in) {
        super(in);
        mConfiguration = in.readTypedObject(Configuration.CREATOR);
    }

    public static final @NonNull Creator<ActivityConfigurationChangeItem> CREATOR =
            new Creator<ActivityConfigurationChangeItem>() {
        public ActivityConfigurationChangeItem createFromParcel(Parcel in) {
            new Creator<>() {
                public ActivityConfigurationChangeItem createFromParcel(@NonNull Parcel in) {
                    return new ActivityConfigurationChangeItem(in);
                }

@@ -121,7 +126,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
        if (!super.equals(o)) {
            return false;
        }
        final ActivityConfigurationChangeItem other = (ActivityConfigurationChangeItem) o;
@@ -130,11 +135,15 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {

    @Override
    public int hashCode() {
        return mConfiguration.hashCode();
        int result = 17;
        result = 31 * result + super.hashCode();
        result = 31 * result + Objects.hashCode(mConfiguration);
        return result;
    }

    @Override
    public String toString() {
        return "ActivityConfigurationChange{config=" + mConfiguration + "}";
        return "ActivityConfigurationChange{" + super.toString()
                + ",config=" + mConfiguration + "}";
    }
}
+8 −5
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package android.app.servertransaction;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.os.Parcel;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -50,12 +52,13 @@ public abstract class ActivityLifecycleItem extends ActivityTransactionItem {
    public static final int ON_DESTROY = 6;
    public static final int ON_RESTART = 7;

    ActivityLifecycleItem() {}

    ActivityLifecycleItem(@NonNull Parcel in) {
        super(in);
    }

    /** A final lifecycle state that an activity should reach. */
    @LifecycleState
    public abstract int getTargetState();

    /** Called by subclasses to make sure base implementation is cleaned up */
    @Override
    public void recycle() {
    }
}
+34 −24
Original line number Diff line number Diff line
@@ -56,18 +56,18 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    private ActivityClientRecord mActivityClientRecord;

    @Override
    public void preExecute(ClientTransactionHandler client, IBinder token) {
    public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) {
        // The local config is already scaled so only apply if this item is from server side.
        if (!client.isExecutingLocalTransaction()) {
            CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig);
        }
        mActivityClientRecord = client.prepareRelaunchActivity(token, mPendingResults,
        mActivityClientRecord = client.prepareRelaunchActivity(getActivityToken(), mPendingResults,
                mPendingNewIntents, mConfigChanges, mConfig, mPreserveWindow);
    }

    @Override
    public void execute(ClientTransactionHandler client, ActivityClientRecord r,
            PendingTransactionActions pendingActions) {
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        if (mActivityClientRecord == null) {
            if (DEBUG_ORDER) Slog.d(TAG, "Activity relaunch cancelled");
            return;
@@ -78,9 +78,9 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    }

    @Override
    public void postExecute(ClientTransactionHandler client, IBinder token,
            PendingTransactionActions pendingActions) {
        final ActivityClientRecord r = getActivityClientRecord(client, token);
    public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token,
            @NonNull PendingTransactionActions pendingActions) {
        final ActivityClientRecord r = getActivityClientRecord(client);
        client.reportRelaunch(r);
    }

@@ -89,13 +89,16 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    private ActivityRelaunchItem() {}

    /** Obtain an instance initialized with provided params. */
    public static ActivityRelaunchItem obtain(List<ResultInfo> pendingResults,
            List<ReferrerIntent> pendingNewIntents, int configChanges, MergedConfiguration config,
            boolean preserveWindow) {
    @NonNull
    public static ActivityRelaunchItem obtain(@NonNull IBinder activityToken,
            @Nullable List<ResultInfo> pendingResults,
            @Nullable List<ReferrerIntent> pendingNewIntents, int configChanges,
            @NonNull MergedConfiguration config, boolean preserveWindow) {
        ActivityRelaunchItem instance = ObjectPool.obtain(ActivityRelaunchItem.class);
        if (instance == null) {
            instance = new ActivityRelaunchItem();
        }
        instance.setActivityToken(activityToken);
        instance.mPendingResults = pendingResults;
        instance.mPendingNewIntents = pendingNewIntents;
        instance.mConfigChanges = configChanges;
@@ -107,6 +110,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {

    @Override
    public void recycle() {
        super.recycle();
        mPendingResults = null;
        mPendingNewIntents = null;
        mConfigChanges = 0;
@@ -121,7 +125,8 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {

    /** Write to Parcel. */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeTypedList(mPendingResults, flags);
        dest.writeTypedList(mPendingNewIntents, flags);
        dest.writeInt(mConfigChanges);
@@ -130,7 +135,8 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    }

    /** Read from Parcel. */
    private ActivityRelaunchItem(Parcel in) {
    private ActivityRelaunchItem(@NonNull Parcel in) {
        super(in);
        mPendingResults = in.createTypedArrayList(ResultInfo.CREATOR);
        mPendingNewIntents = in.createTypedArrayList(ReferrerIntent.CREATOR);
        mConfigChanges = in.readInt();
@@ -139,8 +145,8 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    }

    public static final @NonNull Creator<ActivityRelaunchItem> CREATOR =
            new Creator<ActivityRelaunchItem>() {
        public ActivityRelaunchItem createFromParcel(Parcel in) {
            new Creator<>() {
                public ActivityRelaunchItem createFromParcel(@NonNull Parcel in) {
                    return new ActivityRelaunchItem(in);
                }

@@ -154,7 +160,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
        if (!super.equals(o)) {
            return false;
        }
        final ActivityRelaunchItem other = (ActivityRelaunchItem) o;
@@ -167,6 +173,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + super.hashCode();
        result = 31 * result + Objects.hashCode(mPendingResults);
        result = 31 * result + Objects.hashCode(mPendingNewIntents);
        result = 31 * result + mConfigChanges;
@@ -177,8 +184,11 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {

    @Override
    public String toString() {
        return "ActivityRelaunchItem{pendingResults=" + mPendingResults
                + ",pendingNewIntents=" + mPendingNewIntents + ",configChanges="  + mConfigChanges
                + ",config=" + mConfig + ",preserveWindow" + mPreserveWindow + "}";
        return "ActivityRelaunchItem{" + super.toString()
                + ",pendingResults=" + mPendingResults
                + ",pendingNewIntents=" + mPendingNewIntents
                + ",configChanges="  + mConfigChanges
                + ",config=" + mConfig
                + ",preserveWindow" + mPreserveWindow + "}";
    }
}
+27 −18
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Trace;
@@ -61,24 +62,26 @@ public class ActivityResultItem extends ActivityTransactionItem {
    }

    @Override
    public void execute(ClientTransactionHandler client, ActivityClientRecord r,
            PendingTransactionActions pendingActions) {
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityDeliverResult");
        client.handleSendResult(r, mResultInfoList, "ACTIVITY_RESULT");
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }


    // ObjectPoolItem implementation

    private ActivityResultItem() {}

    /** Obtain an instance initialized with provided params. */
    public static ActivityResultItem obtain(List<ResultInfo> resultInfoList) {
    @NonNull
    public static ActivityResultItem obtain(@NonNull IBinder activityToken,
            @NonNull List<ResultInfo> resultInfoList) {
        ActivityResultItem instance = ObjectPool.obtain(ActivityResultItem.class);
        if (instance == null) {
            instance = new ActivityResultItem();
        }
        instance.setActivityToken(activityToken);
        instance.mResultInfoList = resultInfoList;

        return instance;
@@ -86,27 +89,29 @@ public class ActivityResultItem extends ActivityTransactionItem {

    @Override
    public void recycle() {
        super.recycle();
        mResultInfoList = null;
        ObjectPool.recycle(this);
    }


    // Parcelable implementation

    /** Write to Parcel. */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        dest.writeTypedList(mResultInfoList, flags);
    }

    /** Read from Parcel. */
    private ActivityResultItem(Parcel in) {
    private ActivityResultItem(@NonNull Parcel in) {
        super(in);
        mResultInfoList = in.createTypedArrayList(ResultInfo.CREATOR);
    }

    public static final @NonNull Parcelable.Creator<ActivityResultItem> CREATOR =
            new Parcelable.Creator<ActivityResultItem>() {
        public ActivityResultItem createFromParcel(Parcel in) {
            new Parcelable.Creator<>() {
                public ActivityResultItem createFromParcel(@NonNull Parcel in) {
                    return new ActivityResultItem(in);
                }

@@ -120,7 +125,7 @@ public class ActivityResultItem extends ActivityTransactionItem {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
        if (!super.equals(o)) {
            return false;
        }
        final ActivityResultItem other = (ActivityResultItem) o;
@@ -129,11 +134,15 @@ public class ActivityResultItem extends ActivityTransactionItem {

    @Override
    public int hashCode() {
        return mResultInfoList.hashCode();
        int result = 17;
        result = 31 * result + super.hashCode();
        result = 31 * result + Objects.hashCode(mResultInfoList);
        return result;
    }

    @Override
    public String toString() {
        return "ActivityResultItem{resultInfoList=" + mResultInfoList + "}";
        return "ActivityResultItem{" + super.toString()
                + ",resultInfoList=" + mResultInfoList + "}";
    }
}
Loading