Loading core/java/android/app/ActivityThread.java +6 −6 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static android.view.Display.INVALID_DISPLAY; import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded; import static android.window.ConfigurationHelper.isDifferentDisplay; import static android.window.ConfigurationHelper.shouldUpdateResources; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.internal.os.SafeZipPathValidatorCallback.VALIDATE_ZIP_PATH_FOR_PATH_TRAVERSAL; import static com.android.sdksandbox.flags.Flags.sandboxActivitySdkBasedContext; Loading Loading @@ -3663,10 +3664,9 @@ public final class ActivityThread extends ClientTransactionHandler 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>(); final ArrayList<ResultInfo> list = new ArrayList<>(); list.add(new ResultInfo(id, requestCode, resultCode, data)); final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread, activityToken); final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread); clientTransaction.addCallback(ActivityResultItem.obtain(activityToken, list)); try { mAppThread.scheduleTransaction(clientTransaction); Loading Loading @@ -4441,7 +4441,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.token, r.activity.isFinishing(), /* userLeaving */ true, r.activity.mConfigChangeFlags, /* dontReport */ false, /* autoEnteringPip */ false)); Loading @@ -4449,7 +4449,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void scheduleResume(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(r.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false)); executeTransaction(transaction); Loading Loading @@ -6041,7 +6041,7 @@ public final class ActivityThread extends ClientTransactionHandler final ActivityLifecycleItem lifecycleRequest = TransactionExecutorHelper.getLifecycleRequestForCurrentState(r); // Schedule the transaction. final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.addCallback(activityRelaunchItem); transaction.setLifecycleStateRequest(lifecycleRequest); executeTransaction(transaction); Loading core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +2 −3 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { private Configuration mConfiguration; @Override public void preExecute(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { public void preExecute(@NonNull ClientTransactionHandler client) { 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. Loading @@ -59,8 +59,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { @Nullable @Override public Context getContextToUpdate(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return client.getActivity(getActivityToken()); } Loading core/java/android/app/servertransaction/ActivityRelaunchItem.java +2 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { private ActivityClientRecord mActivityClientRecord; @Override public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { public void preExecute(@NonNull ClientTransactionHandler client) { // The local config is already scaled so only apply if this item is from server side. if (!client.isExecutingLocalTransaction()) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig); Loading @@ -78,7 +78,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { } @Override public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); client.reportRelaunch(r); Loading core/java/android/app/servertransaction/ActivityTransactionItem.java +13 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.app.servertransaction; import static android.app.servertransaction.TransactionExecutorHelper.getActivityName; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import android.annotation.CallSuper; Loading @@ -28,6 +30,7 @@ import android.os.Parcel; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.Objects; /** Loading @@ -49,14 +52,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { ActivityTransactionItem() {} @Override public final void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, public final void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); execute(client, r, pendingActions); } /** * Like {@link #execute(ClientTransactionHandler, IBinder, PendingTransactionActions)}, * Like {@link #execute(ClientTransactionHandler, PendingTransactionActions)}, * but take non-null {@link ActivityClientRecord} as a parameter. */ @VisibleForTesting(visibility = PACKAGE) Loading Loading @@ -111,6 +114,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { mActivityToken = null; } @Override void dump(@NonNull String prefix, @NonNull PrintWriter pw, @NonNull ClientTransactionHandler transactionHandler) { super.dump(prefix, pw, transactionHandler); pw.append(prefix).append("Target activity: ") .println(getActivityName(mActivityToken, transactionHandler)); } // Subclass must override and call super.equals to compare the mActivityToken. @SuppressWarnings("EqualsGetClass") @CallSuper Loading core/java/android/app/servertransaction/BaseClientRequest.java +9 −12 Original line number Diff line number Diff line Loading @@ -16,8 +16,8 @@ package android.app.servertransaction; import android.annotation.NonNull; import android.app.ClientTransactionHandler; import android.os.IBinder; /** * Base interface for individual requests from server to client. Loading @@ -27,31 +27,28 @@ import android.os.IBinder; public interface BaseClientRequest extends ObjectPoolItem { /** * Prepare the client request before scheduling. * Prepares the client request before scheduling. * An example of this might be informing about pending updates for some values. * * @param client Target client handler. * @param token Target activity token. */ default void preExecute(ClientTransactionHandler client, IBinder token) { default void preExecute(@NonNull ClientTransactionHandler client) { } /** * Execute the request. * Executes the request. * @param client Target client handler. * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ void execute(ClientTransactionHandler client, IBinder token, PendingTransactionActions pendingActions); void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions); /** * Perform all actions that need to happen after execution, e.g. report the result to server. * Performs all actions that need to happen after execution, e.g. report the result to server. * @param client Target client handler. * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ default void postExecute(ClientTransactionHandler client, IBinder token, PendingTransactionActions pendingActions) { default void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { } } Loading
core/java/android/app/ActivityThread.java +6 −6 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import static android.view.Display.INVALID_DISPLAY; import static android.window.ConfigurationHelper.freeTextLayoutCachesIfNeeded; import static android.window.ConfigurationHelper.isDifferentDisplay; import static android.window.ConfigurationHelper.shouldUpdateResources; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import static com.android.internal.os.SafeZipPathValidatorCallback.VALIDATE_ZIP_PATH_FOR_PATH_TRAVERSAL; import static com.android.sdksandbox.flags.Flags.sandboxActivitySdkBasedContext; Loading Loading @@ -3663,10 +3664,9 @@ public final class ActivityThread extends ClientTransactionHandler 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>(); final ArrayList<ResultInfo> list = new ArrayList<>(); list.add(new ResultInfo(id, requestCode, resultCode, data)); final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread, activityToken); final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread); clientTransaction.addCallback(ActivityResultItem.obtain(activityToken, list)); try { mAppThread.scheduleTransaction(clientTransaction); Loading Loading @@ -4441,7 +4441,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.token, r.activity.isFinishing(), /* userLeaving */ true, r.activity.mConfigChangeFlags, /* dontReport */ false, /* autoEnteringPip */ false)); Loading @@ -4449,7 +4449,7 @@ public final class ActivityThread extends ClientTransactionHandler } private void scheduleResume(ActivityClientRecord r) { final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(r.token, /* isForward */ false, /* shouldSendCompatFakeFocus */ false)); executeTransaction(transaction); Loading Loading @@ -6041,7 +6041,7 @@ public final class ActivityThread extends ClientTransactionHandler final ActivityLifecycleItem lifecycleRequest = TransactionExecutorHelper.getLifecycleRequestForCurrentState(r); // Schedule the transaction. final ClientTransaction transaction = ClientTransaction.obtain(this.mAppThread, r.token); final ClientTransaction transaction = ClientTransaction.obtain(mAppThread); transaction.addCallback(activityRelaunchItem); transaction.setLifecycleStateRequest(lifecycleRequest); executeTransaction(transaction); Loading
core/java/android/app/servertransaction/ActivityConfigurationChangeItem.java +2 −3 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { private Configuration mConfiguration; @Override public void preExecute(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { public void preExecute(@NonNull ClientTransactionHandler client) { 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. Loading @@ -59,8 +59,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem { @Nullable @Override public Context getContextToUpdate(@NonNull ClientTransactionHandler client, @Nullable IBinder token) { public Context getContextToUpdate(@NonNull ClientTransactionHandler client) { return client.getActivity(getActivityToken()); } Loading
core/java/android/app/servertransaction/ActivityRelaunchItem.java +2 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { private ActivityClientRecord mActivityClientRecord; @Override public void preExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token) { public void preExecute(@NonNull ClientTransactionHandler client) { // The local config is already scaled so only apply if this item is from server side. if (!client.isExecutingLocalTransaction()) { CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig); Loading @@ -78,7 +78,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem { } @Override public void postExecute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, public void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); client.reportRelaunch(r); Loading
core/java/android/app/servertransaction/ActivityTransactionItem.java +13 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.app.servertransaction; import static android.app.servertransaction.TransactionExecutorHelper.getActivityName; import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE; import android.annotation.CallSuper; Loading @@ -28,6 +30,7 @@ import android.os.Parcel; import com.android.internal.annotations.VisibleForTesting; import java.io.PrintWriter; import java.util.Objects; /** Loading @@ -49,14 +52,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { ActivityTransactionItem() {} @Override public final void execute(@NonNull ClientTransactionHandler client, @NonNull IBinder token, public final void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { final ActivityClientRecord r = getActivityClientRecord(client); execute(client, r, pendingActions); } /** * Like {@link #execute(ClientTransactionHandler, IBinder, PendingTransactionActions)}, * Like {@link #execute(ClientTransactionHandler, PendingTransactionActions)}, * but take non-null {@link ActivityClientRecord} as a parameter. */ @VisibleForTesting(visibility = PACKAGE) Loading Loading @@ -111,6 +114,14 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem { mActivityToken = null; } @Override void dump(@NonNull String prefix, @NonNull PrintWriter pw, @NonNull ClientTransactionHandler transactionHandler) { super.dump(prefix, pw, transactionHandler); pw.append(prefix).append("Target activity: ") .println(getActivityName(mActivityToken, transactionHandler)); } // Subclass must override and call super.equals to compare the mActivityToken. @SuppressWarnings("EqualsGetClass") @CallSuper Loading
core/java/android/app/servertransaction/BaseClientRequest.java +9 −12 Original line number Diff line number Diff line Loading @@ -16,8 +16,8 @@ package android.app.servertransaction; import android.annotation.NonNull; import android.app.ClientTransactionHandler; import android.os.IBinder; /** * Base interface for individual requests from server to client. Loading @@ -27,31 +27,28 @@ import android.os.IBinder; public interface BaseClientRequest extends ObjectPoolItem { /** * Prepare the client request before scheduling. * Prepares the client request before scheduling. * An example of this might be informing about pending updates for some values. * * @param client Target client handler. * @param token Target activity token. */ default void preExecute(ClientTransactionHandler client, IBinder token) { default void preExecute(@NonNull ClientTransactionHandler client) { } /** * Execute the request. * Executes the request. * @param client Target client handler. * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ void execute(ClientTransactionHandler client, IBinder token, PendingTransactionActions pendingActions); void execute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions); /** * Perform all actions that need to happen after execution, e.g. report the result to server. * Performs all actions that need to happen after execution, e.g. report the result to server. * @param client Target client handler. * @param token Target activity token. * @param pendingActions Container that may have data pending to be used. */ default void postExecute(ClientTransactionHandler client, IBinder token, PendingTransactionActions pendingActions) { default void postExecute(@NonNull ClientTransactionHandler client, @NonNull PendingTransactionActions pendingActions) { } }