OSDN Git Service

aacd5da58640069b3c4416e5a74ad64fd289afce
[android-x86/frameworks-base.git] / core / java / android / app / ActivityManagerNative.java
1 /*
2  * Copyright (C) 2006 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 android.annotation.UserIdInt;
20 import android.app.ActivityManager.StackInfo;
21 import android.app.assist.AssistContent;
22 import android.app.assist.AssistStructure;
23 import android.content.ComponentName;
24 import android.content.IIntentReceiver;
25 import android.content.IIntentSender;
26 import android.content.Intent;
27 import android.content.IntentFilter;
28 import android.content.IntentSender;
29 import android.content.UriPermission;
30 import android.content.pm.ApplicationInfo;
31 import android.content.pm.ConfigurationInfo;
32 import android.content.pm.IPackageDataObserver;
33 import android.content.pm.ParceledListSlice;
34 import android.content.pm.UserInfo;
35 import android.content.res.Configuration;
36 import android.graphics.Bitmap;
37 import android.graphics.Point;
38 import android.graphics.Rect;
39 import android.net.Uri;
40 import android.os.Binder;
41 import android.os.Bundle;
42 import android.os.Debug;
43 import android.os.IBinder;
44 import android.os.IProgressListener;
45 import android.os.Parcel;
46 import android.os.ParcelFileDescriptor;
47 import android.os.Parcelable;
48 import android.os.PersistableBundle;
49 import android.os.RemoteException;
50 import android.os.ServiceManager;
51 import android.os.StrictMode;
52 import android.service.voice.IVoiceInteractionSession;
53 import android.text.TextUtils;
54 import android.util.Log;
55 import android.util.Singleton;
56 import com.android.internal.app.IVoiceInteractor;
57 import com.android.internal.os.IResultReceiver;
58
59 import java.util.ArrayList;
60 import java.util.List;
61
62 /** {@hide} */
63 public abstract class ActivityManagerNative extends Binder implements IActivityManager
64 {
65     /**
66      * Cast a Binder object into an activity manager interface, generating
67      * a proxy if needed.
68      */
69     static public IActivityManager asInterface(IBinder obj) {
70         if (obj == null) {
71             return null;
72         }
73         IActivityManager in =
74             (IActivityManager)obj.queryLocalInterface(descriptor);
75         if (in != null) {
76             return in;
77         }
78
79         return new ActivityManagerProxy(obj);
80     }
81
82     /**
83      * Retrieve the system's default/global activity manager.
84      */
85     static public IActivityManager getDefault() {
86         return gDefault.get();
87     }
88
89     /**
90      * Convenience for checking whether the system is ready.  For internal use only.
91      */
92     static public boolean isSystemReady() {
93         if (!sSystemReady) {
94             sSystemReady = getDefault().testIsSystemReady();
95         }
96         return sSystemReady;
97     }
98     static volatile boolean sSystemReady = false;
99
100     static public void broadcastStickyIntent(Intent intent, String permission, int userId) {
101         broadcastStickyIntent(intent, permission, AppOpsManager.OP_NONE, userId);
102     }
103
104     /**
105      * Convenience for sending a sticky broadcast.  For internal use only.
106      * If you don't care about permission, use null.
107      */
108     static public void broadcastStickyIntent(Intent intent, String permission, int appOp,
109             int userId) {
110         try {
111             getDefault().broadcastIntent(
112                     null, intent, null, null, Activity.RESULT_OK, null, null,
113                     null /*permission*/, appOp, null, false, true, userId);
114         } catch (RemoteException ex) {
115         }
116     }
117
118     static public void noteWakeupAlarm(PendingIntent ps, int sourceUid, String sourcePkg,
119             String tag) {
120         try {
121             getDefault().noteWakeupAlarm((ps != null) ? ps.getTarget() : null,
122                     sourceUid, sourcePkg, tag);
123         } catch (RemoteException ex) {
124         }
125     }
126
127     static public void noteAlarmStart(PendingIntent ps, int sourceUid, String tag) {
128         try {
129             getDefault().noteAlarmStart((ps != null) ? ps.getTarget() : null, sourceUid, tag);
130         } catch (RemoteException ex) {
131         }
132     }
133
134     static public void noteAlarmFinish(PendingIntent ps, int sourceUid, String tag) {
135         try {
136             getDefault().noteAlarmFinish((ps != null) ? ps.getTarget() : null, sourceUid, tag);
137         } catch (RemoteException ex) {
138         }
139     }
140
141     public ActivityManagerNative() {
142         attachInterface(this, descriptor);
143     }
144
145     @Override
146     public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
147             throws RemoteException {
148         switch (code) {
149         case START_ACTIVITY_TRANSACTION:
150         {
151             data.enforceInterface(IActivityManager.descriptor);
152             IBinder b = data.readStrongBinder();
153             IApplicationThread app = ApplicationThreadNative.asInterface(b);
154             String callingPackage = data.readString();
155             Intent intent = Intent.CREATOR.createFromParcel(data);
156             String resolvedType = data.readString();
157             IBinder resultTo = data.readStrongBinder();
158             String resultWho = data.readString();
159             int requestCode = data.readInt();
160             int startFlags = data.readInt();
161             ProfilerInfo profilerInfo = data.readInt() != 0
162                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
163             Bundle options = data.readInt() != 0
164                     ? Bundle.CREATOR.createFromParcel(data) : null;
165             int result = startActivity(app, callingPackage, intent, resolvedType,
166                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options);
167             reply.writeNoException();
168             reply.writeInt(result);
169             return true;
170         }
171
172         case START_ACTIVITY_AS_USER_TRANSACTION:
173         {
174             data.enforceInterface(IActivityManager.descriptor);
175             IBinder b = data.readStrongBinder();
176             IApplicationThread app = ApplicationThreadNative.asInterface(b);
177             String callingPackage = data.readString();
178             Intent intent = Intent.CREATOR.createFromParcel(data);
179             String resolvedType = data.readString();
180             IBinder resultTo = data.readStrongBinder();
181             String resultWho = data.readString();
182             int requestCode = data.readInt();
183             int startFlags = data.readInt();
184             ProfilerInfo profilerInfo = data.readInt() != 0
185                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
186             Bundle options = data.readInt() != 0
187                     ? Bundle.CREATOR.createFromParcel(data) : null;
188             int userId = data.readInt();
189             int result = startActivityAsUser(app, callingPackage, intent, resolvedType,
190                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options, userId);
191             reply.writeNoException();
192             reply.writeInt(result);
193             return true;
194         }
195
196         case START_ACTIVITY_AS_CALLER_TRANSACTION:
197         {
198             data.enforceInterface(IActivityManager.descriptor);
199             IBinder b = data.readStrongBinder();
200             IApplicationThread app = ApplicationThreadNative.asInterface(b);
201             String callingPackage = data.readString();
202             Intent intent = Intent.CREATOR.createFromParcel(data);
203             String resolvedType = data.readString();
204             IBinder resultTo = data.readStrongBinder();
205             String resultWho = data.readString();
206             int requestCode = data.readInt();
207             int startFlags = data.readInt();
208             ProfilerInfo profilerInfo = data.readInt() != 0
209                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
210             Bundle options = data.readInt() != 0
211                     ? Bundle.CREATOR.createFromParcel(data) : null;
212             boolean ignoreTargetSecurity = data.readInt() != 0;
213             int userId = data.readInt();
214             int result = startActivityAsCaller(app, callingPackage, intent, resolvedType,
215                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options,
216                     ignoreTargetSecurity, userId);
217             reply.writeNoException();
218             reply.writeInt(result);
219             return true;
220         }
221
222         case START_ACTIVITY_AND_WAIT_TRANSACTION:
223         {
224             data.enforceInterface(IActivityManager.descriptor);
225             IBinder b = data.readStrongBinder();
226             IApplicationThread app = ApplicationThreadNative.asInterface(b);
227             String callingPackage = data.readString();
228             Intent intent = Intent.CREATOR.createFromParcel(data);
229             String resolvedType = data.readString();
230             IBinder resultTo = data.readStrongBinder();
231             String resultWho = data.readString();
232             int requestCode = data.readInt();
233             int startFlags = data.readInt();
234             ProfilerInfo profilerInfo = data.readInt() != 0
235                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
236             Bundle options = data.readInt() != 0
237                     ? Bundle.CREATOR.createFromParcel(data) : null;
238             int userId = data.readInt();
239             WaitResult result = startActivityAndWait(app, callingPackage, intent, resolvedType,
240                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options, userId);
241             reply.writeNoException();
242             result.writeToParcel(reply, 0);
243             return true;
244         }
245
246         case START_ACTIVITY_WITH_CONFIG_TRANSACTION:
247         {
248             data.enforceInterface(IActivityManager.descriptor);
249             IBinder b = data.readStrongBinder();
250             IApplicationThread app = ApplicationThreadNative.asInterface(b);
251             String callingPackage = data.readString();
252             Intent intent = Intent.CREATOR.createFromParcel(data);
253             String resolvedType = data.readString();
254             IBinder resultTo = data.readStrongBinder();
255             String resultWho = data.readString();
256             int requestCode = data.readInt();
257             int startFlags = data.readInt();
258             Configuration config = Configuration.CREATOR.createFromParcel(data);
259             Bundle options = data.readInt() != 0
260                     ? Bundle.CREATOR.createFromParcel(data) : null;
261             int userId = data.readInt();
262             int result = startActivityWithConfig(app, callingPackage, intent, resolvedType,
263                     resultTo, resultWho, requestCode, startFlags, config, options, userId);
264             reply.writeNoException();
265             reply.writeInt(result);
266             return true;
267         }
268
269         case START_ACTIVITY_INTENT_SENDER_TRANSACTION:
270         {
271             data.enforceInterface(IActivityManager.descriptor);
272             IBinder b = data.readStrongBinder();
273             IApplicationThread app = ApplicationThreadNative.asInterface(b);
274             IntentSender intent = IntentSender.CREATOR.createFromParcel(data);
275             Intent fillInIntent = null;
276             if (data.readInt() != 0) {
277                 fillInIntent = Intent.CREATOR.createFromParcel(data);
278             }
279             String resolvedType = data.readString();
280             IBinder resultTo = data.readStrongBinder();
281             String resultWho = data.readString();
282             int requestCode = data.readInt();
283             int flagsMask = data.readInt();
284             int flagsValues = data.readInt();
285             Bundle options = data.readInt() != 0
286                     ? Bundle.CREATOR.createFromParcel(data) : null;
287             int result = startActivityIntentSender(app, intent,
288                     fillInIntent, resolvedType, resultTo, resultWho,
289                     requestCode, flagsMask, flagsValues, options);
290             reply.writeNoException();
291             reply.writeInt(result);
292             return true;
293         }
294
295         case START_VOICE_ACTIVITY_TRANSACTION:
296         {
297             data.enforceInterface(IActivityManager.descriptor);
298             String callingPackage = data.readString();
299             int callingPid = data.readInt();
300             int callingUid = data.readInt();
301             Intent intent = Intent.CREATOR.createFromParcel(data);
302             String resolvedType = data.readString();
303             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
304                     data.readStrongBinder());
305             IVoiceInteractor interactor = IVoiceInteractor.Stub.asInterface(
306                     data.readStrongBinder());
307             int startFlags = data.readInt();
308             ProfilerInfo profilerInfo = data.readInt() != 0
309                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
310             Bundle options = data.readInt() != 0
311                     ? Bundle.CREATOR.createFromParcel(data) : null;
312             int userId = data.readInt();
313             int result = startVoiceActivity(callingPackage, callingPid, callingUid, intent,
314                     resolvedType, session, interactor, startFlags, profilerInfo, options, userId);
315             reply.writeNoException();
316             reply.writeInt(result);
317             return true;
318         }
319
320         case START_LOCAL_VOICE_INTERACTION_TRANSACTION:
321         {
322             data.enforceInterface(IActivityManager.descriptor);
323             IBinder token = data.readStrongBinder();
324             Bundle options = data.readBundle();
325             startLocalVoiceInteraction(token, options);
326             reply.writeNoException();
327             return true;
328         }
329
330         case STOP_LOCAL_VOICE_INTERACTION_TRANSACTION:
331         {
332             data.enforceInterface(IActivityManager.descriptor);
333             IBinder token = data.readStrongBinder();
334             stopLocalVoiceInteraction(token);
335             reply.writeNoException();
336             return true;
337         }
338
339         case SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION:
340         {
341             data.enforceInterface(IActivityManager.descriptor);
342             boolean result = supportsLocalVoiceInteraction();
343             reply.writeNoException();
344             reply.writeInt(result? 1 : 0);
345             return true;
346         }
347
348         case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
349         {
350             data.enforceInterface(IActivityManager.descriptor);
351             IBinder callingActivity = data.readStrongBinder();
352             Intent intent = Intent.CREATOR.createFromParcel(data);
353             Bundle options = data.readInt() != 0
354                     ? Bundle.CREATOR.createFromParcel(data) : null;
355             boolean result = startNextMatchingActivity(callingActivity, intent, options);
356             reply.writeNoException();
357             reply.writeInt(result ? 1 : 0);
358             return true;
359         }
360
361         case START_ACTIVITY_FROM_RECENTS_TRANSACTION:
362         {
363             data.enforceInterface(IActivityManager.descriptor);
364             final int taskId = data.readInt();
365             final Bundle options =
366                     data.readInt() == 0 ? null : Bundle.CREATOR.createFromParcel(data);
367             final int result = startActivityFromRecents(taskId, options);
368             reply.writeNoException();
369             reply.writeInt(result);
370             return true;
371         }
372
373         case FINISH_ACTIVITY_TRANSACTION: {
374             data.enforceInterface(IActivityManager.descriptor);
375             IBinder token = data.readStrongBinder();
376             Intent resultData = null;
377             int resultCode = data.readInt();
378             if (data.readInt() != 0) {
379                 resultData = Intent.CREATOR.createFromParcel(data);
380             }
381             int finishTask = data.readInt();
382             boolean res = finishActivity(token, resultCode, resultData, finishTask);
383             reply.writeNoException();
384             reply.writeInt(res ? 1 : 0);
385             return true;
386         }
387
388         case FINISH_SUB_ACTIVITY_TRANSACTION: {
389             data.enforceInterface(IActivityManager.descriptor);
390             IBinder token = data.readStrongBinder();
391             String resultWho = data.readString();
392             int requestCode = data.readInt();
393             finishSubActivity(token, resultWho, requestCode);
394             reply.writeNoException();
395             return true;
396         }
397
398         case FINISH_ACTIVITY_AFFINITY_TRANSACTION: {
399             data.enforceInterface(IActivityManager.descriptor);
400             IBinder token = data.readStrongBinder();
401             boolean res = finishActivityAffinity(token);
402             reply.writeNoException();
403             reply.writeInt(res ? 1 : 0);
404             return true;
405         }
406
407         case FINISH_VOICE_TASK_TRANSACTION: {
408             data.enforceInterface(IActivityManager.descriptor);
409             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
410                     data.readStrongBinder());
411             finishVoiceTask(session);
412             reply.writeNoException();
413             return true;
414         }
415
416         case RELEASE_ACTIVITY_INSTANCE_TRANSACTION: {
417             data.enforceInterface(IActivityManager.descriptor);
418             IBinder token = data.readStrongBinder();
419             boolean res = releaseActivityInstance(token);
420             reply.writeNoException();
421             reply.writeInt(res ? 1 : 0);
422             return true;
423         }
424
425         case RELEASE_SOME_ACTIVITIES_TRANSACTION: {
426             data.enforceInterface(IActivityManager.descriptor);
427             IApplicationThread app = ApplicationThreadNative.asInterface(data.readStrongBinder());
428             releaseSomeActivities(app);
429             reply.writeNoException();
430             return true;
431         }
432
433         case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: {
434             data.enforceInterface(IActivityManager.descriptor);
435             IBinder token = data.readStrongBinder();
436             boolean res = willActivityBeVisible(token);
437             reply.writeNoException();
438             reply.writeInt(res ? 1 : 0);
439             return true;
440         }
441
442         case REGISTER_RECEIVER_TRANSACTION:
443         {
444             data.enforceInterface(IActivityManager.descriptor);
445             IBinder b = data.readStrongBinder();
446             IApplicationThread app =
447                 b != null ? ApplicationThreadNative.asInterface(b) : null;
448             String packageName = data.readString();
449             b = data.readStrongBinder();
450             IIntentReceiver rec
451                 = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
452             IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
453             String perm = data.readString();
454             int userId = data.readInt();
455             Intent intent = registerReceiver(app, packageName, rec, filter, perm, userId);
456             reply.writeNoException();
457             if (intent != null) {
458                 reply.writeInt(1);
459                 intent.writeToParcel(reply, 0);
460             } else {
461                 reply.writeInt(0);
462             }
463             return true;
464         }
465
466         case UNREGISTER_RECEIVER_TRANSACTION:
467         {
468             data.enforceInterface(IActivityManager.descriptor);
469             IBinder b = data.readStrongBinder();
470             if (b == null) {
471                 return true;
472             }
473             IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
474             unregisterReceiver(rec);
475             reply.writeNoException();
476             return true;
477         }
478
479         case BROADCAST_INTENT_TRANSACTION:
480         {
481             data.enforceInterface(IActivityManager.descriptor);
482             IBinder b = data.readStrongBinder();
483             IApplicationThread app =
484                 b != null ? ApplicationThreadNative.asInterface(b) : null;
485             Intent intent = Intent.CREATOR.createFromParcel(data);
486             String resolvedType = data.readString();
487             b = data.readStrongBinder();
488             IIntentReceiver resultTo =
489                 b != null ? IIntentReceiver.Stub.asInterface(b) : null;
490             int resultCode = data.readInt();
491             String resultData = data.readString();
492             Bundle resultExtras = data.readBundle();
493             String[] perms = data.readStringArray();
494             int appOp = data.readInt();
495             Bundle options = data.readBundle();
496             boolean serialized = data.readInt() != 0;
497             boolean sticky = data.readInt() != 0;
498             int userId = data.readInt();
499             int res = broadcastIntent(app, intent, resolvedType, resultTo,
500                     resultCode, resultData, resultExtras, perms, appOp,
501                     options, serialized, sticky, userId);
502             reply.writeNoException();
503             reply.writeInt(res);
504             return true;
505         }
506
507         case UNBROADCAST_INTENT_TRANSACTION:
508         {
509             data.enforceInterface(IActivityManager.descriptor);
510             IBinder b = data.readStrongBinder();
511             IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
512             Intent intent = Intent.CREATOR.createFromParcel(data);
513             int userId = data.readInt();
514             unbroadcastIntent(app, intent, userId);
515             reply.writeNoException();
516             return true;
517         }
518
519         case FINISH_RECEIVER_TRANSACTION: {
520             data.enforceInterface(IActivityManager.descriptor);
521             IBinder who = data.readStrongBinder();
522             int resultCode = data.readInt();
523             String resultData = data.readString();
524             Bundle resultExtras = data.readBundle();
525             boolean resultAbort = data.readInt() != 0;
526             int intentFlags = data.readInt();
527             if (who != null) {
528                 finishReceiver(who, resultCode, resultData, resultExtras, resultAbort, intentFlags);
529             }
530             reply.writeNoException();
531             return true;
532         }
533
534         case ATTACH_APPLICATION_TRANSACTION: {
535             data.enforceInterface(IActivityManager.descriptor);
536             IApplicationThread app = ApplicationThreadNative.asInterface(
537                     data.readStrongBinder());
538             if (app != null) {
539                 attachApplication(app);
540             }
541             reply.writeNoException();
542             return true;
543         }
544
545         case ACTIVITY_IDLE_TRANSACTION: {
546             data.enforceInterface(IActivityManager.descriptor);
547             IBinder token = data.readStrongBinder();
548             Configuration config = null;
549             if (data.readInt() != 0) {
550                 config = Configuration.CREATOR.createFromParcel(data);
551             }
552             boolean stopProfiling = data.readInt() != 0;
553             if (token != null) {
554                 activityIdle(token, config, stopProfiling);
555             }
556             reply.writeNoException();
557             return true;
558         }
559
560         case ACTIVITY_RESUMED_TRANSACTION: {
561             data.enforceInterface(IActivityManager.descriptor);
562             IBinder token = data.readStrongBinder();
563             activityResumed(token);
564             reply.writeNoException();
565             return true;
566         }
567
568         case ACTIVITY_PAUSED_TRANSACTION: {
569             data.enforceInterface(IActivityManager.descriptor);
570             IBinder token = data.readStrongBinder();
571             activityPaused(token);
572             reply.writeNoException();
573             return true;
574         }
575
576         case ACTIVITY_STOPPED_TRANSACTION: {
577             data.enforceInterface(IActivityManager.descriptor);
578             IBinder token = data.readStrongBinder();
579             Bundle map = data.readBundle();
580             PersistableBundle persistentState = data.readPersistableBundle();
581             CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
582             activityStopped(token, map, persistentState, description);
583             reply.writeNoException();
584             return true;
585         }
586
587         case ACTIVITY_SLEPT_TRANSACTION: {
588             data.enforceInterface(IActivityManager.descriptor);
589             IBinder token = data.readStrongBinder();
590             activitySlept(token);
591             reply.writeNoException();
592             return true;
593         }
594
595         case ACTIVITY_DESTROYED_TRANSACTION: {
596             data.enforceInterface(IActivityManager.descriptor);
597             IBinder token = data.readStrongBinder();
598             activityDestroyed(token);
599             reply.writeNoException();
600             return true;
601         }
602
603         case ACTIVITY_RELAUNCHED_TRANSACTION: {
604             data.enforceInterface(IActivityManager.descriptor);
605             IBinder token = data.readStrongBinder();
606             activityRelaunched(token);
607             reply.writeNoException();
608             return true;
609         }
610
611         case GET_CALLING_PACKAGE_TRANSACTION: {
612             data.enforceInterface(IActivityManager.descriptor);
613             IBinder token = data.readStrongBinder();
614             String res = token != null ? getCallingPackage(token) : null;
615             reply.writeNoException();
616             reply.writeString(res);
617             return true;
618         }
619
620         case GET_CALLING_ACTIVITY_TRANSACTION: {
621             data.enforceInterface(IActivityManager.descriptor);
622             IBinder token = data.readStrongBinder();
623             ComponentName cn = getCallingActivity(token);
624             reply.writeNoException();
625             ComponentName.writeToParcel(cn, reply);
626             return true;
627         }
628
629         case GET_APP_TASKS_TRANSACTION: {
630             data.enforceInterface(IActivityManager.descriptor);
631             String callingPackage = data.readString();
632             List<IAppTask> list = getAppTasks(callingPackage);
633             reply.writeNoException();
634             int N = list != null ? list.size() : -1;
635             reply.writeInt(N);
636             int i;
637             for (i=0; i<N; i++) {
638                 IAppTask task = list.get(i);
639                 reply.writeStrongBinder(task.asBinder());
640             }
641             return true;
642         }
643
644         case ADD_APP_TASK_TRANSACTION: {
645             data.enforceInterface(IActivityManager.descriptor);
646             IBinder activityToken = data.readStrongBinder();
647             Intent intent = Intent.CREATOR.createFromParcel(data);
648             ActivityManager.TaskDescription descr
649                     = ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
650             Bitmap thumbnail = Bitmap.CREATOR.createFromParcel(data);
651             int res = addAppTask(activityToken, intent, descr, thumbnail);
652             reply.writeNoException();
653             reply.writeInt(res);
654             return true;
655         }
656
657         case GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION: {
658             data.enforceInterface(IActivityManager.descriptor);
659             Point size = getAppTaskThumbnailSize();
660             reply.writeNoException();
661             size.writeToParcel(reply, 0);
662             return true;
663         }
664
665         case GET_TASKS_TRANSACTION: {
666             data.enforceInterface(IActivityManager.descriptor);
667             int maxNum = data.readInt();
668             int fl = data.readInt();
669             List<ActivityManager.RunningTaskInfo> list = getTasks(maxNum, fl);
670             reply.writeNoException();
671             int N = list != null ? list.size() : -1;
672             reply.writeInt(N);
673             int i;
674             for (i=0; i<N; i++) {
675                 ActivityManager.RunningTaskInfo info = list.get(i);
676                 info.writeToParcel(reply, 0);
677             }
678             return true;
679         }
680
681         case GET_RECENT_TASKS_TRANSACTION: {
682             data.enforceInterface(IActivityManager.descriptor);
683             int maxNum = data.readInt();
684             int fl = data.readInt();
685             int userId = data.readInt();
686             ParceledListSlice<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
687                     fl, userId);
688             reply.writeNoException();
689             list.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
690             return true;
691         }
692
693         case GET_TASK_THUMBNAIL_TRANSACTION: {
694             data.enforceInterface(IActivityManager.descriptor);
695             int id = data.readInt();
696             ActivityManager.TaskThumbnail taskThumbnail = getTaskThumbnail(id);
697             reply.writeNoException();
698             if (taskThumbnail != null) {
699                 reply.writeInt(1);
700                 taskThumbnail.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
701             } else {
702                 reply.writeInt(0);
703             }
704             return true;
705         }
706
707         case GET_SERVICES_TRANSACTION: {
708             data.enforceInterface(IActivityManager.descriptor);
709             int maxNum = data.readInt();
710             int fl = data.readInt();
711             List<ActivityManager.RunningServiceInfo> list = getServices(maxNum, fl);
712             reply.writeNoException();
713             int N = list != null ? list.size() : -1;
714             reply.writeInt(N);
715             int i;
716             for (i=0; i<N; i++) {
717                 ActivityManager.RunningServiceInfo info = list.get(i);
718                 info.writeToParcel(reply, 0);
719             }
720             return true;
721         }
722
723         case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
724             data.enforceInterface(IActivityManager.descriptor);
725             List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
726             reply.writeNoException();
727             reply.writeTypedList(list);
728             return true;
729         }
730
731         case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
732             data.enforceInterface(IActivityManager.descriptor);
733             List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
734             reply.writeNoException();
735             reply.writeTypedList(list);
736             return true;
737         }
738
739         case GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION: {
740             data.enforceInterface(IActivityManager.descriptor);
741             List<ApplicationInfo> list = getRunningExternalApplications();
742             reply.writeNoException();
743             reply.writeTypedList(list);
744             return true;
745         }
746
747         case MOVE_TASK_TO_FRONT_TRANSACTION: {
748             data.enforceInterface(IActivityManager.descriptor);
749             int task = data.readInt();
750             int fl = data.readInt();
751             Bundle options = data.readInt() != 0
752                     ? Bundle.CREATOR.createFromParcel(data) : null;
753             moveTaskToFront(task, fl, options);
754             reply.writeNoException();
755             return true;
756         }
757
758         case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
759             data.enforceInterface(IActivityManager.descriptor);
760             IBinder token = data.readStrongBinder();
761             boolean nonRoot = data.readInt() != 0;
762             boolean res = moveActivityTaskToBack(token, nonRoot);
763             reply.writeNoException();
764             reply.writeInt(res ? 1 : 0);
765             return true;
766         }
767
768         case MOVE_TASK_BACKWARDS_TRANSACTION: {
769             data.enforceInterface(IActivityManager.descriptor);
770             int task = data.readInt();
771             moveTaskBackwards(task);
772             reply.writeNoException();
773             return true;
774         }
775
776         case MOVE_TASK_TO_STACK_TRANSACTION: {
777             data.enforceInterface(IActivityManager.descriptor);
778             int taskId = data.readInt();
779             int stackId = data.readInt();
780             boolean toTop = data.readInt() != 0;
781             moveTaskToStack(taskId, stackId, toTop);
782             reply.writeNoException();
783             return true;
784         }
785
786         case MOVE_TASK_TO_DOCKED_STACK_TRANSACTION: {
787             data.enforceInterface(IActivityManager.descriptor);
788             int taskId = data.readInt();
789             int createMode = data.readInt();
790             boolean toTop = data.readInt() != 0;
791             boolean animate = data.readInt() != 0;
792             Rect bounds = null;
793             boolean hasBounds = data.readInt() != 0;
794             if (hasBounds) {
795                 bounds = Rect.CREATOR.createFromParcel(data);
796             }
797             final boolean moveHomeStackFront = data.readInt() != 0;
798             final boolean res = moveTaskToDockedStack(
799                     taskId, createMode, toTop, animate, bounds, moveHomeStackFront);
800             reply.writeNoException();
801             reply.writeInt(res ? 1 : 0);
802             return true;
803         }
804
805         case MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION: {
806             data.enforceInterface(IActivityManager.descriptor);
807             final int stackId = data.readInt();
808             final Rect r = Rect.CREATOR.createFromParcel(data);
809             final boolean res = moveTopActivityToPinnedStack(stackId, r);
810             reply.writeNoException();
811             reply.writeInt(res ? 1 : 0);
812             return true;
813         }
814
815         case RESIZE_STACK_TRANSACTION: {
816             data.enforceInterface(IActivityManager.descriptor);
817             final int stackId = data.readInt();
818             final boolean hasRect = data.readInt() != 0;
819             Rect r = null;
820             if (hasRect) {
821                 r = Rect.CREATOR.createFromParcel(data);
822             }
823             final boolean allowResizeInDockedMode = data.readInt() == 1;
824             final boolean preserveWindows = data.readInt() == 1;
825             final boolean animate = data.readInt() == 1;
826             final int animationDuration = data.readInt();
827             resizeStack(stackId,
828                     r, allowResizeInDockedMode, preserveWindows, animate, animationDuration);
829             reply.writeNoException();
830             return true;
831         }
832         case RESIZE_PINNED_STACK_TRANSACTION: {
833             data.enforceInterface(IActivityManager.descriptor);
834             final boolean hasBounds = data.readInt() != 0;
835             Rect bounds = null;
836             if (hasBounds) {
837                 bounds = Rect.CREATOR.createFromParcel(data);
838             }
839             final boolean hasTempPinnedTaskBounds = data.readInt() != 0;
840             Rect tempPinnedTaskBounds = null;
841             if (hasTempPinnedTaskBounds) {
842                 tempPinnedTaskBounds = Rect.CREATOR.createFromParcel(data);
843             }
844             resizePinnedStack(bounds, tempPinnedTaskBounds);
845             return true;
846         }
847         case SWAP_DOCKED_AND_FULLSCREEN_STACK: {
848             data.enforceInterface(IActivityManager.descriptor);
849             swapDockedAndFullscreenStack();
850             reply.writeNoException();
851             return true;
852         }
853         case RESIZE_DOCKED_STACK_TRANSACTION: {
854             data.enforceInterface(IActivityManager.descriptor);
855             final boolean hasBounds = data.readInt() != 0;
856             Rect bounds = null;
857             if (hasBounds) {
858                 bounds = Rect.CREATOR.createFromParcel(data);
859             }
860             final boolean hasTempDockedTaskBounds = data.readInt() != 0;
861             Rect tempDockedTaskBounds = null;
862             if (hasTempDockedTaskBounds) {
863                 tempDockedTaskBounds = Rect.CREATOR.createFromParcel(data);
864             }
865             final boolean hasTempDockedTaskInsetBounds = data.readInt() != 0;
866             Rect tempDockedTaskInsetBounds = null;
867             if (hasTempDockedTaskInsetBounds) {
868                 tempDockedTaskInsetBounds = Rect.CREATOR.createFromParcel(data);
869             }
870             final boolean hasTempOtherTaskBounds = data.readInt() != 0;
871             Rect tempOtherTaskBounds = null;
872             if (hasTempOtherTaskBounds) {
873                 tempOtherTaskBounds = Rect.CREATOR.createFromParcel(data);
874             }
875             final boolean hasTempOtherTaskInsetBounds = data.readInt() != 0;
876             Rect tempOtherTaskInsetBounds = null;
877             if (hasTempOtherTaskInsetBounds) {
878                 tempOtherTaskInsetBounds = Rect.CREATOR.createFromParcel(data);
879             }
880             resizeDockedStack(bounds, tempDockedTaskBounds, tempDockedTaskInsetBounds,
881                     tempOtherTaskBounds, tempOtherTaskInsetBounds);
882             reply.writeNoException();
883             return true;
884         }
885
886         case POSITION_TASK_IN_STACK_TRANSACTION: {
887             data.enforceInterface(IActivityManager.descriptor);
888             int taskId = data.readInt();
889             int stackId = data.readInt();
890             int position = data.readInt();
891             positionTaskInStack(taskId, stackId, position);
892             reply.writeNoException();
893             return true;
894         }
895
896         case GET_ALL_STACK_INFOS_TRANSACTION: {
897             data.enforceInterface(IActivityManager.descriptor);
898             List<StackInfo> list = getAllStackInfos();
899             reply.writeNoException();
900             reply.writeTypedList(list);
901             return true;
902         }
903
904         case GET_STACK_INFO_TRANSACTION: {
905             data.enforceInterface(IActivityManager.descriptor);
906             int stackId = data.readInt();
907             StackInfo info = getStackInfo(stackId);
908             reply.writeNoException();
909             if (info != null) {
910                 reply.writeInt(1);
911                 info.writeToParcel(reply, 0);
912             } else {
913                 reply.writeInt(0);
914             }
915             return true;
916         }
917
918         case IS_IN_HOME_STACK_TRANSACTION: {
919             data.enforceInterface(IActivityManager.descriptor);
920             int taskId = data.readInt();
921             boolean isInHomeStack = isInHomeStack(taskId);
922             reply.writeNoException();
923             reply.writeInt(isInHomeStack ? 1 : 0);
924             return true;
925         }
926
927         case SET_FOCUSED_STACK_TRANSACTION: {
928             data.enforceInterface(IActivityManager.descriptor);
929             int stackId = data.readInt();
930             setFocusedStack(stackId);
931             reply.writeNoException();
932             return true;
933         }
934
935         case GET_FOCUSED_STACK_ID_TRANSACTION: {
936             data.enforceInterface(IActivityManager.descriptor);
937             int focusedStackId = getFocusedStackId();
938             reply.writeNoException();
939             reply.writeInt(focusedStackId);
940             return true;
941         }
942
943         case SET_FOCUSED_TASK_TRANSACTION: {
944             data.enforceInterface(IActivityManager.descriptor);
945             int taskId = data.readInt();
946             setFocusedTask(taskId);
947             reply.writeNoException();
948             return true;
949         }
950
951         case REGISTER_TASK_STACK_LISTENER_TRANSACTION: {
952             data.enforceInterface(IActivityManager.descriptor);
953             IBinder token = data.readStrongBinder();
954             registerTaskStackListener(ITaskStackListener.Stub.asInterface(token));
955             reply.writeNoException();
956             return true;
957         }
958
959         case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
960             data.enforceInterface(IActivityManager.descriptor);
961             IBinder token = data.readStrongBinder();
962             boolean onlyRoot = data.readInt() != 0;
963             int res = token != null
964                 ? getTaskForActivity(token, onlyRoot) : -1;
965                 reply.writeNoException();
966             reply.writeInt(res);
967             return true;
968         }
969
970         case GET_CONTENT_PROVIDER_TRANSACTION: {
971             data.enforceInterface(IActivityManager.descriptor);
972             IBinder b = data.readStrongBinder();
973             IApplicationThread app = ApplicationThreadNative.asInterface(b);
974             String name = data.readString();
975             int userId = data.readInt();
976             boolean stable = data.readInt() != 0;
977             ContentProviderHolder cph = getContentProvider(app, name, userId, stable);
978             reply.writeNoException();
979             if (cph != null) {
980                 reply.writeInt(1);
981                 cph.writeToParcel(reply, 0);
982             } else {
983                 reply.writeInt(0);
984             }
985             return true;
986         }
987
988         case GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
989             data.enforceInterface(IActivityManager.descriptor);
990             String name = data.readString();
991             int userId = data.readInt();
992             IBinder token = data.readStrongBinder();
993             ContentProviderHolder cph = getContentProviderExternal(name, userId, token);
994             reply.writeNoException();
995             if (cph != null) {
996                 reply.writeInt(1);
997                 cph.writeToParcel(reply, 0);
998             } else {
999                 reply.writeInt(0);
1000             }
1001             return true;
1002         }
1003
1004         case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
1005             data.enforceInterface(IActivityManager.descriptor);
1006             IBinder b = data.readStrongBinder();
1007             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1008             ArrayList<ContentProviderHolder> providers =
1009                 data.createTypedArrayList(ContentProviderHolder.CREATOR);
1010             publishContentProviders(app, providers);
1011             reply.writeNoException();
1012             return true;
1013         }
1014
1015         case REF_CONTENT_PROVIDER_TRANSACTION: {
1016             data.enforceInterface(IActivityManager.descriptor);
1017             IBinder b = data.readStrongBinder();
1018             int stable = data.readInt();
1019             int unstable = data.readInt();
1020             boolean res = refContentProvider(b, stable, unstable);
1021             reply.writeNoException();
1022             reply.writeInt(res ? 1 : 0);
1023             return true;
1024         }
1025
1026         case UNSTABLE_PROVIDER_DIED_TRANSACTION: {
1027             data.enforceInterface(IActivityManager.descriptor);
1028             IBinder b = data.readStrongBinder();
1029             unstableProviderDied(b);
1030             reply.writeNoException();
1031             return true;
1032         }
1033
1034         case APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION: {
1035             data.enforceInterface(IActivityManager.descriptor);
1036             IBinder b = data.readStrongBinder();
1037             appNotRespondingViaProvider(b);
1038             reply.writeNoException();
1039             return true;
1040         }
1041
1042         case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
1043             data.enforceInterface(IActivityManager.descriptor);
1044             IBinder b = data.readStrongBinder();
1045             boolean stable = data.readInt() != 0;
1046             removeContentProvider(b, stable);
1047             reply.writeNoException();
1048             return true;
1049         }
1050
1051         case REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
1052             data.enforceInterface(IActivityManager.descriptor);
1053             String name = data.readString();
1054             IBinder token = data.readStrongBinder();
1055             removeContentProviderExternal(name, token);
1056             reply.writeNoException();
1057             return true;
1058         }
1059
1060         case GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION: {
1061             data.enforceInterface(IActivityManager.descriptor);
1062             ComponentName comp = ComponentName.CREATOR.createFromParcel(data);
1063             PendingIntent pi = getRunningServiceControlPanel(comp);
1064             reply.writeNoException();
1065             PendingIntent.writePendingIntentOrNullToParcel(pi, reply);
1066             return true;
1067         }
1068
1069         case START_SERVICE_TRANSACTION: {
1070             data.enforceInterface(IActivityManager.descriptor);
1071             IBinder b = data.readStrongBinder();
1072             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1073             Intent service = Intent.CREATOR.createFromParcel(data);
1074             String resolvedType = data.readString();
1075             String callingPackage = data.readString();
1076             int userId = data.readInt();
1077             ComponentName cn = startService(app, service, resolvedType, callingPackage, userId);
1078             reply.writeNoException();
1079             ComponentName.writeToParcel(cn, reply);
1080             return true;
1081         }
1082
1083         case STOP_SERVICE_TRANSACTION: {
1084             data.enforceInterface(IActivityManager.descriptor);
1085             IBinder b = data.readStrongBinder();
1086             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1087             Intent service = Intent.CREATOR.createFromParcel(data);
1088             String resolvedType = data.readString();
1089             int userId = data.readInt();
1090             int res = stopService(app, service, resolvedType, userId);
1091             reply.writeNoException();
1092             reply.writeInt(res);
1093             return true;
1094         }
1095
1096         case STOP_SERVICE_TOKEN_TRANSACTION: {
1097             data.enforceInterface(IActivityManager.descriptor);
1098             ComponentName className = ComponentName.readFromParcel(data);
1099             IBinder token = data.readStrongBinder();
1100             int startId = data.readInt();
1101             boolean res = stopServiceToken(className, token, startId);
1102             reply.writeNoException();
1103             reply.writeInt(res ? 1 : 0);
1104             return true;
1105         }
1106
1107         case SET_SERVICE_FOREGROUND_TRANSACTION: {
1108             data.enforceInterface(IActivityManager.descriptor);
1109             ComponentName className = ComponentName.readFromParcel(data);
1110             IBinder token = data.readStrongBinder();
1111             int id = data.readInt();
1112             Notification notification = null;
1113             if (data.readInt() != 0) {
1114                 notification = Notification.CREATOR.createFromParcel(data);
1115             }
1116             int sflags = data.readInt();
1117             setServiceForeground(className, token, id, notification, sflags);
1118             reply.writeNoException();
1119             return true;
1120         }
1121
1122         case BIND_SERVICE_TRANSACTION: {
1123             data.enforceInterface(IActivityManager.descriptor);
1124             IBinder b = data.readStrongBinder();
1125             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1126             IBinder token = data.readStrongBinder();
1127             Intent service = Intent.CREATOR.createFromParcel(data);
1128             String resolvedType = data.readString();
1129             b = data.readStrongBinder();
1130             int fl = data.readInt();
1131             String callingPackage = data.readString();
1132             int userId = data.readInt();
1133             IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
1134             int res = bindService(app, token, service, resolvedType, conn, fl,
1135                     callingPackage, userId);
1136             reply.writeNoException();
1137             reply.writeInt(res);
1138             return true;
1139         }
1140
1141         case UNBIND_SERVICE_TRANSACTION: {
1142             data.enforceInterface(IActivityManager.descriptor);
1143             IBinder b = data.readStrongBinder();
1144             IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
1145             boolean res = unbindService(conn);
1146             reply.writeNoException();
1147             reply.writeInt(res ? 1 : 0);
1148             return true;
1149         }
1150
1151         case PUBLISH_SERVICE_TRANSACTION: {
1152             data.enforceInterface(IActivityManager.descriptor);
1153             IBinder token = data.readStrongBinder();
1154             Intent intent = Intent.CREATOR.createFromParcel(data);
1155             IBinder service = data.readStrongBinder();
1156             publishService(token, intent, service);
1157             reply.writeNoException();
1158             return true;
1159         }
1160
1161         case UNBIND_FINISHED_TRANSACTION: {
1162             data.enforceInterface(IActivityManager.descriptor);
1163             IBinder token = data.readStrongBinder();
1164             Intent intent = Intent.CREATOR.createFromParcel(data);
1165             boolean doRebind = data.readInt() != 0;
1166             unbindFinished(token, intent, doRebind);
1167             reply.writeNoException();
1168             return true;
1169         }
1170
1171         case SERVICE_DONE_EXECUTING_TRANSACTION: {
1172             data.enforceInterface(IActivityManager.descriptor);
1173             IBinder token = data.readStrongBinder();
1174             int type = data.readInt();
1175             int startId = data.readInt();
1176             int res = data.readInt();
1177             serviceDoneExecuting(token, type, startId, res);
1178             reply.writeNoException();
1179             return true;
1180         }
1181
1182         case START_INSTRUMENTATION_TRANSACTION: {
1183             data.enforceInterface(IActivityManager.descriptor);
1184             ComponentName className = ComponentName.readFromParcel(data);
1185             String profileFile = data.readString();
1186             int fl = data.readInt();
1187             Bundle arguments = data.readBundle();
1188             IBinder b = data.readStrongBinder();
1189             IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
1190             b = data.readStrongBinder();
1191             IUiAutomationConnection c = IUiAutomationConnection.Stub.asInterface(b);
1192             int userId = data.readInt();
1193             String abiOverride = data.readString();
1194             boolean res = startInstrumentation(className, profileFile, fl, arguments, w, c, userId,
1195                     abiOverride);
1196             reply.writeNoException();
1197             reply.writeInt(res ? 1 : 0);
1198             return true;
1199         }
1200
1201
1202         case FINISH_INSTRUMENTATION_TRANSACTION: {
1203             data.enforceInterface(IActivityManager.descriptor);
1204             IBinder b = data.readStrongBinder();
1205             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1206             int resultCode = data.readInt();
1207             Bundle results = data.readBundle();
1208             finishInstrumentation(app, resultCode, results);
1209             reply.writeNoException();
1210             return true;
1211         }
1212
1213         case GET_CONFIGURATION_TRANSACTION: {
1214             data.enforceInterface(IActivityManager.descriptor);
1215             Configuration config = getConfiguration();
1216             reply.writeNoException();
1217             config.writeToParcel(reply, 0);
1218             return true;
1219         }
1220
1221         case UPDATE_CONFIGURATION_TRANSACTION: {
1222             data.enforceInterface(IActivityManager.descriptor);
1223             Configuration config = Configuration.CREATOR.createFromParcel(data);
1224             updateConfiguration(config);
1225             reply.writeNoException();
1226             return true;
1227         }
1228
1229         case SET_REQUESTED_ORIENTATION_TRANSACTION: {
1230             data.enforceInterface(IActivityManager.descriptor);
1231             IBinder token = data.readStrongBinder();
1232             int requestedOrientation = data.readInt();
1233             setRequestedOrientation(token, requestedOrientation);
1234             reply.writeNoException();
1235             return true;
1236         }
1237
1238         case GET_REQUESTED_ORIENTATION_TRANSACTION: {
1239             data.enforceInterface(IActivityManager.descriptor);
1240             IBinder token = data.readStrongBinder();
1241             int req = getRequestedOrientation(token);
1242             reply.writeNoException();
1243             reply.writeInt(req);
1244             return true;
1245         }
1246
1247         case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
1248             data.enforceInterface(IActivityManager.descriptor);
1249             IBinder token = data.readStrongBinder();
1250             ComponentName cn = getActivityClassForToken(token);
1251             reply.writeNoException();
1252             ComponentName.writeToParcel(cn, reply);
1253             return true;
1254         }
1255
1256         case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
1257             data.enforceInterface(IActivityManager.descriptor);
1258             IBinder token = data.readStrongBinder();
1259             reply.writeNoException();
1260             reply.writeString(getPackageForToken(token));
1261             return true;
1262         }
1263
1264         case GET_INTENT_SENDER_TRANSACTION: {
1265             data.enforceInterface(IActivityManager.descriptor);
1266             int type = data.readInt();
1267             String packageName = data.readString();
1268             IBinder token = data.readStrongBinder();
1269             String resultWho = data.readString();
1270             int requestCode = data.readInt();
1271             Intent[] requestIntents;
1272             String[] requestResolvedTypes;
1273             if (data.readInt() != 0) {
1274                 requestIntents = data.createTypedArray(Intent.CREATOR);
1275                 requestResolvedTypes = data.createStringArray();
1276             } else {
1277                 requestIntents = null;
1278                 requestResolvedTypes = null;
1279             }
1280             int fl = data.readInt();
1281             Bundle options = data.readInt() != 0
1282                     ? Bundle.CREATOR.createFromParcel(data) : null;
1283             int userId = data.readInt();
1284             IIntentSender res = getIntentSender(type, packageName, token,
1285                     resultWho, requestCode, requestIntents,
1286                     requestResolvedTypes, fl, options, userId);
1287             reply.writeNoException();
1288             reply.writeStrongBinder(res != null ? res.asBinder() : null);
1289             return true;
1290         }
1291
1292         case CANCEL_INTENT_SENDER_TRANSACTION: {
1293             data.enforceInterface(IActivityManager.descriptor);
1294             IIntentSender r = IIntentSender.Stub.asInterface(
1295                 data.readStrongBinder());
1296             cancelIntentSender(r);
1297             reply.writeNoException();
1298             return true;
1299         }
1300
1301         case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
1302             data.enforceInterface(IActivityManager.descriptor);
1303             IIntentSender r = IIntentSender.Stub.asInterface(
1304                 data.readStrongBinder());
1305             String res = getPackageForIntentSender(r);
1306             reply.writeNoException();
1307             reply.writeString(res);
1308             return true;
1309         }
1310
1311         case GET_UID_FOR_INTENT_SENDER_TRANSACTION: {
1312             data.enforceInterface(IActivityManager.descriptor);
1313             IIntentSender r = IIntentSender.Stub.asInterface(
1314                 data.readStrongBinder());
1315             int res = getUidForIntentSender(r);
1316             reply.writeNoException();
1317             reply.writeInt(res);
1318             return true;
1319         }
1320
1321         case HANDLE_INCOMING_USER_TRANSACTION: {
1322             data.enforceInterface(IActivityManager.descriptor);
1323             int callingPid = data.readInt();
1324             int callingUid = data.readInt();
1325             int userId = data.readInt();
1326             boolean allowAll = data.readInt() != 0 ;
1327             boolean requireFull = data.readInt() != 0;
1328             String name = data.readString();
1329             String callerPackage = data.readString();
1330             int res = handleIncomingUser(callingPid, callingUid, userId, allowAll,
1331                     requireFull, name, callerPackage);
1332             reply.writeNoException();
1333             reply.writeInt(res);
1334             return true;
1335         }
1336
1337         case SET_PROCESS_LIMIT_TRANSACTION: {
1338             data.enforceInterface(IActivityManager.descriptor);
1339             int max = data.readInt();
1340             setProcessLimit(max);
1341             reply.writeNoException();
1342             return true;
1343         }
1344
1345         case GET_PROCESS_LIMIT_TRANSACTION: {
1346             data.enforceInterface(IActivityManager.descriptor);
1347             int limit = getProcessLimit();
1348             reply.writeNoException();
1349             reply.writeInt(limit);
1350             return true;
1351         }
1352
1353         case SET_PROCESS_FOREGROUND_TRANSACTION: {
1354             data.enforceInterface(IActivityManager.descriptor);
1355             IBinder token = data.readStrongBinder();
1356             int pid = data.readInt();
1357             boolean isForeground = data.readInt() != 0;
1358             setProcessForeground(token, pid, isForeground);
1359             reply.writeNoException();
1360             return true;
1361         }
1362
1363         case CHECK_PERMISSION_TRANSACTION: {
1364             data.enforceInterface(IActivityManager.descriptor);
1365             String perm = data.readString();
1366             int pid = data.readInt();
1367             int uid = data.readInt();
1368             int res = checkPermission(perm, pid, uid);
1369             reply.writeNoException();
1370             reply.writeInt(res);
1371             return true;
1372         }
1373
1374         case CHECK_PERMISSION_WITH_TOKEN_TRANSACTION: {
1375             data.enforceInterface(IActivityManager.descriptor);
1376             String perm = data.readString();
1377             int pid = data.readInt();
1378             int uid = data.readInt();
1379             IBinder token = data.readStrongBinder();
1380             int res = checkPermissionWithToken(perm, pid, uid, token);
1381             reply.writeNoException();
1382             reply.writeInt(res);
1383             return true;
1384         }
1385
1386         case CHECK_URI_PERMISSION_TRANSACTION: {
1387             data.enforceInterface(IActivityManager.descriptor);
1388             Uri uri = Uri.CREATOR.createFromParcel(data);
1389             int pid = data.readInt();
1390             int uid = data.readInt();
1391             int mode = data.readInt();
1392             int userId = data.readInt();
1393             IBinder callerToken = data.readStrongBinder();
1394             int res = checkUriPermission(uri, pid, uid, mode, userId, callerToken);
1395             reply.writeNoException();
1396             reply.writeInt(res);
1397             return true;
1398         }
1399
1400         case CLEAR_APP_DATA_TRANSACTION: {
1401             data.enforceInterface(IActivityManager.descriptor);
1402             String packageName = data.readString();
1403             IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
1404                     data.readStrongBinder());
1405             int userId = data.readInt();
1406             boolean res = clearApplicationUserData(packageName, observer, userId);
1407             reply.writeNoException();
1408             reply.writeInt(res ? 1 : 0);
1409             return true;
1410         }
1411
1412         case GRANT_URI_PERMISSION_TRANSACTION: {
1413             data.enforceInterface(IActivityManager.descriptor);
1414             IBinder b = data.readStrongBinder();
1415             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1416             String targetPkg = data.readString();
1417             Uri uri = Uri.CREATOR.createFromParcel(data);
1418             int mode = data.readInt();
1419             int userId = data.readInt();
1420             grantUriPermission(app, targetPkg, uri, mode, userId);
1421             reply.writeNoException();
1422             return true;
1423         }
1424
1425         case REVOKE_URI_PERMISSION_TRANSACTION: {
1426             data.enforceInterface(IActivityManager.descriptor);
1427             IBinder b = data.readStrongBinder();
1428             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1429             Uri uri = Uri.CREATOR.createFromParcel(data);
1430             int mode = data.readInt();
1431             int userId = data.readInt();
1432             revokeUriPermission(app, uri, mode, userId);
1433             reply.writeNoException();
1434             return true;
1435         }
1436
1437         case TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
1438             data.enforceInterface(IActivityManager.descriptor);
1439             Uri uri = Uri.CREATOR.createFromParcel(data);
1440             int mode = data.readInt();
1441             int userId = data.readInt();
1442             takePersistableUriPermission(uri, mode, userId);
1443             reply.writeNoException();
1444             return true;
1445         }
1446
1447         case RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
1448             data.enforceInterface(IActivityManager.descriptor);
1449             Uri uri = Uri.CREATOR.createFromParcel(data);
1450             int mode = data.readInt();
1451             int userId = data.readInt();
1452             releasePersistableUriPermission(uri, mode, userId);
1453             reply.writeNoException();
1454             return true;
1455         }
1456
1457         case GET_PERSISTED_URI_PERMISSIONS_TRANSACTION: {
1458             data.enforceInterface(IActivityManager.descriptor);
1459             final String packageName = data.readString();
1460             final boolean incoming = data.readInt() != 0;
1461             final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions(
1462                     packageName, incoming);
1463             reply.writeNoException();
1464             perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1465             return true;
1466         }
1467
1468         case GET_GRANTED_URI_PERMISSIONS_TRANSACTION: {
1469             data.enforceInterface(IActivityManager.descriptor);
1470             final String packageName = data.readString();
1471             final int userId = data.readInt();
1472             final ParceledListSlice<UriPermission> perms = getGrantedUriPermissions(packageName,
1473                     userId);
1474             reply.writeNoException();
1475             perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1476             return true;
1477         }
1478
1479         case CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION: {
1480             data.enforceInterface(IActivityManager.descriptor);
1481             final String packageName = data.readString();
1482             final int userId = data.readInt();
1483             clearGrantedUriPermissions(packageName, userId);
1484             reply.writeNoException();
1485             return true;
1486         }
1487
1488         case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
1489             data.enforceInterface(IActivityManager.descriptor);
1490             IBinder b = data.readStrongBinder();
1491             IApplicationThread app = ApplicationThreadNative.asInterface(b);
1492             boolean waiting = data.readInt() != 0;
1493             showWaitingForDebugger(app, waiting);
1494             reply.writeNoException();
1495             return true;
1496         }
1497
1498         case GET_MEMORY_INFO_TRANSACTION: {
1499             data.enforceInterface(IActivityManager.descriptor);
1500             ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
1501             getMemoryInfo(mi);
1502             reply.writeNoException();
1503             mi.writeToParcel(reply, 0);
1504             return true;
1505         }
1506
1507         case UNHANDLED_BACK_TRANSACTION: {
1508             data.enforceInterface(IActivityManager.descriptor);
1509             unhandledBack();
1510             reply.writeNoException();
1511             return true;
1512         }
1513
1514         case OPEN_CONTENT_URI_TRANSACTION: {
1515             data.enforceInterface(IActivityManager.descriptor);
1516             Uri uri = Uri.parse(data.readString());
1517             ParcelFileDescriptor pfd = openContentUri(uri);
1518             reply.writeNoException();
1519             if (pfd != null) {
1520                 reply.writeInt(1);
1521                 pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1522             } else {
1523                 reply.writeInt(0);
1524             }
1525             return true;
1526         }
1527
1528         case SET_LOCK_SCREEN_SHOWN_TRANSACTION: {
1529             data.enforceInterface(IActivityManager.descriptor);
1530             final boolean showing = data.readInt() != 0;
1531             final boolean occluded = data.readInt() != 0;
1532             setLockScreenShown(showing, occluded);
1533             reply.writeNoException();
1534             return true;
1535         }
1536
1537         case SET_DEBUG_APP_TRANSACTION: {
1538             data.enforceInterface(IActivityManager.descriptor);
1539             String pn = data.readString();
1540             boolean wfd = data.readInt() != 0;
1541             boolean per = data.readInt() != 0;
1542             setDebugApp(pn, wfd, per);
1543             reply.writeNoException();
1544             return true;
1545         }
1546
1547         case SET_ALWAYS_FINISH_TRANSACTION: {
1548             data.enforceInterface(IActivityManager.descriptor);
1549             boolean enabled = data.readInt() != 0;
1550             setAlwaysFinish(enabled);
1551             reply.writeNoException();
1552             return true;
1553         }
1554
1555         case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
1556             data.enforceInterface(IActivityManager.descriptor);
1557             IActivityController watcher = IActivityController.Stub.asInterface(
1558                     data.readStrongBinder());
1559             boolean imAMonkey = data.readInt() != 0;
1560             setActivityController(watcher, imAMonkey);
1561             reply.writeNoException();
1562             return true;
1563         }
1564
1565         case SET_LENIENT_BACKGROUND_CHECK_TRANSACTION: {
1566             data.enforceInterface(IActivityManager.descriptor);
1567             boolean enabled = data.readInt() != 0;
1568             setLenientBackgroundCheck(enabled);
1569             reply.writeNoException();
1570             return true;
1571         }
1572
1573         case GET_MEMORY_TRIM_LEVEL_TRANSACTION: {
1574             data.enforceInterface(IActivityManager.descriptor);
1575             int level = getMemoryTrimLevel();
1576             reply.writeNoException();
1577             reply.writeInt(level);
1578             return true;
1579         }
1580
1581         case ENTER_SAFE_MODE_TRANSACTION: {
1582             data.enforceInterface(IActivityManager.descriptor);
1583             enterSafeMode();
1584             reply.writeNoException();
1585             return true;
1586         }
1587
1588         case NOTE_WAKEUP_ALARM_TRANSACTION: {
1589             data.enforceInterface(IActivityManager.descriptor);
1590             IIntentSender is = IIntentSender.Stub.asInterface(
1591                     data.readStrongBinder());
1592             int sourceUid = data.readInt();
1593             String sourcePkg = data.readString();
1594             String tag = data.readString();
1595             noteWakeupAlarm(is, sourceUid, sourcePkg, tag);
1596             reply.writeNoException();
1597             return true;
1598         }
1599
1600         case NOTE_ALARM_START_TRANSACTION: {
1601             data.enforceInterface(IActivityManager.descriptor);
1602             IIntentSender is = IIntentSender.Stub.asInterface(
1603                     data.readStrongBinder());
1604             int sourceUid = data.readInt();
1605             String tag = data.readString();
1606             noteAlarmStart(is, sourceUid, tag);
1607             reply.writeNoException();
1608             return true;
1609         }
1610
1611         case NOTE_ALARM_FINISH_TRANSACTION: {
1612             data.enforceInterface(IActivityManager.descriptor);
1613             IIntentSender is = IIntentSender.Stub.asInterface(
1614                     data.readStrongBinder());
1615             int sourceUid = data.readInt();
1616             String tag = data.readString();
1617             noteAlarmFinish(is, sourceUid, tag);
1618             reply.writeNoException();
1619             return true;
1620         }
1621
1622         case KILL_PIDS_TRANSACTION: {
1623             data.enforceInterface(IActivityManager.descriptor);
1624             int[] pids = data.createIntArray();
1625             String reason = data.readString();
1626             boolean secure = data.readInt() != 0;
1627             boolean res = killPids(pids, reason, secure);
1628             reply.writeNoException();
1629             reply.writeInt(res ? 1 : 0);
1630             return true;
1631         }
1632
1633         case KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION: {
1634             data.enforceInterface(IActivityManager.descriptor);
1635             String reason = data.readString();
1636             boolean res = killProcessesBelowForeground(reason);
1637             reply.writeNoException();
1638             reply.writeInt(res ? 1 : 0);
1639             return true;
1640         }
1641
1642         case HANDLE_APPLICATION_CRASH_TRANSACTION: {
1643             data.enforceInterface(IActivityManager.descriptor);
1644             IBinder app = data.readStrongBinder();
1645             ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1646             handleApplicationCrash(app, ci);
1647             reply.writeNoException();
1648             return true;
1649         }
1650
1651         case HANDLE_APPLICATION_WTF_TRANSACTION: {
1652             data.enforceInterface(IActivityManager.descriptor);
1653             IBinder app = data.readStrongBinder();
1654             String tag = data.readString();
1655             boolean system = data.readInt() != 0;
1656             ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1657             boolean res = handleApplicationWtf(app, tag, system, ci);
1658             reply.writeNoException();
1659             reply.writeInt(res ? 1 : 0);
1660             return true;
1661         }
1662
1663         case HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION: {
1664             data.enforceInterface(IActivityManager.descriptor);
1665             IBinder app = data.readStrongBinder();
1666             int violationMask = data.readInt();
1667             StrictMode.ViolationInfo info = new StrictMode.ViolationInfo(data);
1668             handleApplicationStrictModeViolation(app, violationMask, info);
1669             reply.writeNoException();
1670             return true;
1671         }
1672
1673         case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
1674             data.enforceInterface(IActivityManager.descriptor);
1675             int sig = data.readInt();
1676             signalPersistentProcesses(sig);
1677             reply.writeNoException();
1678             return true;
1679         }
1680
1681         case KILL_BACKGROUND_PROCESSES_TRANSACTION: {
1682             data.enforceInterface(IActivityManager.descriptor);
1683             String packageName = data.readString();
1684             int userId = data.readInt();
1685             killBackgroundProcesses(packageName, userId);
1686             reply.writeNoException();
1687             return true;
1688         }
1689
1690         case KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION: {
1691             data.enforceInterface(IActivityManager.descriptor);
1692             killAllBackgroundProcesses();
1693             reply.writeNoException();
1694             return true;
1695         }
1696
1697         case KILL_PACKAGE_DEPENDENTS_TRANSACTION: {
1698             data.enforceInterface(IActivityManager.descriptor);
1699             String packageName = data.readString();
1700             int userId = data.readInt();
1701             killPackageDependents(packageName, userId);
1702             reply.writeNoException();
1703             return true;
1704         }
1705
1706         case FORCE_STOP_PACKAGE_TRANSACTION: {
1707             data.enforceInterface(IActivityManager.descriptor);
1708             String packageName = data.readString();
1709             int userId = data.readInt();
1710             forceStopPackage(packageName, userId);
1711             reply.writeNoException();
1712             return true;
1713         }
1714
1715         case GET_MY_MEMORY_STATE_TRANSACTION: {
1716             data.enforceInterface(IActivityManager.descriptor);
1717             ActivityManager.RunningAppProcessInfo info =
1718                     new ActivityManager.RunningAppProcessInfo();
1719             getMyMemoryState(info);
1720             reply.writeNoException();
1721             info.writeToParcel(reply, 0);
1722             return true;
1723         }
1724
1725         case GET_DEVICE_CONFIGURATION_TRANSACTION: {
1726             data.enforceInterface(IActivityManager.descriptor);
1727             ConfigurationInfo config = getDeviceConfigurationInfo();
1728             reply.writeNoException();
1729             config.writeToParcel(reply, 0);
1730             return true;
1731         }
1732
1733         case PROFILE_CONTROL_TRANSACTION: {
1734             data.enforceInterface(IActivityManager.descriptor);
1735             String process = data.readString();
1736             int userId = data.readInt();
1737             boolean start = data.readInt() != 0;
1738             int profileType = data.readInt();
1739             ProfilerInfo profilerInfo = data.readInt() != 0
1740                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
1741             boolean res = profileControl(process, userId, start, profilerInfo, profileType);
1742             reply.writeNoException();
1743             reply.writeInt(res ? 1 : 0);
1744             return true;
1745         }
1746
1747         case SHUTDOWN_TRANSACTION: {
1748             data.enforceInterface(IActivityManager.descriptor);
1749             boolean res = shutdown(data.readInt());
1750             reply.writeNoException();
1751             reply.writeInt(res ? 1 : 0);
1752             return true;
1753         }
1754
1755         case STOP_APP_SWITCHES_TRANSACTION: {
1756             data.enforceInterface(IActivityManager.descriptor);
1757             stopAppSwitches();
1758             reply.writeNoException();
1759             return true;
1760         }
1761
1762         case RESUME_APP_SWITCHES_TRANSACTION: {
1763             data.enforceInterface(IActivityManager.descriptor);
1764             resumeAppSwitches();
1765             reply.writeNoException();
1766             return true;
1767         }
1768
1769         case PEEK_SERVICE_TRANSACTION: {
1770             data.enforceInterface(IActivityManager.descriptor);
1771             Intent service = Intent.CREATOR.createFromParcel(data);
1772             String resolvedType = data.readString();
1773             String callingPackage = data.readString();
1774             IBinder binder = peekService(service, resolvedType, callingPackage);
1775             reply.writeNoException();
1776             reply.writeStrongBinder(binder);
1777             return true;
1778         }
1779
1780         case START_BACKUP_AGENT_TRANSACTION: {
1781             data.enforceInterface(IActivityManager.descriptor);
1782             String packageName = data.readString();
1783             int backupRestoreMode = data.readInt();
1784             int userId = data.readInt();
1785             boolean success = bindBackupAgent(packageName, backupRestoreMode, userId);
1786             reply.writeNoException();
1787             reply.writeInt(success ? 1 : 0);
1788             return true;
1789         }
1790
1791         case BACKUP_AGENT_CREATED_TRANSACTION: {
1792             data.enforceInterface(IActivityManager.descriptor);
1793             String packageName = data.readString();
1794             IBinder agent = data.readStrongBinder();
1795             backupAgentCreated(packageName, agent);
1796             reply.writeNoException();
1797             return true;
1798         }
1799
1800         case UNBIND_BACKUP_AGENT_TRANSACTION: {
1801             data.enforceInterface(IActivityManager.descriptor);
1802             ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1803             unbindBackupAgent(info);
1804             reply.writeNoException();
1805             return true;
1806         }
1807
1808         case ADD_PACKAGE_DEPENDENCY_TRANSACTION: {
1809             data.enforceInterface(IActivityManager.descriptor);
1810             String packageName = data.readString();
1811             addPackageDependency(packageName);
1812             reply.writeNoException();
1813             return true;
1814         }
1815
1816         case KILL_APPLICATION_TRANSACTION: {
1817             data.enforceInterface(IActivityManager.descriptor);
1818             String pkg = data.readString();
1819             int appId = data.readInt();
1820             int userId = data.readInt();
1821             String reason = data.readString();
1822             killApplication(pkg, appId, userId, reason);
1823             reply.writeNoException();
1824             return true;
1825         }
1826
1827         case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1828             data.enforceInterface(IActivityManager.descriptor);
1829             String reason = data.readString();
1830             closeSystemDialogs(reason);
1831             reply.writeNoException();
1832             return true;
1833         }
1834
1835         case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1836             data.enforceInterface(IActivityManager.descriptor);
1837             int[] pids = data.createIntArray();
1838             Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
1839             reply.writeNoException();
1840             reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1841             return true;
1842         }
1843
1844         case KILL_APPLICATION_PROCESS_TRANSACTION: {
1845             data.enforceInterface(IActivityManager.descriptor);
1846             String processName = data.readString();
1847             int uid = data.readInt();
1848             killApplicationProcess(processName, uid);
1849             reply.writeNoException();
1850             return true;
1851         }
1852
1853         case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
1854             data.enforceInterface(IActivityManager.descriptor);
1855             IBinder token = data.readStrongBinder();
1856             String packageName = data.readString();
1857             int enterAnim = data.readInt();
1858             int exitAnim = data.readInt();
1859             overridePendingTransition(token, packageName, enterAnim, exitAnim);
1860             reply.writeNoException();
1861             return true;
1862         }
1863
1864         case IS_USER_A_MONKEY_TRANSACTION: {
1865             data.enforceInterface(IActivityManager.descriptor);
1866             boolean areThey = isUserAMonkey();
1867             reply.writeNoException();
1868             reply.writeInt(areThey ? 1 : 0);
1869             return true;
1870         }
1871
1872         case SET_USER_IS_MONKEY_TRANSACTION: {
1873             data.enforceInterface(IActivityManager.descriptor);
1874             final boolean monkey = (data.readInt() == 1);
1875             setUserIsMonkey(monkey);
1876             reply.writeNoException();
1877             return true;
1878         }
1879
1880         case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
1881             data.enforceInterface(IActivityManager.descriptor);
1882             finishHeavyWeightApp();
1883             reply.writeNoException();
1884             return true;
1885         }
1886
1887         case IS_IMMERSIVE_TRANSACTION: {
1888             data.enforceInterface(IActivityManager.descriptor);
1889             IBinder token = data.readStrongBinder();
1890             boolean isit = isImmersive(token);
1891             reply.writeNoException();
1892             reply.writeInt(isit ? 1 : 0);
1893             return true;
1894         }
1895
1896         case IS_TOP_OF_TASK_TRANSACTION: {
1897             data.enforceInterface(IActivityManager.descriptor);
1898             IBinder token = data.readStrongBinder();
1899             final boolean isTopOfTask = isTopOfTask(token);
1900             reply.writeNoException();
1901             reply.writeInt(isTopOfTask ? 1 : 0);
1902             return true;
1903         }
1904
1905         case CONVERT_FROM_TRANSLUCENT_TRANSACTION: {
1906             data.enforceInterface(IActivityManager.descriptor);
1907             IBinder token = data.readStrongBinder();
1908             boolean converted = convertFromTranslucent(token);
1909             reply.writeNoException();
1910             reply.writeInt(converted ? 1 : 0);
1911             return true;
1912         }
1913
1914         case CONVERT_TO_TRANSLUCENT_TRANSACTION: {
1915             data.enforceInterface(IActivityManager.descriptor);
1916             IBinder token = data.readStrongBinder();
1917             final Bundle bundle;
1918             if (data.readInt() == 0) {
1919                 bundle = null;
1920             } else {
1921                 bundle = data.readBundle();
1922             }
1923             final ActivityOptions options = ActivityOptions.fromBundle(bundle);
1924             boolean converted = convertToTranslucent(token, options);
1925             reply.writeNoException();
1926             reply.writeInt(converted ? 1 : 0);
1927             return true;
1928         }
1929
1930         case GET_ACTIVITY_OPTIONS_TRANSACTION: {
1931             data.enforceInterface(IActivityManager.descriptor);
1932             IBinder token = data.readStrongBinder();
1933             final ActivityOptions options = getActivityOptions(token);
1934             reply.writeNoException();
1935             reply.writeBundle(options == null ? null : options.toBundle());
1936             return true;
1937         }
1938
1939         case SET_IMMERSIVE_TRANSACTION: {
1940             data.enforceInterface(IActivityManager.descriptor);
1941             IBinder token = data.readStrongBinder();
1942             boolean imm = data.readInt() == 1;
1943             setImmersive(token, imm);
1944             reply.writeNoException();
1945             return true;
1946         }
1947
1948         case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
1949             data.enforceInterface(IActivityManager.descriptor);
1950             boolean isit = isTopActivityImmersive();
1951             reply.writeNoException();
1952             reply.writeInt(isit ? 1 : 0);
1953             return true;
1954         }
1955
1956         case CRASH_APPLICATION_TRANSACTION: {
1957             data.enforceInterface(IActivityManager.descriptor);
1958             int uid = data.readInt();
1959             int initialPid = data.readInt();
1960             String packageName = data.readString();
1961             String message = data.readString();
1962             crashApplication(uid, initialPid, packageName, message);
1963             reply.writeNoException();
1964             return true;
1965         }
1966
1967         case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
1968             data.enforceInterface(IActivityManager.descriptor);
1969             Uri uri = Uri.CREATOR.createFromParcel(data);
1970             int userId = data.readInt();
1971             String type = getProviderMimeType(uri, userId);
1972             reply.writeNoException();
1973             reply.writeString(type);
1974             return true;
1975         }
1976
1977         case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
1978             data.enforceInterface(IActivityManager.descriptor);
1979             String name = data.readString();
1980             IBinder perm = newUriPermissionOwner(name);
1981             reply.writeNoException();
1982             reply.writeStrongBinder(perm);
1983             return true;
1984         }
1985
1986         case GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION: {
1987             data.enforceInterface(IActivityManager.descriptor);
1988             IBinder activityToken = data.readStrongBinder();
1989             IBinder perm = getUriPermissionOwnerForActivity(activityToken);
1990             reply.writeNoException();
1991             reply.writeStrongBinder(perm);
1992             return true;
1993         }
1994
1995         case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1996             data.enforceInterface(IActivityManager.descriptor);
1997             IBinder owner = data.readStrongBinder();
1998             int fromUid = data.readInt();
1999             String targetPkg = data.readString();
2000             Uri uri = Uri.CREATOR.createFromParcel(data);
2001             int mode = data.readInt();
2002             int sourceUserId = data.readInt();
2003             int targetUserId = data.readInt();
2004             grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode, sourceUserId,
2005                     targetUserId);
2006             reply.writeNoException();
2007             return true;
2008         }
2009
2010         case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
2011             data.enforceInterface(IActivityManager.descriptor);
2012             IBinder owner = data.readStrongBinder();
2013             Uri uri = null;
2014             if (data.readInt() != 0) {
2015                 uri = Uri.CREATOR.createFromParcel(data);
2016             }
2017             int mode = data.readInt();
2018             int userId = data.readInt();
2019             revokeUriPermissionFromOwner(owner, uri, mode, userId);
2020             reply.writeNoException();
2021             return true;
2022         }
2023
2024         case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
2025             data.enforceInterface(IActivityManager.descriptor);
2026             int callingUid = data.readInt();
2027             String targetPkg = data.readString();
2028             Uri uri = Uri.CREATOR.createFromParcel(data);
2029             int modeFlags = data.readInt();
2030             int userId = data.readInt();
2031             int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags, userId);
2032             reply.writeNoException();
2033             reply.writeInt(res);
2034             return true;
2035         }
2036
2037         case DUMP_HEAP_TRANSACTION: {
2038             data.enforceInterface(IActivityManager.descriptor);
2039             String process = data.readString();
2040             int userId = data.readInt();
2041             boolean managed = data.readInt() != 0;
2042             String path = data.readString();
2043             ParcelFileDescriptor fd = data.readInt() != 0
2044                     ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
2045             boolean res = dumpHeap(process, userId, managed, path, fd);
2046             reply.writeNoException();
2047             reply.writeInt(res ? 1 : 0);
2048             return true;
2049         }
2050
2051         case START_ACTIVITIES_TRANSACTION:
2052         {
2053             data.enforceInterface(IActivityManager.descriptor);
2054             IBinder b = data.readStrongBinder();
2055             IApplicationThread app = ApplicationThreadNative.asInterface(b);
2056             String callingPackage = data.readString();
2057             Intent[] intents = data.createTypedArray(Intent.CREATOR);
2058             String[] resolvedTypes = data.createStringArray();
2059             IBinder resultTo = data.readStrongBinder();
2060             Bundle options = data.readInt() != 0
2061                     ? Bundle.CREATOR.createFromParcel(data) : null;
2062             int userId = data.readInt();
2063             int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
2064                     options, userId);
2065             reply.writeNoException();
2066             reply.writeInt(result);
2067             return true;
2068         }
2069
2070         case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
2071         {
2072             data.enforceInterface(IActivityManager.descriptor);
2073             int mode = getFrontActivityScreenCompatMode();
2074             reply.writeNoException();
2075             reply.writeInt(mode);
2076             return true;
2077         }
2078
2079         case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
2080         {
2081             data.enforceInterface(IActivityManager.descriptor);
2082             int mode = data.readInt();
2083             setFrontActivityScreenCompatMode(mode);
2084             reply.writeNoException();
2085             reply.writeInt(mode);
2086             return true;
2087         }
2088
2089         case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
2090         {
2091             data.enforceInterface(IActivityManager.descriptor);
2092             String pkg = data.readString();
2093             int mode = getPackageScreenCompatMode(pkg);
2094             reply.writeNoException();
2095             reply.writeInt(mode);
2096             return true;
2097         }
2098
2099         case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
2100         {
2101             data.enforceInterface(IActivityManager.descriptor);
2102             String pkg = data.readString();
2103             int mode = data.readInt();
2104             setPackageScreenCompatMode(pkg, mode);
2105             reply.writeNoException();
2106             return true;
2107         }
2108
2109         case SWITCH_USER_TRANSACTION: {
2110             data.enforceInterface(IActivityManager.descriptor);
2111             int userid = data.readInt();
2112             boolean result = switchUser(userid);
2113             reply.writeNoException();
2114             reply.writeInt(result ? 1 : 0);
2115             return true;
2116         }
2117
2118         case START_USER_IN_BACKGROUND_TRANSACTION: {
2119             data.enforceInterface(IActivityManager.descriptor);
2120             int userid = data.readInt();
2121             boolean result = startUserInBackground(userid);
2122             reply.writeNoException();
2123             reply.writeInt(result ? 1 : 0);
2124             return true;
2125         }
2126
2127         case UNLOCK_USER_TRANSACTION: {
2128             data.enforceInterface(IActivityManager.descriptor);
2129             int userId = data.readInt();
2130             byte[] token = data.createByteArray();
2131             byte[] secret = data.createByteArray();
2132             IProgressListener listener = IProgressListener.Stub
2133                     .asInterface(data.readStrongBinder());
2134             boolean result = unlockUser(userId, token, secret, listener);
2135             reply.writeNoException();
2136             reply.writeInt(result ? 1 : 0);
2137             return true;
2138         }
2139
2140         case STOP_USER_TRANSACTION: {
2141             data.enforceInterface(IActivityManager.descriptor);
2142             int userid = data.readInt();
2143             boolean force = data.readInt() != 0;
2144             IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
2145                     data.readStrongBinder());
2146             int result = stopUser(userid, force, callback);
2147             reply.writeNoException();
2148             reply.writeInt(result);
2149             return true;
2150         }
2151
2152         case GET_CURRENT_USER_TRANSACTION: {
2153             data.enforceInterface(IActivityManager.descriptor);
2154             UserInfo userInfo = getCurrentUser();
2155             reply.writeNoException();
2156             userInfo.writeToParcel(reply, 0);
2157             return true;
2158         }
2159
2160         case IS_USER_RUNNING_TRANSACTION: {
2161             data.enforceInterface(IActivityManager.descriptor);
2162             int userid = data.readInt();
2163             int _flags = data.readInt();
2164             boolean result = isUserRunning(userid, _flags);
2165             reply.writeNoException();
2166             reply.writeInt(result ? 1 : 0);
2167             return true;
2168         }
2169
2170         case GET_RUNNING_USER_IDS_TRANSACTION: {
2171             data.enforceInterface(IActivityManager.descriptor);
2172             int[] result = getRunningUserIds();
2173             reply.writeNoException();
2174             reply.writeIntArray(result);
2175             return true;
2176         }
2177
2178         case REMOVE_TASK_TRANSACTION:
2179         {
2180             data.enforceInterface(IActivityManager.descriptor);
2181             int taskId = data.readInt();
2182             boolean result = removeTask(taskId);
2183             reply.writeNoException();
2184             reply.writeInt(result ? 1 : 0);
2185             return true;
2186         }
2187
2188         case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
2189             data.enforceInterface(IActivityManager.descriptor);
2190             IProcessObserver observer = IProcessObserver.Stub.asInterface(
2191                     data.readStrongBinder());
2192             registerProcessObserver(observer);
2193             return true;
2194         }
2195
2196         case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
2197             data.enforceInterface(IActivityManager.descriptor);
2198             IProcessObserver observer = IProcessObserver.Stub.asInterface(
2199                     data.readStrongBinder());
2200             unregisterProcessObserver(observer);
2201             return true;
2202         }
2203
2204         case REGISTER_UID_OBSERVER_TRANSACTION: {
2205             data.enforceInterface(IActivityManager.descriptor);
2206             IUidObserver observer = IUidObserver.Stub.asInterface(
2207                     data.readStrongBinder());
2208             int which = data.readInt();
2209             registerUidObserver(observer, which);
2210             return true;
2211         }
2212
2213         case UNREGISTER_UID_OBSERVER_TRANSACTION: {
2214             data.enforceInterface(IActivityManager.descriptor);
2215             IUidObserver observer = IUidObserver.Stub.asInterface(
2216                     data.readStrongBinder());
2217             unregisterUidObserver(observer);
2218             return true;
2219         }
2220
2221         case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
2222         {
2223             data.enforceInterface(IActivityManager.descriptor);
2224             String pkg = data.readString();
2225             boolean ask = getPackageAskScreenCompat(pkg);
2226             reply.writeNoException();
2227             reply.writeInt(ask ? 1 : 0);
2228             return true;
2229         }
2230
2231         case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
2232         {
2233             data.enforceInterface(IActivityManager.descriptor);
2234             String pkg = data.readString();
2235             boolean ask = data.readInt() != 0;
2236             setPackageAskScreenCompat(pkg, ask);
2237             reply.writeNoException();
2238             return true;
2239         }
2240
2241         case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
2242             data.enforceInterface(IActivityManager.descriptor);
2243             IIntentSender r = IIntentSender.Stub.asInterface(
2244                     data.readStrongBinder());
2245             boolean res = isIntentSenderTargetedToPackage(r);
2246             reply.writeNoException();
2247             reply.writeInt(res ? 1 : 0);
2248             return true;
2249         }
2250
2251         case IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION: {
2252             data.enforceInterface(IActivityManager.descriptor);
2253             IIntentSender r = IIntentSender.Stub.asInterface(
2254                 data.readStrongBinder());
2255             boolean res = isIntentSenderAnActivity(r);
2256             reply.writeNoException();
2257             reply.writeInt(res ? 1 : 0);
2258             return true;
2259         }
2260
2261         case GET_INTENT_FOR_INTENT_SENDER_TRANSACTION: {
2262             data.enforceInterface(IActivityManager.descriptor);
2263             IIntentSender r = IIntentSender.Stub.asInterface(
2264                 data.readStrongBinder());
2265             Intent intent = getIntentForIntentSender(r);
2266             reply.writeNoException();
2267             if (intent != null) {
2268                 reply.writeInt(1);
2269                 intent.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2270             } else {
2271                 reply.writeInt(0);
2272             }
2273             return true;
2274         }
2275
2276         case GET_TAG_FOR_INTENT_SENDER_TRANSACTION: {
2277             data.enforceInterface(IActivityManager.descriptor);
2278             IIntentSender r = IIntentSender.Stub.asInterface(
2279                 data.readStrongBinder());
2280             String prefix = data.readString();
2281             String tag = getTagForIntentSender(r, prefix);
2282             reply.writeNoException();
2283             reply.writeString(tag);
2284             return true;
2285         }
2286
2287         case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
2288             data.enforceInterface(IActivityManager.descriptor);
2289             Configuration config = Configuration.CREATOR.createFromParcel(data);
2290             updatePersistentConfiguration(config);
2291             reply.writeNoException();
2292             return true;
2293         }
2294
2295         case GET_PROCESS_PSS_TRANSACTION: {
2296             data.enforceInterface(IActivityManager.descriptor);
2297             int[] pids = data.createIntArray();
2298             long[] pss = getProcessPss(pids);
2299             reply.writeNoException();
2300             reply.writeLongArray(pss);
2301             return true;
2302         }
2303
2304         case SHOW_BOOT_MESSAGE_TRANSACTION: {
2305             data.enforceInterface(IActivityManager.descriptor);
2306             CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
2307             boolean always = data.readInt() != 0;
2308             showBootMessage(msg, always);
2309             reply.writeNoException();
2310             return true;
2311         }
2312
2313         case KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION: {
2314             data.enforceInterface(IActivityManager.descriptor);
2315             keyguardWaitingForActivityDrawn();
2316             reply.writeNoException();
2317             return true;
2318         }
2319
2320         case KEYGUARD_GOING_AWAY_TRANSACTION: {
2321             data.enforceInterface(IActivityManager.descriptor);
2322             keyguardGoingAway(data.readInt());
2323             reply.writeNoException();
2324             return true;
2325         }
2326
2327         case SHOULD_UP_RECREATE_TASK_TRANSACTION: {
2328             data.enforceInterface(IActivityManager.descriptor);
2329             IBinder token = data.readStrongBinder();
2330             String destAffinity = data.readString();
2331             boolean res = shouldUpRecreateTask(token, destAffinity);
2332             reply.writeNoException();
2333             reply.writeInt(res ? 1 : 0);
2334             return true;
2335         }
2336
2337         case NAVIGATE_UP_TO_TRANSACTION: {
2338             data.enforceInterface(IActivityManager.descriptor);
2339             IBinder token = data.readStrongBinder();
2340             Intent target = Intent.CREATOR.createFromParcel(data);
2341             int resultCode = data.readInt();
2342             Intent resultData = null;
2343             if (data.readInt() != 0) {
2344                 resultData = Intent.CREATOR.createFromParcel(data);
2345             }
2346             boolean res = navigateUpTo(token, target, resultCode, resultData);
2347             reply.writeNoException();
2348             reply.writeInt(res ? 1 : 0);
2349             return true;
2350         }
2351
2352         case GET_LAUNCHED_FROM_UID_TRANSACTION: {
2353             data.enforceInterface(IActivityManager.descriptor);
2354             IBinder token = data.readStrongBinder();
2355             int res = getLaunchedFromUid(token);
2356             reply.writeNoException();
2357             reply.writeInt(res);
2358             return true;
2359         }
2360
2361         case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
2362             data.enforceInterface(IActivityManager.descriptor);
2363             IBinder token = data.readStrongBinder();
2364             String res = getLaunchedFromPackage(token);
2365             reply.writeNoException();
2366             reply.writeString(res);
2367             return true;
2368         }
2369
2370         case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2371             data.enforceInterface(IActivityManager.descriptor);
2372             IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2373                     data.readStrongBinder());
2374             String name = data.readString();
2375             registerUserSwitchObserver(observer, name);
2376             reply.writeNoException();
2377             return true;
2378         }
2379
2380         case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2381             data.enforceInterface(IActivityManager.descriptor);
2382             IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2383                     data.readStrongBinder());
2384             unregisterUserSwitchObserver(observer);
2385             reply.writeNoException();
2386             return true;
2387         }
2388
2389         case REQUEST_BUG_REPORT_TRANSACTION: {
2390             data.enforceInterface(IActivityManager.descriptor);
2391             int bugreportType = data.readInt();
2392             requestBugReport(bugreportType);
2393             reply.writeNoException();
2394             return true;
2395         }
2396
2397         case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
2398             data.enforceInterface(IActivityManager.descriptor);
2399             int pid = data.readInt();
2400             boolean aboveSystem = data.readInt() != 0;
2401             String reason = data.readString();
2402             long res = inputDispatchingTimedOut(pid, aboveSystem, reason);
2403             reply.writeNoException();
2404             reply.writeLong(res);
2405             return true;
2406         }
2407
2408         case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2409             data.enforceInterface(IActivityManager.descriptor);
2410             int requestType = data.readInt();
2411             Bundle res = getAssistContextExtras(requestType);
2412             reply.writeNoException();
2413             reply.writeBundle(res);
2414             return true;
2415         }
2416
2417         case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2418             data.enforceInterface(IActivityManager.descriptor);
2419             int requestType = data.readInt();
2420             IResultReceiver receiver = IResultReceiver.Stub.asInterface(data.readStrongBinder());
2421             Bundle receiverExtras = data.readBundle();
2422             IBinder activityToken = data.readStrongBinder();
2423             boolean focused = data.readInt() == 1;
2424             boolean newSessionId = data.readInt() == 1;
2425             boolean res = requestAssistContextExtras(requestType, receiver, receiverExtras,
2426                     activityToken, focused, newSessionId);
2427             reply.writeNoException();
2428             reply.writeInt(res ? 1 : 0);
2429             return true;
2430         }
2431
2432         case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2433             data.enforceInterface(IActivityManager.descriptor);
2434             IBinder token = data.readStrongBinder();
2435             Bundle extras = data.readBundle();
2436             AssistStructure structure = AssistStructure.CREATOR.createFromParcel(data);
2437             AssistContent content = AssistContent.CREATOR.createFromParcel(data);
2438             Uri referrer = data.readInt() != 0 ? Uri.CREATOR.createFromParcel(data) : null;
2439             reportAssistContextExtras(token, extras, structure, content, referrer);
2440             reply.writeNoException();
2441             return true;
2442         }
2443
2444         case LAUNCH_ASSIST_INTENT_TRANSACTION: {
2445             data.enforceInterface(IActivityManager.descriptor);
2446             Intent intent = Intent.CREATOR.createFromParcel(data);
2447             int requestType = data.readInt();
2448             String hint = data.readString();
2449             int userHandle = data.readInt();
2450             Bundle args = data.readBundle();
2451             boolean res = launchAssistIntent(intent, requestType, hint, userHandle, args);
2452             reply.writeNoException();
2453             reply.writeInt(res ? 1 : 0);
2454             return true;
2455         }
2456
2457         case IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION: {
2458             data.enforceInterface(IActivityManager.descriptor);
2459             boolean res = isAssistDataAllowedOnCurrentActivity();
2460             reply.writeNoException();
2461             reply.writeInt(res ? 1 : 0);
2462             return true;
2463         }
2464
2465         case SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION: {
2466             data.enforceInterface(IActivityManager.descriptor);
2467             IBinder token = data.readStrongBinder();
2468             Bundle args = data.readBundle();
2469             boolean res = showAssistFromActivity(token, args);
2470             reply.writeNoException();
2471             reply.writeInt(res ? 1 : 0);
2472             return true;
2473         }
2474
2475         case KILL_UID_TRANSACTION: {
2476             data.enforceInterface(IActivityManager.descriptor);
2477             int appId = data.readInt();
2478             int userId = data.readInt();
2479             String reason = data.readString();
2480             killUid(appId, userId, reason);
2481             reply.writeNoException();
2482             return true;
2483         }
2484
2485         case HANG_TRANSACTION: {
2486             data.enforceInterface(IActivityManager.descriptor);
2487             IBinder who = data.readStrongBinder();
2488             boolean allowRestart = data.readInt() != 0;
2489             hang(who, allowRestart);
2490             reply.writeNoException();
2491             return true;
2492         }
2493
2494         case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
2495             data.enforceInterface(IActivityManager.descriptor);
2496             IBinder token = data.readStrongBinder();
2497             reportActivityFullyDrawn(token);
2498             reply.writeNoException();
2499             return true;
2500         }
2501
2502         case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
2503             data.enforceInterface(IActivityManager.descriptor);
2504             IBinder token = data.readStrongBinder();
2505             notifyActivityDrawn(token);
2506             reply.writeNoException();
2507             return true;
2508         }
2509
2510         case RESTART_TRANSACTION: {
2511             data.enforceInterface(IActivityManager.descriptor);
2512             restart();
2513             reply.writeNoException();
2514             return true;
2515         }
2516
2517         case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
2518             data.enforceInterface(IActivityManager.descriptor);
2519             performIdleMaintenance();
2520             reply.writeNoException();
2521             return true;
2522         }
2523
2524         case CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION: {
2525             data.enforceInterface(IActivityManager.descriptor);
2526             IBinder parentActivityToken = data.readStrongBinder();
2527             IActivityContainerCallback callback =
2528                     IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
2529             IActivityContainer activityContainer =
2530                     createVirtualActivityContainer(parentActivityToken, callback);
2531             reply.writeNoException();
2532             if (activityContainer != null) {
2533                 reply.writeInt(1);
2534                 reply.writeStrongBinder(activityContainer.asBinder());
2535             } else {
2536                 reply.writeInt(0);
2537             }
2538             return true;
2539         }
2540
2541         case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
2542             data.enforceInterface(IActivityManager.descriptor);
2543             IActivityContainer activityContainer =
2544                     IActivityContainer.Stub.asInterface(data.readStrongBinder());
2545             deleteActivityContainer(activityContainer);
2546             reply.writeNoException();
2547             return true;
2548         }
2549
2550         case CREATE_STACK_ON_DISPLAY: {
2551             data.enforceInterface(IActivityManager.descriptor);
2552             int displayId = data.readInt();
2553             IActivityContainer activityContainer = createStackOnDisplay(displayId);
2554             reply.writeNoException();
2555             if (activityContainer != null) {
2556                 reply.writeInt(1);
2557                 reply.writeStrongBinder(activityContainer.asBinder());
2558             } else {
2559                 reply.writeInt(0);
2560             }
2561             return true;
2562         }
2563
2564         case GET_ACTIVITY_DISPLAY_ID_TRANSACTION: {
2565             data.enforceInterface(IActivityManager.descriptor);
2566             IBinder activityToken = data.readStrongBinder();
2567             int displayId = getActivityDisplayId(activityToken);
2568             reply.writeNoException();
2569             reply.writeInt(displayId);
2570             return true;
2571         }
2572
2573         case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
2574             data.enforceInterface(IActivityManager.descriptor);
2575             final int taskId = data.readInt();
2576             startLockTaskMode(taskId);
2577             reply.writeNoException();
2578             return true;
2579         }
2580
2581         case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
2582             data.enforceInterface(IActivityManager.descriptor);
2583             IBinder token = data.readStrongBinder();
2584             startLockTaskMode(token);
2585             reply.writeNoException();
2586             return true;
2587         }
2588
2589         case START_SYSTEM_LOCK_TASK_TRANSACTION: {
2590             data.enforceInterface(IActivityManager.descriptor);
2591             int taskId = data.readInt();
2592             startSystemLockTaskMode(taskId);
2593             reply.writeNoException();
2594             return true;
2595         }
2596
2597         case STOP_LOCK_TASK_MODE_TRANSACTION: {
2598             data.enforceInterface(IActivityManager.descriptor);
2599             stopLockTaskMode();
2600             reply.writeNoException();
2601             return true;
2602         }
2603
2604         case STOP_SYSTEM_LOCK_TASK_TRANSACTION: {
2605             data.enforceInterface(IActivityManager.descriptor);
2606             stopSystemLockTaskMode();
2607             reply.writeNoException();
2608             return true;
2609         }
2610
2611         case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
2612             data.enforceInterface(IActivityManager.descriptor);
2613             final boolean isInLockTaskMode = isInLockTaskMode();
2614             reply.writeNoException();
2615             reply.writeInt(isInLockTaskMode ? 1 : 0);
2616             return true;
2617         }
2618
2619         case GET_LOCK_TASK_MODE_STATE_TRANSACTION: {
2620             data.enforceInterface(IActivityManager.descriptor);
2621             final int lockTaskModeState = getLockTaskModeState();
2622             reply.writeNoException();
2623             reply.writeInt(lockTaskModeState);
2624             return true;
2625         }
2626
2627         case SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION: {
2628             data.enforceInterface(IActivityManager.descriptor);
2629             final IBinder token = data.readStrongBinder();
2630             showLockTaskEscapeMessage(token);
2631             reply.writeNoException();
2632             return true;
2633         }
2634
2635         case SET_TASK_DESCRIPTION_TRANSACTION: {
2636             data.enforceInterface(IActivityManager.descriptor);
2637             IBinder token = data.readStrongBinder();
2638             ActivityManager.TaskDescription values =
2639                     ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
2640             setTaskDescription(token, values);
2641             reply.writeNoException();
2642             return true;
2643         }
2644
2645         case SET_TASK_RESIZEABLE_TRANSACTION: {
2646             data.enforceInterface(IActivityManager.descriptor);
2647             final int taskId = data.readInt();
2648             final int resizeableMode = data.readInt();
2649             setTaskResizeable(taskId, resizeableMode);
2650             reply.writeNoException();
2651             return true;
2652         }
2653
2654         case RESIZE_TASK_TRANSACTION: {
2655             data.enforceInterface(IActivityManager.descriptor);
2656             int taskId = data.readInt();
2657             int resizeMode = data.readInt();
2658             Rect r = Rect.CREATOR.createFromParcel(data);
2659             resizeTask(taskId, r, resizeMode);
2660             reply.writeNoException();
2661             return true;
2662         }
2663
2664         case GET_TASK_BOUNDS_TRANSACTION: {
2665             data.enforceInterface(IActivityManager.descriptor);
2666             int taskId = data.readInt();
2667             Rect r = getTaskBounds(taskId);
2668             reply.writeNoException();
2669             r.writeToParcel(reply, 0);
2670             return true;
2671         }
2672
2673         case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
2674             data.enforceInterface(IActivityManager.descriptor);
2675             String filename = data.readString();
2676             int userId = data.readInt();
2677             Bitmap icon = getTaskDescriptionIcon(filename, userId);
2678             reply.writeNoException();
2679             if (icon == null) {
2680                 reply.writeInt(0);
2681             } else {
2682                 reply.writeInt(1);
2683                 icon.writeToParcel(reply, 0);
2684             }
2685             return true;
2686         }
2687
2688         case START_IN_PLACE_ANIMATION_TRANSACTION: {
2689             data.enforceInterface(IActivityManager.descriptor);
2690             final Bundle bundle;
2691             if (data.readInt() == 0) {
2692                 bundle = null;
2693             } else {
2694                 bundle = data.readBundle();
2695             }
2696             final ActivityOptions options = ActivityOptions.fromBundle(bundle);
2697             startInPlaceAnimationOnFrontMostApplication(options);
2698             reply.writeNoException();
2699             return true;
2700         }
2701
2702         case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
2703             data.enforceInterface(IActivityManager.descriptor);
2704             IBinder token = data.readStrongBinder();
2705             boolean enable = data.readInt() > 0;
2706             boolean success = requestVisibleBehind(token, enable);
2707             reply.writeNoException();
2708             reply.writeInt(success ? 1 : 0);
2709             return true;
2710         }
2711
2712         case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
2713             data.enforceInterface(IActivityManager.descriptor);
2714             IBinder token = data.readStrongBinder();
2715             final boolean enabled = isBackgroundVisibleBehind(token);
2716             reply.writeNoException();
2717             reply.writeInt(enabled ? 1 : 0);
2718             return true;
2719         }
2720
2721         case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
2722             data.enforceInterface(IActivityManager.descriptor);
2723             IBinder token = data.readStrongBinder();
2724             backgroundResourcesReleased(token);
2725             reply.writeNoException();
2726             return true;
2727         }
2728
2729         case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
2730             data.enforceInterface(IActivityManager.descriptor);
2731             IBinder token = data.readStrongBinder();
2732             notifyLaunchTaskBehindComplete(token);
2733             reply.writeNoException();
2734             return true;
2735         }
2736
2737         case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
2738             data.enforceInterface(IActivityManager.descriptor);
2739             IBinder token = data.readStrongBinder();
2740             notifyEnterAnimationComplete(token);
2741             reply.writeNoException();
2742             return true;
2743         }
2744
2745         case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
2746             data.enforceInterface(IActivityManager.descriptor);
2747             bootAnimationComplete();
2748             reply.writeNoException();
2749             return true;
2750         }
2751
2752         case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: {
2753             data.enforceInterface(IActivityManager.descriptor);
2754             final int uid = data.readInt();
2755             final byte[] firstPacket = data.createByteArray();
2756             notifyCleartextNetwork(uid, firstPacket);
2757             reply.writeNoException();
2758             return true;
2759         }
2760
2761         case SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION: {
2762             data.enforceInterface(IActivityManager.descriptor);
2763             String procName = data.readString();
2764             int uid = data.readInt();
2765             long maxMemSize = data.readLong();
2766             String reportPackage = data.readString();
2767             setDumpHeapDebugLimit(procName, uid, maxMemSize, reportPackage);
2768             reply.writeNoException();
2769             return true;
2770         }
2771
2772         case DUMP_HEAP_FINISHED_TRANSACTION: {
2773             data.enforceInterface(IActivityManager.descriptor);
2774             String path = data.readString();
2775             dumpHeapFinished(path);
2776             reply.writeNoException();
2777             return true;
2778         }
2779
2780         case SET_VOICE_KEEP_AWAKE_TRANSACTION: {
2781             data.enforceInterface(IActivityManager.descriptor);
2782             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
2783                     data.readStrongBinder());
2784             boolean keepAwake = data.readInt() != 0;
2785             setVoiceKeepAwake(session, keepAwake);
2786             reply.writeNoException();
2787             return true;
2788         }
2789
2790         case UPDATE_LOCK_TASK_PACKAGES_TRANSACTION: {
2791             data.enforceInterface(IActivityManager.descriptor);
2792             int userId = data.readInt();
2793             String[] packages = data.readStringArray();
2794             updateLockTaskPackages(userId, packages);
2795             reply.writeNoException();
2796             return true;
2797         }
2798
2799         case UPDATE_DEVICE_OWNER_TRANSACTION: {
2800             data.enforceInterface(IActivityManager.descriptor);
2801             String packageName = data.readString();
2802             updateDeviceOwner(packageName);
2803             reply.writeNoException();
2804             return true;
2805         }
2806
2807         case GET_PACKAGE_PROCESS_STATE_TRANSACTION: {
2808             data.enforceInterface(IActivityManager.descriptor);
2809             String pkg = data.readString();
2810             String callingPackage = data.readString();
2811             int res = getPackageProcessState(pkg, callingPackage);
2812             reply.writeNoException();
2813             reply.writeInt(res);
2814             return true;
2815         }
2816
2817         case SET_PROCESS_MEMORY_TRIM_TRANSACTION: {
2818             data.enforceInterface(IActivityManager.descriptor);
2819             String process = data.readString();
2820             int userId = data.readInt();
2821             int level = data.readInt();
2822             boolean res = setProcessMemoryTrimLevel(process, userId, level);
2823             reply.writeNoException();
2824             reply.writeInt(res ? 1 : 0);
2825             return true;
2826         }
2827
2828         case IS_ROOT_VOICE_INTERACTION_TRANSACTION: {
2829             data.enforceInterface(IActivityManager.descriptor);
2830             IBinder token = data.readStrongBinder();
2831             boolean res = isRootVoiceInteraction(token);
2832             reply.writeNoException();
2833             reply.writeInt(res ? 1 : 0);
2834             return true;
2835         }
2836
2837         case START_BINDER_TRACKING_TRANSACTION: {
2838             data.enforceInterface(IActivityManager.descriptor);
2839             boolean res = startBinderTracking();
2840             reply.writeNoException();
2841             reply.writeInt(res ? 1 : 0);
2842             return true;
2843         }
2844
2845         case STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION: {
2846             data.enforceInterface(IActivityManager.descriptor);
2847             ParcelFileDescriptor fd = data.readInt() != 0
2848                     ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
2849             boolean res = stopBinderTrackingAndDump(fd);
2850             reply.writeNoException();
2851             reply.writeInt(res ? 1 : 0);
2852             return true;
2853         }
2854         case GET_ACTIVITY_STACK_ID_TRANSACTION: {
2855             data.enforceInterface(IActivityManager.descriptor);
2856             IBinder token = data.readStrongBinder();
2857             int stackId = getActivityStackId(token);
2858             reply.writeNoException();
2859             reply.writeInt(stackId);
2860             return true;
2861         }
2862         case EXIT_FREEFORM_MODE_TRANSACTION: {
2863             data.enforceInterface(IActivityManager.descriptor);
2864             IBinder token = data.readStrongBinder();
2865             exitFreeformMode(token);
2866             reply.writeNoException();
2867             return true;
2868         }
2869         case REPORT_SIZE_CONFIGURATIONS: {
2870             data.enforceInterface(IActivityManager.descriptor);
2871             IBinder token = data.readStrongBinder();
2872             int[] horizontal = readIntArray(data);
2873             int[] vertical = readIntArray(data);
2874             int[] smallest = readIntArray(data);
2875             reportSizeConfigurations(token, horizontal, vertical, smallest);
2876             return true;
2877         }
2878         case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: {
2879             data.enforceInterface(IActivityManager.descriptor);
2880             final boolean suppress = data.readInt() == 1;
2881             suppressResizeConfigChanges(suppress);
2882             reply.writeNoException();
2883             return true;
2884         }
2885         case MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION: {
2886             data.enforceInterface(IActivityManager.descriptor);
2887             final int stackId = data.readInt();
2888             final boolean onTop = data.readInt() == 1;
2889             moveTasksToFullscreenStack(stackId, onTop);
2890             reply.writeNoException();
2891             return true;
2892         }
2893         case GET_APP_START_MODE_TRANSACTION: {
2894             data.enforceInterface(IActivityManager.descriptor);
2895             final int uid = data.readInt();
2896             final String pkg = data.readString();
2897             int res = getAppStartMode(uid, pkg);
2898             reply.writeNoException();
2899             reply.writeInt(res);
2900             return true;
2901         }
2902         case IN_MULTI_WINDOW_TRANSACTION: {
2903             data.enforceInterface(IActivityManager.descriptor);
2904             final IBinder token = data.readStrongBinder();
2905             final boolean inMultiWindow = isInMultiWindowMode(token);
2906             reply.writeNoException();
2907             reply.writeInt(inMultiWindow ? 1 : 0);
2908             return true;
2909         }
2910         case IN_PICTURE_IN_PICTURE_TRANSACTION: {
2911             data.enforceInterface(IActivityManager.descriptor);
2912             final IBinder token = data.readStrongBinder();
2913             final boolean inPip = isInPictureInPictureMode(token);
2914             reply.writeNoException();
2915             reply.writeInt(inPip ? 1 : 0);
2916             return true;
2917         }
2918         case ENTER_PICTURE_IN_PICTURE_TRANSACTION: {
2919             data.enforceInterface(IActivityManager.descriptor);
2920             final IBinder token = data.readStrongBinder();
2921             enterPictureInPictureMode(token);
2922             reply.writeNoException();
2923             return true;
2924         }
2925         case SET_VR_MODE_TRANSACTION: {
2926             data.enforceInterface(IActivityManager.descriptor);
2927             final IBinder token = data.readStrongBinder();
2928             final boolean enable = data.readInt() == 1;
2929             final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2930             int res = setVrMode(token, enable, packageName);
2931             reply.writeNoException();
2932             reply.writeInt(res);
2933             return true;
2934         }
2935         case IS_VR_PACKAGE_ENABLED_TRANSACTION: {
2936             data.enforceInterface(IActivityManager.descriptor);
2937             final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2938             boolean res = isVrModePackageEnabled(packageName);
2939             reply.writeNoException();
2940             reply.writeInt(res ? 1 : 0);
2941             return true;
2942         }
2943         case IS_APP_FOREGROUND_TRANSACTION: {
2944             data.enforceInterface(IActivityManager.descriptor);
2945             final int userHandle = data.readInt();
2946             final boolean isForeground = isAppForeground(userHandle);
2947             reply.writeNoException();
2948             reply.writeInt(isForeground ? 1 : 0);
2949             return true;
2950         }
2951         case NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION: {
2952             data.enforceInterface(IActivityManager.descriptor);
2953             reply.writeNoException();
2954             return true;
2955         }
2956         case REMOVE_STACK: {
2957             data.enforceInterface(IActivityManager.descriptor);
2958             final int stackId = data.readInt();
2959             removeStack(stackId);
2960             reply.writeNoException();
2961             return true;
2962         }
2963         case NOTIFY_LOCKED_PROFILE: {
2964             data.enforceInterface(IActivityManager.descriptor);
2965             final int userId = data.readInt();
2966             notifyLockedProfile(userId);
2967             reply.writeNoException();
2968             return true;
2969         }
2970         case START_CONFIRM_DEVICE_CREDENTIAL_INTENT: {
2971             data.enforceInterface(IActivityManager.descriptor);
2972             final Intent intent = Intent.CREATOR.createFromParcel(data);
2973             startConfirmDeviceCredentialIntent(intent);
2974             reply.writeNoException();
2975             return true;
2976         }
2977         case SEND_IDLE_JOB_TRIGGER_TRANSACTION: {
2978             data.enforceInterface(IActivityManager.descriptor);
2979             sendIdleJobTrigger();
2980             reply.writeNoException();
2981             return true;
2982         }
2983         case SEND_INTENT_SENDER_TRANSACTION: {
2984             data.enforceInterface(IActivityManager.descriptor);
2985             IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
2986             int scode = data.readInt();
2987             Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
2988             String resolvedType = data.readString();
2989             IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
2990                     data.readStrongBinder());
2991             String requiredPermission = data.readString();
2992             Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
2993             int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
2994                     requiredPermission, options);
2995             reply.writeNoException();
2996             reply.writeInt(result);
2997             return true;
2998         }
2999         case SET_VR_THREAD_TRANSACTION: {
3000             data.enforceInterface(IActivityManager.descriptor);
3001             final int tid = data.readInt();
3002             setVrThread(tid);
3003             reply.writeNoException();
3004             return true;
3005         }
3006         case SET_RENDER_THREAD_TRANSACTION: {
3007             data.enforceInterface(IActivityManager.descriptor);
3008             final int tid = data.readInt();
3009             setRenderThread(tid);
3010             reply.writeNoException();
3011             return true;
3012         }
3013         case SET_HAS_TOP_UI: {
3014             data.enforceInterface(IActivityManager.descriptor);
3015             final boolean hasTopUi = data.readInt() != 0;
3016             setHasTopUi(hasTopUi);
3017             reply.writeNoException();
3018             return true;
3019         }
3020         }
3021
3022         return super.onTransact(code, data, reply, flags);
3023     }
3024
3025     private int[] readIntArray(Parcel data) {
3026         int[] smallest = null;
3027         int smallestSize = data.readInt();
3028         if (smallestSize > 0) {
3029             smallest = new int[smallestSize];
3030             data.readIntArray(smallest);
3031         }
3032         return smallest;
3033     }
3034
3035     public IBinder asBinder() {
3036         return this;
3037     }
3038
3039     private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
3040         protected IActivityManager create() {
3041             IBinder b = ServiceManager.getService("activity");
3042             if (false) {
3043                 Log.v("ActivityManager", "default service binder = " + b);
3044             }
3045             IActivityManager am = asInterface(b);
3046             if (false) {
3047                 Log.v("ActivityManager", "default service = " + am);
3048             }
3049             return am;
3050         }
3051     };
3052 }
3053
3054 class ActivityManagerProxy implements IActivityManager
3055 {
3056     public ActivityManagerProxy(IBinder remote)
3057     {
3058         mRemote = remote;
3059     }
3060
3061     public IBinder asBinder()
3062     {
3063         return mRemote;
3064     }
3065
3066     public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
3067             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3068             int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
3069         Parcel data = Parcel.obtain();
3070         Parcel reply = Parcel.obtain();
3071         data.writeInterfaceToken(IActivityManager.descriptor);
3072         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3073         data.writeString(callingPackage);
3074         intent.writeToParcel(data, 0);
3075         data.writeString(resolvedType);
3076         data.writeStrongBinder(resultTo);
3077         data.writeString(resultWho);
3078         data.writeInt(requestCode);
3079         data.writeInt(startFlags);
3080         if (profilerInfo != null) {
3081             data.writeInt(1);
3082             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3083         } else {
3084             data.writeInt(0);
3085         }
3086         if (options != null) {
3087             data.writeInt(1);
3088             options.writeToParcel(data, 0);
3089         } else {
3090             data.writeInt(0);
3091         }
3092         mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
3093         reply.readException();
3094         int result = reply.readInt();
3095         reply.recycle();
3096         data.recycle();
3097         return result;
3098     }
3099
3100     public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
3101             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3102             int startFlags, ProfilerInfo profilerInfo, Bundle options,
3103             int userId) throws RemoteException {
3104         Parcel data = Parcel.obtain();
3105         Parcel reply = Parcel.obtain();
3106         data.writeInterfaceToken(IActivityManager.descriptor);
3107         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3108         data.writeString(callingPackage);
3109         intent.writeToParcel(data, 0);
3110         data.writeString(resolvedType);
3111         data.writeStrongBinder(resultTo);
3112         data.writeString(resultWho);
3113         data.writeInt(requestCode);
3114         data.writeInt(startFlags);
3115         if (profilerInfo != null) {
3116             data.writeInt(1);
3117             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3118         } else {
3119             data.writeInt(0);
3120         }
3121         if (options != null) {
3122             data.writeInt(1);
3123             options.writeToParcel(data, 0);
3124         } else {
3125             data.writeInt(0);
3126         }
3127         data.writeInt(userId);
3128         mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
3129         reply.readException();
3130         int result = reply.readInt();
3131         reply.recycle();
3132         data.recycle();
3133         return result;
3134     }
3135     public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
3136             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3137             int startFlags, ProfilerInfo profilerInfo, Bundle options, boolean ignoreTargetSecurity,
3138             int userId) throws RemoteException {
3139         Parcel data = Parcel.obtain();
3140         Parcel reply = Parcel.obtain();
3141         data.writeInterfaceToken(IActivityManager.descriptor);
3142         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3143         data.writeString(callingPackage);
3144         intent.writeToParcel(data, 0);
3145         data.writeString(resolvedType);
3146         data.writeStrongBinder(resultTo);
3147         data.writeString(resultWho);
3148         data.writeInt(requestCode);
3149         data.writeInt(startFlags);
3150         if (profilerInfo != null) {
3151             data.writeInt(1);
3152             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3153         } else {
3154             data.writeInt(0);
3155         }
3156         if (options != null) {
3157             data.writeInt(1);
3158             options.writeToParcel(data, 0);
3159         } else {
3160             data.writeInt(0);
3161         }
3162         data.writeInt(ignoreTargetSecurity ? 1 : 0);
3163         data.writeInt(userId);
3164         mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
3165         reply.readException();
3166         int result = reply.readInt();
3167         reply.recycle();
3168         data.recycle();
3169         return result;
3170     }
3171     public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
3172             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3173             int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
3174             int userId) throws RemoteException {
3175         Parcel data = Parcel.obtain();
3176         Parcel reply = Parcel.obtain();
3177         data.writeInterfaceToken(IActivityManager.descriptor);
3178         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3179         data.writeString(callingPackage);
3180         intent.writeToParcel(data, 0);
3181         data.writeString(resolvedType);
3182         data.writeStrongBinder(resultTo);
3183         data.writeString(resultWho);
3184         data.writeInt(requestCode);
3185         data.writeInt(startFlags);
3186         if (profilerInfo != null) {
3187             data.writeInt(1);
3188             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3189         } else {
3190             data.writeInt(0);
3191         }
3192         if (options != null) {
3193             data.writeInt(1);
3194             options.writeToParcel(data, 0);
3195         } else {
3196             data.writeInt(0);
3197         }
3198         data.writeInt(userId);
3199         mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
3200         reply.readException();
3201         WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
3202         reply.recycle();
3203         data.recycle();
3204         return result;
3205     }
3206     public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
3207             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3208             int requestCode, int startFlags, Configuration config,
3209             Bundle options, int userId) throws RemoteException {
3210         Parcel data = Parcel.obtain();
3211         Parcel reply = Parcel.obtain();
3212         data.writeInterfaceToken(IActivityManager.descriptor);
3213         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3214         data.writeString(callingPackage);
3215         intent.writeToParcel(data, 0);
3216         data.writeString(resolvedType);
3217         data.writeStrongBinder(resultTo);
3218         data.writeString(resultWho);
3219         data.writeInt(requestCode);
3220         data.writeInt(startFlags);
3221         config.writeToParcel(data, 0);
3222         if (options != null) {
3223             data.writeInt(1);
3224             options.writeToParcel(data, 0);
3225         } else {
3226             data.writeInt(0);
3227         }
3228         data.writeInt(userId);
3229         mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
3230         reply.readException();
3231         int result = reply.readInt();
3232         reply.recycle();
3233         data.recycle();
3234         return result;
3235     }
3236     public int startActivityIntentSender(IApplicationThread caller,
3237             IntentSender intent, Intent fillInIntent, String resolvedType,
3238             IBinder resultTo, String resultWho, int requestCode,
3239             int flagsMask, int flagsValues, Bundle options) throws RemoteException {
3240         Parcel data = Parcel.obtain();
3241         Parcel reply = Parcel.obtain();
3242         data.writeInterfaceToken(IActivityManager.descriptor);
3243         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3244         intent.writeToParcel(data, 0);
3245         if (fillInIntent != null) {
3246             data.writeInt(1);
3247             fillInIntent.writeToParcel(data, 0);
3248         } else {
3249             data.writeInt(0);
3250         }
3251         data.writeString(resolvedType);
3252         data.writeStrongBinder(resultTo);
3253         data.writeString(resultWho);
3254         data.writeInt(requestCode);
3255         data.writeInt(flagsMask);
3256         data.writeInt(flagsValues);
3257         if (options != null) {
3258             data.writeInt(1);
3259             options.writeToParcel(data, 0);
3260         } else {
3261             data.writeInt(0);
3262         }
3263         mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
3264         reply.readException();
3265         int result = reply.readInt();
3266         reply.recycle();
3267         data.recycle();
3268         return result;
3269     }
3270     public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
3271             Intent intent, String resolvedType, IVoiceInteractionSession session,
3272             IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
3273             Bundle options, int userId) throws RemoteException {
3274         Parcel data = Parcel.obtain();
3275         Parcel reply = Parcel.obtain();
3276         data.writeInterfaceToken(IActivityManager.descriptor);
3277         data.writeString(callingPackage);
3278         data.writeInt(callingPid);
3279         data.writeInt(callingUid);
3280         intent.writeToParcel(data, 0);
3281         data.writeString(resolvedType);
3282         data.writeStrongBinder(session.asBinder());
3283         data.writeStrongBinder(interactor.asBinder());
3284         data.writeInt(startFlags);
3285         if (profilerInfo != null) {
3286             data.writeInt(1);
3287             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3288         } else {
3289             data.writeInt(0);
3290         }
3291         if (options != null) {
3292             data.writeInt(1);
3293             options.writeToParcel(data, 0);
3294         } else {
3295             data.writeInt(0);
3296         }
3297         data.writeInt(userId);
3298         mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
3299         reply.readException();
3300         int result = reply.readInt();
3301         reply.recycle();
3302         data.recycle();
3303         return result;
3304     }
3305
3306     public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
3307             throws RemoteException {
3308         Parcel data = Parcel.obtain();
3309         Parcel reply = Parcel.obtain();
3310         data.writeInterfaceToken(IActivityManager.descriptor);
3311         data.writeStrongBinder(callingActivity);
3312         data.writeBundle(options);
3313         mRemote.transact(START_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3314         reply.readException();
3315         reply.recycle();
3316         data.recycle();
3317     }
3318
3319     public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
3320         Parcel data = Parcel.obtain();
3321         Parcel reply = Parcel.obtain();
3322         data.writeInterfaceToken(IActivityManager.descriptor);
3323         data.writeStrongBinder(callingActivity);
3324         mRemote.transact(STOP_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3325         reply.readException();
3326         reply.recycle();
3327         data.recycle();
3328     }
3329
3330     public boolean supportsLocalVoiceInteraction() throws RemoteException {
3331         Parcel data = Parcel.obtain();
3332         Parcel reply = Parcel.obtain();
3333         data.writeInterfaceToken(IActivityManager.descriptor);
3334         mRemote.transact(SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3335         reply.readException();
3336         int result = reply.readInt();
3337         reply.recycle();
3338         data.recycle();
3339         return result != 0;
3340     }
3341
3342     public boolean startNextMatchingActivity(IBinder callingActivity,
3343             Intent intent, Bundle options) throws RemoteException {
3344         Parcel data = Parcel.obtain();
3345         Parcel reply = Parcel.obtain();
3346         data.writeInterfaceToken(IActivityManager.descriptor);
3347         data.writeStrongBinder(callingActivity);
3348         intent.writeToParcel(data, 0);
3349         if (options != null) {
3350             data.writeInt(1);
3351             options.writeToParcel(data, 0);
3352         } else {
3353             data.writeInt(0);
3354         }
3355         mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
3356         reply.readException();
3357         int result = reply.readInt();
3358         reply.recycle();
3359         data.recycle();
3360         return result != 0;
3361     }
3362     public int startActivityFromRecents(int taskId, Bundle options)
3363             throws RemoteException {
3364         Parcel data = Parcel.obtain();
3365         Parcel reply = Parcel.obtain();
3366         data.writeInterfaceToken(IActivityManager.descriptor);
3367         data.writeInt(taskId);
3368         if (options == null) {
3369             data.writeInt(0);
3370         } else {
3371             data.writeInt(1);
3372             options.writeToParcel(data, 0);
3373         }
3374         mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
3375         reply.readException();
3376         int result = reply.readInt();
3377         reply.recycle();
3378         data.recycle();
3379         return result;
3380     }
3381     public boolean finishActivity(IBinder token, int resultCode, Intent resultData, int finishTask)
3382             throws RemoteException {
3383         Parcel data = Parcel.obtain();
3384         Parcel reply = Parcel.obtain();
3385         data.writeInterfaceToken(IActivityManager.descriptor);
3386         data.writeStrongBinder(token);
3387         data.writeInt(resultCode);
3388         if (resultData != null) {
3389             data.writeInt(1);
3390             resultData.writeToParcel(data, 0);
3391         } else {
3392             data.writeInt(0);
3393         }
3394         data.writeInt(finishTask);
3395         mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
3396         reply.readException();
3397         boolean res = reply.readInt() != 0;
3398         data.recycle();
3399         reply.recycle();
3400         return res;
3401     }
3402     public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
3403     {
3404         Parcel data = Parcel.obtain();
3405         Parcel reply = Parcel.obtain();
3406         data.writeInterfaceToken(IActivityManager.descriptor);
3407         data.writeStrongBinder(token);
3408         data.writeString(resultWho);
3409         data.writeInt(requestCode);
3410         mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
3411         reply.readException();
3412         data.recycle();
3413         reply.recycle();
3414     }
3415     public boolean finishActivityAffinity(IBinder token) throws RemoteException {
3416         Parcel data = Parcel.obtain();
3417         Parcel reply = Parcel.obtain();
3418         data.writeInterfaceToken(IActivityManager.descriptor);
3419         data.writeStrongBinder(token);
3420         mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
3421         reply.readException();
3422         boolean res = reply.readInt() != 0;
3423         data.recycle();
3424         reply.recycle();
3425         return res;
3426     }
3427     public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
3428         Parcel data = Parcel.obtain();
3429         Parcel reply = Parcel.obtain();
3430         data.writeInterfaceToken(IActivityManager.descriptor);
3431         data.writeStrongBinder(session.asBinder());
3432         mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
3433         reply.readException();
3434         data.recycle();
3435         reply.recycle();
3436     }
3437     public boolean releaseActivityInstance(IBinder token) throws RemoteException {
3438         Parcel data = Parcel.obtain();
3439         Parcel reply = Parcel.obtain();
3440         data.writeInterfaceToken(IActivityManager.descriptor);
3441         data.writeStrongBinder(token);
3442         mRemote.transact(RELEASE_ACTIVITY_INSTANCE_TRANSACTION, data, reply, 0);
3443         reply.readException();
3444         boolean res = reply.readInt() != 0;
3445         data.recycle();
3446         reply.recycle();
3447         return res;
3448     }
3449     public void releaseSomeActivities(IApplicationThread app) throws RemoteException {
3450         Parcel data = Parcel.obtain();
3451         Parcel reply = Parcel.obtain();
3452         data.writeInterfaceToken(IActivityManager.descriptor);
3453         data.writeStrongBinder(app.asBinder());
3454         mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
3455         reply.readException();
3456         data.recycle();
3457         reply.recycle();
3458     }
3459     public boolean willActivityBeVisible(IBinder token) throws RemoteException {
3460         Parcel data = Parcel.obtain();
3461         Parcel reply = Parcel.obtain();
3462         data.writeInterfaceToken(IActivityManager.descriptor);
3463         data.writeStrongBinder(token);
3464         mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
3465         reply.readException();
3466         boolean res = reply.readInt() != 0;
3467         data.recycle();
3468         reply.recycle();
3469         return res;
3470     }
3471     public Intent registerReceiver(IApplicationThread caller, String packageName,
3472             IIntentReceiver receiver,
3473             IntentFilter filter, String perm, int userId) throws RemoteException
3474     {
3475         Parcel data = Parcel.obtain();
3476         Parcel reply = Parcel.obtain();
3477         data.writeInterfaceToken(IActivityManager.descriptor);
3478         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3479         data.writeString(packageName);
3480         data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
3481         filter.writeToParcel(data, 0);
3482         data.writeString(perm);
3483         data.writeInt(userId);
3484         mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3485         reply.readException();
3486         Intent intent = null;
3487         int haveIntent = reply.readInt();
3488         if (haveIntent != 0) {
3489             intent = Intent.CREATOR.createFromParcel(reply);
3490         }
3491         reply.recycle();
3492         data.recycle();
3493         return intent;
3494     }
3495     public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
3496     {
3497         Parcel data = Parcel.obtain();
3498         Parcel reply = Parcel.obtain();
3499         data.writeInterfaceToken(IActivityManager.descriptor);
3500         data.writeStrongBinder(receiver.asBinder());
3501         mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3502         reply.readException();
3503         data.recycle();
3504         reply.recycle();
3505     }
3506     public int broadcastIntent(IApplicationThread caller,
3507             Intent intent, String resolvedType, IIntentReceiver resultTo,
3508             int resultCode, String resultData, Bundle map,
3509             String[] requiredPermissions, int appOp, Bundle options, boolean serialized,
3510             boolean sticky, int userId) throws RemoteException
3511     {
3512         Parcel data = Parcel.obtain();
3513         Parcel reply = Parcel.obtain();
3514         data.writeInterfaceToken(IActivityManager.descriptor);
3515         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3516         intent.writeToParcel(data, 0);
3517         data.writeString(resolvedType);
3518         data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
3519         data.writeInt(resultCode);
3520         data.writeString(resultData);
3521         data.writeBundle(map);
3522         data.writeStringArray(requiredPermissions);
3523         data.writeInt(appOp);
3524         data.writeBundle(options);
3525         data.writeInt(serialized ? 1 : 0);
3526         data.writeInt(sticky ? 1 : 0);
3527         data.writeInt(userId);
3528         mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
3529         reply.readException();
3530         int res = reply.readInt();
3531         reply.recycle();
3532         data.recycle();
3533         return res;
3534     }
3535     public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
3536             throws RemoteException
3537     {
3538         Parcel data = Parcel.obtain();
3539         Parcel reply = Parcel.obtain();
3540         data.writeInterfaceToken(IActivityManager.descriptor);
3541         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3542         intent.writeToParcel(data, 0);
3543         data.writeInt(userId);
3544         mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
3545         reply.readException();
3546         data.recycle();
3547         reply.recycle();
3548     }
3549     public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
3550             boolean abortBroadcast, int flags) throws RemoteException
3551     {
3552         Parcel data = Parcel.obtain();
3553         Parcel reply = Parcel.obtain();
3554         data.writeInterfaceToken(IActivityManager.descriptor);
3555         data.writeStrongBinder(who);
3556         data.writeInt(resultCode);
3557         data.writeString(resultData);
3558         data.writeBundle(map);
3559         data.writeInt(abortBroadcast ? 1 : 0);
3560         data.writeInt(flags);
3561         mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3562         reply.readException();
3563         data.recycle();
3564         reply.recycle();
3565     }
3566     public void attachApplication(IApplicationThread app) throws RemoteException
3567     {
3568         Parcel data = Parcel.obtain();
3569         Parcel reply = Parcel.obtain();
3570         data.writeInterfaceToken(IActivityManager.descriptor);
3571         data.writeStrongBinder(app.asBinder());
3572         mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
3573         reply.readException();
3574         data.recycle();
3575         reply.recycle();
3576     }
3577     public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
3578             throws RemoteException
3579     {
3580         Parcel data = Parcel.obtain();
3581         Parcel reply = Parcel.obtain();
3582         data.writeInterfaceToken(IActivityManager.descriptor);
3583         data.writeStrongBinder(token);
3584         if (config != null) {
3585             data.writeInt(1);
3586             config.writeToParcel(data, 0);
3587         } else {
3588             data.writeInt(0);
3589         }
3590         data.writeInt(stopProfiling ? 1 : 0);
3591         mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3592         reply.readException();
3593         data.recycle();
3594         reply.recycle();
3595     }
3596     public void activityResumed(IBinder token) throws RemoteException
3597     {
3598         Parcel data = Parcel.obtain();
3599         Parcel reply = Parcel.obtain();
3600         data.writeInterfaceToken(IActivityManager.descriptor);
3601         data.writeStrongBinder(token);
3602         mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
3603         reply.readException();
3604         data.recycle();
3605         reply.recycle();
3606     }
3607     public void activityPaused(IBinder token) throws RemoteException
3608     {
3609         Parcel data = Parcel.obtain();
3610         Parcel reply = Parcel.obtain();
3611         data.writeInterfaceToken(IActivityManager.descriptor);
3612         data.writeStrongBinder(token);
3613         mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
3614         reply.readException();
3615         data.recycle();
3616         reply.recycle();
3617     }
3618     public void activityStopped(IBinder token, Bundle state,
3619             PersistableBundle persistentState, CharSequence description) throws RemoteException
3620     {
3621         Parcel data = Parcel.obtain();
3622         Parcel reply = Parcel.obtain();
3623         data.writeInterfaceToken(IActivityManager.descriptor);
3624         data.writeStrongBinder(token);
3625         data.writeBundle(state);
3626         data.writePersistableBundle(persistentState);
3627         TextUtils.writeToParcel(description, data, 0);
3628         mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3629         reply.readException();
3630         data.recycle();
3631         reply.recycle();
3632     }
3633     public void activitySlept(IBinder token) throws RemoteException
3634     {
3635         Parcel data = Parcel.obtain();
3636         Parcel reply = Parcel.obtain();
3637         data.writeInterfaceToken(IActivityManager.descriptor);
3638         data.writeStrongBinder(token);
3639         mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3640         reply.readException();
3641         data.recycle();
3642         reply.recycle();
3643     }
3644     public void activityDestroyed(IBinder token) throws RemoteException
3645     {
3646         Parcel data = Parcel.obtain();
3647         Parcel reply = Parcel.obtain();
3648         data.writeInterfaceToken(IActivityManager.descriptor);
3649         data.writeStrongBinder(token);
3650         mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3651         reply.readException();
3652         data.recycle();
3653         reply.recycle();
3654     }
3655     public void activityRelaunched(IBinder token) throws RemoteException
3656     {
3657         Parcel data = Parcel.obtain();
3658         Parcel reply = Parcel.obtain();
3659         data.writeInterfaceToken(IActivityManager.descriptor);
3660         data.writeStrongBinder(token);
3661         mRemote.transact(ACTIVITY_RELAUNCHED_TRANSACTION, data, reply, 0);
3662         reply.readException();
3663         data.recycle();
3664         reply.recycle();
3665     }
3666     public String getCallingPackage(IBinder token) throws RemoteException
3667     {
3668         Parcel data = Parcel.obtain();
3669         Parcel reply = Parcel.obtain();
3670         data.writeInterfaceToken(IActivityManager.descriptor);
3671         data.writeStrongBinder(token);
3672         mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
3673         reply.readException();
3674         String res = reply.readString();
3675         data.recycle();
3676         reply.recycle();
3677         return res;
3678     }
3679     public ComponentName getCallingActivity(IBinder token)
3680             throws RemoteException {
3681         Parcel data = Parcel.obtain();
3682         Parcel reply = Parcel.obtain();
3683         data.writeInterfaceToken(IActivityManager.descriptor);
3684         data.writeStrongBinder(token);
3685         mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
3686         reply.readException();
3687         ComponentName res = ComponentName.readFromParcel(reply);
3688         data.recycle();
3689         reply.recycle();
3690         return res;
3691     }
3692     public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
3693         Parcel data = Parcel.obtain();
3694         Parcel reply = Parcel.obtain();
3695         data.writeInterfaceToken(IActivityManager.descriptor);
3696         data.writeString(callingPackage);
3697         mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
3698         reply.readException();
3699         ArrayList<IAppTask> list = null;
3700         int N = reply.readInt();
3701         if (N >= 0) {
3702             list = new ArrayList<>();
3703             while (N > 0) {
3704                 IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
3705                 list.add(task);
3706                 N--;
3707             }
3708         }
3709         data.recycle();
3710         reply.recycle();
3711         return list;
3712     }
3713     public int addAppTask(IBinder activityToken, Intent intent,
3714             ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
3715         Parcel data = Parcel.obtain();
3716         Parcel reply = Parcel.obtain();
3717         data.writeInterfaceToken(IActivityManager.descriptor);
3718         data.writeStrongBinder(activityToken);
3719         intent.writeToParcel(data, 0);
3720         description.writeToParcel(data, 0);
3721         thumbnail.writeToParcel(data, 0);
3722         mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
3723         reply.readException();
3724         int res = reply.readInt();
3725         data.recycle();
3726         reply.recycle();
3727         return res;
3728     }
3729     public Point getAppTaskThumbnailSize() throws RemoteException {
3730         Parcel data = Parcel.obtain();
3731         Parcel reply = Parcel.obtain();
3732         data.writeInterfaceToken(IActivityManager.descriptor);
3733         mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
3734         reply.readException();
3735         Point size = Point.CREATOR.createFromParcel(reply);
3736         data.recycle();
3737         reply.recycle();
3738         return size;
3739     }
3740     public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, int flags)
3741             throws RemoteException {
3742         Parcel data = Parcel.obtain();
3743         Parcel reply = Parcel.obtain();
3744         data.writeInterfaceToken(IActivityManager.descriptor);
3745         data.writeInt(maxNum);
3746         data.writeInt(flags);
3747         mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
3748         reply.readException();
3749         ArrayList<ActivityManager.RunningTaskInfo> list = null;
3750         int N = reply.readInt();
3751         if (N >= 0) {
3752             list = new ArrayList<>();
3753             while (N > 0) {
3754                 ActivityManager.RunningTaskInfo info =
3755                         ActivityManager.RunningTaskInfo.CREATOR
3756                                 .createFromParcel(reply);
3757                 list.add(info);
3758                 N--;
3759             }
3760         }
3761         data.recycle();
3762         reply.recycle();
3763         return list;
3764     }
3765     public ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
3766             int flags, int userId) throws RemoteException {
3767         Parcel data = Parcel.obtain();
3768         Parcel reply = Parcel.obtain();
3769         data.writeInterfaceToken(IActivityManager.descriptor);
3770         data.writeInt(maxNum);
3771         data.writeInt(flags);
3772         data.writeInt(userId);
3773         mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
3774         reply.readException();
3775         final ParceledListSlice<ActivityManager.RecentTaskInfo> list = ParceledListSlice.CREATOR
3776                 .createFromParcel(reply);
3777         data.recycle();
3778         reply.recycle();
3779         return list;
3780     }
3781     public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
3782         Parcel data = Parcel.obtain();
3783         Parcel reply = Parcel.obtain();
3784         data.writeInterfaceToken(IActivityManager.descriptor);
3785         data.writeInt(id);
3786         mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
3787         reply.readException();
3788         ActivityManager.TaskThumbnail taskThumbnail = null;
3789         if (reply.readInt() != 0) {
3790             taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
3791         }
3792         data.recycle();
3793         reply.recycle();
3794         return taskThumbnail;
3795     }
3796     public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
3797             throws RemoteException {
3798         Parcel data = Parcel.obtain();
3799         Parcel reply = Parcel.obtain();
3800         data.writeInterfaceToken(IActivityManager.descriptor);
3801         data.writeInt(maxNum);
3802         data.writeInt(flags);
3803         mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
3804         reply.readException();
3805         ArrayList<ActivityManager.RunningServiceInfo> list = null;
3806         int N = reply.readInt();
3807         if (N >= 0) {
3808             list = new ArrayList<>();
3809             while (N > 0) {
3810                 ActivityManager.RunningServiceInfo info =
3811                         ActivityManager.RunningServiceInfo.CREATOR
3812                         .createFromParcel(reply);
3813                 list.add(info);
3814                 N--;
3815             }
3816         }
3817         data.recycle();
3818         reply.recycle();
3819         return list;
3820     }
3821     public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
3822             throws RemoteException {
3823         Parcel data = Parcel.obtain();
3824         Parcel reply = Parcel.obtain();
3825         data.writeInterfaceToken(IActivityManager.descriptor);
3826         mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
3827         reply.readException();
3828         ArrayList<ActivityManager.ProcessErrorStateInfo> list
3829             = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
3830         data.recycle();
3831         reply.recycle();
3832         return list;
3833     }
3834     public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
3835             throws RemoteException {
3836         Parcel data = Parcel.obtain();
3837         Parcel reply = Parcel.obtain();
3838         data.writeInterfaceToken(IActivityManager.descriptor);
3839         mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
3840         reply.readException();
3841         ArrayList<ActivityManager.RunningAppProcessInfo> list
3842         = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
3843         data.recycle();
3844         reply.recycle();
3845         return list;
3846     }
3847     public List<ApplicationInfo> getRunningExternalApplications()
3848             throws RemoteException {
3849         Parcel data = Parcel.obtain();
3850         Parcel reply = Parcel.obtain();
3851         data.writeInterfaceToken(IActivityManager.descriptor);
3852         mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
3853         reply.readException();
3854         ArrayList<ApplicationInfo> list
3855         = reply.createTypedArrayList(ApplicationInfo.CREATOR);
3856         data.recycle();
3857         reply.recycle();
3858         return list;
3859     }
3860     public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
3861     {
3862         Parcel data = Parcel.obtain();
3863         Parcel reply = Parcel.obtain();
3864         data.writeInterfaceToken(IActivityManager.descriptor);
3865         data.writeInt(task);
3866         data.writeInt(flags);
3867         if (options != null) {
3868             data.writeInt(1);
3869             options.writeToParcel(data, 0);
3870         } else {
3871             data.writeInt(0);
3872         }
3873         mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
3874         reply.readException();
3875         data.recycle();
3876         reply.recycle();
3877     }
3878     public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
3879             throws RemoteException {
3880         Parcel data = Parcel.obtain();
3881         Parcel reply = Parcel.obtain();
3882         data.writeInterfaceToken(IActivityManager.descriptor);
3883         data.writeStrongBinder(token);
3884         data.writeInt(nonRoot ? 1 : 0);
3885         mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3886         reply.readException();
3887         boolean res = reply.readInt() != 0;
3888         data.recycle();
3889         reply.recycle();
3890         return res;
3891     }
3892     public void moveTaskBackwards(int task) throws RemoteException
3893     {
3894         Parcel data = Parcel.obtain();
3895         Parcel reply = Parcel.obtain();
3896         data.writeInterfaceToken(IActivityManager.descriptor);
3897         data.writeInt(task);
3898         mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
3899         reply.readException();
3900         data.recycle();
3901         reply.recycle();
3902     }
3903     @Override
3904     public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
3905     {
3906         Parcel data = Parcel.obtain();
3907         Parcel reply = Parcel.obtain();
3908         data.writeInterfaceToken(IActivityManager.descriptor);
3909         data.writeInt(taskId);
3910         data.writeInt(stackId);
3911         data.writeInt(toTop ? 1 : 0);
3912         mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
3913         reply.readException();
3914         data.recycle();
3915         reply.recycle();
3916     }
3917     @Override
3918     public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate,
3919             Rect initialBounds, boolean moveHomeStackFront) throws RemoteException
3920     {
3921         Parcel data = Parcel.obtain();
3922         Parcel reply = Parcel.obtain();
3923         data.writeInterfaceToken(IActivityManager.descriptor);
3924         data.writeInt(taskId);
3925         data.writeInt(createMode);
3926         data.writeInt(toTop ? 1 : 0);
3927         data.writeInt(animate ? 1 : 0);
3928         if (initialBounds != null) {
3929             data.writeInt(1);
3930             initialBounds.writeToParcel(data, 0);
3931         } else {
3932             data.writeInt(0);
3933         }
3934         data.writeInt(moveHomeStackFront ? 1 : 0);
3935         mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0);
3936         reply.readException();
3937         boolean res = reply.readInt() > 0;
3938         data.recycle();
3939         reply.recycle();
3940         return res;
3941     }
3942     @Override
3943     public boolean moveTopActivityToPinnedStack(int stackId, Rect r)
3944         throws RemoteException
3945     {
3946         Parcel data = Parcel.obtain();
3947         Parcel reply = Parcel.obtain();
3948         data.writeInterfaceToken(IActivityManager.descriptor);
3949         data.writeInt(stackId);
3950         r.writeToParcel(data, 0);
3951         mRemote.transact(MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION, data, reply, 0);
3952         reply.readException();
3953         final boolean res = reply.readInt() != 0;
3954         data.recycle();
3955         reply.recycle();
3956         return res;
3957     }
3958     @Override
3959     public void resizeStack(int stackId, Rect r, boolean allowResizeInDockedMode,
3960             boolean preserveWindows, boolean animate, int animationDuration)
3961             throws RemoteException {
3962         Parcel data = Parcel.obtain();
3963         Parcel reply = Parcel.obtain();
3964         data.writeInterfaceToken(IActivityManager.descriptor);
3965         data.writeInt(stackId);
3966         if (r != null) {
3967             data.writeInt(1);
3968             r.writeToParcel(data, 0);
3969         } else {
3970             data.writeInt(0);
3971         }
3972         data.writeInt(allowResizeInDockedMode ? 1 : 0);
3973         data.writeInt(preserveWindows ? 1 : 0);
3974         data.writeInt(animate ? 1 : 0);
3975         data.writeInt(animationDuration);
3976         mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0);
3977         reply.readException();
3978         data.recycle();
3979         reply.recycle();
3980     }
3981     @Override
3982     public void swapDockedAndFullscreenStack() throws RemoteException
3983     {
3984         Parcel data = Parcel.obtain();
3985         Parcel reply = Parcel.obtain();
3986         data.writeInterfaceToken(IActivityManager.descriptor);
3987         mRemote.transact(SWAP_DOCKED_AND_FULLSCREEN_STACK, data, reply, 0);
3988         reply.readException();
3989         data.recycle();
3990         reply.recycle();
3991     }
3992     @Override
3993     public void resizeDockedStack(Rect dockedBounds, Rect tempDockedTaskBounds,
3994             Rect tempDockedTaskInsetBounds,
3995             Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds)
3996             throws RemoteException
3997     {
3998         Parcel data = Parcel.obtain();
3999         Parcel reply = Parcel.obtain();
4000         data.writeInterfaceToken(IActivityManager.descriptor);
4001         if (dockedBounds != null) {
4002             data.writeInt(1);
4003             dockedBounds.writeToParcel(data, 0);
4004         } else {
4005             data.writeInt(0);
4006         }
4007         if (tempDockedTaskBounds != null) {
4008             data.writeInt(1);
4009             tempDockedTaskBounds.writeToParcel(data, 0);
4010         } else {
4011             data.writeInt(0);
4012         }
4013         if (tempDockedTaskInsetBounds != null) {
4014             data.writeInt(1);
4015             tempDockedTaskInsetBounds.writeToParcel(data, 0);
4016         } else {
4017             data.writeInt(0);
4018         }
4019         if (tempOtherTaskBounds != null) {
4020             data.writeInt(1);
4021             tempOtherTaskBounds.writeToParcel(data, 0);
4022         } else {
4023             data.writeInt(0);
4024         }
4025         if (tempOtherTaskInsetBounds != null) {
4026             data.writeInt(1);
4027             tempOtherTaskInsetBounds.writeToParcel(data, 0);
4028         } else {
4029             data.writeInt(0);
4030         }
4031         mRemote.transact(RESIZE_DOCKED_STACK_TRANSACTION, data, reply, 0);
4032         reply.readException();
4033         data.recycle();
4034         reply.recycle();
4035     }
4036
4037     @Override
4038     public void resizePinnedStack(Rect pinnedBounds, Rect tempPinnedTaskBounds) throws RemoteException
4039     {
4040         Parcel data = Parcel.obtain();
4041         Parcel reply = Parcel.obtain();
4042         data.writeInterfaceToken(IActivityManager.descriptor);
4043         if (pinnedBounds != null) {
4044             data.writeInt(1);
4045             pinnedBounds.writeToParcel(data, 0);
4046         } else {
4047             data.writeInt(0);
4048         }
4049         if (tempPinnedTaskBounds != null) {
4050             data.writeInt(1);
4051             tempPinnedTaskBounds.writeToParcel(data, 0);
4052         } else {
4053             data.writeInt(0);
4054         }
4055         mRemote.transact(RESIZE_PINNED_STACK_TRANSACTION, data, reply, 0);
4056         reply.readException();
4057         data.recycle();
4058         reply.recycle();
4059     }
4060
4061     @Override
4062     public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException
4063     {
4064         Parcel data = Parcel.obtain();
4065         Parcel reply = Parcel.obtain();
4066         data.writeInterfaceToken(IActivityManager.descriptor);
4067         data.writeInt(taskId);
4068         data.writeInt(stackId);
4069         data.writeInt(position);
4070         mRemote.transact(POSITION_TASK_IN_STACK_TRANSACTION, data, reply, 0);
4071         reply.readException();
4072         data.recycle();
4073         reply.recycle();
4074     }
4075     @Override
4076     public List<StackInfo> getAllStackInfos() throws RemoteException
4077     {
4078         Parcel data = Parcel.obtain();
4079         Parcel reply = Parcel.obtain();
4080         data.writeInterfaceToken(IActivityManager.descriptor);
4081         mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
4082         reply.readException();
4083         ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
4084         data.recycle();
4085         reply.recycle();
4086         return list;
4087     }
4088     @Override
4089     public StackInfo getStackInfo(int stackId) throws RemoteException
4090     {
4091         Parcel data = Parcel.obtain();
4092         Parcel reply = Parcel.obtain();
4093         data.writeInterfaceToken(IActivityManager.descriptor);
4094         data.writeInt(stackId);
4095         mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
4096         reply.readException();
4097         int res = reply.readInt();
4098         StackInfo info = null;
4099         if (res != 0) {
4100             info = StackInfo.CREATOR.createFromParcel(reply);
4101         }
4102         data.recycle();
4103         reply.recycle();
4104         return info;
4105     }
4106     @Override
4107     public boolean isInHomeStack(int taskId) throws RemoteException {
4108         Parcel data = Parcel.obtain();
4109         Parcel reply = Parcel.obtain();
4110         data.writeInterfaceToken(IActivityManager.descriptor);
4111         data.writeInt(taskId);
4112         mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
4113         reply.readException();
4114         boolean isInHomeStack = reply.readInt() > 0;
4115         data.recycle();
4116         reply.recycle();
4117         return isInHomeStack;
4118     }
4119     @Override
4120     public void setFocusedStack(int stackId) throws RemoteException
4121     {
4122         Parcel data = Parcel.obtain();
4123         Parcel reply = Parcel.obtain();
4124         data.writeInterfaceToken(IActivityManager.descriptor);
4125         data.writeInt(stackId);
4126         mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0);
4127         reply.readException();
4128         data.recycle();
4129         reply.recycle();
4130     }
4131     @Override
4132     public int getFocusedStackId() throws RemoteException {
4133         Parcel data = Parcel.obtain();
4134         Parcel reply = Parcel.obtain();
4135         data.writeInterfaceToken(IActivityManager.descriptor);
4136         mRemote.transact(GET_FOCUSED_STACK_ID_TRANSACTION, data, reply, 0);
4137         reply.readException();
4138         int focusedStackId = reply.readInt();
4139         data.recycle();
4140         reply.recycle();
4141         return focusedStackId;
4142     }
4143     @Override
4144     public void setFocusedTask(int taskId) throws RemoteException
4145     {
4146         Parcel data = Parcel.obtain();
4147         Parcel reply = Parcel.obtain();
4148         data.writeInterfaceToken(IActivityManager.descriptor);
4149         data.writeInt(taskId);
4150         mRemote.transact(SET_FOCUSED_TASK_TRANSACTION, data, reply, 0);
4151         reply.readException();
4152         data.recycle();
4153         reply.recycle();
4154     }
4155     @Override
4156     public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException
4157     {
4158         Parcel data = Parcel.obtain();
4159         Parcel reply = Parcel.obtain();
4160         data.writeInterfaceToken(IActivityManager.descriptor);
4161         data.writeStrongBinder(listener.asBinder());
4162         mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0);
4163         reply.readException();
4164         data.recycle();
4165         reply.recycle();
4166     }
4167     public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
4168     {
4169         Parcel data = Parcel.obtain();
4170         Parcel reply = Parcel.obtain();
4171         data.writeInterfaceToken(IActivityManager.descriptor);
4172         data.writeStrongBinder(token);
4173         data.writeInt(onlyRoot ? 1 : 0);
4174         mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
4175         reply.readException();
4176         int res = reply.readInt();
4177         data.recycle();
4178         reply.recycle();
4179         return res;
4180     }
4181     public ContentProviderHolder getContentProvider(IApplicationThread caller,
4182             String name, int userId, boolean stable) throws RemoteException {
4183         Parcel data = Parcel.obtain();
4184         Parcel reply = Parcel.obtain();
4185         data.writeInterfaceToken(IActivityManager.descriptor);
4186         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4187         data.writeString(name);
4188         data.writeInt(userId);
4189         data.writeInt(stable ? 1 : 0);
4190         mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4191         reply.readException();
4192         int res = reply.readInt();
4193         ContentProviderHolder cph = null;
4194         if (res != 0) {
4195             cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4196         }
4197         data.recycle();
4198         reply.recycle();
4199         return cph;
4200     }
4201     public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
4202             throws RemoteException {
4203         Parcel data = Parcel.obtain();
4204         Parcel reply = Parcel.obtain();
4205         data.writeInterfaceToken(IActivityManager.descriptor);
4206         data.writeString(name);
4207         data.writeInt(userId);
4208         data.writeStrongBinder(token);
4209         mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4210         reply.readException();
4211         int res = reply.readInt();
4212         ContentProviderHolder cph = null;
4213         if (res != 0) {
4214             cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4215         }
4216         data.recycle();
4217         reply.recycle();
4218         return cph;
4219     }
4220     public void publishContentProviders(IApplicationThread caller,
4221             List<ContentProviderHolder> providers) throws RemoteException
4222     {
4223         Parcel data = Parcel.obtain();
4224         Parcel reply = Parcel.obtain();
4225         data.writeInterfaceToken(IActivityManager.descriptor);
4226         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4227         data.writeTypedList(providers);
4228         mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
4229         reply.readException();
4230         data.recycle();
4231         reply.recycle();
4232     }
4233     public boolean refContentProvider(IBinder connection, int stable, int unstable)
4234             throws RemoteException {
4235         Parcel data = Parcel.obtain();
4236         Parcel reply = Parcel.obtain();
4237         data.writeInterfaceToken(IActivityManager.descriptor);
4238         data.writeStrongBinder(connection);
4239         data.writeInt(stable);
4240         data.writeInt(unstable);
4241         mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4242         reply.readException();
4243         boolean res = reply.readInt() != 0;
4244         data.recycle();
4245         reply.recycle();
4246         return res;
4247     }
4248
4249     public void unstableProviderDied(IBinder connection) throws RemoteException {
4250         Parcel data = Parcel.obtain();
4251         Parcel reply = Parcel.obtain();
4252         data.writeInterfaceToken(IActivityManager.descriptor);
4253         data.writeStrongBinder(connection);
4254         mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
4255         reply.readException();
4256         data.recycle();
4257         reply.recycle();
4258     }
4259
4260     @Override
4261     public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
4262         Parcel data = Parcel.obtain();
4263         Parcel reply = Parcel.obtain();
4264         data.writeInterfaceToken(IActivityManager.descriptor);
4265         data.writeStrongBinder(connection);
4266         mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
4267         reply.readException();
4268         data.recycle();
4269         reply.recycle();
4270     }
4271
4272     public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
4273         Parcel data = Parcel.obtain();
4274         Parcel reply = Parcel.obtain();
4275         data.writeInterfaceToken(IActivityManager.descriptor);
4276         data.writeStrongBinder(connection);
4277         data.writeInt(stable ? 1 : 0);
4278         mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4279         reply.readException();
4280         data.recycle();
4281         reply.recycle();
4282     }
4283
4284     public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
4285         Parcel data = Parcel.obtain();
4286         Parcel reply = Parcel.obtain();
4287         data.writeInterfaceToken(IActivityManager.descriptor);
4288         data.writeString(name);
4289         data.writeStrongBinder(token);
4290         mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4291         reply.readException();
4292         data.recycle();
4293         reply.recycle();
4294     }
4295
4296     public PendingIntent getRunningServiceControlPanel(ComponentName service)
4297             throws RemoteException
4298     {
4299         Parcel data = Parcel.obtain();
4300         Parcel reply = Parcel.obtain();
4301         data.writeInterfaceToken(IActivityManager.descriptor);
4302         service.writeToParcel(data, 0);
4303         mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
4304         reply.readException();
4305         PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
4306         data.recycle();
4307         reply.recycle();
4308         return res;
4309     }
4310
4311     public ComponentName startService(IApplicationThread caller, Intent service,
4312             String resolvedType, String callingPackage, int userId) throws RemoteException
4313     {
4314         Parcel data = Parcel.obtain();
4315         Parcel reply = Parcel.obtain();
4316         data.writeInterfaceToken(IActivityManager.descriptor);
4317         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4318         service.writeToParcel(data, 0);
4319         data.writeString(resolvedType);
4320         data.writeString(callingPackage);
4321         data.writeInt(userId);
4322         mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
4323         reply.readException();
4324         ComponentName res = ComponentName.readFromParcel(reply);
4325         data.recycle();
4326         reply.recycle();
4327         return res;
4328     }
4329     public int stopService(IApplicationThread caller, Intent service,
4330             String resolvedType, int userId) throws RemoteException
4331     {
4332         Parcel data = Parcel.obtain();
4333         Parcel reply = Parcel.obtain();
4334         data.writeInterfaceToken(IActivityManager.descriptor);
4335         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4336         service.writeToParcel(data, 0);
4337         data.writeString(resolvedType);
4338         data.writeInt(userId);
4339         mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
4340         reply.readException();
4341         int res = reply.readInt();
4342         reply.recycle();
4343         data.recycle();
4344         return res;
4345     }
4346     public boolean stopServiceToken(ComponentName className, IBinder token,
4347             int startId) throws RemoteException {
4348         Parcel data = Parcel.obtain();
4349         Parcel reply = Parcel.obtain();
4350         data.writeInterfaceToken(IActivityManager.descriptor);
4351         ComponentName.writeToParcel(className, data);
4352         data.writeStrongBinder(token);
4353         data.writeInt(startId);
4354         mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
4355         reply.readException();
4356         boolean res = reply.readInt() != 0;
4357         data.recycle();
4358         reply.recycle();
4359         return res;
4360     }
4361     public void setServiceForeground(ComponentName className, IBinder token,
4362             int id, Notification notification, int flags) throws RemoteException {
4363         Parcel data = Parcel.obtain();
4364         Parcel reply = Parcel.obtain();
4365         data.writeInterfaceToken(IActivityManager.descriptor);
4366         ComponentName.writeToParcel(className, data);
4367         data.writeStrongBinder(token);
4368         data.writeInt(id);
4369         if (notification != null) {
4370             data.writeInt(1);
4371             notification.writeToParcel(data, 0);
4372         } else {
4373             data.writeInt(0);
4374         }
4375         data.writeInt(flags);
4376         mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
4377         reply.readException();
4378         data.recycle();
4379         reply.recycle();
4380     }
4381     public int bindService(IApplicationThread caller, IBinder token,
4382             Intent service, String resolvedType, IServiceConnection connection,
4383             int flags,  String callingPackage, int userId) throws RemoteException {
4384         Parcel data = Parcel.obtain();
4385         Parcel reply = Parcel.obtain();
4386         data.writeInterfaceToken(IActivityManager.descriptor);
4387         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4388         data.writeStrongBinder(token);
4389         service.writeToParcel(data, 0);
4390         data.writeString(resolvedType);
4391         data.writeStrongBinder(connection.asBinder());
4392         data.writeInt(flags);
4393         data.writeString(callingPackage);
4394         data.writeInt(userId);
4395         mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
4396         reply.readException();
4397         int res = reply.readInt();
4398         data.recycle();
4399         reply.recycle();
4400         return res;
4401     }
4402     public boolean unbindService(IServiceConnection connection) throws RemoteException
4403     {
4404         Parcel data = Parcel.obtain();
4405         Parcel reply = Parcel.obtain();
4406         data.writeInterfaceToken(IActivityManager.descriptor);
4407         data.writeStrongBinder(connection.asBinder());
4408         mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
4409         reply.readException();
4410         boolean res = reply.readInt() != 0;
4411         data.recycle();
4412         reply.recycle();
4413         return res;
4414     }
4415
4416     public void publishService(IBinder token,
4417             Intent intent, IBinder service) throws RemoteException {
4418         Parcel data = Parcel.obtain();
4419         Parcel reply = Parcel.obtain();
4420         data.writeInterfaceToken(IActivityManager.descriptor);
4421         data.writeStrongBinder(token);
4422         intent.writeToParcel(data, 0);
4423         data.writeStrongBinder(service);
4424         mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
4425         reply.readException();
4426         data.recycle();
4427         reply.recycle();
4428     }
4429
4430     public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
4431             throws RemoteException {
4432         Parcel data = Parcel.obtain();
4433         Parcel reply = Parcel.obtain();
4434         data.writeInterfaceToken(IActivityManager.descriptor);
4435         data.writeStrongBinder(token);
4436         intent.writeToParcel(data, 0);
4437         data.writeInt(doRebind ? 1 : 0);
4438         mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
4439         reply.readException();
4440         data.recycle();
4441         reply.recycle();
4442     }
4443
4444     public void serviceDoneExecuting(IBinder token, int type, int startId,
4445             int res) throws RemoteException {
4446         Parcel data = Parcel.obtain();
4447         Parcel reply = Parcel.obtain();
4448         data.writeInterfaceToken(IActivityManager.descriptor);
4449         data.writeStrongBinder(token);
4450         data.writeInt(type);
4451         data.writeInt(startId);
4452         data.writeInt(res);
4453         mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
4454         reply.readException();
4455         data.recycle();
4456         reply.recycle();
4457     }
4458
4459     public IBinder peekService(Intent service, String resolvedType, String callingPackage)
4460             throws RemoteException {
4461         Parcel data = Parcel.obtain();
4462         Parcel reply = Parcel.obtain();
4463         data.writeInterfaceToken(IActivityManager.descriptor);
4464         service.writeToParcel(data, 0);
4465         data.writeString(resolvedType);
4466         data.writeString(callingPackage);
4467         mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
4468         reply.readException();
4469         IBinder binder = reply.readStrongBinder();
4470         reply.recycle();
4471         data.recycle();
4472         return binder;
4473     }
4474
4475     public boolean bindBackupAgent(String packageName, int backupRestoreMode, int userId)
4476             throws RemoteException {
4477         Parcel data = Parcel.obtain();
4478         Parcel reply = Parcel.obtain();
4479         data.writeInterfaceToken(IActivityManager.descriptor);
4480         data.writeString(packageName);
4481         data.writeInt(backupRestoreMode);
4482         data.writeInt(userId);
4483         mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4484         reply.readException();
4485         boolean success = reply.readInt() != 0;
4486         reply.recycle();
4487         data.recycle();
4488         return success;
4489     }
4490
4491     public void clearPendingBackup() throws RemoteException {
4492         Parcel data = Parcel.obtain();
4493         Parcel reply = Parcel.obtain();
4494         data.writeInterfaceToken(IActivityManager.descriptor);
4495         mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
4496         reply.recycle();
4497         data.recycle();
4498     }
4499
4500     public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
4501         Parcel data = Parcel.obtain();
4502         Parcel reply = Parcel.obtain();
4503         data.writeInterfaceToken(IActivityManager.descriptor);
4504         data.writeString(packageName);
4505         data.writeStrongBinder(agent);
4506         mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
4507         reply.recycle();
4508         data.recycle();
4509     }
4510
4511     public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
4512         Parcel data = Parcel.obtain();
4513         Parcel reply = Parcel.obtain();
4514         data.writeInterfaceToken(IActivityManager.descriptor);
4515         app.writeToParcel(data, 0);
4516         mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4517         reply.readException();
4518         reply.recycle();
4519         data.recycle();
4520     }
4521
4522     public boolean startInstrumentation(ComponentName className, String profileFile,
4523             int flags, Bundle arguments, IInstrumentationWatcher watcher,
4524             IUiAutomationConnection connection, int userId, String instructionSet)
4525             throws RemoteException {
4526         Parcel data = Parcel.obtain();
4527         Parcel reply = Parcel.obtain();
4528         data.writeInterfaceToken(IActivityManager.descriptor);
4529         ComponentName.writeToParcel(className, data);
4530         data.writeString(profileFile);
4531         data.writeInt(flags);
4532         data.writeBundle(arguments);
4533         data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4534         data.writeStrongBinder(connection != null ? connection.asBinder() : null);
4535         data.writeInt(userId);
4536         data.writeString(instructionSet);
4537         mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4538         reply.readException();
4539         boolean res = reply.readInt() != 0;
4540         reply.recycle();
4541         data.recycle();
4542         return res;
4543     }
4544
4545     public void finishInstrumentation(IApplicationThread target,
4546             int resultCode, Bundle results) throws RemoteException {
4547         Parcel data = Parcel.obtain();
4548         Parcel reply = Parcel.obtain();
4549         data.writeInterfaceToken(IActivityManager.descriptor);
4550         data.writeStrongBinder(target != null ? target.asBinder() : null);
4551         data.writeInt(resultCode);
4552         data.writeBundle(results);
4553         mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4554         reply.readException();
4555         data.recycle();
4556         reply.recycle();
4557     }
4558     public Configuration getConfiguration() throws RemoteException
4559     {
4560         Parcel data = Parcel.obtain();
4561         Parcel reply = Parcel.obtain();
4562         data.writeInterfaceToken(IActivityManager.descriptor);
4563         mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
4564         reply.readException();
4565         Configuration res = Configuration.CREATOR.createFromParcel(reply);
4566         reply.recycle();
4567         data.recycle();
4568         return res;
4569     }
4570     public void updateConfiguration(Configuration values) throws RemoteException
4571     {
4572         Parcel data = Parcel.obtain();
4573         Parcel reply = Parcel.obtain();
4574         data.writeInterfaceToken(IActivityManager.descriptor);
4575         values.writeToParcel(data, 0);
4576         mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
4577         reply.readException();
4578         data.recycle();
4579         reply.recycle();
4580     }
4581     public void setRequestedOrientation(IBinder token, int requestedOrientation)
4582             throws RemoteException {
4583         Parcel data = Parcel.obtain();
4584         Parcel reply = Parcel.obtain();
4585         data.writeInterfaceToken(IActivityManager.descriptor);
4586         data.writeStrongBinder(token);
4587         data.writeInt(requestedOrientation);
4588         mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4589         reply.readException();
4590         data.recycle();
4591         reply.recycle();
4592     }
4593     public int getRequestedOrientation(IBinder token) throws RemoteException {
4594         Parcel data = Parcel.obtain();
4595         Parcel reply = Parcel.obtain();
4596         data.writeInterfaceToken(IActivityManager.descriptor);
4597         data.writeStrongBinder(token);
4598         mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4599         reply.readException();
4600         int res = reply.readInt();
4601         data.recycle();
4602         reply.recycle();
4603         return res;
4604     }
4605     public ComponentName getActivityClassForToken(IBinder token)
4606             throws RemoteException {
4607         Parcel data = Parcel.obtain();
4608         Parcel reply = Parcel.obtain();
4609         data.writeInterfaceToken(IActivityManager.descriptor);
4610         data.writeStrongBinder(token);
4611         mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
4612         reply.readException();
4613         ComponentName res = ComponentName.readFromParcel(reply);
4614         data.recycle();
4615         reply.recycle();
4616         return res;
4617     }
4618     public String getPackageForToken(IBinder token) throws RemoteException
4619     {
4620         Parcel data = Parcel.obtain();
4621         Parcel reply = Parcel.obtain();
4622         data.writeInterfaceToken(IActivityManager.descriptor);
4623         data.writeStrongBinder(token);
4624         mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
4625         reply.readException();
4626         String res = reply.readString();
4627         data.recycle();
4628         reply.recycle();
4629         return res;
4630     }
4631     public IIntentSender getIntentSender(int type,
4632             String packageName, IBinder token, String resultWho,
4633             int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
4634             Bundle options, int userId) throws RemoteException {
4635         Parcel data = Parcel.obtain();
4636         Parcel reply = Parcel.obtain();
4637         data.writeInterfaceToken(IActivityManager.descriptor);
4638         data.writeInt(type);
4639         data.writeString(packageName);
4640         data.writeStrongBinder(token);
4641         data.writeString(resultWho);
4642         data.writeInt(requestCode);
4643         if (intents != null) {
4644             data.writeInt(1);
4645             data.writeTypedArray(intents, 0);
4646             data.writeStringArray(resolvedTypes);
4647         } else {
4648             data.writeInt(0);
4649         }
4650         data.writeInt(flags);
4651         if (options != null) {
4652             data.writeInt(1);
4653             options.writeToParcel(data, 0);
4654         } else {
4655             data.writeInt(0);
4656         }
4657         data.writeInt(userId);
4658         mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
4659         reply.readException();
4660         IIntentSender res = IIntentSender.Stub.asInterface(
4661                 reply.readStrongBinder());
4662         data.recycle();
4663         reply.recycle();
4664         return res;
4665     }
4666     public void cancelIntentSender(IIntentSender sender) throws RemoteException {
4667         Parcel data = Parcel.obtain();
4668         Parcel reply = Parcel.obtain();
4669         data.writeInterfaceToken(IActivityManager.descriptor);
4670         data.writeStrongBinder(sender.asBinder());
4671         mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
4672         reply.readException();
4673         data.recycle();
4674         reply.recycle();
4675     }
4676     public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
4677         Parcel data = Parcel.obtain();
4678         Parcel reply = Parcel.obtain();
4679         data.writeInterfaceToken(IActivityManager.descriptor);
4680         data.writeStrongBinder(sender.asBinder());
4681         mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4682         reply.readException();
4683         String res = reply.readString();
4684         data.recycle();
4685         reply.recycle();
4686         return res;
4687     }
4688     public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
4689         Parcel data = Parcel.obtain();
4690         Parcel reply = Parcel.obtain();
4691         data.writeInterfaceToken(IActivityManager.descriptor);
4692         data.writeStrongBinder(sender.asBinder());
4693         mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4694         reply.readException();
4695         int res = reply.readInt();
4696         data.recycle();
4697         reply.recycle();
4698         return res;
4699     }
4700     public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
4701             boolean requireFull, String name, String callerPackage) throws RemoteException {
4702         Parcel data = Parcel.obtain();
4703         Parcel reply = Parcel.obtain();
4704         data.writeInterfaceToken(IActivityManager.descriptor);
4705         data.writeInt(callingPid);
4706         data.writeInt(callingUid);
4707         data.writeInt(userId);
4708         data.writeInt(allowAll ? 1 : 0);
4709         data.writeInt(requireFull ? 1 : 0);
4710         data.writeString(name);
4711         data.writeString(callerPackage);
4712         mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
4713         reply.readException();
4714         int res = reply.readInt();
4715         data.recycle();
4716         reply.recycle();
4717         return res;
4718     }
4719     public void setProcessLimit(int max) throws RemoteException
4720     {
4721         Parcel data = Parcel.obtain();
4722         Parcel reply = Parcel.obtain();
4723         data.writeInterfaceToken(IActivityManager.descriptor);
4724         data.writeInt(max);
4725         mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4726         reply.readException();
4727         data.recycle();
4728         reply.recycle();
4729     }
4730     public int getProcessLimit() throws RemoteException
4731     {
4732         Parcel data = Parcel.obtain();
4733         Parcel reply = Parcel.obtain();
4734         data.writeInterfaceToken(IActivityManager.descriptor);
4735         mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4736         reply.readException();
4737         int res = reply.readInt();
4738         data.recycle();
4739         reply.recycle();
4740         return res;
4741     }
4742     public void setProcessForeground(IBinder token, int pid,
4743             boolean isForeground) throws RemoteException {
4744         Parcel data = Parcel.obtain();
4745         Parcel reply = Parcel.obtain();
4746         data.writeInterfaceToken(IActivityManager.descriptor);
4747         data.writeStrongBinder(token);
4748         data.writeInt(pid);
4749         data.writeInt(isForeground ? 1 : 0);
4750         mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
4751         reply.readException();
4752         data.recycle();
4753         reply.recycle();
4754     }
4755     public int checkPermission(String permission, int pid, int uid)
4756             throws RemoteException {
4757         Parcel data = Parcel.obtain();
4758         Parcel reply = Parcel.obtain();
4759         data.writeInterfaceToken(IActivityManager.descriptor);
4760         data.writeString(permission);
4761         data.writeInt(pid);
4762         data.writeInt(uid);
4763         mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
4764         reply.readException();
4765         int res = reply.readInt();
4766         data.recycle();
4767         reply.recycle();
4768         return res;
4769     }
4770     public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
4771             throws RemoteException {
4772         Parcel data = Parcel.obtain();
4773         Parcel reply = Parcel.obtain();
4774         data.writeInterfaceToken(IActivityManager.descriptor);
4775         data.writeString(permission);
4776         data.writeInt(pid);
4777         data.writeInt(uid);
4778         data.writeStrongBinder(callerToken);
4779         mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
4780         reply.readException();
4781         int res = reply.readInt();
4782         data.recycle();
4783         reply.recycle();
4784         return res;
4785     }
4786     public boolean clearApplicationUserData(final String packageName,
4787             final IPackageDataObserver observer, final int userId) throws RemoteException {
4788         Parcel data = Parcel.obtain();
4789         Parcel reply = Parcel.obtain();
4790         data.writeInterfaceToken(IActivityManager.descriptor);
4791         data.writeString(packageName);
4792         data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
4793         data.writeInt(userId);
4794         mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
4795         reply.readException();
4796         boolean res = reply.readInt() != 0;
4797         data.recycle();
4798         reply.recycle();
4799         return res;
4800     }
4801     public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
4802             IBinder callerToken) throws RemoteException {
4803         Parcel data = Parcel.obtain();
4804         Parcel reply = Parcel.obtain();
4805         data.writeInterfaceToken(IActivityManager.descriptor);
4806         uri.writeToParcel(data, 0);
4807         data.writeInt(pid);
4808         data.writeInt(uid);
4809         data.writeInt(mode);
4810         data.writeInt(userId);
4811         data.writeStrongBinder(callerToken);
4812         mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
4813         reply.readException();
4814         int res = reply.readInt();
4815         data.recycle();
4816         reply.recycle();
4817         return res;
4818     }
4819     public void grantUriPermission(IApplicationThread caller, String targetPkg,
4820             Uri uri, int mode, int userId) throws RemoteException {
4821         Parcel data = Parcel.obtain();
4822         Parcel reply = Parcel.obtain();
4823         data.writeInterfaceToken(IActivityManager.descriptor);
4824         data.writeStrongBinder(caller.asBinder());
4825         data.writeString(targetPkg);
4826         uri.writeToParcel(data, 0);
4827         data.writeInt(mode);
4828         data.writeInt(userId);
4829         mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4830         reply.readException();
4831         data.recycle();
4832         reply.recycle();
4833     }
4834     public void revokeUriPermission(IApplicationThread caller, Uri uri,
4835             int mode, int userId) throws RemoteException {
4836         Parcel data = Parcel.obtain();
4837         Parcel reply = Parcel.obtain();
4838         data.writeInterfaceToken(IActivityManager.descriptor);
4839         data.writeStrongBinder(caller.asBinder());
4840         uri.writeToParcel(data, 0);
4841         data.writeInt(mode);
4842         data.writeInt(userId);
4843         mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4844         reply.readException();
4845         data.recycle();
4846         reply.recycle();
4847     }
4848
4849     @Override
4850     public void takePersistableUriPermission(Uri uri, int mode, int userId)
4851             throws RemoteException {
4852         Parcel data = Parcel.obtain();
4853         Parcel reply = Parcel.obtain();
4854         data.writeInterfaceToken(IActivityManager.descriptor);
4855         uri.writeToParcel(data, 0);
4856         data.writeInt(mode);
4857         data.writeInt(userId);
4858         mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4859         reply.readException();
4860         data.recycle();
4861         reply.recycle();
4862     }
4863
4864     @Override
4865     public void releasePersistableUriPermission(Uri uri, int mode, int userId)
4866             throws RemoteException {
4867         Parcel data = Parcel.obtain();
4868         Parcel reply = Parcel.obtain();
4869         data.writeInterfaceToken(IActivityManager.descriptor);
4870         uri.writeToParcel(data, 0);
4871         data.writeInt(mode);
4872         data.writeInt(userId);
4873         mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4874         reply.readException();
4875         data.recycle();
4876         reply.recycle();
4877     }
4878
4879     @Override
4880     public ParceledListSlice<UriPermission> getPersistedUriPermissions(
4881             String packageName, boolean incoming) throws RemoteException {
4882         Parcel data = Parcel.obtain();
4883         Parcel reply = Parcel.obtain();
4884         data.writeInterfaceToken(IActivityManager.descriptor);
4885         data.writeString(packageName);
4886         data.writeInt(incoming ? 1 : 0);
4887         mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4888         reply.readException();
4889         @SuppressWarnings("unchecked")
4890         final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4891                 reply);
4892         data.recycle();
4893         reply.recycle();
4894         return perms;
4895     }
4896
4897     @Override
4898     public ParceledListSlice<UriPermission> getGrantedUriPermissions(String packageName, int userId)
4899             throws RemoteException {
4900         Parcel data = Parcel.obtain();
4901         Parcel reply = Parcel.obtain();
4902         data.writeInterfaceToken(IActivityManager.descriptor);
4903         data.writeString(packageName);
4904         data.writeInt(userId);
4905         mRemote.transact(GET_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4906         reply.readException();
4907         @SuppressWarnings("unchecked")
4908         final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4909                 reply);
4910         data.recycle();
4911         reply.recycle();
4912         return perms;
4913     }
4914
4915     @Override
4916     public void clearGrantedUriPermissions(String packageName, int userId) throws RemoteException {
4917         Parcel data = Parcel.obtain();
4918         Parcel reply = Parcel.obtain();
4919         data.writeInterfaceToken(IActivityManager.descriptor);
4920         data.writeString(packageName);
4921         data.writeInt(userId);
4922         mRemote.transact(CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4923         reply.readException();
4924         data.recycle();
4925         reply.recycle();
4926     }
4927
4928     public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
4929             throws RemoteException {
4930         Parcel data = Parcel.obtain();
4931         Parcel reply = Parcel.obtain();
4932         data.writeInterfaceToken(IActivityManager.descriptor);
4933         data.writeStrongBinder(who.asBinder());
4934         data.writeInt(waiting ? 1 : 0);
4935         mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
4936         reply.readException();
4937         data.recycle();
4938         reply.recycle();
4939     }
4940     public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
4941         Parcel data = Parcel.obtain();
4942         Parcel reply = Parcel.obtain();
4943         data.writeInterfaceToken(IActivityManager.descriptor);
4944         mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
4945         reply.readException();
4946         outInfo.readFromParcel(reply);
4947         data.recycle();
4948         reply.recycle();
4949     }
4950     public void unhandledBack() throws RemoteException
4951     {
4952         Parcel data = Parcel.obtain();
4953         Parcel reply = Parcel.obtain();
4954         data.writeInterfaceToken(IActivityManager.descriptor);
4955         mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
4956         reply.readException();
4957         data.recycle();
4958         reply.recycle();
4959     }
4960     public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
4961     {
4962         Parcel data = Parcel.obtain();
4963         Parcel reply = Parcel.obtain();
4964         data.writeInterfaceToken(IActivityManager.descriptor);
4965         mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
4966         reply.readException();
4967         ParcelFileDescriptor pfd = null;
4968         if (reply.readInt() != 0) {
4969             pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
4970         }
4971         data.recycle();
4972         reply.recycle();
4973         return pfd;
4974     }
4975     public void setLockScreenShown(boolean showing, boolean occluded) throws RemoteException
4976     {
4977         Parcel data = Parcel.obtain();
4978         Parcel reply = Parcel.obtain();
4979         data.writeInterfaceToken(IActivityManager.descriptor);
4980         data.writeInt(showing ? 1 : 0);
4981         data.writeInt(occluded ? 1 : 0);
4982         mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
4983         reply.readException();
4984         data.recycle();
4985         reply.recycle();
4986     }
4987     public void setDebugApp(
4988         String packageName, boolean waitForDebugger, boolean persistent)
4989         throws RemoteException
4990     {
4991         Parcel data = Parcel.obtain();
4992         Parcel reply = Parcel.obtain();
4993         data.writeInterfaceToken(IActivityManager.descriptor);
4994         data.writeString(packageName);
4995         data.writeInt(waitForDebugger ? 1 : 0);
4996         data.writeInt(persistent ? 1 : 0);
4997         mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
4998         reply.readException();
4999         data.recycle();
5000         reply.recycle();
5001     }
5002     public void setAlwaysFinish(boolean enabled) throws RemoteException
5003     {
5004         Parcel data = Parcel.obtain();
5005         Parcel reply = Parcel.obtain();
5006         data.writeInterfaceToken(IActivityManager.descriptor);
5007         data.writeInt(enabled ? 1 : 0);
5008         mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
5009         reply.readException();
5010         data.recycle();
5011         reply.recycle();
5012     }
5013     public void setActivityController(IActivityController watcher, boolean imAMonkey)
5014             throws RemoteException
5015     {
5016         Parcel data = Parcel.obtain();
5017         Parcel reply = Parcel.obtain();
5018         data.writeInterfaceToken(IActivityManager.descriptor);
5019         data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
5020         data.writeInt(imAMonkey ? 1 : 0);
5021         mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
5022         reply.readException();
5023         data.recycle();
5024         reply.recycle();
5025     }
5026     public void setLenientBackgroundCheck(boolean enabled) throws RemoteException
5027     {
5028         Parcel data = Parcel.obtain();
5029         Parcel reply = Parcel.obtain();
5030         data.writeInterfaceToken(IActivityManager.descriptor);
5031         data.writeInt(enabled ? 1 : 0);
5032         mRemote.transact(SET_LENIENT_BACKGROUND_CHECK_TRANSACTION, data, reply, 0);
5033         reply.readException();
5034         data.recycle();
5035         reply.recycle();
5036     }
5037     public int getMemoryTrimLevel() throws RemoteException
5038     {
5039         Parcel data = Parcel.obtain();
5040         Parcel reply = Parcel.obtain();
5041         data.writeInterfaceToken(IActivityManager.descriptor);
5042         mRemote.transact(GET_MEMORY_TRIM_LEVEL_TRANSACTION, data, reply, 0);
5043         reply.readException();
5044         int level = reply.readInt();
5045         data.recycle();
5046         reply.recycle();
5047         return level;
5048     }
5049     public void enterSafeMode() throws RemoteException {
5050         Parcel data = Parcel.obtain();
5051         data.writeInterfaceToken(IActivityManager.descriptor);
5052         mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
5053         data.recycle();
5054     }
5055     public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag)
5056             throws RemoteException {
5057         Parcel data = Parcel.obtain();
5058         data.writeInterfaceToken(IActivityManager.descriptor);
5059         data.writeStrongBinder(sender.asBinder());
5060         data.writeInt(sourceUid);
5061         data.writeString(sourcePkg);
5062         data.writeString(tag);
5063         mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
5064         data.recycle();
5065     }
5066     public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag)
5067             throws RemoteException {
5068         Parcel data = Parcel.obtain();
5069         data.writeInterfaceToken(IActivityManager.descriptor);
5070         data.writeStrongBinder(sender.asBinder());
5071         data.writeInt(sourceUid);
5072         data.writeString(tag);
5073         mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0);
5074         data.recycle();
5075     }
5076     public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag)
5077             throws RemoteException {
5078         Parcel data = Parcel.obtain();
5079         data.writeInterfaceToken(IActivityManager.descriptor);
5080         data.writeStrongBinder(sender.asBinder());
5081         data.writeInt(sourceUid);
5082         data.writeString(tag);
5083         mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0);
5084         data.recycle();
5085     }
5086     public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
5087         Parcel data = Parcel.obtain();
5088         Parcel reply = Parcel.obtain();
5089         data.writeInterfaceToken(IActivityManager.descriptor);
5090         data.writeIntArray(pids);
5091         data.writeString(reason);
5092         data.writeInt(secure ? 1 : 0);
5093         mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
5094         reply.readException();
5095         boolean res = reply.readInt() != 0;
5096         data.recycle();
5097         reply.recycle();
5098         return res;
5099     }
5100     @Override
5101     public boolean killProcessesBelowForeground(String reason) throws RemoteException {
5102         Parcel data = Parcel.obtain();
5103         Parcel reply = Parcel.obtain();
5104         data.writeInterfaceToken(IActivityManager.descriptor);
5105         data.writeString(reason);
5106         mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
5107         boolean res = reply.readInt() != 0;
5108         data.recycle();
5109         reply.recycle();
5110         return res;
5111     }
5112     public boolean testIsSystemReady()
5113     {
5114         /* this base class version is never called */
5115         return true;
5116     }
5117     public void handleApplicationCrash(IBinder app,
5118             ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5119     {
5120         Parcel data = Parcel.obtain();
5121         Parcel reply = Parcel.obtain();
5122         data.writeInterfaceToken(IActivityManager.descriptor);
5123         data.writeStrongBinder(app);
5124         crashInfo.writeToParcel(data, 0);
5125         mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
5126         reply.readException();
5127         reply.recycle();
5128         data.recycle();
5129     }
5130
5131     public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
5132             ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5133     {
5134         Parcel data = Parcel.obtain();
5135         Parcel reply = Parcel.obtain();
5136         data.writeInterfaceToken(IActivityManager.descriptor);
5137         data.writeStrongBinder(app);
5138         data.writeString(tag);
5139         data.writeInt(system ? 1 : 0);
5140         crashInfo.writeToParcel(data, 0);
5141         mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
5142         reply.readException();
5143         boolean res = reply.readInt() != 0;
5144         reply.recycle();
5145         data.recycle();
5146         return res;
5147     }
5148
5149     public void handleApplicationStrictModeViolation(IBinder app,
5150             int violationMask,
5151             StrictMode.ViolationInfo info) throws RemoteException
5152     {
5153         Parcel data = Parcel.obtain();
5154         Parcel reply = Parcel.obtain();
5155         data.writeInterfaceToken(IActivityManager.descriptor);
5156         data.writeStrongBinder(app);
5157         data.writeInt(violationMask);
5158         info.writeToParcel(data, 0);
5159         mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
5160         reply.readException();
5161         reply.recycle();
5162         data.recycle();
5163     }
5164
5165     public void signalPersistentProcesses(int sig) throws RemoteException {
5166         Parcel data = Parcel.obtain();
5167         Parcel reply = Parcel.obtain();
5168         data.writeInterfaceToken(IActivityManager.descriptor);
5169         data.writeInt(sig);
5170         mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
5171         reply.readException();
5172         data.recycle();
5173         reply.recycle();
5174     }
5175
5176     public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
5177         Parcel data = Parcel.obtain();
5178         Parcel reply = Parcel.obtain();
5179         data.writeInterfaceToken(IActivityManager.descriptor);
5180         data.writeString(packageName);
5181         data.writeInt(userId);
5182         mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5183         reply.readException();
5184         data.recycle();
5185         reply.recycle();
5186     }
5187
5188     public void killAllBackgroundProcesses() throws RemoteException {
5189         Parcel data = Parcel.obtain();
5190         Parcel reply = Parcel.obtain();
5191         data.writeInterfaceToken(IActivityManager.descriptor);
5192         mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5193         reply.readException();
5194         data.recycle();
5195         reply.recycle();
5196     }
5197
5198     public void killPackageDependents(String packageName, int userId) throws RemoteException {
5199         Parcel data = Parcel.obtain();
5200         Parcel reply = Parcel.obtain();
5201         data.writeInterfaceToken(IActivityManager.descriptor);
5202         data.writeString(packageName);
5203         data.writeInt(userId);
5204         mRemote.transact(KILL_PACKAGE_DEPENDENTS_TRANSACTION, data, reply, 0);
5205         reply.readException();
5206         data.recycle();
5207         reply.recycle();
5208     }
5209
5210     public void forceStopPackage(String packageName, int userId) throws RemoteException {
5211         Parcel data = Parcel.obtain();
5212         Parcel reply = Parcel.obtain();
5213         data.writeInterfaceToken(IActivityManager.descriptor);
5214         data.writeString(packageName);
5215         data.writeInt(userId);
5216         mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
5217         reply.readException();
5218         data.recycle();
5219         reply.recycle();
5220     }
5221
5222     public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
5223             throws RemoteException
5224     {
5225         Parcel data = Parcel.obtain();
5226         Parcel reply = Parcel.obtain();
5227         data.writeInterfaceToken(IActivityManager.descriptor);
5228         mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
5229         reply.readException();
5230         outInfo.readFromParcel(reply);
5231         reply.recycle();
5232         data.recycle();
5233     }
5234
5235     public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
5236     {
5237         Parcel data = Parcel.obtain();
5238         Parcel reply = Parcel.obtain();
5239         data.writeInterfaceToken(IActivityManager.descriptor);
5240         mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
5241         reply.readException();
5242         ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
5243         reply.recycle();
5244         data.recycle();
5245         return res;
5246     }
5247
5248     public boolean profileControl(String process, int userId, boolean start,
5249             ProfilerInfo profilerInfo, int profileType) throws RemoteException
5250     {
5251         Parcel data = Parcel.obtain();
5252         Parcel reply = Parcel.obtain();
5253         data.writeInterfaceToken(IActivityManager.descriptor);
5254         data.writeString(process);
5255         data.writeInt(userId);
5256         data.writeInt(start ? 1 : 0);
5257         data.writeInt(profileType);
5258         if (profilerInfo != null) {
5259             data.writeInt(1);
5260             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5261         } else {
5262             data.writeInt(0);
5263         }
5264         mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
5265         reply.readException();
5266         boolean res = reply.readInt() != 0;
5267         reply.recycle();
5268         data.recycle();
5269         return res;
5270     }
5271
5272     public boolean shutdown(int timeout) throws RemoteException
5273     {
5274         Parcel data = Parcel.obtain();
5275         Parcel reply = Parcel.obtain();
5276         data.writeInterfaceToken(IActivityManager.descriptor);
5277         data.writeInt(timeout);
5278         mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
5279         reply.readException();
5280         boolean res = reply.readInt() != 0;
5281         reply.recycle();
5282         data.recycle();
5283         return res;
5284     }
5285
5286     public void stopAppSwitches() throws RemoteException {
5287         Parcel data = Parcel.obtain();
5288         Parcel reply = Parcel.obtain();
5289         data.writeInterfaceToken(IActivityManager.descriptor);
5290         mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
5291         reply.readException();
5292         reply.recycle();
5293         data.recycle();
5294     }
5295
5296     public void resumeAppSwitches() throws RemoteException {
5297         Parcel data = Parcel.obtain();
5298         Parcel reply = Parcel.obtain();
5299         data.writeInterfaceToken(IActivityManager.descriptor);
5300         mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
5301         reply.readException();
5302         reply.recycle();
5303         data.recycle();
5304     }
5305
5306     public void addPackageDependency(String packageName) throws RemoteException {
5307         Parcel data = Parcel.obtain();
5308         Parcel reply = Parcel.obtain();
5309         data.writeInterfaceToken(IActivityManager.descriptor);
5310         data.writeString(packageName);
5311         mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
5312         reply.readException();
5313         data.recycle();
5314         reply.recycle();
5315     }
5316
5317     public void killApplication(String pkg, int appId, int userId, String reason)
5318             throws RemoteException {
5319         Parcel data = Parcel.obtain();
5320         Parcel reply = Parcel.obtain();
5321         data.writeInterfaceToken(IActivityManager.descriptor);
5322         data.writeString(pkg);
5323         data.writeInt(appId);
5324         data.writeInt(userId);
5325         data.writeString(reason);
5326         mRemote.transact(KILL_APPLICATION_TRANSACTION, data, reply, 0);
5327         reply.readException();
5328         data.recycle();
5329         reply.recycle();
5330     }
5331
5332     public void closeSystemDialogs(String reason) throws RemoteException {
5333         Parcel data = Parcel.obtain();
5334         Parcel reply = Parcel.obtain();
5335         data.writeInterfaceToken(IActivityManager.descriptor);
5336         data.writeString(reason);
5337         mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
5338         reply.readException();
5339         data.recycle();
5340         reply.recycle();
5341     }
5342
5343     public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
5344             throws RemoteException {
5345         Parcel data = Parcel.obtain();
5346         Parcel reply = Parcel.obtain();
5347         data.writeInterfaceToken(IActivityManager.descriptor);
5348         data.writeIntArray(pids);
5349         mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
5350         reply.readException();
5351         Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
5352         data.recycle();
5353         reply.recycle();
5354         return res;
5355     }
5356
5357     public void killApplicationProcess(String processName, int uid) throws RemoteException {
5358         Parcel data = Parcel.obtain();
5359         Parcel reply = Parcel.obtain();
5360         data.writeInterfaceToken(IActivityManager.descriptor);
5361         data.writeString(processName);
5362         data.writeInt(uid);
5363         mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
5364         reply.readException();
5365         data.recycle();
5366         reply.recycle();
5367     }
5368
5369     public void overridePendingTransition(IBinder token, String packageName,
5370             int enterAnim, int exitAnim) throws RemoteException {
5371         Parcel data = Parcel.obtain();
5372         Parcel reply = Parcel.obtain();
5373         data.writeInterfaceToken(IActivityManager.descriptor);
5374         data.writeStrongBinder(token);
5375         data.writeString(packageName);
5376         data.writeInt(enterAnim);
5377         data.writeInt(exitAnim);
5378         mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
5379         reply.readException();
5380         data.recycle();
5381         reply.recycle();
5382     }
5383
5384     public boolean isUserAMonkey() throws RemoteException {
5385         Parcel data = Parcel.obtain();
5386         Parcel reply = Parcel.obtain();
5387         data.writeInterfaceToken(IActivityManager.descriptor);
5388         mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
5389         reply.readException();
5390         boolean res = reply.readInt() != 0;
5391         data.recycle();
5392         reply.recycle();
5393         return res;
5394     }
5395
5396     public void setUserIsMonkey(boolean monkey) throws RemoteException {
5397         Parcel data = Parcel.obtain();
5398         Parcel reply = Parcel.obtain();
5399         data.writeInterfaceToken(IActivityManager.descriptor);
5400         data.writeInt(monkey ? 1 : 0);
5401         mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
5402         reply.readException();
5403         data.recycle();
5404         reply.recycle();
5405     }
5406
5407     public void finishHeavyWeightApp() throws RemoteException {
5408         Parcel data = Parcel.obtain();
5409         Parcel reply = Parcel.obtain();
5410         data.writeInterfaceToken(IActivityManager.descriptor);
5411         mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
5412         reply.readException();
5413         data.recycle();
5414         reply.recycle();
5415     }
5416
5417     public boolean convertFromTranslucent(IBinder token)
5418             throws RemoteException {
5419         Parcel data = Parcel.obtain();
5420         Parcel reply = Parcel.obtain();
5421         data.writeInterfaceToken(IActivityManager.descriptor);
5422         data.writeStrongBinder(token);
5423         mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
5424         reply.readException();
5425         boolean res = reply.readInt() != 0;
5426         data.recycle();
5427         reply.recycle();
5428         return res;
5429     }
5430
5431     public boolean convertToTranslucent(IBinder token, ActivityOptions options)
5432             throws RemoteException {
5433         Parcel data = Parcel.obtain();
5434         Parcel reply = Parcel.obtain();
5435         data.writeInterfaceToken(IActivityManager.descriptor);
5436         data.writeStrongBinder(token);
5437         if (options == null) {
5438             data.writeInt(0);
5439         } else {
5440             data.writeInt(1);
5441             data.writeBundle(options.toBundle());
5442         }
5443         mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
5444         reply.readException();
5445         boolean res = reply.readInt() != 0;
5446         data.recycle();
5447         reply.recycle();
5448         return res;
5449     }
5450
5451     public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
5452         Parcel data = Parcel.obtain();
5453         Parcel reply = Parcel.obtain();
5454         data.writeInterfaceToken(IActivityManager.descriptor);
5455         data.writeStrongBinder(token);
5456         mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
5457         reply.readException();
5458         ActivityOptions options = ActivityOptions.fromBundle(reply.readBundle());
5459         data.recycle();
5460         reply.recycle();
5461         return options;
5462     }
5463
5464     public void setImmersive(IBinder token, boolean immersive)
5465             throws RemoteException {
5466         Parcel data = Parcel.obtain();
5467         Parcel reply = Parcel.obtain();
5468         data.writeInterfaceToken(IActivityManager.descriptor);
5469         data.writeStrongBinder(token);
5470         data.writeInt(immersive ? 1 : 0);
5471         mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
5472         reply.readException();
5473         data.recycle();
5474         reply.recycle();
5475     }
5476
5477     public boolean isImmersive(IBinder token)
5478             throws RemoteException {
5479         Parcel data = Parcel.obtain();
5480         Parcel reply = Parcel.obtain();
5481         data.writeInterfaceToken(IActivityManager.descriptor);
5482         data.writeStrongBinder(token);
5483         mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
5484         reply.readException();
5485         boolean res = reply.readInt() == 1;
5486         data.recycle();
5487         reply.recycle();
5488         return res;
5489     }
5490
5491     public boolean isTopOfTask(IBinder token) throws RemoteException {
5492         Parcel data = Parcel.obtain();
5493         Parcel reply = Parcel.obtain();
5494         data.writeInterfaceToken(IActivityManager.descriptor);
5495         data.writeStrongBinder(token);
5496         mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
5497         reply.readException();
5498         boolean res = reply.readInt() == 1;
5499         data.recycle();
5500         reply.recycle();
5501         return res;
5502     }
5503
5504     public boolean isTopActivityImmersive()
5505             throws RemoteException {
5506         Parcel data = Parcel.obtain();
5507         Parcel reply = Parcel.obtain();
5508         data.writeInterfaceToken(IActivityManager.descriptor);
5509         mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
5510         reply.readException();
5511         boolean res = reply.readInt() == 1;
5512         data.recycle();
5513         reply.recycle();
5514         return res;
5515     }
5516
5517     public void crashApplication(int uid, int initialPid, String packageName,
5518             String message) throws RemoteException {
5519         Parcel data = Parcel.obtain();
5520         Parcel reply = Parcel.obtain();
5521         data.writeInterfaceToken(IActivityManager.descriptor);
5522         data.writeInt(uid);
5523         data.writeInt(initialPid);
5524         data.writeString(packageName);
5525         data.writeString(message);
5526         mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
5527         reply.readException();
5528         data.recycle();
5529         reply.recycle();
5530     }
5531
5532     public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
5533         Parcel data = Parcel.obtain();
5534         Parcel reply = Parcel.obtain();
5535         data.writeInterfaceToken(IActivityManager.descriptor);
5536         uri.writeToParcel(data, 0);
5537         data.writeInt(userId);
5538         mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
5539         reply.readException();
5540         String res = reply.readString();
5541         data.recycle();
5542         reply.recycle();
5543         return res;
5544     }
5545
5546     public IBinder newUriPermissionOwner(String name)
5547             throws RemoteException {
5548         Parcel data = Parcel.obtain();
5549         Parcel reply = Parcel.obtain();
5550         data.writeInterfaceToken(IActivityManager.descriptor);
5551         data.writeString(name);
5552         mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
5553         reply.readException();
5554         IBinder res = reply.readStrongBinder();
5555         data.recycle();
5556         reply.recycle();
5557         return res;
5558     }
5559
5560     public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
5561         Parcel data = Parcel.obtain();
5562         Parcel reply = Parcel.obtain();
5563         data.writeInterfaceToken(IActivityManager.descriptor);
5564         data.writeStrongBinder(activityToken);
5565         mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
5566         reply.readException();
5567         IBinder res = reply.readStrongBinder();
5568         data.recycle();
5569         reply.recycle();
5570         return res;
5571     }
5572
5573     public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
5574             Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
5575         Parcel data = Parcel.obtain();
5576         Parcel reply = Parcel.obtain();
5577         data.writeInterfaceToken(IActivityManager.descriptor);
5578         data.writeStrongBinder(owner);
5579         data.writeInt(fromUid);
5580         data.writeString(targetPkg);
5581         uri.writeToParcel(data, 0);
5582         data.writeInt(mode);
5583         data.writeInt(sourceUserId);
5584         data.writeInt(targetUserId);
5585         mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5586         reply.readException();
5587         data.recycle();
5588         reply.recycle();
5589     }
5590
5591     public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
5592             int mode, int userId) throws RemoteException {
5593         Parcel data = Parcel.obtain();
5594         Parcel reply = Parcel.obtain();
5595         data.writeInterfaceToken(IActivityManager.descriptor);
5596         data.writeStrongBinder(owner);
5597         if (uri != null) {
5598             data.writeInt(1);
5599             uri.writeToParcel(data, 0);
5600         } else {
5601             data.writeInt(0);
5602         }
5603         data.writeInt(mode);
5604         data.writeInt(userId);
5605         mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
5606         reply.readException();
5607         data.recycle();
5608         reply.recycle();
5609     }
5610
5611     public int checkGrantUriPermission(int callingUid, String targetPkg,
5612             Uri uri, int modeFlags, int userId) throws RemoteException {
5613         Parcel data = Parcel.obtain();
5614         Parcel reply = Parcel.obtain();
5615         data.writeInterfaceToken(IActivityManager.descriptor);
5616         data.writeInt(callingUid);
5617         data.writeString(targetPkg);
5618         uri.writeToParcel(data, 0);
5619         data.writeInt(modeFlags);
5620         data.writeInt(userId);
5621         mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5622         reply.readException();
5623         int res = reply.readInt();
5624         data.recycle();
5625         reply.recycle();
5626         return res;
5627     }
5628
5629     public boolean dumpHeap(String process, int userId, boolean managed,
5630             String path, ParcelFileDescriptor fd) throws RemoteException {
5631         Parcel data = Parcel.obtain();
5632         Parcel reply = Parcel.obtain();
5633         data.writeInterfaceToken(IActivityManager.descriptor);
5634         data.writeString(process);
5635         data.writeInt(userId);
5636         data.writeInt(managed ? 1 : 0);
5637         data.writeString(path);
5638         if (fd != null) {
5639             data.writeInt(1);
5640             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5641         } else {
5642             data.writeInt(0);
5643         }
5644         mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
5645         reply.readException();
5646         boolean res = reply.readInt() != 0;
5647         reply.recycle();
5648         data.recycle();
5649         return res;
5650     }
5651
5652     public int startActivities(IApplicationThread caller, String callingPackage,
5653             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
5654             Bundle options, int userId) throws RemoteException {
5655         Parcel data = Parcel.obtain();
5656         Parcel reply = Parcel.obtain();
5657         data.writeInterfaceToken(IActivityManager.descriptor);
5658         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
5659         data.writeString(callingPackage);
5660         data.writeTypedArray(intents, 0);
5661         data.writeStringArray(resolvedTypes);
5662         data.writeStrongBinder(resultTo);
5663         if (options != null) {
5664             data.writeInt(1);
5665             options.writeToParcel(data, 0);
5666         } else {
5667             data.writeInt(0);
5668         }
5669         data.writeInt(userId);
5670         mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
5671         reply.readException();
5672         int result = reply.readInt();
5673         reply.recycle();
5674         data.recycle();
5675         return result;
5676     }
5677
5678     public int getFrontActivityScreenCompatMode() throws RemoteException {
5679         Parcel data = Parcel.obtain();
5680         Parcel reply = Parcel.obtain();
5681         data.writeInterfaceToken(IActivityManager.descriptor);
5682         mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5683         reply.readException();
5684         int mode = reply.readInt();
5685         reply.recycle();
5686         data.recycle();
5687         return mode;
5688     }
5689
5690     public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
5691         Parcel data = Parcel.obtain();
5692         Parcel reply = Parcel.obtain();
5693         data.writeInterfaceToken(IActivityManager.descriptor);
5694         data.writeInt(mode);
5695         mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5696         reply.readException();
5697         reply.recycle();
5698         data.recycle();
5699     }
5700
5701     public int getPackageScreenCompatMode(String packageName) throws RemoteException {
5702         Parcel data = Parcel.obtain();
5703         Parcel reply = Parcel.obtain();
5704         data.writeInterfaceToken(IActivityManager.descriptor);
5705         data.writeString(packageName);
5706         mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5707         reply.readException();
5708         int mode = reply.readInt();
5709         reply.recycle();
5710         data.recycle();
5711         return mode;
5712     }
5713
5714     public void setPackageScreenCompatMode(String packageName, int mode)
5715             throws RemoteException {
5716         Parcel data = Parcel.obtain();
5717         Parcel reply = Parcel.obtain();
5718         data.writeInterfaceToken(IActivityManager.descriptor);
5719         data.writeString(packageName);
5720         data.writeInt(mode);
5721         mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5722         reply.readException();
5723         reply.recycle();
5724         data.recycle();
5725     }
5726
5727     public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
5728         Parcel data = Parcel.obtain();
5729         Parcel reply = Parcel.obtain();
5730         data.writeInterfaceToken(IActivityManager.descriptor);
5731         data.writeString(packageName);
5732         mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5733         reply.readException();
5734         boolean ask = reply.readInt() != 0;
5735         reply.recycle();
5736         data.recycle();
5737         return ask;
5738     }
5739
5740     public void setPackageAskScreenCompat(String packageName, boolean ask)
5741             throws RemoteException {
5742         Parcel data = Parcel.obtain();
5743         Parcel reply = Parcel.obtain();
5744         data.writeInterfaceToken(IActivityManager.descriptor);
5745         data.writeString(packageName);
5746         data.writeInt(ask ? 1 : 0);
5747         mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5748         reply.readException();
5749         reply.recycle();
5750         data.recycle();
5751     }
5752
5753     public boolean switchUser(int userid) throws RemoteException {
5754         Parcel data = Parcel.obtain();
5755         Parcel reply = Parcel.obtain();
5756         data.writeInterfaceToken(IActivityManager.descriptor);
5757         data.writeInt(userid);
5758         mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
5759         reply.readException();
5760         boolean result = reply.readInt() != 0;
5761         reply.recycle();
5762         data.recycle();
5763         return result;
5764     }
5765
5766     public boolean startUserInBackground(int userid) throws RemoteException {
5767         Parcel data = Parcel.obtain();
5768         Parcel reply = Parcel.obtain();
5769         data.writeInterfaceToken(IActivityManager.descriptor);
5770         data.writeInt(userid);
5771         mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
5772         reply.readException();
5773         boolean result = reply.readInt() != 0;
5774         reply.recycle();
5775         data.recycle();
5776         return result;
5777     }
5778
5779     public boolean unlockUser(int userId, byte[] token, byte[] secret, IProgressListener listener)
5780             throws RemoteException {
5781         Parcel data = Parcel.obtain();
5782         Parcel reply = Parcel.obtain();
5783         data.writeInterfaceToken(IActivityManager.descriptor);
5784         data.writeInt(userId);
5785         data.writeByteArray(token);
5786         data.writeByteArray(secret);
5787         data.writeStrongInterface(listener);
5788         mRemote.transact(IActivityManager.UNLOCK_USER_TRANSACTION, data, reply, 0);
5789         reply.readException();
5790         boolean result = reply.readInt() != 0;
5791         reply.recycle();
5792         data.recycle();
5793         return result;
5794     }
5795
5796     public int stopUser(int userid, boolean force, IStopUserCallback callback)
5797             throws RemoteException {
5798         Parcel data = Parcel.obtain();
5799         Parcel reply = Parcel.obtain();
5800         data.writeInterfaceToken(IActivityManager.descriptor);
5801         data.writeInt(userid);
5802         data.writeInt(force ? 1 : 0);
5803         data.writeStrongInterface(callback);
5804         mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
5805         reply.readException();
5806         int result = reply.readInt();
5807         reply.recycle();
5808         data.recycle();
5809         return result;
5810     }
5811
5812     public UserInfo getCurrentUser() throws RemoteException {
5813         Parcel data = Parcel.obtain();
5814         Parcel reply = Parcel.obtain();
5815         data.writeInterfaceToken(IActivityManager.descriptor);
5816         mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
5817         reply.readException();
5818         UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
5819         reply.recycle();
5820         data.recycle();
5821         return userInfo;
5822     }
5823
5824     public boolean isUserRunning(int userid, int flags) throws RemoteException {
5825         Parcel data = Parcel.obtain();
5826         Parcel reply = Parcel.obtain();
5827         data.writeInterfaceToken(IActivityManager.descriptor);
5828         data.writeInt(userid);
5829         data.writeInt(flags);
5830         mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
5831         reply.readException();
5832         boolean result = reply.readInt() != 0;
5833         reply.recycle();
5834         data.recycle();
5835         return result;
5836     }
5837
5838     public int[] getRunningUserIds() throws RemoteException {
5839         Parcel data = Parcel.obtain();
5840         Parcel reply = Parcel.obtain();
5841         data.writeInterfaceToken(IActivityManager.descriptor);
5842         mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
5843         reply.readException();
5844         int[] result = reply.createIntArray();
5845         reply.recycle();
5846         data.recycle();
5847         return result;
5848     }
5849
5850     public boolean removeTask(int taskId) throws RemoteException {
5851         Parcel data = Parcel.obtain();
5852         Parcel reply = Parcel.obtain();
5853         data.writeInterfaceToken(IActivityManager.descriptor);
5854         data.writeInt(taskId);
5855         mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
5856         reply.readException();
5857         boolean result = reply.readInt() != 0;
5858         reply.recycle();
5859         data.recycle();
5860         return result;
5861     }
5862
5863     public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
5864         Parcel data = Parcel.obtain();
5865         Parcel reply = Parcel.obtain();
5866         data.writeInterfaceToken(IActivityManager.descriptor);
5867         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5868         mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5869         reply.readException();
5870         data.recycle();
5871         reply.recycle();
5872     }
5873
5874     public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
5875         Parcel data = Parcel.obtain();
5876         Parcel reply = Parcel.obtain();
5877         data.writeInterfaceToken(IActivityManager.descriptor);
5878         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5879         mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5880         reply.readException();
5881         data.recycle();
5882         reply.recycle();
5883     }
5884
5885     public void registerUidObserver(IUidObserver observer, int which) throws RemoteException {
5886         Parcel data = Parcel.obtain();
5887         Parcel reply = Parcel.obtain();
5888         data.writeInterfaceToken(IActivityManager.descriptor);
5889         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5890         data.writeInt(which);
5891         mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5892         reply.readException();
5893         data.recycle();
5894         reply.recycle();
5895     }
5896
5897     public void unregisterUidObserver(IUidObserver observer) throws RemoteException {
5898         Parcel data = Parcel.obtain();
5899         Parcel reply = Parcel.obtain();
5900         data.writeInterfaceToken(IActivityManager.descriptor);
5901         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5902         mRemote.transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5903         reply.readException();
5904         data.recycle();
5905         reply.recycle();
5906     }
5907
5908     public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
5909         Parcel data = Parcel.obtain();
5910         Parcel reply = Parcel.obtain();
5911         data.writeInterfaceToken(IActivityManager.descriptor);
5912         data.writeStrongBinder(sender.asBinder());
5913         mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
5914         reply.readException();
5915         boolean res = reply.readInt() != 0;
5916         data.recycle();
5917         reply.recycle();
5918         return res;
5919     }
5920
5921     public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
5922         Parcel data = Parcel.obtain();
5923         Parcel reply = Parcel.obtain();
5924         data.writeInterfaceToken(IActivityManager.descriptor);
5925         data.writeStrongBinder(sender.asBinder());
5926         mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
5927         reply.readException();
5928         boolean res = reply.readInt() != 0;
5929         data.recycle();
5930         reply.recycle();
5931         return res;
5932     }
5933
5934     public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
5935         Parcel data = Parcel.obtain();
5936         Parcel reply = Parcel.obtain();
5937         data.writeInterfaceToken(IActivityManager.descriptor);
5938         data.writeStrongBinder(sender.asBinder());
5939         mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5940         reply.readException();
5941         Intent res = reply.readInt() != 0
5942                 ? Intent.CREATOR.createFromParcel(reply) : null;
5943         data.recycle();
5944         reply.recycle();
5945         return res;
5946     }
5947
5948     public String getTagForIntentSender(IIntentSender sender, String prefix)
5949             throws RemoteException {
5950         Parcel data = Parcel.obtain();
5951         Parcel reply = Parcel.obtain();
5952         data.writeInterfaceToken(IActivityManager.descriptor);
5953         data.writeStrongBinder(sender.asBinder());
5954         data.writeString(prefix);
5955         mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5956         reply.readException();
5957         String res = reply.readString();
5958         data.recycle();
5959         reply.recycle();
5960         return res;
5961     }
5962
5963     public void updatePersistentConfiguration(Configuration values) throws RemoteException
5964     {
5965         Parcel data = Parcel.obtain();
5966         Parcel reply = Parcel.obtain();
5967         data.writeInterfaceToken(IActivityManager.descriptor);
5968         values.writeToParcel(data, 0);
5969         mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
5970         reply.readException();
5971         data.recycle();
5972         reply.recycle();
5973     }
5974
5975     public long[] getProcessPss(int[] pids) throws RemoteException {
5976         Parcel data = Parcel.obtain();
5977         Parcel reply = Parcel.obtain();
5978         data.writeInterfaceToken(IActivityManager.descriptor);
5979         data.writeIntArray(pids);
5980         mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
5981         reply.readException();
5982         long[] res = reply.createLongArray();
5983         data.recycle();
5984         reply.recycle();
5985         return res;
5986     }
5987
5988     public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
5989         Parcel data = Parcel.obtain();
5990         Parcel reply = Parcel.obtain();
5991         data.writeInterfaceToken(IActivityManager.descriptor);
5992         TextUtils.writeToParcel(msg, data, 0);
5993         data.writeInt(always ? 1 : 0);
5994         mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
5995         reply.readException();
5996         data.recycle();
5997         reply.recycle();
5998     }
5999
6000     public void keyguardWaitingForActivityDrawn() throws RemoteException {
6001         Parcel data = Parcel.obtain();
6002         Parcel reply = Parcel.obtain();
6003         data.writeInterfaceToken(IActivityManager.descriptor);
6004         mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
6005         reply.readException();
6006         data.recycle();
6007         reply.recycle();
6008     }
6009
6010     public void keyguardGoingAway(int flags)
6011             throws RemoteException {
6012         Parcel data = Parcel.obtain();
6013         Parcel reply = Parcel.obtain();
6014         data.writeInterfaceToken(IActivityManager.descriptor);
6015         data.writeInt(flags);
6016         mRemote.transact(KEYGUARD_GOING_AWAY_TRANSACTION, data, reply, 0);
6017         reply.readException();
6018         data.recycle();
6019         reply.recycle();
6020     }
6021
6022     public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
6023             throws RemoteException {
6024         Parcel data = Parcel.obtain();
6025         Parcel reply = Parcel.obtain();
6026         data.writeInterfaceToken(IActivityManager.descriptor);
6027         data.writeStrongBinder(token);
6028         data.writeString(destAffinity);
6029         mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
6030         reply.readException();
6031         boolean result = reply.readInt() != 0;
6032         data.recycle();
6033         reply.recycle();
6034         return result;
6035     }
6036
6037     public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
6038             throws RemoteException {
6039         Parcel data = Parcel.obtain();
6040         Parcel reply = Parcel.obtain();
6041         data.writeInterfaceToken(IActivityManager.descriptor);
6042         data.writeStrongBinder(token);
6043         target.writeToParcel(data, 0);
6044         data.writeInt(resultCode);
6045         if (resultData != null) {
6046             data.writeInt(1);
6047             resultData.writeToParcel(data, 0);
6048         } else {
6049             data.writeInt(0);
6050         }
6051         mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
6052         reply.readException();
6053         boolean result = reply.readInt() != 0;
6054         data.recycle();
6055         reply.recycle();
6056         return result;
6057     }
6058
6059     public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
6060         Parcel data = Parcel.obtain();
6061         Parcel reply = Parcel.obtain();
6062         data.writeInterfaceToken(IActivityManager.descriptor);
6063         data.writeStrongBinder(activityToken);
6064         mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
6065         reply.readException();
6066         int result = reply.readInt();
6067         data.recycle();
6068         reply.recycle();
6069         return result;
6070     }
6071
6072     public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
6073         Parcel data = Parcel.obtain();
6074         Parcel reply = Parcel.obtain();
6075         data.writeInterfaceToken(IActivityManager.descriptor);
6076         data.writeStrongBinder(activityToken);
6077         mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
6078         reply.readException();
6079         String result = reply.readString();
6080         data.recycle();
6081         reply.recycle();
6082         return result;
6083     }
6084
6085     public void registerUserSwitchObserver(IUserSwitchObserver observer,
6086             String name) throws RemoteException {
6087         Parcel data = Parcel.obtain();
6088         Parcel reply = Parcel.obtain();
6089         data.writeInterfaceToken(IActivityManager.descriptor);
6090         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6091         data.writeString(name);
6092         mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6093         reply.readException();
6094         data.recycle();
6095         reply.recycle();
6096     }
6097
6098     public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
6099         Parcel data = Parcel.obtain();
6100         Parcel reply = Parcel.obtain();
6101         data.writeInterfaceToken(IActivityManager.descriptor);
6102         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6103         mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6104         reply.readException();
6105         data.recycle();
6106         reply.recycle();
6107     }
6108
6109     public void requestBugReport(@ActivityManager.BugreportMode int bugreportType)
6110             throws RemoteException {
6111         Parcel data = Parcel.obtain();
6112         Parcel reply = Parcel.obtain();
6113         data.writeInterfaceToken(IActivityManager.descriptor);
6114         data.writeInt(bugreportType);
6115         mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
6116         reply.readException();
6117         data.recycle();
6118         reply.recycle();
6119     }
6120
6121     public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
6122             throws RemoteException {
6123         Parcel data = Parcel.obtain();
6124         Parcel reply = Parcel.obtain();
6125         data.writeInterfaceToken(IActivityManager.descriptor);
6126         data.writeInt(pid);
6127         data.writeInt(aboveSystem ? 1 : 0);
6128         data.writeString(reason);
6129         mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
6130         reply.readException();
6131         long res = reply.readInt();
6132         data.recycle();
6133         reply.recycle();
6134         return res;
6135     }
6136
6137     public Bundle getAssistContextExtras(int requestType) throws RemoteException {
6138         Parcel data = Parcel.obtain();
6139         Parcel reply = Parcel.obtain();
6140         data.writeInterfaceToken(IActivityManager.descriptor);
6141         data.writeInt(requestType);
6142         mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6143         reply.readException();
6144         Bundle res = reply.readBundle();
6145         data.recycle();
6146         reply.recycle();
6147         return res;
6148     }
6149
6150     public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
6151             Bundle receiverExtras,
6152             IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException {
6153         Parcel data = Parcel.obtain();
6154         Parcel reply = Parcel.obtain();
6155         data.writeInterfaceToken(IActivityManager.descriptor);
6156         data.writeInt(requestType);
6157         data.writeStrongBinder(receiver.asBinder());
6158         data.writeBundle(receiverExtras);
6159         data.writeStrongBinder(activityToken);
6160         data.writeInt(focused ? 1 : 0);
6161         data.writeInt(newSessionId ? 1 : 0);
6162         mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6163         reply.readException();
6164         boolean res = reply.readInt() != 0;
6165         data.recycle();
6166         reply.recycle();
6167         return res;
6168     }
6169
6170     public void reportAssistContextExtras(IBinder token, Bundle extras, AssistStructure structure,
6171             AssistContent content, Uri referrer) throws RemoteException {
6172         Parcel data = Parcel.obtain();
6173         Parcel reply = Parcel.obtain();
6174         data.writeInterfaceToken(IActivityManager.descriptor);
6175         data.writeStrongBinder(token);
6176         data.writeBundle(extras);
6177         structure.writeToParcel(data, 0);
6178         content.writeToParcel(data, 0);
6179         if (referrer != null) {
6180             data.writeInt(1);
6181             referrer.writeToParcel(data, 0);
6182         } else {
6183             data.writeInt(0);
6184         }
6185         mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6186         reply.readException();
6187         data.recycle();
6188         reply.recycle();
6189     }
6190
6191     public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle,
6192             Bundle args) throws RemoteException {
6193         Parcel data = Parcel.obtain();
6194         Parcel reply = Parcel.obtain();
6195         data.writeInterfaceToken(IActivityManager.descriptor);
6196         intent.writeToParcel(data, 0);
6197         data.writeInt(requestType);
6198         data.writeString(hint);
6199         data.writeInt(userHandle);
6200         data.writeBundle(args);
6201         mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
6202         reply.readException();
6203         boolean res = reply.readInt() != 0;
6204         data.recycle();
6205         reply.recycle();
6206         return res;
6207     }
6208
6209     public boolean isAssistDataAllowedOnCurrentActivity() throws RemoteException {
6210         Parcel data = Parcel.obtain();
6211         Parcel reply = Parcel.obtain();
6212         data.writeInterfaceToken(IActivityManager.descriptor);
6213         mRemote.transact(IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION, data, reply, 0);
6214         reply.readException();
6215         boolean res = reply.readInt() != 0;
6216         data.recycle();
6217         reply.recycle();
6218         return res;
6219     }
6220
6221     public boolean showAssistFromActivity(IBinder token, Bundle args) throws RemoteException {
6222         Parcel data = Parcel.obtain();
6223         Parcel reply = Parcel.obtain();
6224         data.writeInterfaceToken(IActivityManager.descriptor);
6225         data.writeStrongBinder(token);
6226         data.writeBundle(args);
6227         mRemote.transact(SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION, data, reply, 0);
6228         reply.readException();
6229         boolean res = reply.readInt() != 0;
6230         data.recycle();
6231         reply.recycle();
6232         return res;
6233     }
6234
6235     public void killUid(int appId, int userId, String reason) throws RemoteException {
6236         Parcel data = Parcel.obtain();
6237         Parcel reply = Parcel.obtain();
6238         data.writeInterfaceToken(IActivityManager.descriptor);
6239         data.writeInt(appId);
6240         data.writeInt(userId);
6241         data.writeString(reason);
6242         mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
6243         reply.readException();
6244         data.recycle();
6245         reply.recycle();
6246     }
6247
6248     public void hang(IBinder who, boolean allowRestart) throws RemoteException {
6249         Parcel data = Parcel.obtain();
6250         Parcel reply = Parcel.obtain();
6251         data.writeInterfaceToken(IActivityManager.descriptor);
6252         data.writeStrongBinder(who);
6253         data.writeInt(allowRestart ? 1 : 0);
6254         mRemote.transact(HANG_TRANSACTION, data, reply, 0);
6255         reply.readException();
6256         data.recycle();
6257         reply.recycle();
6258     }
6259
6260     public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
6261         Parcel data = Parcel.obtain();
6262         Parcel reply = Parcel.obtain();
6263         data.writeInterfaceToken(IActivityManager.descriptor);
6264         data.writeStrongBinder(token);
6265         mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
6266         reply.readException();
6267         data.recycle();
6268         reply.recycle();
6269     }
6270
6271     public void notifyActivityDrawn(IBinder token) throws RemoteException {
6272         Parcel data = Parcel.obtain();
6273         Parcel reply = Parcel.obtain();
6274         data.writeInterfaceToken(IActivityManager.descriptor);
6275         data.writeStrongBinder(token);
6276         mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
6277         reply.readException();
6278         data.recycle();
6279         reply.recycle();
6280     }
6281
6282     public void restart() throws RemoteException {
6283         Parcel data = Parcel.obtain();
6284         Parcel reply = Parcel.obtain();
6285         data.writeInterfaceToken(IActivityManager.descriptor);
6286         mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
6287         reply.readException();
6288         data.recycle();
6289         reply.recycle();
6290     }
6291
6292     public void performIdleMaintenance() throws RemoteException {
6293         Parcel data = Parcel.obtain();
6294         Parcel reply = Parcel.obtain();
6295         data.writeInterfaceToken(IActivityManager.descriptor);
6296         mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
6297         reply.readException();
6298         data.recycle();
6299         reply.recycle();
6300     }
6301
6302     public void sendIdleJobTrigger() throws RemoteException {
6303         Parcel data = Parcel.obtain();
6304         Parcel reply = Parcel.obtain();
6305         data.writeInterfaceToken(IActivityManager.descriptor);
6306         mRemote.transact(SEND_IDLE_JOB_TRIGGER_TRANSACTION, data, reply, 0);
6307         reply.readException();
6308         data.recycle();
6309         reply.recycle();
6310     }
6311
6312     public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
6313             IActivityContainerCallback callback) throws RemoteException {
6314         Parcel data = Parcel.obtain();
6315         Parcel reply = Parcel.obtain();
6316         data.writeInterfaceToken(IActivityManager.descriptor);
6317         data.writeStrongBinder(parentActivityToken);
6318         data.writeStrongBinder(callback == null ? null : callback.asBinder());
6319         mRemote.transact(CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6320         reply.readException();
6321         final int result = reply.readInt();
6322         final IActivityContainer res;
6323         if (result == 1) {
6324             res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6325         } else {
6326             res = null;
6327         }
6328         data.recycle();
6329         reply.recycle();
6330         return res;
6331     }
6332
6333     public void deleteActivityContainer(IActivityContainer activityContainer)
6334             throws RemoteException {
6335         Parcel data = Parcel.obtain();
6336         Parcel reply = Parcel.obtain();
6337         data.writeInterfaceToken(IActivityManager.descriptor);
6338         data.writeStrongBinder(activityContainer.asBinder());
6339         mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6340         reply.readException();
6341         data.recycle();
6342         reply.recycle();
6343     }
6344
6345     public boolean startBinderTracking() throws RemoteException {
6346         Parcel data = Parcel.obtain();
6347         Parcel reply = Parcel.obtain();
6348         data.writeInterfaceToken(IActivityManager.descriptor);
6349         mRemote.transact(START_BINDER_TRACKING_TRANSACTION, data, reply, 0);
6350         reply.readException();
6351         boolean res = reply.readInt() != 0;
6352         reply.recycle();
6353         data.recycle();
6354         return res;
6355     }
6356
6357     public boolean stopBinderTrackingAndDump(ParcelFileDescriptor fd) throws RemoteException {
6358         Parcel data = Parcel.obtain();
6359         Parcel reply = Parcel.obtain();
6360         data.writeInterfaceToken(IActivityManager.descriptor);
6361         if (fd != null) {
6362             data.writeInt(1);
6363             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
6364         } else {
6365             data.writeInt(0);
6366         }
6367         mRemote.transact(STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION, data, reply, 0);
6368         reply.readException();
6369         boolean res = reply.readInt() != 0;
6370         reply.recycle();
6371         data.recycle();
6372         return res;
6373     }
6374
6375     public int setVrMode(IBinder token, boolean enabled, ComponentName packageName)
6376             throws RemoteException {
6377         Parcel data = Parcel.obtain();
6378         Parcel reply = Parcel.obtain();
6379         data.writeInterfaceToken(IActivityManager.descriptor);
6380         data.writeStrongBinder(token);
6381         data.writeInt(enabled ? 1 : 0);
6382         packageName.writeToParcel(data, 0);
6383         mRemote.transact(SET_VR_MODE_TRANSACTION, data, reply, 0);
6384         reply.readException();
6385         int res = reply.readInt();
6386         data.recycle();
6387         reply.recycle();
6388         return res;
6389     }
6390
6391     public boolean isVrModePackageEnabled(ComponentName packageName)
6392             throws RemoteException {
6393         Parcel data = Parcel.obtain();
6394         Parcel reply = Parcel.obtain();
6395         data.writeInterfaceToken(IActivityManager.descriptor);
6396         packageName.writeToParcel(data, 0);
6397         mRemote.transact(IS_VR_PACKAGE_ENABLED_TRANSACTION, data, reply, 0);
6398         reply.readException();
6399         int res = reply.readInt();
6400         data.recycle();
6401         reply.recycle();
6402         return res == 1;
6403     }
6404
6405     @Override
6406     public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
6407         Parcel data = Parcel.obtain();
6408         Parcel reply = Parcel.obtain();
6409         data.writeInterfaceToken(IActivityManager.descriptor);
6410         data.writeInt(displayId);
6411         mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0);
6412         reply.readException();
6413         final int result = reply.readInt();
6414         final IActivityContainer res;
6415         if (result == 1) {
6416             res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6417         } else {
6418             res = null;
6419         }
6420         data.recycle();
6421         reply.recycle();
6422         return res;
6423     }
6424
6425     @Override
6426     public int getActivityDisplayId(IBinder activityToken)
6427             throws RemoteException {
6428         Parcel data = Parcel.obtain();
6429         Parcel reply = Parcel.obtain();
6430         data.writeInterfaceToken(IActivityManager.descriptor);
6431         data.writeStrongBinder(activityToken);
6432         mRemote.transact(GET_ACTIVITY_DISPLAY_ID_TRANSACTION, data, reply, 0);
6433         reply.readException();
6434         final int displayId = reply.readInt();
6435         data.recycle();
6436         reply.recycle();
6437         return displayId;
6438     }
6439
6440     @Override
6441     public void startLockTaskMode(int taskId) throws RemoteException {
6442         Parcel data = Parcel.obtain();
6443         Parcel reply = Parcel.obtain();
6444         data.writeInterfaceToken(IActivityManager.descriptor);
6445         data.writeInt(taskId);
6446         mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
6447         reply.readException();
6448         data.recycle();
6449         reply.recycle();
6450     }
6451
6452     @Override
6453     public void startLockTaskMode(IBinder token) throws RemoteException {
6454         Parcel data = Parcel.obtain();
6455         Parcel reply = Parcel.obtain();
6456         data.writeInterfaceToken(IActivityManager.descriptor);
6457         data.writeStrongBinder(token);
6458         mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
6459         reply.readException();
6460         data.recycle();
6461         reply.recycle();
6462     }
6463
6464     @Override
6465     public void startSystemLockTaskMode(int taskId) throws RemoteException {
6466         Parcel data = Parcel.obtain();
6467         Parcel reply = Parcel.obtain();
6468         data.writeInterfaceToken(IActivityManager.descriptor);
6469         data.writeInt(taskId);
6470         mRemote.transact(START_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6471         reply.readException();
6472         data.recycle();
6473         reply.recycle();
6474     }
6475
6476     @Override
6477     public void stopLockTaskMode() throws RemoteException {
6478         Parcel data = Parcel.obtain();
6479         Parcel reply = Parcel.obtain();
6480         data.writeInterfaceToken(IActivityManager.descriptor);
6481         mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6482         reply.readException();
6483         data.recycle();
6484         reply.recycle();
6485     }
6486
6487     @Override
6488     public void stopSystemLockTaskMode() throws RemoteException {
6489         Parcel data = Parcel.obtain();
6490         Parcel reply = Parcel.obtain();
6491         data.writeInterfaceToken(IActivityManager.descriptor);
6492         mRemote.transact(STOP_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6493         reply.readException();
6494         data.recycle();
6495         reply.recycle();
6496     }
6497
6498     @Override
6499     public boolean isInLockTaskMode() throws RemoteException {
6500         Parcel data = Parcel.obtain();
6501         Parcel reply = Parcel.obtain();
6502         data.writeInterfaceToken(IActivityManager.descriptor);
6503         mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6504         reply.readException();
6505         boolean isInLockTaskMode = reply.readInt() == 1;
6506         data.recycle();
6507         reply.recycle();
6508         return isInLockTaskMode;
6509     }
6510
6511     @Override
6512     public int getLockTaskModeState() throws RemoteException {
6513         Parcel data = Parcel.obtain();
6514         Parcel reply = Parcel.obtain();
6515         data.writeInterfaceToken(IActivityManager.descriptor);
6516         mRemote.transact(GET_LOCK_TASK_MODE_STATE_TRANSACTION, data, reply, 0);
6517         reply.readException();
6518         int lockTaskModeState = reply.readInt();
6519         data.recycle();
6520         reply.recycle();
6521         return lockTaskModeState;
6522     }
6523
6524     @Override
6525     public void showLockTaskEscapeMessage(IBinder token) throws RemoteException {
6526         Parcel data = Parcel.obtain();
6527         Parcel reply = Parcel.obtain();
6528         data.writeInterfaceToken(IActivityManager.descriptor);
6529         data.writeStrongBinder(token);
6530         mRemote.transact(SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION, data, reply,
6531                 IBinder.FLAG_ONEWAY);
6532         reply.readException();
6533         data.recycle();
6534         reply.recycle();
6535     }
6536
6537     @Override
6538     public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
6539             throws RemoteException {
6540         Parcel data = Parcel.obtain();
6541         Parcel reply = Parcel.obtain();
6542         data.writeInterfaceToken(IActivityManager.descriptor);
6543         data.writeStrongBinder(token);
6544         values.writeToParcel(data, 0);
6545         mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0);
6546         reply.readException();
6547         data.recycle();
6548         reply.recycle();
6549     }
6550
6551     @Override
6552     public void setTaskResizeable(int taskId, int resizeableMode) throws  RemoteException {
6553         Parcel data = Parcel.obtain();
6554         Parcel reply = Parcel.obtain();
6555         data.writeInterfaceToken(IActivityManager.descriptor);
6556         data.writeInt(taskId);
6557         data.writeInt(resizeableMode);
6558         mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0);
6559         reply.readException();
6560         data.recycle();
6561         reply.recycle();
6562     }
6563
6564     @Override
6565     public void resizeTask(int taskId, Rect r, int resizeMode) throws RemoteException
6566     {
6567         Parcel data = Parcel.obtain();
6568         Parcel reply = Parcel.obtain();
6569         data.writeInterfaceToken(IActivityManager.descriptor);
6570         data.writeInt(taskId);
6571         data.writeInt(resizeMode);
6572         r.writeToParcel(data, 0);
6573         mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0);
6574         reply.readException();
6575         data.recycle();
6576         reply.recycle();
6577     }
6578
6579     @Override
6580     public Rect getTaskBounds(int taskId) throws RemoteException
6581     {
6582         Parcel data = Parcel.obtain();
6583         Parcel reply = Parcel.obtain();
6584         data.writeInterfaceToken(IActivityManager.descriptor);
6585         data.writeInt(taskId);
6586         mRemote.transact(GET_TASK_BOUNDS_TRANSACTION, data, reply, 0);
6587         reply.readException();
6588         Rect rect = Rect.CREATOR.createFromParcel(reply);
6589         data.recycle();
6590         reply.recycle();
6591         return rect;
6592     }
6593
6594     @Override
6595     public Bitmap getTaskDescriptionIcon(String filename, int userId) throws RemoteException {
6596         Parcel data = Parcel.obtain();
6597         Parcel reply = Parcel.obtain();
6598         data.writeInterfaceToken(IActivityManager.descriptor);
6599         data.writeString(filename);
6600         data.writeInt(userId);
6601         mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
6602         reply.readException();
6603         final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
6604         data.recycle();
6605         reply.recycle();
6606         return icon;
6607     }
6608
6609     @Override
6610     public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
6611             throws RemoteException {
6612         Parcel data = Parcel.obtain();
6613         Parcel reply = Parcel.obtain();
6614         data.writeInterfaceToken(IActivityManager.descriptor);
6615         if (options == null) {
6616             data.writeInt(0);
6617         } else {
6618             data.writeInt(1);
6619             data.writeBundle(options.toBundle());
6620         }
6621         mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0);
6622         reply.readException();
6623         data.recycle();
6624         reply.recycle();
6625     }
6626
6627     @Override
6628     public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
6629         Parcel data = Parcel.obtain();
6630         Parcel reply = Parcel.obtain();
6631         data.writeInterfaceToken(IActivityManager.descriptor);
6632         data.writeStrongBinder(token);
6633         data.writeInt(visible ? 1 : 0);
6634         mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6635         reply.readException();
6636         boolean success = reply.readInt() > 0;
6637         data.recycle();
6638         reply.recycle();
6639         return success;
6640     }
6641
6642     @Override
6643     public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
6644         Parcel data = Parcel.obtain();
6645         Parcel reply = Parcel.obtain();
6646         data.writeInterfaceToken(IActivityManager.descriptor);
6647         data.writeStrongBinder(token);
6648         mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6649         reply.readException();
6650         final boolean visible = reply.readInt() > 0;
6651         data.recycle();
6652         reply.recycle();
6653         return visible;
6654     }
6655
6656     @Override
6657     public void backgroundResourcesReleased(IBinder token) throws RemoteException {
6658         Parcel data = Parcel.obtain();
6659         Parcel reply = Parcel.obtain();
6660         data.writeInterfaceToken(IActivityManager.descriptor);
6661         data.writeStrongBinder(token);
6662         mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0);
6663         reply.readException();
6664         data.recycle();
6665         reply.recycle();
6666     }
6667
6668     @Override
6669     public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
6670         Parcel data = Parcel.obtain();
6671         Parcel reply = Parcel.obtain();
6672         data.writeInterfaceToken(IActivityManager.descriptor);
6673         data.writeStrongBinder(token);
6674         mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0);
6675         reply.readException();
6676         data.recycle();
6677         reply.recycle();
6678     }
6679
6680     @Override
6681     public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
6682         Parcel data = Parcel.obtain();
6683         Parcel reply = Parcel.obtain();
6684         data.writeInterfaceToken(IActivityManager.descriptor);
6685         data.writeStrongBinder(token);
6686         mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6687         reply.readException();
6688         data.recycle();
6689         reply.recycle();
6690     }
6691
6692     @Override
6693     public void bootAnimationComplete() throws RemoteException {
6694         Parcel data = Parcel.obtain();
6695         Parcel reply = Parcel.obtain();
6696         data.writeInterfaceToken(IActivityManager.descriptor);
6697         mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6698         reply.readException();
6699         data.recycle();
6700         reply.recycle();
6701     }
6702
6703     @Override
6704     public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException {
6705         Parcel data = Parcel.obtain();
6706         Parcel reply = Parcel.obtain();
6707         data.writeInterfaceToken(IActivityManager.descriptor);
6708         data.writeInt(uid);
6709         data.writeByteArray(firstPacket);
6710         mRemote.transact(NOTIFY_CLEARTEXT_NETWORK_TRANSACTION, data, reply, 0);
6711         reply.readException();
6712         data.recycle();
6713         reply.recycle();
6714     }
6715
6716     @Override
6717     public void setDumpHeapDebugLimit(String processName, int uid, long maxMemSize,
6718             String reportPackage) throws RemoteException {
6719         Parcel data = Parcel.obtain();
6720         Parcel reply = Parcel.obtain();
6721         data.writeInterfaceToken(IActivityManager.descriptor);
6722         data.writeString(processName);
6723         data.writeInt(uid);
6724         data.writeLong(maxMemSize);
6725         data.writeString(reportPackage);
6726         mRemote.transact(SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION, data, reply, 0);
6727         reply.readException();
6728         data.recycle();
6729         reply.recycle();
6730     }
6731
6732     @Override
6733     public void dumpHeapFinished(String path) throws RemoteException {
6734         Parcel data = Parcel.obtain();
6735         Parcel reply = Parcel.obtain();
6736         data.writeInterfaceToken(IActivityManager.descriptor);
6737         data.writeString(path);
6738         mRemote.transact(DUMP_HEAP_FINISHED_TRANSACTION, data, reply, 0);
6739         reply.readException();
6740         data.recycle();
6741         reply.recycle();
6742     }
6743
6744     @Override
6745     public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake)
6746             throws RemoteException {
6747         Parcel data = Parcel.obtain();
6748         Parcel reply = Parcel.obtain();
6749         data.writeInterfaceToken(IActivityManager.descriptor);
6750         data.writeStrongBinder(session.asBinder());
6751         data.writeInt(keepAwake ? 1 : 0);
6752         mRemote.transact(SET_VOICE_KEEP_AWAKE_TRANSACTION, data, reply, 0);
6753         reply.readException();
6754         data.recycle();
6755         reply.recycle();
6756     }
6757
6758     @Override
6759     public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException {
6760         Parcel data = Parcel.obtain();
6761         Parcel reply = Parcel.obtain();
6762         data.writeInterfaceToken(IActivityManager.descriptor);
6763         data.writeInt(userId);
6764         data.writeStringArray(packages);
6765         mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0);
6766         reply.readException();
6767         data.recycle();
6768         reply.recycle();
6769     }
6770
6771     @Override
6772     public void updateDeviceOwner(String packageName) throws RemoteException {
6773         Parcel data = Parcel.obtain();
6774         Parcel reply = Parcel.obtain();
6775         data.writeInterfaceToken(IActivityManager.descriptor);
6776         data.writeString(packageName);
6777         mRemote.transact(UPDATE_DEVICE_OWNER_TRANSACTION, data, reply, 0);
6778         reply.readException();
6779         data.recycle();
6780         reply.recycle();
6781     }
6782
6783     @Override
6784     public int getPackageProcessState(String packageName, String callingPackage)
6785             throws RemoteException {
6786         Parcel data = Parcel.obtain();
6787         Parcel reply = Parcel.obtain();
6788         data.writeInterfaceToken(IActivityManager.descriptor);
6789         data.writeString(packageName);
6790         data.writeString(callingPackage);
6791         mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0);
6792         reply.readException();
6793         int res = reply.readInt();
6794         data.recycle();
6795         reply.recycle();
6796         return res;
6797     }
6798
6799     @Override
6800     public boolean setProcessMemoryTrimLevel(String process, int userId, int level)
6801             throws RemoteException {
6802         Parcel data = Parcel.obtain();
6803         Parcel reply = Parcel.obtain();
6804         data.writeInterfaceToken(IActivityManager.descriptor);
6805         data.writeString(process);
6806         data.writeInt(userId);
6807         data.writeInt(level);
6808         mRemote.transact(SET_PROCESS_MEMORY_TRIM_TRANSACTION, data, reply, 0);
6809         reply.readException();
6810         int res = reply.readInt();
6811         data.recycle();
6812         reply.recycle();
6813         return res != 0;
6814     }
6815
6816     @Override
6817     public boolean isRootVoiceInteraction(IBinder token) throws RemoteException {
6818         Parcel data = Parcel.obtain();
6819         Parcel reply = Parcel.obtain();
6820         data.writeInterfaceToken(IActivityManager.descriptor);
6821         data.writeStrongBinder(token);
6822         mRemote.transact(IS_ROOT_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
6823         reply.readException();
6824         int res = reply.readInt();
6825         data.recycle();
6826         reply.recycle();
6827         return res != 0;
6828     }
6829
6830     @Override
6831     public void exitFreeformMode(IBinder token) throws RemoteException {
6832         Parcel data = Parcel.obtain();
6833         Parcel reply = Parcel.obtain();
6834         data.writeInterfaceToken(IActivityManager.descriptor);
6835         data.writeStrongBinder(token);
6836         mRemote.transact(EXIT_FREEFORM_MODE_TRANSACTION, data, reply, 0);
6837         reply.readException();
6838         data.recycle();
6839         reply.recycle();
6840     }
6841
6842     @Override
6843     public int getActivityStackId(IBinder token) throws RemoteException {
6844         Parcel data = Parcel.obtain();
6845         Parcel reply = Parcel.obtain();
6846         data.writeInterfaceToken(IActivityManager.descriptor);
6847         data.writeStrongBinder(token);
6848         mRemote.transact(GET_ACTIVITY_STACK_ID_TRANSACTION, data, reply, 0);
6849         reply.readException();
6850         int stackId = reply.readInt();
6851         data.recycle();
6852         reply.recycle();
6853         return stackId;
6854     }
6855
6856     @Override
6857     public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
6858             int[] verticalSizeConfigurations, int[] smallestSizeConfigurations)
6859             throws RemoteException {
6860         Parcel data = Parcel.obtain();
6861         Parcel reply = Parcel.obtain();
6862         data.writeInterfaceToken(IActivityManager.descriptor);
6863         data.writeStrongBinder(token);
6864         writeIntArray(horizontalSizeConfiguration, data);
6865         writeIntArray(verticalSizeConfigurations, data);
6866         writeIntArray(smallestSizeConfigurations, data);
6867         mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
6868         reply.readException();
6869         data.recycle();
6870         reply.recycle();
6871     }
6872
6873     private static void writeIntArray(int[] array, Parcel data) {
6874         if (array == null) {
6875             data.writeInt(0);
6876         } else {
6877             data.writeInt(array.length);
6878             data.writeIntArray(array);
6879         }
6880     }
6881
6882     @Override
6883     public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
6884         Parcel data = Parcel.obtain();
6885         Parcel reply = Parcel.obtain();
6886         data.writeInterfaceToken(IActivityManager.descriptor);
6887         data.writeInt(suppress ? 1 : 0);
6888         mRemote.transact(SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION, data, reply, 0);
6889         reply.readException();
6890         data.recycle();
6891         reply.recycle();
6892     }
6893
6894     @Override
6895     public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException {
6896         Parcel data = Parcel.obtain();
6897         Parcel reply = Parcel.obtain();
6898         data.writeInterfaceToken(IActivityManager.descriptor);
6899         data.writeInt(fromStackId);
6900         data.writeInt(onTop ? 1 : 0);
6901         mRemote.transact(MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION, data, reply, 0);
6902         reply.readException();
6903         data.recycle();
6904         reply.recycle();
6905     }
6906
6907     @Override
6908     public int getAppStartMode(int uid, String packageName) throws RemoteException {
6909         Parcel data = Parcel.obtain();
6910         Parcel reply = Parcel.obtain();
6911         data.writeInterfaceToken(IActivityManager.descriptor);
6912         data.writeInt(uid);
6913         data.writeString(packageName);
6914         mRemote.transact(GET_APP_START_MODE_TRANSACTION, data, reply, 0);
6915         reply.readException();
6916         int res = reply.readInt();
6917         data.recycle();
6918         reply.recycle();
6919         return res;
6920     }
6921
6922     @Override
6923     public boolean isInMultiWindowMode(IBinder token) throws RemoteException {
6924         Parcel data = Parcel.obtain();
6925         Parcel reply = Parcel.obtain();
6926         data.writeInterfaceToken(IActivityManager.descriptor);
6927         data.writeStrongBinder(token);
6928         mRemote.transact(IN_MULTI_WINDOW_TRANSACTION, data, reply, 0);
6929         reply.readException();
6930         final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
6931         data.recycle();
6932         reply.recycle();
6933         return multiWindowMode;
6934     }
6935
6936     @Override
6937     public boolean isInPictureInPictureMode(IBinder token) throws RemoteException {
6938         Parcel data = Parcel.obtain();
6939         Parcel reply = Parcel.obtain();
6940         data.writeInterfaceToken(IActivityManager.descriptor);
6941         data.writeStrongBinder(token);
6942         mRemote.transact(IN_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6943         reply.readException();
6944         final boolean pipMode = reply.readInt() == 1 ? true : false;
6945         data.recycle();
6946         reply.recycle();
6947         return pipMode;
6948     }
6949
6950     @Override
6951     public void enterPictureInPictureMode(IBinder token) throws RemoteException {
6952         Parcel data = Parcel.obtain();
6953         Parcel reply = Parcel.obtain();
6954         data.writeInterfaceToken(IActivityManager.descriptor);
6955         data.writeStrongBinder(token);
6956         mRemote.transact(ENTER_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6957         reply.readException();
6958         data.recycle();
6959         reply.recycle();
6960     }
6961
6962     @Override
6963     public boolean isAppForeground(int uid) throws RemoteException {
6964         Parcel data = Parcel.obtain();
6965         Parcel reply = Parcel.obtain();
6966         data.writeInterfaceToken(IActivityManager.descriptor);
6967         data.writeInt(uid);
6968         mRemote.transact(IS_APP_FOREGROUND_TRANSACTION, data, reply, 0);
6969         final boolean isForeground = reply.readInt() == 1 ? true : false;
6970         data.recycle();
6971         reply.recycle();
6972         return isForeground;
6973     };
6974
6975     @Override
6976     public void notifyPinnedStackAnimationEnded() throws RemoteException {
6977         Parcel data = Parcel.obtain();
6978         Parcel reply = Parcel.obtain();
6979         data.writeInterfaceToken(IActivityManager.descriptor);
6980         mRemote.transact(NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION, data, reply, 0);
6981         data.recycle();
6982         reply.recycle();
6983     };
6984
6985     @Override
6986     public void removeStack(int stackId) throws RemoteException {
6987         Parcel data = Parcel.obtain();
6988         Parcel reply = Parcel.obtain();
6989         data.writeInterfaceToken(IActivityManager.descriptor);
6990         data.writeInt(stackId);
6991         mRemote.transact(REMOVE_STACK, data, reply, 0);
6992         reply.readException();
6993         data.recycle();
6994         reply.recycle();
6995     }
6996
6997     @Override
6998     public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException {
6999         Parcel data = Parcel.obtain();
7000         Parcel reply = Parcel.obtain();
7001         data.writeInterfaceToken(IActivityManager.descriptor);
7002         data.writeInt(userId);
7003         mRemote.transact(NOTIFY_LOCKED_PROFILE, data, reply, 0);
7004         reply.readException();
7005         data.recycle();
7006         reply.recycle();
7007     }
7008
7009     @Override
7010     public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException {
7011         Parcel data = Parcel.obtain();
7012         Parcel reply = Parcel.obtain();
7013         data.writeInterfaceToken(IActivityManager.descriptor);
7014         intent.writeToParcel(data, 0);
7015         mRemote.transact(START_CONFIRM_DEVICE_CREDENTIAL_INTENT, data, reply, 0);
7016         reply.readException();
7017         data.recycle();
7018         reply.recycle();
7019     }
7020
7021     @Override
7022     public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
7023             IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
7024             throws RemoteException {
7025         Parcel data = Parcel.obtain();
7026         Parcel reply = Parcel.obtain();
7027         data.writeInterfaceToken(IActivityManager.descriptor);
7028         data.writeStrongBinder(target.asBinder());
7029         data.writeInt(code);
7030         if ((intent!=null)) {
7031             data.writeInt(1);
7032             intent.writeToParcel(data, 0);
7033         }
7034         else {
7035             data.writeInt(0);
7036         }
7037         data.writeString(resolvedType);
7038         data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
7039         data.writeString(requiredPermission);
7040         if ((options!=null)) {
7041             data.writeInt(1);
7042             options.writeToParcel(data, 0);
7043         }
7044         else {
7045             data.writeInt(0);
7046         }
7047         mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
7048         reply.readException();
7049         final int res = reply.readInt();
7050         data.recycle();
7051         reply.recycle();
7052         return res;
7053     }
7054
7055     @Override
7056     public void setVrThread(int tid)
7057         throws RemoteException {
7058         Parcel data = Parcel.obtain();
7059         Parcel reply = Parcel.obtain();
7060         data.writeInterfaceToken(IActivityManager.descriptor);
7061         data.writeInt(tid);
7062         mRemote.transact(SET_VR_THREAD_TRANSACTION, data, reply, 0);
7063         reply.readException();
7064         data.recycle();
7065         reply.recycle();
7066         return;
7067     }
7068
7069     public void setRenderThread(int tid)
7070         throws RemoteException {
7071         Parcel data = Parcel.obtain();
7072         Parcel reply = Parcel.obtain();
7073         data.writeInterfaceToken(IActivityManager.descriptor);
7074         data.writeInt(tid);
7075         mRemote.transact(SET_RENDER_THREAD_TRANSACTION, data, reply, 0);
7076         reply.readException();
7077         data.recycle();
7078         reply.recycle();
7079         return;
7080     }
7081
7082     public void setHasTopUi(boolean hasTopUi)
7083             throws RemoteException {
7084         Parcel data = Parcel.obtain();
7085         Parcel reply = Parcel.obtain();
7086         data.writeInterfaceToken(IActivityManager.descriptor);
7087         data.writeInt(hasTopUi ? 1 : 0);
7088         mRemote.transact(SET_HAS_TOP_UI, data, reply, 0);
7089         reply.readException();
7090         data.recycle();
7091         reply.recycle();
7092         return;
7093     }
7094
7095     private IBinder mRemote;
7096 }