blob: feeb0f23e751bed75d8901cfe8ad4eba3acb3f5b [file] [log] [blame]
Jeff Brown13014b52014-04-07 19:45:27 -07001/*
2 * Copyright (C) 2014 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 */
16
17package android.app;
18
Jeff Brown061ea992015-04-17 19:55:47 -070019import android.annotation.NonNull;
Jorim Jaggife762342016-10-13 14:33:27 +020020import android.annotation.Nullable;
Fyodor Kupolovb5013302015-04-17 17:59:14 -070021import android.content.ComponentName;
Felipe Lemea1b79bf2016-05-24 13:06:54 -070022import android.content.IIntentSender;
Makoto Onukiea11db12016-06-24 15:17:44 -070023import android.content.Intent;
Suprabh Shukla64725012016-06-15 13:19:28 -070024import android.content.res.Configuration;
Makoto Onukiea11db12016-06-24 15:17:44 -070025import android.os.Bundle;
Amith Yamasani0af6fa72016-01-17 15:36:19 -080026import android.os.IBinder;
Sudheer Shankac766db02017-06-12 10:37:29 -070027import android.os.SystemClock;
Amith Yamasani0af6fa72016-01-17 15:36:19 -080028import android.service.voice.IVoiceInteractionSession;
Jorim Jaggi3878ca32017-02-02 17:13:05 -080029import android.util.SparseIntArray;
Amith Yamasani0af6fa72016-01-17 15:36:19 -080030
31import com.android.internal.app.IVoiceInteractor;
Jeff Brown061ea992015-04-17 19:55:47 -070032
Amith Yamasanie8222e52016-04-08 15:28:47 -070033import java.util.List;
34
Jeff Brown13014b52014-04-07 19:45:27 -070035/**
36 * Activity manager local system service interface.
37 *
38 * @hide Only for use within the system server.
39 */
40public abstract class ActivityManagerInternal {
Jorim Jaggi275561a2016-02-23 10:11:02 -050041
42 /**
Jorim Jaggi275561a2016-02-23 10:11:02 -050043 * Type for {@link #notifyAppTransitionStarting}: The transition was started because we drew
Jorim Jaggi3878ca32017-02-02 17:13:05 -080044 * the splash screen.
Jorim Jaggi275561a2016-02-23 10:11:02 -050045 */
Bookatz80d11a02018-01-16 10:46:35 -080046 public static final int APP_TRANSITION_SPLASH_SCREEN =
47 AppProtoEnums.APP_TRANSITION_SPLASH_SCREEN; // 1
Jorim Jaggi275561a2016-02-23 10:11:02 -050048
49 /**
50 * Type for {@link #notifyAppTransitionStarting}: The transition was started because we all
51 * app windows were drawn
52 */
Bookatz80d11a02018-01-16 10:46:35 -080053 public static final int APP_TRANSITION_WINDOWS_DRAWN =
54 AppProtoEnums.APP_TRANSITION_WINDOWS_DRAWN; // 2
Jorim Jaggi275561a2016-02-23 10:11:02 -050055
56 /**
57 * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
58 * timeout.
59 */
Bookatz80d11a02018-01-16 10:46:35 -080060 public static final int APP_TRANSITION_TIMEOUT =
61 AppProtoEnums.APP_TRANSITION_TIMEOUT; // 3
Jorim Jaggi275561a2016-02-23 10:11:02 -050062
Jeff Sharkey923e0b82016-11-16 17:22:48 -070063 /**
Jorim Jaggi3878ca32017-02-02 17:13:05 -080064 * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
65 * we drew a task snapshot.
66 */
Bookatz80d11a02018-01-16 10:46:35 -080067 public static final int APP_TRANSITION_SNAPSHOT =
68 AppProtoEnums.APP_TRANSITION_SNAPSHOT; // 4
Jorim Jaggi3878ca32017-02-02 17:13:05 -080069
70 /**
Winson Chungec1ef092017-10-25 16:22:34 -070071 * The bundle key to extract the assist data.
72 */
73 public static final String ASSIST_KEY_DATA = "data";
74
75 /**
76 * The bundle key to extract the assist structure.
77 */
78 public static final String ASSIST_KEY_STRUCTURE = "structure";
79
80 /**
81 * The bundle key to extract the assist content.
82 */
83 public static final String ASSIST_KEY_CONTENT = "content";
84
85 /**
86 * The bundle key to extract the assist receiver extras.
87 */
88 public static final String ASSIST_KEY_RECEIVER_EXTRAS = "receiverExtras";
89
90
91 /**
Jeff Sharkey7ff418d2016-11-30 14:29:59 -070092 * Grant Uri permissions from one app to another. This method only extends
93 * permission grants if {@code callingUid} has permission to them.
94 */
95 public abstract void grantUriPermissionFromIntent(int callingUid, String targetPkg,
96 Intent intent, int targetUserId);
97
98 /**
Jeff Sharkey923e0b82016-11-16 17:22:48 -070099 * Verify that calling app has access to the given provider.
100 */
101 public abstract String checkContentProviderAccess(String authority, int userId);
102
Jeff Brown13014b52014-04-07 19:45:27 -0700103 // Called by the power manager.
Jeff Brownfbe96702014-11-19 18:30:58 -0800104 public abstract void onWakefulnessChanged(int wakefulness);
105
Sudheer Shankaf6690102017-10-16 10:20:32 -0700106 /**
107 * @return {@code true} if process start is successful, {@code false} otherwise.
108 */
109 public abstract boolean startIsolatedProcess(String entryPoint, String[] mainArgs,
Primiano Tucci810c0522014-07-25 18:03:16 +0100110 String processName, String abiOverride, int uid, Runnable crashHandler);
Jeff Brown061ea992015-04-17 19:55:47 -0700111
112 /**
David Stevensf62360c2017-03-16 19:00:20 -0700113 * Acquires a sleep token for the specified display with the specified tag.
Jeff Brown061ea992015-04-17 19:55:47 -0700114 *
115 * @param tag A string identifying the purpose of the token (eg. "Dream").
David Stevensf62360c2017-03-16 19:00:20 -0700116 * @param displayId The display to apply the sleep token to.
Jeff Brown061ea992015-04-17 19:55:47 -0700117 */
David Stevensf62360c2017-03-16 19:00:20 -0700118 public abstract SleepToken acquireSleepToken(@NonNull String tag, int displayId);
Jeff Brown061ea992015-04-17 19:55:47 -0700119
120 /**
121 * Sleep tokens cause the activity manager to put the top activity to sleep.
122 * They are used by components such as dreams that may hide and block interaction
123 * with underlying activities.
124 */
125 public static abstract class SleepToken {
Jorim Jaggi275561a2016-02-23 10:11:02 -0500126
Jeff Brown061ea992015-04-17 19:55:47 -0700127 /**
128 * Releases the sleep token.
129 */
130 public abstract void release();
131 }
Fyodor Kupolovb5013302015-04-17 17:59:14 -0700132
133 /**
134 * Returns home activity for the specified user.
Jorim Jaggi275561a2016-02-23 10:11:02 -0500135 *
Fyodor Kupolovb5013302015-04-17 17:59:14 -0700136 * @param userId ID of the user or {@link android.os.UserHandle#USER_ALL}
137 */
138 public abstract ComponentName getHomeActivityForUser(int userId);
Amith Yamasani515d4062015-09-28 11:30:06 -0700139
140 /**
141 * Called when a user has been deleted. This can happen during normal device usage
142 * or just at startup, when partially removed users are purged. Any state persisted by the
143 * ActivityManager should be purged now.
144 *
145 * @param userId The user being cleaned up.
146 */
147 public abstract void onUserRemoved(int userId);
Amith Yamasani0af6fa72016-01-17 15:36:19 -0800148
149 public abstract void onLocalVoiceInteractionStarted(IBinder callingActivity,
150 IVoiceInteractionSession mSession,
151 IVoiceInteractor mInteractor);
Jorim Jaggi275561a2016-02-23 10:11:02 -0500152
153 /**
Jorim Jaggi275561a2016-02-23 10:11:02 -0500154 * Callback for window manager to let activity manager know that we are finally starting the
155 * app transition;
156 *
Jorim Jaggi9b58f2d2018-02-19 17:48:44 +0100157 * @param reasons A map from windowing mode to a reason integer why the transition was started,
158 * which must be one of the APP_TRANSITION_* values.
Sudheer Shankac766db02017-06-12 10:37:29 -0700159 * @param timestamp The time at which the app transition started in
160 * {@link SystemClock#uptimeMillis()} timebase.
Jorim Jaggi275561a2016-02-23 10:11:02 -0500161 */
Sudheer Shankac766db02017-06-12 10:37:29 -0700162 public abstract void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp);
Jorim Jaggi192086e2016-03-11 17:17:03 +0100163
164 /**
165 * Callback for window manager to let activity manager know that the app transition was
166 * cancelled.
167 */
168 public abstract void notifyAppTransitionCancelled();
169
170 /**
171 * Callback for window manager to let activity manager know that the app transition is finished.
172 */
173 public abstract void notifyAppTransitionFinished();
Amith Yamasanie8222e52016-04-08 15:28:47 -0700174
175 /**
176 * Returns the top activity from each of the currently visible stacks. The first entry will be
177 * the focused activity.
178 */
179 public abstract List<IBinder> getTopVisibleActivities();
Tony Mak853304c2016-04-18 15:17:41 +0100180
181 /**
182 * Callback for window manager to let activity manager know that docked stack changes its
183 * minimized state.
184 */
185 public abstract void notifyDockedStackMinimizedChanged(boolean minimized);
Rubin Xuf8451b92016-04-01 15:50:58 +0100186
187 /**
188 * Kill foreground apps from the specified user.
189 */
190 public abstract void killForegroundAppsForUser(int userHandle);
Felipe Lemea1b79bf2016-05-24 13:06:54 -0700191
192 /**
193 * Sets how long a {@link PendingIntent} can be temporarily whitelist to by bypass restrictions
194 * such as Power Save mode.
195 */
Dianne Hackborn98305522017-05-05 17:53:53 -0700196 public abstract void setPendingIntentWhitelistDuration(IIntentSender target,
197 IBinder whitelistToken, long duration);
Suprabh Shukla64725012016-06-15 13:19:28 -0700198
199 /**
Dianne Hackborn85e35642017-01-12 15:10:57 -0800200 * Allow DeviceIdleController to tell us about what apps are whitelisted.
201 */
202 public abstract void setDeviceIdleWhitelist(int[] appids);
203
204 /**
205 * Update information about which app IDs are on the temp whitelist.
206 */
207 public abstract void updateDeviceIdleTempWhitelist(int[] appids, int changingAppId,
208 boolean adding);
209
210 /**
Suprabh Shukla64725012016-06-15 13:19:28 -0700211 * Updates and persists the {@link Configuration} for a given user.
212 *
213 * @param values the configuration to update
214 * @param userId the user to update the configuration for
215 */
216 public abstract void updatePersistentConfigurationForUser(@NonNull Configuration values,
217 int userId);
Makoto Onukiea11db12016-06-24 15:17:44 -0700218
219 /**
Makoto Onuki440a1ea2016-07-20 14:21:18 -0700220 * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it.
Makoto Onuki83f6d2d2016-07-11 14:30:19 -0700221 *
Makoto Onuki7041c4b2018-02-06 13:36:34 -0800222 * - DO NOT call it with the calling UID cleared.
223 * - All the necessary caller permission checks must be done at callsites.
224 *
Makoto Onuki83f6d2d2016-07-11 14:30:19 -0700225 * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
Makoto Onukiea11db12016-06-24 15:17:44 -0700226 */
Makoto Onuki440a1ea2016-07-20 14:21:18 -0700227 public abstract int startActivitiesAsPackage(String packageName,
228 int userId, Intent[] intents, Bundle bOptions);
Makoto Onuki33525d22016-08-03 15:45:24 -0700229
230 /**
231 * Get the procstate for the UID. The return value will be between
232 * {@link ActivityManager#MIN_PROCESS_STATE} and {@link ActivityManager#MAX_PROCESS_STATE}.
233 * Note if the UID doesn't exist, it'll return {@link ActivityManager#PROCESS_STATE_NONEXISTENT}
234 * (-1).
235 */
236 public abstract int getUidProcessState(int uid);
Jorim Jaggife762342016-10-13 14:33:27 +0200237
238 /**
239 * Called when Keyguard flags might have changed.
240 *
241 * @param callback Callback to run after activity visibilities have been reevaluated. This can
242 * be used from window manager so that when the callback is called, it's
243 * guaranteed that all apps have their visibility updated accordingly.
244 */
245 public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback);
Sudheer Shankafc46e9b2016-10-21 17:55:27 -0700246
247 /**
248 * @return {@code true} if system is ready, {@code false} otherwise.
249 */
250 public abstract boolean isSystemReady();
Jorim Jaggie69c9312016-10-31 18:24:38 -0700251
252 /**
253 * Called when the trusted state of Keyguard has changed.
254 */
255 public abstract void notifyKeyguardTrustedChanged();
Wale Ogunwaled993a572017-02-05 13:52:09 -0800256
257 /**
258 * Sets if the given pid has an overlay UI or not.
259 *
260 * @param pid The pid we are setting overlay UI for.
261 * @param hasOverlayUi True if the process has overlay UI.
262 * @see android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY
263 */
264 public abstract void setHasOverlayUi(int pid, boolean hasOverlayUi);
Sudheer Shankae7361852017-03-07 11:51:46 -0800265
266 /**
267 * Called after the network policy rules are updated by
268 * {@link com.android.server.net.NetworkPolicyManagerService} for a specific {@param uid} and
269 * {@param procStateSeq}.
270 */
271 public abstract void notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq);
Karthik Ravi Shankar99493db2017-03-08 18:30:19 -0800272
273 /**
Winson Chungbccd4b52017-12-13 11:08:39 -0800274 * Called after the voice interaction service has changed.
275 */
276 public abstract void notifyActiveVoiceInteractionServiceChanged(ComponentName component);
277
278 /**
Karthik Ravi Shankar99493db2017-03-08 18:30:19 -0800279 * Called after virtual display Id is updated by
Karthik Ravi Shankar2b9aaed2017-05-01 01:34:19 -0700280 * {@link com.android.server.vr.Vr2dDisplay} with a specific
281 * {@param vr2dDisplayId}.
Karthik Ravi Shankar99493db2017-03-08 18:30:19 -0800282 */
Karthik Ravi Shankar2b9aaed2017-05-01 01:34:19 -0700283 public abstract void setVr2dDisplayId(int vr2dDisplayId);
Wale Ogunwalef1285912017-06-09 15:20:29 -0700284
285 /**
286 * Saves the current activity manager state and includes the saved state in the next dump of
287 * activity manager.
288 */
289 public abstract void saveANRState(String reason);
290
291 /**
292 * Clears the previously saved activity manager ANR state.
293 */
294 public abstract void clearSavedANRState();
Phil Weaver5dc3ebc2017-08-16 13:04:20 -0700295
296 /**
297 * Set focus on an activity.
298 * @param token The IApplicationToken for the activity
299 */
300 public abstract void setFocusedActivity(IBinder token);
Dianne Hackborn08bd3ea2017-11-22 13:59:17 -0800301
302 /**
303 * Set a uid that is allowed to bypass stopped app switches, launching an app
304 * whenever it wants.
305 *
306 * @param type Type of the caller -- unique string the caller supplies to identify itself
307 * and disambiguate with other calles.
308 * @param uid The uid of the app to be allowed, or -1 to clear the uid for this type.
309 * @param userId The user it is allowed for.
310 */
311 public abstract void setAllowAppSwitches(@NonNull String type, int uid, int userId);
Makoto Onukie098b7592017-11-27 17:50:41 -0800312
313 /**
314 * @return true if runtime was restarted, false if it's normal boot
315 */
316 public abstract boolean isRuntimeRestarted();
Felipe Leme2a580d12017-12-11 14:37:35 -0800317
318 /**
319 * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
320 */
321 public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
Jeff Sharkey9765e442017-12-14 22:15:14 -0700322
323 public interface ScreenObserver {
324 public void onAwakeStateChanged(boolean isAwake);
325 public void onKeyguardStateChanged(boolean isShowing);
326 }
327
328 public abstract void registerScreenObserver(ScreenObserver observer);
Alex Chaub6ef8692018-01-09 14:16:36 +0000329
330 /**
331 * Returns if more users can be started without stopping currently running users.
332 */
333 public abstract boolean canStartMoreUsers();
Alex Chau93ae42b2018-01-11 15:10:12 +0000334
335 /**
336 * Sets the user switcher message for switching from {@link android.os.UserHandle#SYSTEM}.
337 */
338 public abstract void setSwitchingFromSystemUserMessage(String switchingFromSystemUserMessage);
339
340 /**
341 * Sets the user switcher message for switching to {@link android.os.UserHandle#SYSTEM}.
342 */
343 public abstract void setSwitchingToSystemUserMessage(String switchingToSystemUserMessage);
Alex Chauc12189b2018-01-16 15:01:15 +0000344
345 /**
346 * Returns maximum number of users that can run simultaneously.
347 */
348 public abstract int getMaxRunningUsers();
Tony Make839d702018-01-22 15:34:46 +0000349
350 /**
351 * Returns is the caller has the same uid as the Recents component
352 */
353 public abstract boolean isCallerRecents(int callingUid);
Makoto Onukie4918212018-02-06 11:30:15 -0800354
355 /**
356 * Whether an UID is active or idle.
357 */
358 public abstract boolean isUidActive(int uid);
Rajeev Kumar22d92b72018-02-07 18:38:36 -0800359
360 /**
361 * Returns a list that contains the memory stats for currently running processes.
362 */
363 public abstract List<ProcessMemoryState> getMemoryStateForProcesses();
Jeff Brown13014b52014-04-07 19:45:27 -0700364}