• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package android.app;
18 
19 import static android.app.ActivityManager.StopUserOnSwitch;
20 
21 import android.annotation.NonNull;
22 import android.annotation.Nullable;
23 import android.annotation.UserIdInt;
24 import android.app.ActivityManager.ProcessCapability;
25 import android.app.ActivityManager.RestrictionLevel;
26 import android.content.ComponentName;
27 import android.content.IIntentReceiver;
28 import android.content.IIntentSender;
29 import android.content.Intent;
30 import android.content.pm.ActivityInfo;
31 import android.content.pm.ActivityPresentationInfo;
32 import android.content.pm.ApplicationInfo;
33 import android.content.pm.UserInfo;
34 import android.net.Uri;
35 import android.os.Bundle;
36 import android.os.IBinder;
37 import android.os.PowerExemptionManager.ReasonCode;
38 import android.os.PowerExemptionManager.TempAllowListType;
39 import android.os.TransactionTooLargeException;
40 import android.os.WorkSource;
41 import android.util.ArraySet;
42 import android.util.Pair;
43 
44 import java.util.ArrayList;
45 import java.util.List;
46 import java.util.Map;
47 import java.util.Set;
48 
49 /**
50  * Activity manager local system service interface.
51  *
52  * @hide Only for use within the system server.
53  */
54 public abstract class ActivityManagerInternal {
55 
56     public enum ServiceNotificationPolicy {
57         /**
58          * The Notification is not associated with any foreground service.
59          */
60         NOT_FOREGROUND_SERVICE,
61         /**
62          * The Notification is associated with a foreground service, but the
63          * notification system should handle it just like non-FGS notifications.
64          */
65         SHOW_IMMEDIATELY,
66         /**
67          * The Notification is associated with a foreground service, and the
68          * notification system should ignore it unless it has already been shown (in
69          * which case it should be used to update the currently displayed UI).
70          */
71         UPDATE_ONLY
72     }
73 
74     // Access modes for handleIncomingUser.
75     /**
76      * Allows access to a caller with {@link android.Manifest.permission#INTERACT_ACROSS_USERS}.
77      */
78     public static final int ALLOW_NON_FULL = 0;
79     /**
80      * Allows access to a caller with {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
81      * if in the same profile group.
82      * Otherwise, {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} is required.
83      */
84     public static final int ALLOW_NON_FULL_IN_PROFILE = 1;
85     /**
86      * Allows access to a caller only if it has the full
87      * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}.
88      */
89     public static final int ALLOW_FULL_ONLY = 2;
90     /**
91      * Allows access to a caller with {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES}
92      * if in the same profile group.
93      * Otherwise, {@link android.Manifest.permission#INTERACT_ACROSS_USERS} is required and suffices
94      * as in {@link #ALLOW_NON_FULL}.
95      */
96     public static final int ALLOW_PROFILES_OR_NON_FULL = 3;
97 
98     /**
99      * Returns profile information in free form string in two separate strings.
100      * See AppProfiler for the output format.
101      * The output can only be used for human consumption. The format may change
102      * in the future.
103      * Do not call it frequently.
104      * @param time uptime for the cpu state
105      * @param lines lines of the cpu state should be returned
106      * @return a pair of Strings. The first is the current cpu load, the second is the cpu state.
107      */
getAppProfileStatsForDebugging(long time, int lines)108     public abstract Pair<String, String> getAppProfileStatsForDebugging(long time, int lines);
109 
110     /**
111      * Verify that calling app has access to the given provider.
112      */
checkContentProviderAccess(String authority, @UserIdInt int userId)113     public abstract String checkContentProviderAccess(String authority, @UserIdInt int userId);
114 
115     /**
116      * Verify that calling UID has access to the given provider.
117      */
checkContentProviderUriPermission(Uri uri, @UserIdInt int userId, int callingUid, int modeFlags)118     public abstract int checkContentProviderUriPermission(Uri uri, @UserIdInt int userId,
119             int callingUid, int modeFlags);
120 
121     // Called by the power manager.
onWakefulnessChanged(int wakefulness)122     public abstract void onWakefulnessChanged(int wakefulness);
123 
124     /**
125      * @return {@code true} if process start is successful, {@code false} otherwise.
126      */
startIsolatedProcess(String entryPoint, String[] mainArgs, String processName, String abiOverride, int uid, Runnable crashHandler)127     public abstract boolean startIsolatedProcess(String entryPoint, String[] mainArgs,
128             String processName, String abiOverride, int uid, Runnable crashHandler);
129 
130     /**
131      * Called when a user has been deleted. This can happen during normal device usage
132      * or just at startup, when partially removed users are purged. Any state persisted by the
133      * ActivityManager should be purged now.
134      *
135      * @param userId The user being cleaned up.
136      */
onUserRemoved(@serIdInt int userId)137     public abstract void onUserRemoved(@UserIdInt int userId);
138 
139     /**
140      * Kill foreground apps from the specified user.
141      */
killForegroundAppsForUser(@serIdInt int userId)142     public abstract void killForegroundAppsForUser(@UserIdInt int userId);
143 
144     /**
145      * Sets how long a {@link PendingIntent} can be temporarily allowlisted to bypass restrictions
146      * such as Power Save mode.
147      * @param target
148      * @param allowlistToken
149      * @param duration temp allowlist duration in milliseconds.
150      * @param type temp allowlist type defined at {@link TempAllowListType}
151      * @param reasonCode one of {@link ReasonCode}
152      * @param reason A human-readable reason for logging purposes.
153      */
setPendingIntentAllowlistDuration(IIntentSender target, IBinder allowlistToken, long duration, @TempAllowListType int type, @ReasonCode int reasonCode, @Nullable String reason)154     public abstract void setPendingIntentAllowlistDuration(IIntentSender target,
155             IBinder allowlistToken, long duration, @TempAllowListType int type,
156             @ReasonCode int reasonCode, @Nullable String reason);
157 
158     /**
159      * Returns the flags set for a {@link PendingIntent}.
160      */
getPendingIntentFlags(IIntentSender target)161     public abstract int getPendingIntentFlags(IIntentSender target);
162 
163     /**
164      * Allows a {@link PendingIntent} to start activities from background.
165      */
setPendingIntentAllowBgActivityStarts( IIntentSender target, IBinder allowlistToken, int flags)166     public abstract void setPendingIntentAllowBgActivityStarts(
167             IIntentSender target, IBinder allowlistToken, int flags);
168 
169     /**
170      * Voids {@link PendingIntent}'s privilege to start activities from background.
171      */
clearPendingIntentAllowBgActivityStarts(IIntentSender target, IBinder allowlistToken)172     public abstract void clearPendingIntentAllowBgActivityStarts(IIntentSender target,
173             IBinder allowlistToken);
174 
175     /**
176      * Allow DeviceIdleController to tell us about what apps are allowlisted.
177      */
setDeviceIdleAllowlist(int[] allAppids, int[] exceptIdleAppids)178     public abstract void setDeviceIdleAllowlist(int[] allAppids, int[] exceptIdleAppids);
179 
180     /**
181      * Update information about which app IDs are on the temp allowlist.
182      * @param appids the updated list of appIds in temp allowlist.
183      *               If null, it is to update only changingUid.
184      * @param changingUid uid to add or remove to temp allowlist.
185      * @param adding true to add to temp allowlist, false to remove from temp allowlist.
186      * @param durationMs when adding is true, the duration to be in temp allowlist.
187      * @param type temp allowlist type defined at {@link TempAllowListType}.
188      * @param reasonCode one of {@link ReasonCode}
189      * @param reason A human-readable reason for logging purposes.
190      * @param callingUid the callingUid that setup this temp allowlist, only valid when param adding
191      *                   is true.
192      */
updateDeviceIdleTempAllowlist(@ullable int[] appids, int changingUid, boolean adding, long durationMs, @TempAllowListType int type, @ReasonCode int reasonCode, @Nullable String reason, int callingUid)193     public abstract void updateDeviceIdleTempAllowlist(@Nullable int[] appids, int changingUid,
194             boolean adding, long durationMs, @TempAllowListType int type,
195             @ReasonCode int reasonCode,
196             @Nullable String reason, int callingUid);
197 
198     /**
199      * Get the procstate for the UID.  The return value will be between
200      * {@link ActivityManager#MIN_PROCESS_STATE} and {@link ActivityManager#MAX_PROCESS_STATE}.
201      * Note if the UID doesn't exist, it'll return {@link ActivityManager#PROCESS_STATE_NONEXISTENT}
202      * (-1).
203      */
getUidProcessState(int uid)204     public abstract int getUidProcessState(int uid);
205 
206     /**
207      * Get a map of pid and package name that process of that pid Android/data and Android/obb
208      * directory is not mounted to lowerfs.
209      */
getProcessesWithPendingBindMounts(int userId)210     public abstract Map<Integer, String> getProcessesWithPendingBindMounts(int userId);
211 
212     /**
213      * @return {@code true} if system is ready, {@code false} otherwise.
214      */
isSystemReady()215     public abstract boolean isSystemReady();
216 
217     /**
218      * Returns package name given pid.
219      *
220      * @param pid The pid we are searching package name for.
221      */
222     @Nullable
getPackageNameByPid(int pid)223     public abstract String getPackageNameByPid(int pid);
224 
225     /**
226      * Sets if the given pid has an overlay UI or not.
227      *
228      * @param pid The pid we are setting overlay UI for.
229      * @param hasOverlayUi True if the process has overlay UI.
230      * @see android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY
231      */
setHasOverlayUi(int pid, boolean hasOverlayUi)232     public abstract void setHasOverlayUi(int pid, boolean hasOverlayUi);
233 
234     /**
235      * Called after the network policy rules are updated by
236      * {@link com.android.server.net.NetworkPolicyManagerService} for a specific {@param uid} and
237      * {@param procStateSeq}.
238      */
notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq)239     public abstract void notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq);
240 
241     /**
242      * Inform ActivityManagerService about the latest {@code blockedReasons} for an uid, which
243      * can be used to understand whether the {@code uid} is allowed to access network or not.
244      */
onUidBlockedReasonsChanged(int uid, int blockedReasons)245     public abstract void onUidBlockedReasonsChanged(int uid, int blockedReasons);
246 
247     /**
248      * @return true if runtime was restarted, false if it's normal boot
249      */
isRuntimeRestarted()250     public abstract boolean isRuntimeRestarted();
251 
252     /**
253      * Returns if more users can be started without stopping currently running users.
254      */
canStartMoreUsers()255     public abstract boolean canStartMoreUsers();
256 
257     /**
258      * Sets the user switcher message for switching from {@link android.os.UserHandle#SYSTEM}.
259      */
setSwitchingFromSystemUserMessage(String switchingFromSystemUserMessage)260     public abstract void setSwitchingFromSystemUserMessage(String switchingFromSystemUserMessage);
261 
262     /**
263      * Sets the user switcher message for switching to {@link android.os.UserHandle#SYSTEM}.
264      */
setSwitchingToSystemUserMessage(String switchingToSystemUserMessage)265     public abstract void setSwitchingToSystemUserMessage(String switchingToSystemUserMessage);
266 
267     /**
268      * Returns maximum number of users that can run simultaneously.
269      */
getMaxRunningUsers()270     public abstract int getMaxRunningUsers();
271 
272     /**
273      * Whether an UID is active or idle.
274      */
isUidActive(int uid)275     public abstract boolean isUidActive(int uid);
276 
277     /**
278      * Returns a list of running processes along with corresponding uids, pids and their oom score.
279      *
280      * Only processes managed by ActivityManagerService are included.
281      */
getMemoryStateForProcesses()282     public abstract List<ProcessMemoryState> getMemoryStateForProcesses();
283 
284     /**
285      * Checks to see if the calling pid is allowed to handle the user. Returns adjusted user id as
286      * needed.
287      */
handleIncomingUser(int callingPid, int callingUid, @UserIdInt int userId, boolean allowAll, int allowMode, String name, String callerPackage)288     public abstract int handleIncomingUser(int callingPid, int callingUid, @UserIdInt int userId,
289             boolean allowAll, int allowMode, String name, String callerPackage);
290 
291     /** Checks if the calling binder pid as the permission. */
enforceCallingPermission(String permission, String func)292     public abstract void enforceCallingPermission(String permission, String func);
293 
294     /** Returns the current user id. */
getCurrentUserId()295     public abstract int getCurrentUserId();
296 
297     /** Returns the currently started user ids. */
getStartedUserIds()298     public abstract int[] getStartedUserIds();
299 
300     /** Returns true if the user is running. */
isUserRunning(@serIdInt int userId, int flags)301     public abstract boolean isUserRunning(@UserIdInt int userId, int flags);
302 
303     /** Trims memory usage in the system by removing/stopping unused application processes. */
trimApplications()304     public abstract void trimApplications();
305 
306     /** Kill the processes in the list due to their tasks been removed. */
killProcessesForRemovedTask(ArrayList<Object> procsToKill)307     public abstract void killProcessesForRemovedTask(ArrayList<Object> procsToKill);
308 
309     /** Kill the process immediately. */
killProcess(String processName, int uid, String reason)310     public abstract void killProcess(String processName, int uid, String reason);
311 
312     /**
313      * Returns {@code true} if {@code uid} is running an activity from {@code packageName}.
314      */
hasRunningActivity(int uid, @Nullable String packageName)315     public abstract boolean hasRunningActivity(int uid, @Nullable String packageName);
316 
updateOomAdj()317     public abstract void updateOomAdj();
updateCpuStats()318     public abstract void updateCpuStats();
319 
320     /**
321      * Update battery stats on activity usage.
322      * @param activity
323      * @param uid
324      * @param userId
325      * @param started
326      */
updateBatteryStats( ComponentName activity, int uid, @UserIdInt int userId, boolean resumed)327     public abstract void updateBatteryStats(
328             ComponentName activity, int uid, @UserIdInt int userId, boolean resumed);
329 
330     /**
331      * Update UsageStats of the activity.
332      * @param activity
333      * @param userId
334      * @param event
335      * @param appToken ActivityRecord's appToken.
336      * @param taskRoot Task's root
337      */
updateActivityUsageStats( ComponentName activity, @UserIdInt int userId, int event, IBinder appToken, ComponentName taskRoot)338     public abstract void updateActivityUsageStats(
339             ComponentName activity, @UserIdInt int userId, int event, IBinder appToken,
340             ComponentName taskRoot);
updateForegroundTimeIfOnBattery( String packageName, int uid, long cpuTimeDiff)341     public abstract void updateForegroundTimeIfOnBattery(
342             String packageName, int uid, long cpuTimeDiff);
sendForegroundProfileChanged(@serIdInt int userId)343     public abstract void sendForegroundProfileChanged(@UserIdInt int userId);
344 
345     /**
346      * Returns whether the given user requires credential entry at this time. This is used to
347      * intercept activity launches for locked work apps due to work challenge being triggered or
348      * when the profile user is yet to be unlocked.
349      */
shouldConfirmCredentials(@serIdInt int userId)350     public abstract boolean shouldConfirmCredentials(@UserIdInt int userId);
351 
352     /**
353      * Used in conjunction with {@link #noteAlarmStart(PendingIntent, WorkSource, int, String)} to
354      * note an alarm duration for battery attribution
355      */
noteAlarmFinish(PendingIntent ps, WorkSource workSource, int sourceUid, String tag)356     public abstract void noteAlarmFinish(PendingIntent ps, WorkSource workSource, int sourceUid,
357             String tag);
358 
359     /**
360      * Used in conjunction with {@link #noteAlarmFinish(PendingIntent, WorkSource, int, String)} to
361      * note an alarm duration for battery attribution
362      */
noteAlarmStart(PendingIntent ps, WorkSource workSource, int sourceUid, String tag)363     public abstract void noteAlarmStart(PendingIntent ps, WorkSource workSource, int sourceUid,
364             String tag);
365 
366     /**
367      * Used to note a wakeup alarm for battery attribution.
368      */
noteWakeupAlarm(PendingIntent ps, WorkSource workSource, int sourceUid, String sourcePkg, String tag)369     public abstract void noteWakeupAlarm(PendingIntent ps, WorkSource workSource, int sourceUid,
370             String sourcePkg, String tag);
371 
372     /**
373      * Returns whether this app is disallowed to run in the background.
374      *
375      * @see ActivityManager#APP_START_MODE_DISABLED
376      */
isAppStartModeDisabled(int uid, String packageName)377     public abstract boolean isAppStartModeDisabled(int uid, String packageName);
378 
getCurrentProfileIds()379     public abstract int[] getCurrentProfileIds();
getCurrentUser()380     public abstract UserInfo getCurrentUser();
ensureNotSpecialUser(@serIdInt int userId)381     public abstract void ensureNotSpecialUser(@UserIdInt int userId);
isCurrentProfile(@serIdInt int userId)382     public abstract boolean isCurrentProfile(@UserIdInt int userId);
hasStartedUserState(@serIdInt int userId)383     public abstract boolean hasStartedUserState(@UserIdInt int userId);
finishUserSwitch(Object uss)384     public abstract void finishUserSwitch(Object uss);
385 
386     /** Schedule the execution of all pending app GCs. */
scheduleAppGcs()387     public abstract void scheduleAppGcs();
388 
389     /** Gets the task id for a given activity. */
getTaskIdForActivity(@onNull IBinder token, boolean onlyRoot)390     public abstract int getTaskIdForActivity(@NonNull IBinder token, boolean onlyRoot);
391 
392     /** Gets the basic info for a given activity. */
getActivityPresentationInfo(@onNull IBinder token)393     public abstract ActivityPresentationInfo getActivityPresentationInfo(@NonNull IBinder token);
394 
setBooting(boolean booting)395     public abstract void setBooting(boolean booting);
isBooting()396     public abstract boolean isBooting();
setBooted(boolean booted)397     public abstract void setBooted(boolean booted);
isBooted()398     public abstract boolean isBooted();
finishBooting()399     public abstract void finishBooting();
400 
401     /**
402      * Temp allowlist a UID for PendingIntent.
403      * @param callerPid the PID that sent the PendingIntent.
404      * @param callerUid the UID that sent the PendingIntent.
405      * @param targetUid the UID that is been temp allowlisted.
406      * @param duration temp allowlist duration in milliseconds.
407      * @param type temp allowlist type defined at {@link TempAllowListType}
408      * @param reasonCode one of {@link ReasonCode}
409      * @param reason
410      */
tempAllowlistForPendingIntent(int callerPid, int callerUid, int targetUid, long duration, int type, @ReasonCode int reasonCode, String reason)411     public abstract void tempAllowlistForPendingIntent(int callerPid, int callerUid, int targetUid,
412             long duration, int type, @ReasonCode int reasonCode, String reason);
413 
broadcastIntentInPackage(String packageName, @Nullable String featureId, int uid, int realCallingUid, int realCallingPid, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras, String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky, @UserIdInt int userId, boolean allowBackgroundActivityStarts, @Nullable IBinder backgroundActivityStartsToken, @Nullable int[] broadcastAllowList)414     public abstract int broadcastIntentInPackage(String packageName, @Nullable String featureId,
415             int uid, int realCallingUid, int realCallingPid, Intent intent, String resolvedType,
416             IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras,
417             String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky,
418             @UserIdInt int userId, boolean allowBackgroundActivityStarts,
419             @Nullable IBinder backgroundActivityStartsToken, @Nullable int[] broadcastAllowList);
420 
startServiceInPackage(int uid, Intent service, String resolvedType, boolean fgRequired, String callingPackage, @Nullable String callingFeatureId, @UserIdInt int userId, boolean allowBackgroundActivityStarts, @Nullable IBinder backgroundActivityStartsToken)421     public abstract ComponentName startServiceInPackage(int uid, Intent service,
422             String resolvedType, boolean fgRequired, String callingPackage,
423             @Nullable String callingFeatureId, @UserIdInt int userId,
424             boolean allowBackgroundActivityStarts,
425             @Nullable IBinder backgroundActivityStartsToken) throws TransactionTooLargeException;
426 
disconnectActivityFromServices(Object connectionHolder)427     public abstract void disconnectActivityFromServices(Object connectionHolder);
cleanUpServices(@serIdInt int userId, ComponentName component, Intent baseIntent)428     public abstract void cleanUpServices(@UserIdInt int userId, ComponentName component,
429             Intent baseIntent);
getActivityInfoForUser(ActivityInfo aInfo, @UserIdInt int userId)430     public abstract ActivityInfo getActivityInfoForUser(ActivityInfo aInfo, @UserIdInt int userId);
ensureBootCompleted()431     public abstract void ensureBootCompleted();
updateOomLevelsForDisplay(int displayId)432     public abstract void updateOomLevelsForDisplay(int displayId);
isActivityStartsLoggingEnabled()433     public abstract boolean isActivityStartsLoggingEnabled();
434     /** Returns true if the background activity starts is enabled. */
isBackgroundActivityStartsEnabled()435     public abstract boolean isBackgroundActivityStartsEnabled();
reportCurKeyguardUsageEvent(boolean keyguardShowing)436     public abstract void reportCurKeyguardUsageEvent(boolean keyguardShowing);
437 
438     /** @see com.android.server.am.ActivityManagerService#monitor */
monitor()439     public abstract void monitor();
440 
441     /** Input dispatch timeout to a window, start the ANR process. Return the timeout extension,
442      * in milliseconds, or 0 to abort dispatch. */
inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)443     public abstract long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason);
inputDispatchingTimedOut(Object proc, String activityShortComponentName, ApplicationInfo aInfo, String parentShortComponentName, Object parentProc, boolean aboveSystem, String reason)444     public abstract boolean inputDispatchingTimedOut(Object proc, String activityShortComponentName,
445             ApplicationInfo aInfo, String parentShortComponentName, Object parentProc,
446             boolean aboveSystem, String reason);
447     /**
448      * App started responding to input events. This signal can be used to abort the ANR process and
449      * hide the ANR dialog.
450      */
inputDispatchingResumed(int pid)451     public abstract void inputDispatchingResumed(int pid);
452 
453     /**
454      * User tapped "wait" in the ANR dialog - reschedule the dialog to be shown again at a later
455      * time.
456      * @param data AppNotRespondingDialog.Data object
457      */
rescheduleAnrDialog(Object data)458     public abstract void rescheduleAnrDialog(Object data);
459 
460     /**
461      * Sends {@link android.content.Intent#ACTION_CONFIGURATION_CHANGED} with all the appropriate
462      * flags.
463      */
broadcastGlobalConfigurationChanged(int changes, boolean initLocale)464     public abstract void broadcastGlobalConfigurationChanged(int changes, boolean initLocale);
465 
466     /**
467      * Sends {@link android.content.Intent#ACTION_CLOSE_SYSTEM_DIALOGS} with all the appropriate
468      * flags.
469      */
broadcastCloseSystemDialogs(String reason)470     public abstract void broadcastCloseSystemDialogs(String reason);
471 
472     /**
473      * Kills all background processes, except those matching any of the specified properties.
474      *
475      * @param minTargetSdk the target SDK version at or above which to preserve processes,
476      *                     or {@code -1} to ignore the target SDK
477      * @param maxProcState the process state at or below which to preserve processes,
478      *                     or {@code -1} to ignore the process state
479      */
killAllBackgroundProcessesExcept(int minTargetSdk, int maxProcState)480     public abstract void killAllBackgroundProcessesExcept(int minTargetSdk, int maxProcState);
481 
482     /** Starts a given process. */
startProcess(String processName, ApplicationInfo info, boolean knownToBeDead, boolean isTop, String hostingType, ComponentName hostingName)483     public abstract void startProcess(String processName, ApplicationInfo info,
484             boolean knownToBeDead, boolean isTop, String hostingType, ComponentName hostingName);
485 
486     /** Starts up the starting activity process for debugging if needed.
487      * This function needs to be called synchronously from WindowManager context so the caller
488      * passes a lock {@code wmLock} and waits to be notified.
489      *
490      * @param wmLock calls {@code notify} on the object to wake up the caller.
491     */
setDebugFlagsForStartingActivity(ActivityInfo aInfo, int startFlags, ProfilerInfo profilerInfo, Object wmLock)492     public abstract void setDebugFlagsForStartingActivity(ActivityInfo aInfo, int startFlags,
493             ProfilerInfo profilerInfo, Object wmLock);
494 
495     /** Returns mount mode for process running with given pid */
getStorageMountMode(int pid, int uid)496     public abstract int getStorageMountMode(int pid, int uid);
497 
498     /** Returns true if the given uid is the app in the foreground. */
isAppForeground(int uid)499     public abstract boolean isAppForeground(int uid);
500 
501     /** Returns true if the given process name and uid is currently marked 'bad' */
isAppBad(String processName, int uid)502     public abstract boolean isAppBad(String processName, int uid);
503 
504     /** Remove pending backup for the given userId. */
clearPendingBackup(@serIdInt int userId)505     public abstract void clearPendingBackup(@UserIdInt int userId);
506 
507     /**
508      * When power button is very long pressed, call this interface to do some pre-shutdown work
509      * like persisting database etc.
510      */
prepareForPossibleShutdown()511     public abstract void prepareForPossibleShutdown();
512 
513     /**
514      * Returns {@code true} if {@code uid} is running a foreground service of a specific
515      * {@code foregroundServiceType}.
516      */
hasRunningForegroundService(int uid, int foregroundServiceType)517     public abstract boolean hasRunningForegroundService(int uid, int foregroundServiceType);
518 
519     /**
520      * Returns {@code true} if the given notification channel currently has a
521      * notification associated with a foreground service.  This is an AMS check
522      * because that is the source of truth for the FGS state.
523      */
hasForegroundServiceNotification(String pkg, @UserIdInt int userId, String channelId)524     public abstract boolean hasForegroundServiceNotification(String pkg, @UserIdInt int userId,
525             String channelId);
526 
527     /**
528      * Tell the service lifecycle logic that the given Notification content is now
529      * canonical for any foreground-service visibility policy purposes.
530      *
531      * Returns a description of any FGs-related policy around the given Notification:
532      * not associated with an FGS; ensure display; or only update if already displayed.
533      */
applyForegroundServiceNotification( Notification notification, String tag, int id, String pkg, @UserIdInt int userId)534     public abstract ServiceNotificationPolicy applyForegroundServiceNotification(
535             Notification notification, String tag, int id, String pkg, @UserIdInt int userId);
536 
537     /**
538      * Callback from the notification subsystem that the given FGS notification has
539      * been evaluated, and either shown or explicitly overlooked.  This can happen
540      * after either Service.startForeground() or NotificationManager.notify().
541      */
onForegroundServiceNotificationUpdate(boolean shown, Notification notification, int id, String pkg, @UserIdInt int userId)542     public abstract void onForegroundServiceNotificationUpdate(boolean shown,
543             Notification notification, int id, String pkg, @UserIdInt int userId);
544 
545     /**
546      * Fully stop the given app's processes without restoring service starts or
547      * bindings, but without the other durable effects of the full-scale
548      * "force stop" intervention.
549      */
stopAppForUser(String pkg, @UserIdInt int userId)550     public abstract void stopAppForUser(String pkg, @UserIdInt int userId);
551 
552     /**
553      * If the given app has any FGSs whose notifications are in the given channel,
554      * stop them.
555      */
stopForegroundServicesForChannel(String pkg, @UserIdInt int userId, String channelId)556     public abstract void stopForegroundServicesForChannel(String pkg, @UserIdInt int userId,
557             String channelId);
558 
559     /**
560      * Registers the specified {@code processObserver} to be notified of future changes to
561      * process state.
562      */
registerProcessObserver(IProcessObserver processObserver)563     public abstract void registerProcessObserver(IProcessObserver processObserver);
564 
565     /**
566      * Unregisters the specified {@code processObserver}.
567      */
unregisterProcessObserver(IProcessObserver processObserver)568     public abstract void unregisterProcessObserver(IProcessObserver processObserver);
569 
570     /**
571      * Gets the uid of the instrumentation source if there is an unfinished instrumentation that
572      * targets the given uid.
573      *
574      * @param uid The uid to be checked for
575      *
576      * @return the uid of the instrumentation source, if there is an instrumentation whose target
577      * application uid matches the given uid, and {@link android.os.Process#INVALID_UID} otherwise.
578      */
getInstrumentationSourceUid(int uid)579     public abstract int getInstrumentationSourceUid(int uid);
580 
581     /** Is this a device owner app? */
isDeviceOwner(int uid)582     public abstract boolean isDeviceOwner(int uid);
583 
584     /**
585      * Called by DevicePolicyManagerService to set the uid of the device owner.
586      */
setDeviceOwnerUid(int uid)587     public abstract void setDeviceOwnerUid(int uid);
588 
589     /** Is this a profile owner app? */
isProfileOwner(int uid)590     public abstract boolean isProfileOwner(int uid);
591 
592     /**
593      * Called by DevicePolicyManagerService to set the uid of the profile owner.
594      * @param profileOwnerUids The profile owner UIDs. The ownership of the array is
595      *                         passed to callee.
596      */
setProfileOwnerUid(ArraySet<Integer> profileOwnerUids)597     public abstract void setProfileOwnerUid(ArraySet<Integer> profileOwnerUids);
598 
599     /**
600      * Set all associated companion app that belongs to a userId.
601      * @param userId
602      * @param companionAppUids  ActivityManager will take ownership of this Set, the caller
603      *                          shouldn't touch this Set after calling this interface.
604      */
setCompanionAppUids(int userId, Set<Integer> companionAppUids)605     public abstract void setCompanionAppUids(int userId, Set<Integer> companionAppUids);
606 
607     /**
608      * is the uid an associated companion app of a userId?
609      * @param userId
610      * @param uid
611      * @return
612      */
isAssociatedCompanionApp(int userId, int uid)613     public abstract boolean isAssociatedCompanionApp(int userId, int uid);
614 
615     /**
616      * Sends a broadcast, assuming the caller to be the system and allowing the inclusion of an
617      * approved allowlist of app Ids >= {@link android.os.Process#FIRST_APPLICATION_UID} that the
618      * broadcast my be sent to; any app Ids < {@link android.os.Process#FIRST_APPLICATION_UID} are
619      * automatically allowlisted.
620      *
621      * @see com.android.server.am.ActivityManagerService#broadcastIntentWithFeature(
622      *      IApplicationThread, String, Intent, String, IIntentReceiver, int, String, Bundle,
623      *      String[], int, Bundle, boolean, boolean, int)
624      */
broadcastIntent(Intent intent, IIntentReceiver resultTo, String[] requiredPermissions, boolean serialized, int userId, int[] appIdAllowList, @Nullable Bundle bOptions)625     public abstract int broadcastIntent(Intent intent,
626             IIntentReceiver resultTo,
627             String[] requiredPermissions, boolean serialized,
628             int userId, int[] appIdAllowList, @Nullable Bundle bOptions);
629 
630     /**
631      * Add uid to the ActivityManagerService PendingStartActivityUids list.
632      * @param uid uid
633      * @param pid pid of the ProcessRecord that is pending top.
634      */
addPendingTopUid(int uid, int pid, @Nullable IApplicationThread thread)635     public abstract void addPendingTopUid(int uid, int pid, @Nullable IApplicationThread thread);
636 
637     /**
638      * Delete uid from the ActivityManagerService PendingStartActivityUids list.
639      * @param uid uid
640      * @param nowElapsed starting time of updateOomAdj
641      */
deletePendingTopUid(int uid, long nowElapsed)642     public abstract void deletePendingTopUid(int uid, long nowElapsed);
643 
644     /**
645      * Is the uid in ActivityManagerService PendingStartActivityUids list?
646      * @param uid
647      * @return true if exists, false otherwise.
648      */
isPendingTopUid(int uid)649     public abstract boolean isPendingTopUid(int uid);
650 
651     /**
652      * @return the intent for the given intent sender.
653      */
654     @Nullable
getIntentForIntentSender(IIntentSender sender)655     public abstract Intent getIntentForIntentSender(IIntentSender sender);
656 
657     /**
658      * Effectively PendingIntent.getActivityForUser(), but the PendingIntent is
659      * owned by the given uid rather than by the caller (i.e. the system).
660      */
getPendingIntentActivityAsApp( int requestCode, @NonNull Intent intent, int flags, Bundle options, String ownerPkgName, int ownerUid)661     public abstract PendingIntent getPendingIntentActivityAsApp(
662             int requestCode, @NonNull Intent intent, int flags, Bundle options,
663             String ownerPkgName, int ownerUid);
664 
665     /**
666      * Effectively PendingIntent.getActivityForUser(), but the PendingIntent is
667      * owned by the given uid rather than by the caller (i.e. the system).
668      */
getPendingIntentActivityAsApp( int requestCode, @NonNull Intent[] intents, int flags, Bundle options, String ownerPkgName, int ownerUid)669     public abstract PendingIntent getPendingIntentActivityAsApp(
670             int requestCode, @NonNull Intent[] intents, int flags, Bundle options,
671             String ownerPkgName, int ownerUid);
672 
673     /**
674      * @return mBootTimeTempAllowlistDuration of ActivityManagerConstants.
675      */
getBootTimeTempAllowListDuration()676     public abstract long getBootTimeTempAllowListDuration();
677 
678     /** Register an {@link AnrController} to control the ANR dialog behavior */
registerAnrController(AnrController controller)679     public abstract void registerAnrController(AnrController controller);
680 
681     /** Unregister an {@link AnrController} */
unregisterAnrController(AnrController controller)682     public abstract void unregisterAnrController(AnrController controller);
683 
684     /**
685      * Is the FGS started from an uid temporarily allowed to have while-in-use permission?
686      */
isTempAllowlistedForFgsWhileInUse(int uid)687     public abstract boolean isTempAllowlistedForFgsWhileInUse(int uid);
688 
689     /**
690      * Return the temp allowlist type when server push messaging is over the quota.
691      */
getPushMessagingOverQuotaBehavior()692     public abstract @TempAllowListType int getPushMessagingOverQuotaBehavior();
693 
694     /**
695      * Return the startForeground() grace period after calling startForegroundService().
696      */
getServiceStartForegroundTimeout()697     public abstract int getServiceStartForegroundTimeout();
698 
699     /**
700      * Returns the capability of the given uid
701      */
getUidCapability(int uid)702     public abstract @ProcessCapability int getUidCapability(int uid);
703 
704     /**
705      * @return The PID list of the isolated process with packages matching the given uid.
706      */
707     @Nullable
getIsolatedProcesses(int uid)708     public abstract List<Integer> getIsolatedProcesses(int uid);
709 
710     /** @see ActivityManagerService#sendIntentSender */
sendIntentSender(IIntentSender target, IBinder allowlistToken, int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)711     public abstract int sendIntentSender(IIntentSender target, IBinder allowlistToken, int code,
712             Intent intent, String resolvedType,
713             IIntentReceiver finishedReceiver, String requiredPermission, Bundle options);
714 
715     /**
716      * Sets the provider to communicate between voice interaction manager service and
717      * ActivityManagerService.
718      */
setVoiceInteractionManagerProvider( @ullable VoiceInteractionManagerProvider provider)719     public abstract void setVoiceInteractionManagerProvider(
720             @Nullable VoiceInteractionManagerProvider provider);
721 
722     /**
723      * Sets whether the current foreground user (and its profiles) should be stopped after switched
724      * out.
725      */
setStopUserOnSwitch(@topUserOnSwitch int value)726     public abstract void setStopUserOnSwitch(@StopUserOnSwitch int value);
727 
728     /**
729      * Provides the interface to communicate between voice interaction manager service and
730      * ActivityManagerService.
731      */
732     public interface VoiceInteractionManagerProvider {
733         /**
734          * Notifies the service when an activity is destroyed.
735          */
notifyActivityDestroyed(IBinder activityToken)736         void notifyActivityDestroyed(IBinder activityToken);
737     }
738 
739     /**
740      * Get the restriction level of the given UID, if it hosts multiple packages,
741      * return least restricted level.
742      */
getRestrictionLevel(int uid)743     public abstract @RestrictionLevel int getRestrictionLevel(int uid);
744 
745     /**
746      * Get the restriction level of the given package for given user id.
747      */
getRestrictionLevel(String pkg, @UserIdInt int userId)748     public abstract @RestrictionLevel int getRestrictionLevel(String pkg, @UserIdInt int userId);
749 
750     /**
751      * Get whether or not apps would be put into restricted standby bucket automatically
752      * when it's background-restricted.
753      */
isBgAutoRestrictedBucketFeatureFlagEnabled()754     public abstract boolean isBgAutoRestrictedBucketFeatureFlagEnabled();
755 
756     /**
757      * A listener interface, which will be notified on background restriction changes.
758      */
759     public interface AppBackgroundRestrictionListener {
760         /**
761          * Called when the background restriction level of given uid/package is changed.
762          */
onRestrictionLevelChanged(int uid, String packageName, @RestrictionLevel int newLevel)763         default void onRestrictionLevelChanged(int uid, String packageName,
764                 @RestrictionLevel int newLevel) {
765         }
766 
767         /**
768          * Called when toggling the feature flag of moving to restricted standby bucket
769          * automatically on background-restricted.
770          */
onAutoRestrictedBucketFeatureFlagChanged(boolean autoRestrictedBucket)771         default void onAutoRestrictedBucketFeatureFlagChanged(boolean autoRestrictedBucket) {
772         }
773     }
774 
775     /**
776      * Register the background restriction listener callback.
777      */
addAppBackgroundRestrictionListener( @onNull AppBackgroundRestrictionListener listener)778     public abstract void addAppBackgroundRestrictionListener(
779             @NonNull AppBackgroundRestrictionListener listener);
780 
781     /**
782      * A listener interface, which will be notified on foreground service state changes.
783      */
784     public interface ForegroundServiceStateListener {
785         /**
786          * Call when the given process's foreground service state changes.
787          *
788          * @param packageName The package name of the process.
789          * @param uid The UID of the process.
790          * @param pid The pid of the process.
791          * @param started {@code true} if the process transits from non-FGS state to FGS state.
792          */
onForegroundServiceStateChanged(String packageName, int uid, int pid, boolean started)793         void onForegroundServiceStateChanged(String packageName, int uid, int pid, boolean started);
794 
795         /**
796          * Call when the notification of the foreground service is updated.
797          *
798          * @param packageName The package name of the process.
799          * @param uid The UID of the process.
800          * @param foregroundId The current foreground service notification ID.
801          * @param canceling The given notification is being canceled.
802          */
onForegroundServiceNotificationUpdated(String packageName, int uid, int foregroundId, boolean canceling)803         void onForegroundServiceNotificationUpdated(String packageName, int uid, int foregroundId,
804                 boolean canceling);
805     }
806 
807     /**
808      * Register the foreground service state change listener callback.
809      */
addForegroundServiceStateListener( @onNull ForegroundServiceStateListener listener)810     public abstract void addForegroundServiceStateListener(
811             @NonNull ForegroundServiceStateListener listener);
812 
813     /**
814      * A listener interface, which will be notified on the package sends a broadcast.
815      */
816     public interface BroadcastEventListener {
817         /**
818          * Called when the given package/uid is sending a broadcast.
819          */
onSendingBroadcast(String packageName, int uid)820         void onSendingBroadcast(String packageName, int uid);
821     }
822 
823     /**
824      * Register the broadcast event listener callback.
825      */
addBroadcastEventListener(@onNull BroadcastEventListener listener)826     public abstract void addBroadcastEventListener(@NonNull BroadcastEventListener listener);
827 
828     /**
829      * A listener interface, which will be notified on the package binding to a service.
830      */
831     public interface BindServiceEventListener {
832         /**
833          * Called when the given package/uid is binding to a service
834          */
onBindingService(String packageName, int uid)835         void onBindingService(String packageName, int uid);
836     }
837 
838     /**
839      * Register the bind service event listener callback.
840      */
addBindServiceEventListener(@onNull BindServiceEventListener listener)841     public abstract void addBindServiceEventListener(@NonNull BindServiceEventListener listener);
842 
843     /**
844      * Restart android.
845      */
restart()846     public abstract void restart();
847 
848     /**
849      * Returns some summary statistics of the current PendingIntent queue - sizes and counts.
850      */
getPendingIntentStats()851     public abstract List<PendingIntentStats> getPendingIntentStats();
852 
853     /**
854      * Register the UidObserver for NetworkPolicyManager service.
855      *
856      * This is equivalent to calling
857      * {@link IActivityManager#registerUidObserver(IUidObserver, int, int, String)} but having a
858      * separate method for NetworkPolicyManager service so that it's UidObserver can be called
859      * separately outside the usual UidObserver flow.
860      */
registerNetworkPolicyUidObserver(@onNull IUidObserver observer, int which, int cutpoint, @NonNull String callingPackage)861     public abstract void registerNetworkPolicyUidObserver(@NonNull IUidObserver observer,
862             int which, int cutpoint, @NonNull String callingPackage);
863 }
864