1/*
2 * Copyright (C) 2016 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
19import android.app.ActivityManager;
20import android.app.ApplicationErrorReport;
21import android.app.ContentProviderHolder;
22import android.app.GrantedUriPermission;
23import android.app.IApplicationThread;
24import android.app.IActivityController;
25import android.app.IAppTask;
26import android.app.IAssistDataReceiver;
27import android.app.IInstrumentationWatcher;
28import android.app.IProcessObserver;
29import android.app.IServiceConnection;
30import android.app.IStopUserCallback;
31import android.app.ITaskStackListener;
32import android.app.IUiAutomationConnection;
33import android.app.IUidObserver;
34import android.app.IUserSwitchObserver;
35import android.app.Notification;
36import android.app.PendingIntent;
37import android.app.PictureInPictureParams;
38import android.app.ProfilerInfo;
39import android.app.WaitResult;
40import android.app.assist.AssistContent;
41import android.app.assist.AssistStructure;
42import android.content.ComponentName;
43import android.content.IIntentReceiver;
44import android.content.IIntentSender;
45import android.content.Intent;
46import android.content.IntentFilter;
47import android.content.IntentSender;
48import android.content.pm.ApplicationInfo;
49import android.content.pm.ConfigurationInfo;
50import android.content.pm.IPackageDataObserver;
51import android.content.pm.ParceledListSlice;
52import android.content.pm.ProviderInfo;
53import android.content.pm.UserInfo;
54import android.content.res.Configuration;
55import android.graphics.Bitmap;
56import android.graphics.GraphicBuffer;
57import android.graphics.Point;
58import android.graphics.Rect;
59import android.net.Uri;
60import android.os.Bundle;
61import android.os.Debug;
62import android.os.IBinder;
63import android.os.IProgressListener;
64import android.os.ParcelFileDescriptor;
65import android.os.PersistableBundle;
66import android.os.StrictMode;
67import android.os.WorkSource;
68import android.service.voice.IVoiceInteractionSession;
69import android.view.IRecentsAnimationRunner;
70import android.view.RemoteAnimationDefinition;
71import android.view.RemoteAnimationAdapter;
72import com.android.internal.app.IVoiceInteractor;
73import com.android.internal.os.IResultReceiver;
74import com.android.internal.policy.IKeyguardDismissCallback;
75
76import java.util.List;
77
78/**
79 * System private API for talking with the activity manager service.  This
80 * provides calls from the application back to the activity manager.
81 *
82 * {@hide}
83 */
84interface IActivityManager {
85    // WARNING: when these transactions are updated, check if they are any callers on the native
86    // side. If so, make sure they are using the correct transaction ids and arguments.
87    // If a transaction which will also be used on the native side is being inserted, add it to
88    // below block of transactions.
89
90    // Since these transactions are also called from native code, these must be kept in sync with
91    // the ones in frameworks/native/libs/binder/include/binder/IActivityManager.h
92    // =============== Beginning of transactions used on native side as well ======================
93    ParcelFileDescriptor openContentUri(in String uriString);
94    void registerUidObserver(in IUidObserver observer, int which, int cutpoint,
95            String callingPackage);
96    void unregisterUidObserver(in IUidObserver observer);
97    boolean isUidActive(int uid, String callingPackage);
98    // =============== End of transactions used on native side as well ============================
99
100    // Special low-level communication with activity manager.
101    void handleApplicationCrash(in IBinder app,
102            in ApplicationErrorReport.ParcelableCrashInfo crashInfo);
103    int startActivity(in IApplicationThread caller, in String callingPackage, in Intent intent,
104            in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode,
105            int flags, in ProfilerInfo profilerInfo, in Bundle options);
106    void unhandledBack();
107
108    boolean finishActivity(in IBinder token, int code, in Intent data, int finishTask);
109    Intent registerReceiver(in IApplicationThread caller, in String callerPackage,
110            in IIntentReceiver receiver, in IntentFilter filter,
111            in String requiredPermission, int userId, int flags);
112    void unregisterReceiver(in IIntentReceiver receiver);
113    int broadcastIntent(in IApplicationThread caller, in Intent intent,
114            in String resolvedType, in IIntentReceiver resultTo, int resultCode,
115            in String resultData, in Bundle map, in String[] requiredPermissions,
116            int appOp, in Bundle options, boolean serialized, boolean sticky, int userId);
117    void unbroadcastIntent(in IApplicationThread caller, in Intent intent, int userId);
118    oneway void finishReceiver(in IBinder who, int resultCode, in String resultData, in Bundle map,
119            boolean abortBroadcast, int flags);
120    void attachApplication(in IApplicationThread app, long startSeq);
121    oneway void activityIdle(in IBinder token, in Configuration config,
122            in boolean stopProfiling);
123    void activityPaused(in IBinder token);
124    oneway void activityStopped(in IBinder token, in Bundle state,
125            in PersistableBundle persistentState, in CharSequence description);
126    String getCallingPackage(in IBinder token);
127    ComponentName getCallingActivity(in IBinder token);
128    List<ActivityManager.RunningTaskInfo> getTasks(int maxNum);
129    List<ActivityManager.RunningTaskInfo> getFilteredTasks(int maxNum, int ignoreActivityType,
130            int ignoreWindowingMode);
131    void moveTaskToFront(int task, int flags, in Bundle options);
132    void moveTaskBackwards(int task);
133    int getTaskForActivity(in IBinder token, in boolean onlyRoot);
134    ContentProviderHolder getContentProvider(in IApplicationThread caller,
135            in String name, int userId, boolean stable);
136    void publishContentProviders(in IApplicationThread caller,
137            in List<ContentProviderHolder> providers);
138    boolean refContentProvider(in IBinder connection, int stableDelta, int unstableDelta);
139    void finishSubActivity(in IBinder token, in String resultWho, int requestCode);
140    PendingIntent getRunningServiceControlPanel(in ComponentName service);
141    ComponentName startService(in IApplicationThread caller, in Intent service,
142            in String resolvedType, boolean requireForeground, in String callingPackage, int userId);
143    int stopService(in IApplicationThread caller, in Intent service,
144            in String resolvedType, int userId);
145    int bindService(in IApplicationThread caller, in IBinder token, in Intent service,
146            in String resolvedType, in IServiceConnection connection, int flags,
147            in String callingPackage, int userId);
148    boolean unbindService(in IServiceConnection connection);
149    void publishService(in IBinder token, in Intent intent, in IBinder service);
150    void activityResumed(in IBinder token);
151    void setDebugApp(in String packageName, boolean waitForDebugger, boolean persistent);
152    void setAgentApp(in String packageName, @nullable String agent);
153    void setAlwaysFinish(boolean enabled);
154    boolean startInstrumentation(in ComponentName className, in String profileFile,
155            int flags, in Bundle arguments, in IInstrumentationWatcher watcher,
156            in IUiAutomationConnection connection, int userId,
157            in String abiOverride);
158    void addInstrumentationResults(in IApplicationThread target, in Bundle results);
159    void finishInstrumentation(in IApplicationThread target, int resultCode,
160            in Bundle results);
161    /**
162     * @return A copy of global {@link Configuration}, contains general settings for the entire
163     *         system. Corresponds to the configuration of the default display.
164     * @throws RemoteException
165     */
166    Configuration getConfiguration();
167    /**
168     * Updates global configuration and applies changes to the entire system.
169     * @param values Update values for global configuration. If null is passed it will request the
170     *               Window Manager to compute new config for the default display.
171     * @throws RemoteException
172     * @return Returns true if the configuration was updated.
173     */
174    boolean updateConfiguration(in Configuration values);
175    boolean stopServiceToken(in ComponentName className, in IBinder token, int startId);
176    ComponentName getActivityClassForToken(in IBinder token);
177    String getPackageForToken(in IBinder token);
178    void setProcessLimit(int max);
179    int getProcessLimit();
180    int checkPermission(in String permission, int pid, int uid);
181    int checkUriPermission(in Uri uri, int pid, int uid, int mode, int userId,
182            in IBinder callerToken);
183    void grantUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri,
184            int mode, int userId);
185    void revokeUriPermission(in IApplicationThread caller, in String targetPkg, in Uri uri,
186            int mode, int userId);
187    void setActivityController(in IActivityController watcher, boolean imAMonkey);
188    void showWaitingForDebugger(in IApplicationThread who, boolean waiting);
189    /*
190     * This will deliver the specified signal to all the persistent processes. Currently only
191     * SIGUSR1 is delivered. All others are ignored.
192     */
193    void signalPersistentProcesses(int signal);
194
195    ParceledListSlice getRecentTasks(int maxNum, int flags, int userId);
196    oneway void serviceDoneExecuting(in IBinder token, int type, int startId, int res);
197    oneway void activityDestroyed(in IBinder token);
198    IIntentSender getIntentSender(int type, in String packageName, in IBinder token,
199            in String resultWho, int requestCode, in Intent[] intents, in String[] resolvedTypes,
200            int flags, in Bundle options, int userId);
201    void cancelIntentSender(in IIntentSender sender);
202    String getPackageForIntentSender(in IIntentSender sender);
203    void registerIntentSenderCancelListener(in IIntentSender sender, in IResultReceiver receiver);
204    void unregisterIntentSenderCancelListener(in IIntentSender sender, in IResultReceiver receiver);
205    void enterSafeMode();
206    boolean startNextMatchingActivity(in IBinder callingActivity,
207            in Intent intent, in Bundle options);
208    void noteWakeupAlarm(in IIntentSender sender, in WorkSource workSource, int sourceUid,
209            in String sourcePkg, in String tag);
210    void removeContentProvider(in IBinder connection, boolean stable);
211    void setRequestedOrientation(in IBinder token, int requestedOrientation);
212    int getRequestedOrientation(in IBinder token);
213    void unbindFinished(in IBinder token, in Intent service, boolean doRebind);
214    void setProcessImportant(in IBinder token, int pid, boolean isForeground, String reason);
215    void setServiceForeground(in ComponentName className, in IBinder token,
216            int id, in Notification notification, int flags);
217    boolean moveActivityTaskToBack(in IBinder token, boolean nonRoot);
218    void getMemoryInfo(out ActivityManager.MemoryInfo outInfo);
219    List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState();
220    boolean clearApplicationUserData(in String packageName, boolean keepState,
221            in IPackageDataObserver observer, int userId);
222    void forceStopPackage(in String packageName, int userId);
223    boolean killPids(in int[] pids, in String reason, boolean secure);
224    List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags);
225    ActivityManager.TaskDescription getTaskDescription(int taskId);
226    // Retrieve running application processes in the system
227    List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses();
228    // Get device configuration
229    ConfigurationInfo getDeviceConfigurationInfo();
230    IBinder peekService(in Intent service, in String resolvedType, in String callingPackage);
231    // Turn on/off profiling in a particular process.
232    boolean profileControl(in String process, int userId, boolean start,
233            in ProfilerInfo profilerInfo, int profileType);
234    boolean shutdown(int timeout);
235    void stopAppSwitches();
236    void resumeAppSwitches();
237    boolean bindBackupAgent(in String packageName, int backupRestoreMode, int userId);
238    void backupAgentCreated(in String packageName, in IBinder agent);
239    void unbindBackupAgent(in ApplicationInfo appInfo);
240    int getUidForIntentSender(in IIntentSender sender);
241    int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
242            boolean requireFull, in String name, in String callerPackage);
243    void addPackageDependency(in String packageName);
244    void killApplication(in String pkg, int appId, int userId, in String reason);
245    void closeSystemDialogs(in String reason);
246    Debug.MemoryInfo[] getProcessMemoryInfo(in int[] pids);
247    void killApplicationProcess(in String processName, int uid);
248    int startActivityIntentSender(in IApplicationThread caller,
249            in IIntentSender target, in IBinder whitelistToken, in Intent fillInIntent,
250            in String resolvedType, in IBinder resultTo, in String resultWho, int requestCode,
251            int flagsMask, int flagsValues, in Bundle options);
252    void overridePendingTransition(in IBinder token, in String packageName,
253            int enterAnim, int exitAnim);
254    // Special low-level communication with activity manager.
255    boolean handleApplicationWtf(in IBinder app, in String tag, boolean system,
256            in ApplicationErrorReport.ParcelableCrashInfo crashInfo);
257    void killBackgroundProcesses(in String packageName, int userId);
258    boolean isUserAMonkey();
259    WaitResult startActivityAndWait(in IApplicationThread caller, in String callingPackage,
260            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
261            int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options,
262            int userId);
263    boolean willActivityBeVisible(in IBinder token);
264    int startActivityWithConfig(in IApplicationThread caller, in String callingPackage,
265            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
266            int requestCode, int startFlags, in Configuration newConfig,
267            in Bundle options, int userId);
268    // Retrieve info of applications installed on external media that are currently
269    // running.
270    List<ApplicationInfo> getRunningExternalApplications();
271    void finishHeavyWeightApp();
272    // A StrictMode violation to be handled.  The violationMask is a
273    // subset of the original StrictMode policy bitmask, with only the
274    // bit violated and penalty bits to be executed by the
275    // ActivityManagerService remaining set.
276    void handleApplicationStrictModeViolation(in IBinder app, int violationMask,
277            in StrictMode.ViolationInfo crashInfo);
278    boolean isImmersive(in IBinder token);
279    void setImmersive(in IBinder token, boolean immersive);
280    boolean isTopActivityImmersive();
281    void crashApplication(int uid, int initialPid, in String packageName, int userId, in String message);
282    String getProviderMimeType(in Uri uri, int userId);
283    IBinder newUriPermissionOwner(in String name);
284    void grantUriPermissionFromOwner(in IBinder owner, int fromUid, in String targetPkg,
285            in Uri uri, int mode, int sourceUserId, int targetUserId);
286    void revokeUriPermissionFromOwner(in IBinder owner, in Uri uri, int mode, int userId);
287    int checkGrantUriPermission(int callingUid, in String targetPkg, in Uri uri,
288            int modeFlags, int userId);
289    // Cause the specified process to dump the specified heap.
290    boolean dumpHeap(in String process, int userId, boolean managed, boolean mallocInfo,
291            boolean runGc, in String path, in ParcelFileDescriptor fd);
292    int startActivities(in IApplicationThread caller, in String callingPackage,
293            in Intent[] intents, in String[] resolvedTypes, in IBinder resultTo,
294            in Bundle options, int userId);
295    boolean isUserRunning(int userid, int flags);
296    oneway void activitySlept(in IBinder token);
297    int getFrontActivityScreenCompatMode();
298    void setFrontActivityScreenCompatMode(int mode);
299    int getPackageScreenCompatMode(in String packageName);
300    void setPackageScreenCompatMode(in String packageName, int mode);
301    boolean getPackageAskScreenCompat(in String packageName);
302    void setPackageAskScreenCompat(in String packageName, boolean ask);
303    boolean switchUser(int userid);
304    void setFocusedTask(int taskId);
305    boolean removeTask(int taskId);
306    void registerProcessObserver(in IProcessObserver observer);
307    void unregisterProcessObserver(in IProcessObserver observer);
308    boolean isIntentSenderTargetedToPackage(in IIntentSender sender);
309    void updatePersistentConfiguration(in Configuration values);
310    long[] getProcessPss(in int[] pids);
311    void showBootMessage(in CharSequence msg, boolean always);
312    void killAllBackgroundProcesses();
313    ContentProviderHolder getContentProviderExternal(in String name, int userId,
314            in IBinder token);
315    void removeContentProviderExternal(in String name, in IBinder token);
316    // Get memory information about the calling process.
317    void getMyMemoryState(out ActivityManager.RunningAppProcessInfo outInfo);
318    boolean killProcessesBelowForeground(in String reason);
319    UserInfo getCurrentUser();
320    boolean shouldUpRecreateTask(in IBinder token, in String destAffinity);
321    boolean navigateUpTo(in IBinder token, in Intent target, int resultCode,
322            in Intent resultData);
323    /**
324     * Informs ActivityManagerService that the keyguard is showing.
325     *
326     * @param showingKeyguard True if the keyguard is showing, false otherwise.
327     * @param showingAod True if AOD is showing, false otherwise.
328     * @param secondaryDisplayShowing The displayId of the secondary display on which the keyguard
329     *        is showing, or INVALID_DISPLAY if there is no such display. Only meaningful if
330     *        showing is true.
331     */
332    void setLockScreenShown(boolean showingKeyguard, boolean showingAod,
333            int secondaryDisplayShowing);
334    boolean finishActivityAffinity(in IBinder token);
335    // This is not public because you need to be very careful in how you
336    // manage your activity to make sure it is always the uid you expect.
337    int getLaunchedFromUid(in IBinder activityToken);
338    void unstableProviderDied(in IBinder connection);
339    boolean isIntentSenderAnActivity(in IIntentSender sender);
340    boolean isIntentSenderAForegroundService(in IIntentSender sender);
341    int startActivityAsUser(in IApplicationThread caller, in String callingPackage,
342            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
343            int requestCode, int flags, in ProfilerInfo profilerInfo,
344            in Bundle options, int userId);
345    int stopUser(int userid, boolean force, in IStopUserCallback callback);
346    void registerUserSwitchObserver(in IUserSwitchObserver observer, in String name);
347    void unregisterUserSwitchObserver(in IUserSwitchObserver observer);
348    int[] getRunningUserIds();
349
350    // Deprecated - This method is only used by a few internal components and it will soon be
351    // replaced by a proper bug report API (which will be restricted to a few, pre-defined apps).
352    // No new code should be calling it.
353    void requestBugReport(int bugreportType);
354
355    /**
356     *  Takes a telephony bug report and notifies the user with the title and description
357     *  that are passed to this API as parameters
358     *
359     *  @param shareTitle should be a valid legible string less than 50 chars long
360     *  @param shareDescription should be less than 91 bytes when encoded into UTF-8 format
361     *
362     *  @throws IllegalArgumentException if shareTitle or shareDescription is too big or if the
363     *          paremeters cannot be encoding to an UTF-8 charset.
364     */
365    void requestTelephonyBugReport(in String shareTitle, in String shareDescription);
366
367    /**
368     *  Deprecated - This method is only used by Wifi, and it will soon be replaced by a proper
369     *  bug report API.
370     *
371     *  Takes a minimal bugreport of Wifi-related state.
372     *
373     *  @param shareTitle should be a valid legible string less than 50 chars long
374     *  @param shareDescription should be less than 91 bytes when encoded into UTF-8 format
375     *
376     *  @throws IllegalArgumentException if shareTitle or shareDescription is too big or if the
377     *          parameters cannot be encoding to an UTF-8 charset.
378     */
379    void requestWifiBugReport(in String shareTitle, in String shareDescription);
380
381    long inputDispatchingTimedOut(int pid, boolean aboveSystem, in String reason);
382    void clearPendingBackup();
383    Intent getIntentForIntentSender(in IIntentSender sender);
384    Bundle getAssistContextExtras(int requestType);
385    void reportAssistContextExtras(in IBinder token, in Bundle extras,
386            in AssistStructure structure, in AssistContent content, in Uri referrer);
387    // This is not public because you need to be very careful in how you
388    // manage your activity to make sure it is always the uid you expect.
389    String getLaunchedFromPackage(in IBinder activityToken);
390    void killUid(int appId, int userId, in String reason);
391    void setUserIsMonkey(boolean monkey);
392    void hang(in IBinder who, boolean allowRestart);
393
394    /**
395     * Sets the windowing mode for a specific task. Only works on tasks of type
396     * {@link WindowConfiguration#ACTIVITY_TYPE_STANDARD}
397     * @param taskId The id of the task to set the windowing mode for.
398     * @param windowingMode The windowing mode to set for the task.
399     * @param toTop If the task should be moved to the top once the windowing mode changes.
400     */
401    void setTaskWindowingMode(int taskId, int windowingMode, boolean toTop);
402    void moveTaskToStack(int taskId, int stackId, boolean toTop);
403    /**
404     * Resizes the input stack id to the given bounds.
405     *
406     * @param stackId Id of the stack to resize.
407     * @param bounds Bounds to resize the stack to or {@code null} for fullscreen.
408     * @param allowResizeInDockedMode True if the resize should be allowed when the docked stack is
409     *                                active.
410     * @param preserveWindows True if the windows of activities contained in the stack should be
411     *                        preserved.
412     * @param animate True if the stack resize should be animated.
413     * @param animationDuration The duration of the resize animation in milliseconds or -1 if the
414     *                          default animation duration should be used.
415     * @throws RemoteException
416     */
417    void resizeStack(int stackId, in Rect bounds, boolean allowResizeInDockedMode,
418            boolean preserveWindows, boolean animate, int animationDuration);
419    List<ActivityManager.StackInfo> getAllStackInfos();
420    void setFocusedStack(int stackId);
421    ActivityManager.StackInfo getFocusedStackInfo();
422    ActivityManager.StackInfo getStackInfo(int windowingMode, int activityType);
423    boolean convertFromTranslucent(in IBinder token);
424    boolean convertToTranslucent(in IBinder token, in Bundle options);
425    void notifyActivityDrawn(in IBinder token);
426    void reportActivityFullyDrawn(in IBinder token, boolean restoredFromBundle);
427    void restart();
428    void performIdleMaintenance();
429    void takePersistableUriPermission(in Uri uri, int modeFlags, String toPackage, int userId);
430    void releasePersistableUriPermission(in Uri uri, int modeFlags, String toPackage, int userId);
431    ParceledListSlice getPersistedUriPermissions(in String packageName, boolean incoming);
432    void appNotRespondingViaProvider(in IBinder connection);
433    Rect getTaskBounds(int taskId);
434    int getActivityDisplayId(in IBinder activityToken);
435    boolean setProcessMemoryTrimLevel(in String process, int uid, int level);
436
437
438    // Start of L transactions
439    String getTagForIntentSender(in IIntentSender sender, in String prefix);
440    boolean startUserInBackground(int userid);
441    void startLockTaskModeByToken(in IBinder token);
442    void stopLockTaskModeByToken(in IBinder token);
443    boolean isInLockTaskMode();
444    void setTaskDescription(in IBinder token, in ActivityManager.TaskDescription values);
445    int startVoiceActivity(in String callingPackage, int callingPid, int callingUid,
446            in Intent intent, in String resolvedType, in IVoiceInteractionSession session,
447            in IVoiceInteractor interactor, int flags, in ProfilerInfo profilerInfo,
448            in Bundle options, int userId);
449    int startAssistantActivity(in String callingPackage, int callingPid, int callingUid,
450            in Intent intent, in String resolvedType, in Bundle options, int userId);
451    void startRecentsActivity(in Intent intent, in IAssistDataReceiver assistDataReceiver,
452            in IRecentsAnimationRunner recentsAnimationRunner);
453    void cancelRecentsAnimation(boolean restoreHomeStackPosition);
454    int startActivityFromRecents(int taskId, in Bundle options);
455    Bundle getActivityOptions(in IBinder token);
456    List<IBinder> getAppTasks(in String callingPackage);
457    void startSystemLockTaskMode(int taskId);
458    void stopSystemLockTaskMode();
459    void finishVoiceTask(in IVoiceInteractionSession session);
460    boolean isTopOfTask(in IBinder token);
461    void notifyLaunchTaskBehindComplete(in IBinder token);
462    void notifyEnterAnimationComplete(in IBinder token);
463    int startActivityAsCaller(in IApplicationThread caller, in String callingPackage,
464            in Intent intent, in String resolvedType, in IBinder resultTo, in String resultWho,
465            int requestCode, int flags, in ProfilerInfo profilerInfo, in Bundle options,
466            boolean ignoreTargetSecurity, int userId);
467    int addAppTask(in IBinder activityToken, in Intent intent,
468            in ActivityManager.TaskDescription description, in Bitmap thumbnail);
469    Point getAppTaskThumbnailSize();
470    boolean releaseActivityInstance(in IBinder token);
471    void releaseSomeActivities(in IApplicationThread app);
472    void bootAnimationComplete();
473    Bitmap getTaskDescriptionIcon(in String filename, int userId);
474    boolean launchAssistIntent(in Intent intent, int requestType, in String hint, int userHandle,
475            in Bundle args);
476    void startInPlaceAnimationOnFrontMostApplication(in Bundle opts);
477    int checkPermissionWithToken(in String permission, int pid, int uid,
478            in IBinder callerToken);
479    void registerTaskStackListener(in ITaskStackListener listener);
480    void unregisterTaskStackListener(in ITaskStackListener listener);
481
482    void notifyCleartextNetwork(int uid, in byte[] firstPacket);
483    int createStackOnDisplay(int displayId);
484    void setTaskResizeable(int taskId, int resizeableMode);
485    boolean requestAssistContextExtras(int requestType, in IAssistDataReceiver receiver,
486            in Bundle receiverExtras, in IBinder activityToken,
487            boolean focused, boolean newSessionId);
488    void resizeTask(int taskId, in Rect bounds, int resizeMode);
489    int getLockTaskModeState();
490    void setDumpHeapDebugLimit(in String processName, int uid, long maxMemSize,
491            in String reportPackage);
492    void dumpHeapFinished(in String path);
493    void setVoiceKeepAwake(in IVoiceInteractionSession session, boolean keepAwake);
494    void updateLockTaskPackages(int userId, in String[] packages);
495    void noteAlarmStart(in IIntentSender sender, in WorkSource workSource, int sourceUid, in String tag);
496    void noteAlarmFinish(in IIntentSender sender, in WorkSource workSource, int sourceUid, in String tag);
497    int getPackageProcessState(in String packageName, in String callingPackage);
498    oneway void showLockTaskEscapeMessage(in IBinder token);
499    void updateDeviceOwner(in String packageName);
500    /**
501     * Notify the system that the keyguard is going away.
502     *
503     * @param flags See {@link android.view.WindowManagerPolicyConstants#KEYGUARD_GOING_AWAY_FLAG_TO_SHADE}
504     *              etc.
505     */
506    void keyguardGoingAway(int flags);
507    int getUidProcessState(int uid, in String callingPackage);
508    boolean isAssistDataAllowedOnCurrentActivity();
509    boolean showAssistFromActivity(in IBinder token, in Bundle args);
510    boolean isRootVoiceInteraction(in IBinder token);
511
512
513    // Start of N transactions
514    // Start Binder transaction tracking for all applications.
515    boolean startBinderTracking();
516    // Stop Binder transaction tracking for all applications and dump trace data to the given file
517    // descriptor.
518    boolean stopBinderTrackingAndDump(in ParcelFileDescriptor fd);
519    /**
520     * Try to place task to provided position. The final position might be different depending on
521     * current user and stacks state. The task will be moved to target stack if it's currently in
522     * different stack.
523     */
524    void positionTaskInStack(int taskId, int stackId, int position);
525    void exitFreeformMode(in IBinder token);
526    void reportSizeConfigurations(in IBinder token, in int[] horizontalSizeConfiguration,
527            in int[] verticalSizeConfigurations, in int[] smallestWidthConfigurations);
528    boolean setTaskWindowingModeSplitScreenPrimary(int taskId, int createMode, boolean toTop,
529            boolean animate, in Rect initialBounds, boolean showRecents);
530    /**
531     * Dismisses split-screen multi-window mode.
532     * {@param toTop} If true the current primary split-screen stack will be placed or left on top.
533     */
534    void dismissSplitScreenMode(boolean toTop);
535    /**
536     * Dismisses PiP
537     * @param animate True if the dismissal should be animated.
538     * @param animationDuration The duration of the resize animation in milliseconds or -1 if the
539     *                          default animation duration should be used.
540     */
541    void dismissPip(boolean animate, int animationDuration);
542    void suppressResizeConfigChanges(boolean suppress);
543    void moveTasksToFullscreenStack(int fromStackId, boolean onTop);
544    boolean moveTopActivityToPinnedStack(int stackId, in Rect bounds);
545    boolean isAppStartModeDisabled(int uid, in String packageName);
546    boolean unlockUser(int userid, in byte[] token, in byte[] secret,
547            in IProgressListener listener);
548    boolean isInMultiWindowMode(in IBinder token);
549    boolean isInPictureInPictureMode(in IBinder token);
550    void killPackageDependents(in String packageName, int userId);
551    boolean enterPictureInPictureMode(in IBinder token, in PictureInPictureParams params);
552    void setPictureInPictureParams(in IBinder token, in PictureInPictureParams params);
553    int getMaxNumPictureInPictureActions(in IBinder token);
554    void activityRelaunched(in IBinder token);
555    IBinder getUriPermissionOwnerForActivity(in IBinder activityToken);
556    /**
557     * Resizes the docked stack, and all other stacks as the result of the dock stack bounds change.
558     *
559     * @param dockedBounds The bounds for the docked stack.
560     * @param tempDockedTaskBounds The temporary bounds for the tasks in the docked stack, which
561     *                             might be different from the stack bounds to allow more
562     *                             flexibility while resizing, or {@code null} if they should be the
563     *                             same as the stack bounds.
564     * @param tempDockedTaskInsetBounds The temporary bounds for the tasks to calculate the insets.
565     *                                  When resizing, we usually "freeze" the layout of a task. To
566     *                                  achieve that, we also need to "freeze" the insets, which
567     *                                  gets achieved by changing task bounds but not bounds used
568     *                                  to calculate the insets in this transient state
569     * @param tempOtherTaskBounds The temporary bounds for the tasks in all other stacks, or
570     *                            {@code null} if they should be the same as the stack bounds.
571     * @param tempOtherTaskInsetBounds Like {@code tempDockedTaskInsetBounds}, but for the other
572     *                                 stacks.
573     * @throws RemoteException
574     */
575    void resizeDockedStack(in Rect dockedBounds, in Rect tempDockedTaskBounds,
576            in Rect tempDockedTaskInsetBounds,
577            in Rect tempOtherTaskBounds, in Rect tempOtherTaskInsetBounds);
578    /**
579     * Sets whether we are currently in an interactive split screen resize operation where we
580     * are changing the docked stack size.
581     */
582    void setSplitScreenResizing(boolean resizing);
583    int setVrMode(in IBinder token, boolean enabled, in ComponentName packageName);
584    // Gets the URI permissions granted to an arbitrary package (or all packages if null)
585    // NOTE: this is different from getPersistedUriPermissions(), which returns the URIs the package
586    // granted to another packages (instead of those granted to it).
587    ParceledListSlice getGrantedUriPermissions(in String packageName, int userId);
588    // Clears the URI permissions granted to an arbitrary package.
589    void clearGrantedUriPermissions(in String packageName, int userId);
590    boolean isAppForeground(int uid);
591    void startLocalVoiceInteraction(in IBinder token, in Bundle options);
592    void stopLocalVoiceInteraction(in IBinder token);
593    boolean supportsLocalVoiceInteraction();
594    void notifyPinnedStackAnimationStarted();
595    void notifyPinnedStackAnimationEnded();
596    void removeStack(int stackId);
597    /**
598     * Removes stacks in the input windowing modes from the system if they are of activity type
599     * ACTIVITY_TYPE_STANDARD or ACTIVITY_TYPE_UNDEFINED
600     */
601    void removeStacksInWindowingModes(in int[] windowingModes);
602    /** Removes stack of the activity types from the system. */
603    void removeStacksWithActivityTypes(in int[] activityTypes);
604    void makePackageIdle(String packageName, int userId);
605    int getMemoryTrimLevel();
606    /**
607     * Resizes the pinned stack.
608     *
609     * @param pinnedBounds The bounds for the pinned stack.
610     * @param tempPinnedTaskBounds The temporary bounds for the tasks in the pinned stack, which
611     *                             might be different from the stack bounds to allow more
612     *                             flexibility while resizing, or {@code null} if they should be the
613     *                             same as the stack bounds.
614     */
615    void resizePinnedStack(in Rect pinnedBounds, in Rect tempPinnedTaskBounds);
616    boolean isVrModePackageEnabled(in ComponentName packageName);
617    void notifyLockedProfile(int userId);
618    void startConfirmDeviceCredentialIntent(in Intent intent, in Bundle options);
619    void sendIdleJobTrigger();
620    int sendIntentSender(in IIntentSender target, in IBinder whitelistToken, int code,
621            in Intent intent, in String resolvedType, in IIntentReceiver finishedReceiver,
622            in String requiredPermission, in Bundle options);
623    boolean isBackgroundRestricted(in String packageName);
624
625    // Start of N MR1 transactions
626    void setVrThread(int tid);
627    void setRenderThread(int tid);
628    /**
629     * Lets activity manager know whether the calling process is currently showing "top-level" UI
630     * that is not an activity, i.e. windows on the screen the user is currently interacting with.
631     *
632     * <p>This flag can only be set for persistent processes.
633     *
634     * @param hasTopUi Whether the calling process has "top-level" UI.
635     */
636    void setHasTopUi(boolean hasTopUi);
637
638    // Start of O transactions
639    /**
640     * Updates override configuration applied to specific display.
641     * @param values Update values for display configuration. If null is passed it will request the
642     *               Window Manager to compute new config for the specified display.
643     * @param displayId Id of the display to apply the config to.
644     * @throws RemoteException
645     * @return Returns true if the configuration was updated.
646     */
647    boolean updateDisplayOverrideConfiguration(in Configuration values, int displayId);
648    void moveStackToDisplay(int stackId, int displayId);
649    boolean requestAutofillData(in IAssistDataReceiver receiver, in Bundle receiverExtras,
650            in IBinder activityToken, int flags);
651    void dismissKeyguard(in IBinder token, in IKeyguardDismissCallback callback,
652            in CharSequence message);
653    int restartUserInBackground(int userId);
654
655    /** Cancels the window transitions for the given task. */
656    void cancelTaskWindowTransition(int taskId);
657
658    /**
659     * @param taskId the id of the task to retrieve the sAutoapshots for
660     * @param reducedResolution if set, if the snapshot needs to be loaded from disk, this will load
661     *                          a reduced resolution of it, which is much faster
662     * @return a graphic buffer representing a screenshot of a task
663     */
664    ActivityManager.TaskSnapshot getTaskSnapshot(int taskId, boolean reducedResolution);
665
666    void scheduleApplicationInfoChanged(in List<String> packageNames, int userId);
667    void setPersistentVrThread(int tid);
668
669    void waitForNetworkStateUpdate(long procStateSeq);
670
671    /**
672     * See {@link android.app.Activity#setDisablePreviewScreenshots}
673     */
674    void setDisablePreviewScreenshots(IBinder token, boolean disable);
675
676    /**
677     * Return the user id of last resumed activity.
678     */
679    int getLastResumedActivityUserId();
680
681    /**
682     * Add a bare uid to the background restrictions whitelist.  Only the system uid may call this.
683     */
684    void backgroundWhitelistUid(int uid);
685
686    // Start of P transactions
687    void updateLockTaskFeatures(int userId, int flags);
688
689    // WARNING: when these transactions are updated, check if they are any callers on the native
690    // side. If so, make sure they are using the correct transaction ids and arguments.
691    // If a transaction which will also be used on the native side is being inserted, add it
692    // alongside with other transactions of this kind at the top of this file.
693
694    void setShowWhenLocked(in IBinder token, boolean showWhenLocked);
695    void setTurnScreenOn(in IBinder token, boolean turnScreenOn);
696
697    /**
698     *  Similar to {@link #startUserInBackground(int userId), but with a listener to report
699     *  user unlock progress.
700     */
701    boolean startUserInBackgroundWithListener(int userid, IProgressListener unlockProgressListener);
702
703    /**
704     * Registers remote animations for a specific activity.
705     */
706    void registerRemoteAnimations(in IBinder token, in RemoteAnimationDefinition definition);
707
708    /**
709     * Registers a remote animation to be run for all activity starts from a certain package during
710     * a short predefined amount of time.
711     */
712    void registerRemoteAnimationForNextActivityStart(in String packageName,
713           in RemoteAnimationAdapter adapter);
714
715    /** @see android.app.ActivityManager#alwaysShowUnsupportedCompileSdkWarning */
716    void alwaysShowUnsupportedCompileSdkWarning(in ComponentName activity);
717}
718