From d5af95b56f232e120a7c824637d522d02b60efe4 Mon Sep 17 00:00:00 2001 From: Chilun Huang Date: Tue, 18 Aug 2020 02:53:49 +0000 Subject: Revert "Revert "Introduce ActivityTransactionItem and reduce null checks"" This reverts commit fd2be2c17882c7db2833ed35c2b4da975801e527. Reason for revert: Reland the CL This class is used for activity-targeting item to inherit, which encapsulate null checks of activity client record. This patch also change signature of ClientTransactionHandler#handle* and reduces null checks. In addition, add some null pointer checks after getActivityClient(). Also fix a typo in performStopActivityInner() and performDestroyActivity(). Bug: 127877792 Bug: 164982975 Test: atest frameworks/base/core/tests/coretests/src/android/app/servertransaction Test: atest ActivityThreadTest ActivityThreadClientTest Test: atest TransactionExecutorTests#testActivityItemNullRecordThrowsException Test: atest TransactionExecutorTests#testActivityItemExecute Test: atest CtsAppTestCases:LocalActivityManagerTest Change-Id: Ida612f1c8af7ecd7a04e69ade461403b8711508a --- .../java/android/app/ClientTransactionHandler.java | 54 ++++++++++++---------- 1 file changed, 30 insertions(+), 24 deletions(-) (limited to 'core/java/android/app/ClientTransactionHandler.java') diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java index 2df756e80fde..ac50676ff46b 100644 --- a/core/java/android/app/ClientTransactionHandler.java +++ b/core/java/android/app/ClientTransactionHandler.java @@ -15,6 +15,8 @@ */ package android.app; +import android.annotation.NonNull; +import android.app.ActivityThread.ActivityClientRecord; import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.ClientTransactionItem; import android.app.servertransaction.PendingTransactionActions; @@ -89,37 +91,38 @@ public abstract class ClientTransactionHandler { public abstract Map getActivitiesToBeDestroyed(); /** Destroy the activity. */ - public abstract void handleDestroyActivity(IBinder token, boolean finishing, int configChanges, - boolean getNonConfigInstance, String reason); + public abstract void handleDestroyActivity(@NonNull ActivityClientRecord r, boolean finishing, + int configChanges, boolean getNonConfigInstance, String reason); /** Pause the activity. */ - public abstract void handlePauseActivity(IBinder token, boolean finished, boolean userLeaving, - int configChanges, PendingTransactionActions pendingActions, String reason); + public abstract void handlePauseActivity(@NonNull ActivityClientRecord r, boolean finished, + boolean userLeaving, int configChanges, PendingTransactionActions pendingActions, + String reason); /** * Resume the activity. - * @param token Target activity token. + * @param r Target activity record. * @param finalStateRequest Flag indicating if this call is handling final lifecycle state * request for a transaction. * @param isForward Flag indicating if next transition is forward. * @param reason Reason for performing this operation. */ - public abstract void handleResumeActivity(IBinder token, boolean finalStateRequest, - boolean isForward, String reason); + public abstract void handleResumeActivity(@NonNull ActivityClientRecord r, + boolean finalStateRequest, boolean isForward, String reason); /** * Notify the activity about top resumed state change. - * @param token Target activity token. + * @param r Target activity record. * @param isTopResumedActivity Current state of the activity, {@code true} if it's the * topmost resumed activity in the system, {@code false} otherwise. * @param reason Reason for performing this operation. */ - public abstract void handleTopResumedActivityChanged(IBinder token, + public abstract void handleTopResumedActivityChanged(@NonNull ActivityClientRecord r, boolean isTopResumedActivity, String reason); /** * Stop the activity. - * @param token Target activity token. + * @param r Target activity record. * @param configChanges Activity configuration changes. * @param pendingActions Pending actions to be used on this or later stages of activity * transaction. @@ -127,38 +130,40 @@ public abstract class ClientTransactionHandler { * request for a transaction. * @param reason Reason for performing this operation. */ - public abstract void handleStopActivity(IBinder token, int configChanges, + public abstract void handleStopActivity(@NonNull ActivityClientRecord r, int configChanges, PendingTransactionActions pendingActions, boolean finalStateRequest, String reason); /** Report that activity was stopped to server. */ public abstract void reportStop(PendingTransactionActions pendingActions); /** Restart the activity after it was stopped. */ - public abstract void performRestartActivity(IBinder token, boolean start); + public abstract void performRestartActivity(@NonNull ActivityClientRecord r, boolean start); /** Set pending activity configuration in case it will be updated by other transaction item. */ - public abstract void updatePendingActivityConfiguration(IBinder activityToken, + public abstract void updatePendingActivityConfiguration(@NonNull ActivityClientRecord r, Configuration overrideConfig); /** Deliver activity (override) configuration change. */ - public abstract void handleActivityConfigurationChanged(IBinder activityToken, + public abstract void handleActivityConfigurationChanged(@NonNull ActivityClientRecord r, Configuration overrideConfig, int displayId); /** Deliver result from another activity. */ - public abstract void handleSendResult(IBinder token, List results, String reason); + public abstract void handleSendResult( + @NonNull ActivityClientRecord r, List results, String reason); /** Deliver new intent. */ - public abstract void handleNewIntent(IBinder token, List intents); + public abstract void handleNewIntent( + @NonNull ActivityClientRecord r, List intents); /** Request that an activity enter picture-in-picture. */ - public abstract void handlePictureInPictureRequested(IBinder token); + public abstract void handlePictureInPictureRequested(@NonNull ActivityClientRecord r); /** Perform activity launch. */ - public abstract Activity handleLaunchActivity(ActivityThread.ActivityClientRecord r, + public abstract Activity handleLaunchActivity(@NonNull ActivityClientRecord r, PendingTransactionActions pendingActions, Intent customIntent); /** Perform activity start. */ - public abstract void handleStartActivity(IBinder token, + public abstract void handleStartActivity(@NonNull ActivityClientRecord r, PendingTransactionActions pendingActions); /** Get package info. */ @@ -176,7 +181,7 @@ public abstract class ClientTransactionHandler { * Get {@link android.app.ActivityThread.ActivityClientRecord} instance that corresponds to the * provided token. */ - public abstract ActivityThread.ActivityClientRecord getActivityClient(IBinder token); + public abstract ActivityClientRecord getActivityClient(IBinder token); /** * Prepare activity relaunch to update internal bookkeeping. This is used to track multiple @@ -191,7 +196,7 @@ public abstract class ClientTransactionHandler { * @return An initialized instance of {@link ActivityThread.ActivityClientRecord} to use during * relaunch, or {@code null} if relaunch cancelled. */ - public abstract ActivityThread.ActivityClientRecord prepareRelaunchActivity(IBinder token, + public abstract ActivityClientRecord prepareRelaunchActivity(IBinder token, List pendingResults, List pendingNewIntents, int configChanges, MergedConfiguration config, boolean preserveWindow); @@ -200,14 +205,15 @@ public abstract class ClientTransactionHandler { * @param r Activity client record prepared for relaunch. * @param pendingActions Pending actions to be used on later stages of activity transaction. * */ - public abstract void handleRelaunchActivity(ActivityThread.ActivityClientRecord r, + public abstract void handleRelaunchActivity(@NonNull ActivityClientRecord r, PendingTransactionActions pendingActions); /** * Report that relaunch request was handled. - * @param token Target activity token. + * @param r Target activity record. * @param pendingActions Pending actions initialized on earlier stages of activity transaction. * Used to check if we should report relaunch to WM. * */ - public abstract void reportRelaunch(IBinder token, PendingTransactionActions pendingActions); + public abstract void reportRelaunch(@NonNull ActivityClientRecord r, + PendingTransactionActions pendingActions); } -- cgit v1.2.3