ClientTransactionHandler.java revision 914aa7da7f0d74f5de358daa616c50cbf5bd9c30
1/* 2 * Copyright 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package android.app; 17 18import android.app.servertransaction.ClientTransaction; 19import android.app.servertransaction.PendingTransactionActions; 20import android.app.servertransaction.TransactionExecutor; 21import android.content.pm.ApplicationInfo; 22import android.content.res.CompatibilityInfo; 23import android.content.res.Configuration; 24import android.os.IBinder; 25import android.util.MergedConfiguration; 26 27import com.android.internal.content.ReferrerIntent; 28 29import java.io.PrintWriter; 30import java.util.List; 31 32/** 33 * Defines operations that a {@link android.app.servertransaction.ClientTransaction} or its items 34 * can perform on client. 35 * @hide 36 */ 37public abstract class ClientTransactionHandler { 38 39 // Schedule phase related logic and handlers. 40 41 /** Prepare and schedule transaction for execution. */ 42 void scheduleTransaction(ClientTransaction transaction) { 43 transaction.preExecute(this); 44 sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction); 45 } 46 47 /** 48 * Execute transaction immediately without scheduling it. This is used for local requests, so 49 * it will also recycle the transaction. 50 */ 51 void executeTransaction(ClientTransaction transaction) { 52 transaction.preExecute(this); 53 getTransactionExecutor().execute(transaction); 54 transaction.recycle(); 55 } 56 57 /** 58 * Get the {@link TransactionExecutor} that will be performing lifecycle transitions and 59 * callbacks for activities. 60 */ 61 abstract TransactionExecutor getTransactionExecutor(); 62 63 abstract void sendMessage(int what, Object obj); 64 65 66 // Prepare phase related logic and handlers. Methods that inform about about pending changes or 67 // do other internal bookkeeping. 68 69 /** Set pending config in case it will be updated by other transaction item. */ 70 public abstract void updatePendingConfiguration(Configuration config); 71 72 /** Set current process state. */ 73 public abstract void updateProcessState(int processState, boolean fromIpc); 74 75 76 // Execute phase related logic and handlers. Methods here execute actual lifecycle transactions 77 // and deliver callbacks. 78 79 /** Destroy the activity. */ 80 public abstract void handleDestroyActivity(IBinder token, boolean finishing, int configChanges, 81 boolean getNonConfigInstance, String reason); 82 83 /** Pause the activity. */ 84 public abstract void handlePauseActivity(IBinder token, boolean finished, boolean userLeaving, 85 int configChanges, PendingTransactionActions pendingActions, String reason); 86 87 /** 88 * Resume the activity. 89 * @param token Target activity token. 90 * @param finalStateRequest Flag indicating if this call is handling final lifecycle state 91 * request for a transaction. 92 * @param isForward Flag indicating if next transition is forward. 93 * @param reason Reason for performing this operation. 94 */ 95 public abstract void handleResumeActivity(IBinder token, boolean finalStateRequest, 96 boolean isForward, String reason); 97 98 /** 99 * Stop the activity. 100 * @param token Target activity token. 101 * @param show Flag indicating whether activity is still shown. 102 * @param configChanges Activity configuration changes. 103 * @param pendingActions Pending actions to be used on this or later stages of activity 104 * transaction. 105 * @param finalStateRequest Flag indicating if this call is handling final lifecycle state 106 * request for a transaction. 107 * @param reason Reason for performing this operation. 108 */ 109 public abstract void handleStopActivity(IBinder token, boolean show, int configChanges, 110 PendingTransactionActions pendingActions, boolean finalStateRequest, String reason); 111 112 /** Report that activity was stopped to server. */ 113 public abstract void reportStop(PendingTransactionActions pendingActions); 114 115 /** Restart the activity after it was stopped. */ 116 public abstract void performRestartActivity(IBinder token, boolean start); 117 118 /** Deliver activity (override) configuration change. */ 119 public abstract void handleActivityConfigurationChanged(IBinder activityToken, 120 Configuration overrideConfig, int displayId); 121 122 /** Deliver result from another activity. */ 123 public abstract void handleSendResult(IBinder token, List<ResultInfo> results); 124 125 /** Deliver multi-window mode change notification. */ 126 public abstract void handleMultiWindowModeChanged(IBinder token, boolean isInMultiWindowMode, 127 Configuration overrideConfig); 128 129 /** Deliver new intent. */ 130 public abstract void handleNewIntent(IBinder token, List<ReferrerIntent> intents, 131 boolean andPause); 132 133 /** Deliver picture-in-picture mode change notification. */ 134 public abstract void handlePictureInPictureModeChanged(IBinder token, boolean isInPipMode, 135 Configuration overrideConfig); 136 137 /** Update window visibility. */ 138 public abstract void handleWindowVisibility(IBinder token, boolean show); 139 140 /** Perform activity launch. */ 141 public abstract Activity handleLaunchActivity(ActivityThread.ActivityClientRecord r, 142 PendingTransactionActions pendingActions); 143 144 /** Perform activity start. */ 145 public abstract void handleStartActivity(ActivityThread.ActivityClientRecord r, 146 PendingTransactionActions pendingActions); 147 148 /** Get package info. */ 149 public abstract LoadedApk getPackageInfoNoCheck(ApplicationInfo ai, 150 CompatibilityInfo compatInfo); 151 152 /** Deliver app configuration change notification. */ 153 public abstract void handleConfigurationChanged(Configuration config); 154 155 /** 156 * Get {@link android.app.ActivityThread.ActivityClientRecord} instance that corresponds to the 157 * provided token. 158 */ 159 public abstract ActivityThread.ActivityClientRecord getActivityClient(IBinder token); 160 161 /** 162 * Prepare activity relaunch to update internal bookkeeping. This is used to track multiple 163 * relaunch and config update requests. 164 * @param token Activity token. 165 * @param pendingResults Activity results to be delivered. 166 * @param pendingNewIntents New intent messages to be delivered. 167 * @param configChanges Mask of configuration changes that have occurred. 168 * @param config New configuration applied to the activity. 169 * @param preserveWindow Whether the activity should try to reuse the window it created, 170 * including the decor view after the relaunch. 171 * @return An initialized instance of {@link ActivityThread.ActivityClientRecord} to use during 172 * relaunch, or {@code null} if relaunch cancelled. 173 */ 174 public abstract ActivityThread.ActivityClientRecord prepareRelaunchActivity(IBinder token, 175 List<ResultInfo> pendingResults, List<ReferrerIntent> pendingNewIntents, 176 int configChanges, MergedConfiguration config, boolean preserveWindow); 177 178 /** 179 * Perform activity relaunch. 180 * @param r Activity client record prepared for relaunch. 181 * @param pendingActions Pending actions to be used on later stages of activity transaction. 182 * */ 183 public abstract void handleRelaunchActivity(ActivityThread.ActivityClientRecord r, 184 PendingTransactionActions pendingActions); 185 186 /** 187 * Report that relaunch request was handled. 188 * @param token Target activity token. 189 * @param pendingActions Pending actions initialized on earlier stages of activity transaction. 190 * Used to check if we should report relaunch to WM. 191 * */ 192 public abstract void reportRelaunch(IBinder token, PendingTransactionActions pendingActions); 193 194 /** 195 * Debugging output. 196 * @param pw {@link PrintWriter} to write logs to. 197 * @param prefix Prefix to prepend to output. 198 */ 199 public abstract void dump(PrintWriter pw, String prefix); 200} 201