ActivityManagerNative.java revision 0b77ef9f5199b7cd0956f2bfe049cbd699ca03b4
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
17package android.app;
18
19import android.annotation.UserIdInt;
20import android.app.ActivityManager.StackInfo;
21import android.app.assist.AssistContent;
22import android.app.assist.AssistStructure;
23import android.content.ComponentName;
24import android.content.IIntentReceiver;
25import android.content.IIntentSender;
26import android.content.Intent;
27import android.content.IntentFilter;
28import android.content.IntentSender;
29import android.content.UriPermission;
30import android.content.pm.ApplicationInfo;
31import android.content.pm.ConfigurationInfo;
32import android.content.pm.IPackageDataObserver;
33import android.content.pm.ParceledListSlice;
34import android.content.pm.UserInfo;
35import android.content.res.Configuration;
36import android.graphics.Bitmap;
37import android.graphics.Point;
38import android.graphics.Rect;
39import android.net.Uri;
40import android.os.Binder;
41import android.os.Bundle;
42import android.os.Debug;
43import android.os.IBinder;
44import android.os.IProgressListener;
45import android.os.Parcel;
46import android.os.ParcelFileDescriptor;
47import android.os.Parcelable;
48import android.os.PersistableBundle;
49import android.os.RemoteException;
50import android.os.ServiceManager;
51import android.os.StrictMode;
52import android.service.voice.IVoiceInteractionSession;
53import android.text.TextUtils;
54import android.util.Log;
55import android.util.Singleton;
56import com.android.internal.app.IVoiceInteractor;
57import com.android.internal.os.IResultReceiver;
58
59import java.util.ArrayList;
60import java.util.List;
61
62/** {@hide} */
63public 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            List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
687                    fl, userId);
688            reply.writeNoException();
689            reply.writeTypedList(list);
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_WITH_APPID_TRANSACTION: {
1817            data.enforceInterface(IActivityManager.descriptor);
1818            String pkg = data.readString();
1819            int appid = data.readInt();
1820            String reason = data.readString();
1821            killApplicationWithAppId(pkg, appid, reason);
1822            reply.writeNoException();
1823            return true;
1824        }
1825
1826        case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1827            data.enforceInterface(IActivityManager.descriptor);
1828            String reason = data.readString();
1829            closeSystemDialogs(reason);
1830            reply.writeNoException();
1831            return true;
1832        }
1833
1834        case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1835            data.enforceInterface(IActivityManager.descriptor);
1836            int[] pids = data.createIntArray();
1837            Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
1838            reply.writeNoException();
1839            reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1840            return true;
1841        }
1842
1843        case KILL_APPLICATION_PROCESS_TRANSACTION: {
1844            data.enforceInterface(IActivityManager.descriptor);
1845            String processName = data.readString();
1846            int uid = data.readInt();
1847            killApplicationProcess(processName, uid);
1848            reply.writeNoException();
1849            return true;
1850        }
1851
1852        case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
1853            data.enforceInterface(IActivityManager.descriptor);
1854            IBinder token = data.readStrongBinder();
1855            String packageName = data.readString();
1856            int enterAnim = data.readInt();
1857            int exitAnim = data.readInt();
1858            overridePendingTransition(token, packageName, enterAnim, exitAnim);
1859            reply.writeNoException();
1860            return true;
1861        }
1862
1863        case IS_USER_A_MONKEY_TRANSACTION: {
1864            data.enforceInterface(IActivityManager.descriptor);
1865            boolean areThey = isUserAMonkey();
1866            reply.writeNoException();
1867            reply.writeInt(areThey ? 1 : 0);
1868            return true;
1869        }
1870
1871        case SET_USER_IS_MONKEY_TRANSACTION: {
1872            data.enforceInterface(IActivityManager.descriptor);
1873            final boolean monkey = (data.readInt() == 1);
1874            setUserIsMonkey(monkey);
1875            reply.writeNoException();
1876            return true;
1877        }
1878
1879        case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
1880            data.enforceInterface(IActivityManager.descriptor);
1881            finishHeavyWeightApp();
1882            reply.writeNoException();
1883            return true;
1884        }
1885
1886        case IS_IMMERSIVE_TRANSACTION: {
1887            data.enforceInterface(IActivityManager.descriptor);
1888            IBinder token = data.readStrongBinder();
1889            boolean isit = isImmersive(token);
1890            reply.writeNoException();
1891            reply.writeInt(isit ? 1 : 0);
1892            return true;
1893        }
1894
1895        case IS_TOP_OF_TASK_TRANSACTION: {
1896            data.enforceInterface(IActivityManager.descriptor);
1897            IBinder token = data.readStrongBinder();
1898            final boolean isTopOfTask = isTopOfTask(token);
1899            reply.writeNoException();
1900            reply.writeInt(isTopOfTask ? 1 : 0);
1901            return true;
1902        }
1903
1904        case CONVERT_FROM_TRANSLUCENT_TRANSACTION: {
1905            data.enforceInterface(IActivityManager.descriptor);
1906            IBinder token = data.readStrongBinder();
1907            boolean converted = convertFromTranslucent(token);
1908            reply.writeNoException();
1909            reply.writeInt(converted ? 1 : 0);
1910            return true;
1911        }
1912
1913        case CONVERT_TO_TRANSLUCENT_TRANSACTION: {
1914            data.enforceInterface(IActivityManager.descriptor);
1915            IBinder token = data.readStrongBinder();
1916            final Bundle bundle;
1917            if (data.readInt() == 0) {
1918                bundle = null;
1919            } else {
1920                bundle = data.readBundle();
1921            }
1922            final ActivityOptions options = ActivityOptions.fromBundle(bundle);
1923            boolean converted = convertToTranslucent(token, options);
1924            reply.writeNoException();
1925            reply.writeInt(converted ? 1 : 0);
1926            return true;
1927        }
1928
1929        case GET_ACTIVITY_OPTIONS_TRANSACTION: {
1930            data.enforceInterface(IActivityManager.descriptor);
1931            IBinder token = data.readStrongBinder();
1932            final ActivityOptions options = getActivityOptions(token);
1933            reply.writeNoException();
1934            reply.writeBundle(options == null ? null : options.toBundle());
1935            return true;
1936        }
1937
1938        case SET_IMMERSIVE_TRANSACTION: {
1939            data.enforceInterface(IActivityManager.descriptor);
1940            IBinder token = data.readStrongBinder();
1941            boolean imm = data.readInt() == 1;
1942            setImmersive(token, imm);
1943            reply.writeNoException();
1944            return true;
1945        }
1946
1947        case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
1948            data.enforceInterface(IActivityManager.descriptor);
1949            boolean isit = isTopActivityImmersive();
1950            reply.writeNoException();
1951            reply.writeInt(isit ? 1 : 0);
1952            return true;
1953        }
1954
1955        case CRASH_APPLICATION_TRANSACTION: {
1956            data.enforceInterface(IActivityManager.descriptor);
1957            int uid = data.readInt();
1958            int initialPid = data.readInt();
1959            String packageName = data.readString();
1960            String message = data.readString();
1961            crashApplication(uid, initialPid, packageName, message);
1962            reply.writeNoException();
1963            return true;
1964        }
1965
1966        case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
1967            data.enforceInterface(IActivityManager.descriptor);
1968            Uri uri = Uri.CREATOR.createFromParcel(data);
1969            int userId = data.readInt();
1970            String type = getProviderMimeType(uri, userId);
1971            reply.writeNoException();
1972            reply.writeString(type);
1973            return true;
1974        }
1975
1976        case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
1977            data.enforceInterface(IActivityManager.descriptor);
1978            String name = data.readString();
1979            IBinder perm = newUriPermissionOwner(name);
1980            reply.writeNoException();
1981            reply.writeStrongBinder(perm);
1982            return true;
1983        }
1984
1985        case GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION: {
1986            data.enforceInterface(IActivityManager.descriptor);
1987            IBinder activityToken = data.readStrongBinder();
1988            IBinder perm = getUriPermissionOwnerForActivity(activityToken);
1989            reply.writeNoException();
1990            reply.writeStrongBinder(perm);
1991            return true;
1992        }
1993
1994        case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1995            data.enforceInterface(IActivityManager.descriptor);
1996            IBinder owner = data.readStrongBinder();
1997            int fromUid = data.readInt();
1998            String targetPkg = data.readString();
1999            Uri uri = Uri.CREATOR.createFromParcel(data);
2000            int mode = data.readInt();
2001            int sourceUserId = data.readInt();
2002            int targetUserId = data.readInt();
2003            grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode, sourceUserId,
2004                    targetUserId);
2005            reply.writeNoException();
2006            return true;
2007        }
2008
2009        case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
2010            data.enforceInterface(IActivityManager.descriptor);
2011            IBinder owner = data.readStrongBinder();
2012            Uri uri = null;
2013            if (data.readInt() != 0) {
2014                uri = Uri.CREATOR.createFromParcel(data);
2015            }
2016            int mode = data.readInt();
2017            int userId = data.readInt();
2018            revokeUriPermissionFromOwner(owner, uri, mode, userId);
2019            reply.writeNoException();
2020            return true;
2021        }
2022
2023        case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
2024            data.enforceInterface(IActivityManager.descriptor);
2025            int callingUid = data.readInt();
2026            String targetPkg = data.readString();
2027            Uri uri = Uri.CREATOR.createFromParcel(data);
2028            int modeFlags = data.readInt();
2029            int userId = data.readInt();
2030            int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags, userId);
2031            reply.writeNoException();
2032            reply.writeInt(res);
2033            return true;
2034        }
2035
2036        case DUMP_HEAP_TRANSACTION: {
2037            data.enforceInterface(IActivityManager.descriptor);
2038            String process = data.readString();
2039            int userId = data.readInt();
2040            boolean managed = data.readInt() != 0;
2041            String path = data.readString();
2042            ParcelFileDescriptor fd = data.readInt() != 0
2043                    ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
2044            boolean res = dumpHeap(process, userId, managed, path, fd);
2045            reply.writeNoException();
2046            reply.writeInt(res ? 1 : 0);
2047            return true;
2048        }
2049
2050        case START_ACTIVITIES_TRANSACTION:
2051        {
2052            data.enforceInterface(IActivityManager.descriptor);
2053            IBinder b = data.readStrongBinder();
2054            IApplicationThread app = ApplicationThreadNative.asInterface(b);
2055            String callingPackage = data.readString();
2056            Intent[] intents = data.createTypedArray(Intent.CREATOR);
2057            String[] resolvedTypes = data.createStringArray();
2058            IBinder resultTo = data.readStrongBinder();
2059            Bundle options = data.readInt() != 0
2060                    ? Bundle.CREATOR.createFromParcel(data) : null;
2061            int userId = data.readInt();
2062            int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
2063                    options, userId);
2064            reply.writeNoException();
2065            reply.writeInt(result);
2066            return true;
2067        }
2068
2069        case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
2070        {
2071            data.enforceInterface(IActivityManager.descriptor);
2072            int mode = getFrontActivityScreenCompatMode();
2073            reply.writeNoException();
2074            reply.writeInt(mode);
2075            return true;
2076        }
2077
2078        case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
2079        {
2080            data.enforceInterface(IActivityManager.descriptor);
2081            int mode = data.readInt();
2082            setFrontActivityScreenCompatMode(mode);
2083            reply.writeNoException();
2084            reply.writeInt(mode);
2085            return true;
2086        }
2087
2088        case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
2089        {
2090            data.enforceInterface(IActivityManager.descriptor);
2091            String pkg = data.readString();
2092            int mode = getPackageScreenCompatMode(pkg);
2093            reply.writeNoException();
2094            reply.writeInt(mode);
2095            return true;
2096        }
2097
2098        case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
2099        {
2100            data.enforceInterface(IActivityManager.descriptor);
2101            String pkg = data.readString();
2102            int mode = data.readInt();
2103            setPackageScreenCompatMode(pkg, mode);
2104            reply.writeNoException();
2105            return true;
2106        }
2107
2108        case SWITCH_USER_TRANSACTION: {
2109            data.enforceInterface(IActivityManager.descriptor);
2110            int userid = data.readInt();
2111            boolean result = switchUser(userid);
2112            reply.writeNoException();
2113            reply.writeInt(result ? 1 : 0);
2114            return true;
2115        }
2116
2117        case START_USER_IN_BACKGROUND_TRANSACTION: {
2118            data.enforceInterface(IActivityManager.descriptor);
2119            int userid = data.readInt();
2120            boolean result = startUserInBackground(userid);
2121            reply.writeNoException();
2122            reply.writeInt(result ? 1 : 0);
2123            return true;
2124        }
2125
2126        case UNLOCK_USER_TRANSACTION: {
2127            data.enforceInterface(IActivityManager.descriptor);
2128            int userId = data.readInt();
2129            byte[] token = data.createByteArray();
2130            byte[] secret = data.createByteArray();
2131            IProgressListener listener = IProgressListener.Stub
2132                    .asInterface(data.readStrongBinder());
2133            boolean result = unlockUser(userId, token, secret, listener);
2134            reply.writeNoException();
2135            reply.writeInt(result ? 1 : 0);
2136            return true;
2137        }
2138
2139        case STOP_USER_TRANSACTION: {
2140            data.enforceInterface(IActivityManager.descriptor);
2141            int userid = data.readInt();
2142            boolean force = data.readInt() != 0;
2143            IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
2144                    data.readStrongBinder());
2145            int result = stopUser(userid, force, callback);
2146            reply.writeNoException();
2147            reply.writeInt(result);
2148            return true;
2149        }
2150
2151        case GET_CURRENT_USER_TRANSACTION: {
2152            data.enforceInterface(IActivityManager.descriptor);
2153            UserInfo userInfo = getCurrentUser();
2154            reply.writeNoException();
2155            userInfo.writeToParcel(reply, 0);
2156            return true;
2157        }
2158
2159        case IS_USER_RUNNING_TRANSACTION: {
2160            data.enforceInterface(IActivityManager.descriptor);
2161            int userid = data.readInt();
2162            int _flags = data.readInt();
2163            boolean result = isUserRunning(userid, _flags);
2164            reply.writeNoException();
2165            reply.writeInt(result ? 1 : 0);
2166            return true;
2167        }
2168
2169        case GET_RUNNING_USER_IDS_TRANSACTION: {
2170            data.enforceInterface(IActivityManager.descriptor);
2171            int[] result = getRunningUserIds();
2172            reply.writeNoException();
2173            reply.writeIntArray(result);
2174            return true;
2175        }
2176
2177        case REMOVE_TASK_TRANSACTION:
2178        {
2179            data.enforceInterface(IActivityManager.descriptor);
2180            int taskId = data.readInt();
2181            boolean result = removeTask(taskId);
2182            reply.writeNoException();
2183            reply.writeInt(result ? 1 : 0);
2184            return true;
2185        }
2186
2187        case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
2188            data.enforceInterface(IActivityManager.descriptor);
2189            IProcessObserver observer = IProcessObserver.Stub.asInterface(
2190                    data.readStrongBinder());
2191            registerProcessObserver(observer);
2192            return true;
2193        }
2194
2195        case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
2196            data.enforceInterface(IActivityManager.descriptor);
2197            IProcessObserver observer = IProcessObserver.Stub.asInterface(
2198                    data.readStrongBinder());
2199            unregisterProcessObserver(observer);
2200            return true;
2201        }
2202
2203        case REGISTER_UID_OBSERVER_TRANSACTION: {
2204            data.enforceInterface(IActivityManager.descriptor);
2205            IUidObserver observer = IUidObserver.Stub.asInterface(
2206                    data.readStrongBinder());
2207            int which = data.readInt();
2208            registerUidObserver(observer, which);
2209            return true;
2210        }
2211
2212        case UNREGISTER_UID_OBSERVER_TRANSACTION: {
2213            data.enforceInterface(IActivityManager.descriptor);
2214            IUidObserver observer = IUidObserver.Stub.asInterface(
2215                    data.readStrongBinder());
2216            unregisterUidObserver(observer);
2217            return true;
2218        }
2219
2220        case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
2221        {
2222            data.enforceInterface(IActivityManager.descriptor);
2223            String pkg = data.readString();
2224            boolean ask = getPackageAskScreenCompat(pkg);
2225            reply.writeNoException();
2226            reply.writeInt(ask ? 1 : 0);
2227            return true;
2228        }
2229
2230        case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
2231        {
2232            data.enforceInterface(IActivityManager.descriptor);
2233            String pkg = data.readString();
2234            boolean ask = data.readInt() != 0;
2235            setPackageAskScreenCompat(pkg, ask);
2236            reply.writeNoException();
2237            return true;
2238        }
2239
2240        case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
2241            data.enforceInterface(IActivityManager.descriptor);
2242            IIntentSender r = IIntentSender.Stub.asInterface(
2243                    data.readStrongBinder());
2244            boolean res = isIntentSenderTargetedToPackage(r);
2245            reply.writeNoException();
2246            reply.writeInt(res ? 1 : 0);
2247            return true;
2248        }
2249
2250        case IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION: {
2251            data.enforceInterface(IActivityManager.descriptor);
2252            IIntentSender r = IIntentSender.Stub.asInterface(
2253                data.readStrongBinder());
2254            boolean res = isIntentSenderAnActivity(r);
2255            reply.writeNoException();
2256            reply.writeInt(res ? 1 : 0);
2257            return true;
2258        }
2259
2260        case GET_INTENT_FOR_INTENT_SENDER_TRANSACTION: {
2261            data.enforceInterface(IActivityManager.descriptor);
2262            IIntentSender r = IIntentSender.Stub.asInterface(
2263                data.readStrongBinder());
2264            Intent intent = getIntentForIntentSender(r);
2265            reply.writeNoException();
2266            if (intent != null) {
2267                reply.writeInt(1);
2268                intent.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2269            } else {
2270                reply.writeInt(0);
2271            }
2272            return true;
2273        }
2274
2275        case GET_TAG_FOR_INTENT_SENDER_TRANSACTION: {
2276            data.enforceInterface(IActivityManager.descriptor);
2277            IIntentSender r = IIntentSender.Stub.asInterface(
2278                data.readStrongBinder());
2279            String prefix = data.readString();
2280            String tag = getTagForIntentSender(r, prefix);
2281            reply.writeNoException();
2282            reply.writeString(tag);
2283            return true;
2284        }
2285
2286        case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
2287            data.enforceInterface(IActivityManager.descriptor);
2288            Configuration config = Configuration.CREATOR.createFromParcel(data);
2289            updatePersistentConfiguration(config);
2290            reply.writeNoException();
2291            return true;
2292        }
2293
2294        case GET_PROCESS_PSS_TRANSACTION: {
2295            data.enforceInterface(IActivityManager.descriptor);
2296            int[] pids = data.createIntArray();
2297            long[] pss = getProcessPss(pids);
2298            reply.writeNoException();
2299            reply.writeLongArray(pss);
2300            return true;
2301        }
2302
2303        case SHOW_BOOT_MESSAGE_TRANSACTION: {
2304            data.enforceInterface(IActivityManager.descriptor);
2305            CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
2306            boolean always = data.readInt() != 0;
2307            showBootMessage(msg, always);
2308            reply.writeNoException();
2309            return true;
2310        }
2311
2312        case KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION: {
2313            data.enforceInterface(IActivityManager.descriptor);
2314            keyguardWaitingForActivityDrawn();
2315            reply.writeNoException();
2316            return true;
2317        }
2318
2319        case KEYGUARD_GOING_AWAY_TRANSACTION: {
2320            data.enforceInterface(IActivityManager.descriptor);
2321            keyguardGoingAway(data.readInt());
2322            reply.writeNoException();
2323            return true;
2324        }
2325
2326        case SHOULD_UP_RECREATE_TASK_TRANSACTION: {
2327            data.enforceInterface(IActivityManager.descriptor);
2328            IBinder token = data.readStrongBinder();
2329            String destAffinity = data.readString();
2330            boolean res = shouldUpRecreateTask(token, destAffinity);
2331            reply.writeNoException();
2332            reply.writeInt(res ? 1 : 0);
2333            return true;
2334        }
2335
2336        case NAVIGATE_UP_TO_TRANSACTION: {
2337            data.enforceInterface(IActivityManager.descriptor);
2338            IBinder token = data.readStrongBinder();
2339            Intent target = Intent.CREATOR.createFromParcel(data);
2340            int resultCode = data.readInt();
2341            Intent resultData = null;
2342            if (data.readInt() != 0) {
2343                resultData = Intent.CREATOR.createFromParcel(data);
2344            }
2345            boolean res = navigateUpTo(token, target, resultCode, resultData);
2346            reply.writeNoException();
2347            reply.writeInt(res ? 1 : 0);
2348            return true;
2349        }
2350
2351        case GET_LAUNCHED_FROM_UID_TRANSACTION: {
2352            data.enforceInterface(IActivityManager.descriptor);
2353            IBinder token = data.readStrongBinder();
2354            int res = getLaunchedFromUid(token);
2355            reply.writeNoException();
2356            reply.writeInt(res);
2357            return true;
2358        }
2359
2360        case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
2361            data.enforceInterface(IActivityManager.descriptor);
2362            IBinder token = data.readStrongBinder();
2363            String res = getLaunchedFromPackage(token);
2364            reply.writeNoException();
2365            reply.writeString(res);
2366            return true;
2367        }
2368
2369        case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2370            data.enforceInterface(IActivityManager.descriptor);
2371            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2372                    data.readStrongBinder());
2373            String name = data.readString();
2374            registerUserSwitchObserver(observer, name);
2375            reply.writeNoException();
2376            return true;
2377        }
2378
2379        case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2380            data.enforceInterface(IActivityManager.descriptor);
2381            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2382                    data.readStrongBinder());
2383            unregisterUserSwitchObserver(observer);
2384            reply.writeNoException();
2385            return true;
2386        }
2387
2388        case REQUEST_BUG_REPORT_TRANSACTION: {
2389            data.enforceInterface(IActivityManager.descriptor);
2390            int bugreportType = data.readInt();
2391            requestBugReport(bugreportType);
2392            reply.writeNoException();
2393            return true;
2394        }
2395
2396        case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
2397            data.enforceInterface(IActivityManager.descriptor);
2398            int pid = data.readInt();
2399            boolean aboveSystem = data.readInt() != 0;
2400            String reason = data.readString();
2401            long res = inputDispatchingTimedOut(pid, aboveSystem, reason);
2402            reply.writeNoException();
2403            reply.writeLong(res);
2404            return true;
2405        }
2406
2407        case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2408            data.enforceInterface(IActivityManager.descriptor);
2409            int requestType = data.readInt();
2410            Bundle res = getAssistContextExtras(requestType);
2411            reply.writeNoException();
2412            reply.writeBundle(res);
2413            return true;
2414        }
2415
2416        case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2417            data.enforceInterface(IActivityManager.descriptor);
2418            int requestType = data.readInt();
2419            IResultReceiver receiver = IResultReceiver.Stub.asInterface(data.readStrongBinder());
2420            Bundle receiverExtras = data.readBundle();
2421            IBinder activityToken = data.readStrongBinder();
2422            boolean focused = data.readInt() == 1;
2423            boolean newSessionId = data.readInt() == 1;
2424            boolean res = requestAssistContextExtras(requestType, receiver, receiverExtras,
2425                    activityToken, focused, newSessionId);
2426            reply.writeNoException();
2427            reply.writeInt(res ? 1 : 0);
2428            return true;
2429        }
2430
2431        case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2432            data.enforceInterface(IActivityManager.descriptor);
2433            IBinder token = data.readStrongBinder();
2434            Bundle extras = data.readBundle();
2435            AssistStructure structure = AssistStructure.CREATOR.createFromParcel(data);
2436            AssistContent content = AssistContent.CREATOR.createFromParcel(data);
2437            Uri referrer = data.readInt() != 0 ? Uri.CREATOR.createFromParcel(data) : null;
2438            reportAssistContextExtras(token, extras, structure, content, referrer);
2439            reply.writeNoException();
2440            return true;
2441        }
2442
2443        case LAUNCH_ASSIST_INTENT_TRANSACTION: {
2444            data.enforceInterface(IActivityManager.descriptor);
2445            Intent intent = Intent.CREATOR.createFromParcel(data);
2446            int requestType = data.readInt();
2447            String hint = data.readString();
2448            int userHandle = data.readInt();
2449            Bundle args = data.readBundle();
2450            boolean res = launchAssistIntent(intent, requestType, hint, userHandle, args);
2451            reply.writeNoException();
2452            reply.writeInt(res ? 1 : 0);
2453            return true;
2454        }
2455
2456        case IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION: {
2457            data.enforceInterface(IActivityManager.descriptor);
2458            boolean res = isAssistDataAllowedOnCurrentActivity();
2459            reply.writeNoException();
2460            reply.writeInt(res ? 1 : 0);
2461            return true;
2462        }
2463
2464        case SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION: {
2465            data.enforceInterface(IActivityManager.descriptor);
2466            IBinder token = data.readStrongBinder();
2467            Bundle args = data.readBundle();
2468            boolean res = showAssistFromActivity(token, args);
2469            reply.writeNoException();
2470            reply.writeInt(res ? 1 : 0);
2471            return true;
2472        }
2473
2474        case KILL_UID_TRANSACTION: {
2475            data.enforceInterface(IActivityManager.descriptor);
2476            int appId = data.readInt();
2477            int userId = data.readInt();
2478            String reason = data.readString();
2479            killUid(appId, userId, reason);
2480            reply.writeNoException();
2481            return true;
2482        }
2483
2484        case HANG_TRANSACTION: {
2485            data.enforceInterface(IActivityManager.descriptor);
2486            IBinder who = data.readStrongBinder();
2487            boolean allowRestart = data.readInt() != 0;
2488            hang(who, allowRestart);
2489            reply.writeNoException();
2490            return true;
2491        }
2492
2493        case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
2494            data.enforceInterface(IActivityManager.descriptor);
2495            IBinder token = data.readStrongBinder();
2496            reportActivityFullyDrawn(token);
2497            reply.writeNoException();
2498            return true;
2499        }
2500
2501        case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
2502            data.enforceInterface(IActivityManager.descriptor);
2503            IBinder token = data.readStrongBinder();
2504            notifyActivityDrawn(token);
2505            reply.writeNoException();
2506            return true;
2507        }
2508
2509        case RESTART_TRANSACTION: {
2510            data.enforceInterface(IActivityManager.descriptor);
2511            restart();
2512            reply.writeNoException();
2513            return true;
2514        }
2515
2516        case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
2517            data.enforceInterface(IActivityManager.descriptor);
2518            performIdleMaintenance();
2519            reply.writeNoException();
2520            return true;
2521        }
2522
2523        case CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION: {
2524            data.enforceInterface(IActivityManager.descriptor);
2525            IBinder parentActivityToken = data.readStrongBinder();
2526            IActivityContainerCallback callback =
2527                    IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
2528            IActivityContainer activityContainer =
2529                    createVirtualActivityContainer(parentActivityToken, callback);
2530            reply.writeNoException();
2531            if (activityContainer != null) {
2532                reply.writeInt(1);
2533                reply.writeStrongBinder(activityContainer.asBinder());
2534            } else {
2535                reply.writeInt(0);
2536            }
2537            return true;
2538        }
2539
2540        case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
2541            data.enforceInterface(IActivityManager.descriptor);
2542            IActivityContainer activityContainer =
2543                    IActivityContainer.Stub.asInterface(data.readStrongBinder());
2544            deleteActivityContainer(activityContainer);
2545            reply.writeNoException();
2546            return true;
2547        }
2548
2549        case CREATE_STACK_ON_DISPLAY: {
2550            data.enforceInterface(IActivityManager.descriptor);
2551            int displayId = data.readInt();
2552            IActivityContainer activityContainer = createStackOnDisplay(displayId);
2553            reply.writeNoException();
2554            if (activityContainer != null) {
2555                reply.writeInt(1);
2556                reply.writeStrongBinder(activityContainer.asBinder());
2557            } else {
2558                reply.writeInt(0);
2559            }
2560            return true;
2561        }
2562
2563        case GET_ACTIVITY_DISPLAY_ID_TRANSACTION: {
2564            data.enforceInterface(IActivityManager.descriptor);
2565            IBinder activityToken = data.readStrongBinder();
2566            int displayId = getActivityDisplayId(activityToken);
2567            reply.writeNoException();
2568            reply.writeInt(displayId);
2569            return true;
2570        }
2571
2572        case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
2573            data.enforceInterface(IActivityManager.descriptor);
2574            final int taskId = data.readInt();
2575            startLockTaskMode(taskId);
2576            reply.writeNoException();
2577            return true;
2578        }
2579
2580        case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
2581            data.enforceInterface(IActivityManager.descriptor);
2582            IBinder token = data.readStrongBinder();
2583            startLockTaskMode(token);
2584            reply.writeNoException();
2585            return true;
2586        }
2587
2588        case START_SYSTEM_LOCK_TASK_TRANSACTION: {
2589            data.enforceInterface(IActivityManager.descriptor);
2590            int taskId = data.readInt();
2591            startSystemLockTaskMode(taskId);
2592            reply.writeNoException();
2593            return true;
2594        }
2595
2596        case STOP_LOCK_TASK_MODE_TRANSACTION: {
2597            data.enforceInterface(IActivityManager.descriptor);
2598            stopLockTaskMode();
2599            reply.writeNoException();
2600            return true;
2601        }
2602
2603        case STOP_SYSTEM_LOCK_TASK_TRANSACTION: {
2604            data.enforceInterface(IActivityManager.descriptor);
2605            stopSystemLockTaskMode();
2606            reply.writeNoException();
2607            return true;
2608        }
2609
2610        case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
2611            data.enforceInterface(IActivityManager.descriptor);
2612            final boolean isInLockTaskMode = isInLockTaskMode();
2613            reply.writeNoException();
2614            reply.writeInt(isInLockTaskMode ? 1 : 0);
2615            return true;
2616        }
2617
2618        case GET_LOCK_TASK_MODE_STATE_TRANSACTION: {
2619            data.enforceInterface(IActivityManager.descriptor);
2620            final int lockTaskModeState = getLockTaskModeState();
2621            reply.writeNoException();
2622            reply.writeInt(lockTaskModeState);
2623            return true;
2624        }
2625
2626        case SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION: {
2627            data.enforceInterface(IActivityManager.descriptor);
2628            final IBinder token = data.readStrongBinder();
2629            showLockTaskEscapeMessage(token);
2630            reply.writeNoException();
2631            return true;
2632        }
2633
2634        case SET_TASK_DESCRIPTION_TRANSACTION: {
2635            data.enforceInterface(IActivityManager.descriptor);
2636            IBinder token = data.readStrongBinder();
2637            ActivityManager.TaskDescription values =
2638                    ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
2639            setTaskDescription(token, values);
2640            reply.writeNoException();
2641            return true;
2642        }
2643
2644        case SET_TASK_RESIZEABLE_TRANSACTION: {
2645            data.enforceInterface(IActivityManager.descriptor);
2646            final int taskId = data.readInt();
2647            final int resizeableMode = data.readInt();
2648            setTaskResizeable(taskId, resizeableMode);
2649            reply.writeNoException();
2650            return true;
2651        }
2652
2653        case RESIZE_TASK_TRANSACTION: {
2654            data.enforceInterface(IActivityManager.descriptor);
2655            int taskId = data.readInt();
2656            int resizeMode = data.readInt();
2657            Rect r = Rect.CREATOR.createFromParcel(data);
2658            resizeTask(taskId, r, resizeMode);
2659            reply.writeNoException();
2660            return true;
2661        }
2662
2663        case GET_TASK_BOUNDS_TRANSACTION: {
2664            data.enforceInterface(IActivityManager.descriptor);
2665            int taskId = data.readInt();
2666            Rect r = getTaskBounds(taskId);
2667            reply.writeNoException();
2668            r.writeToParcel(reply, 0);
2669            return true;
2670        }
2671
2672        case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
2673            data.enforceInterface(IActivityManager.descriptor);
2674            String filename = data.readString();
2675            int userId = data.readInt();
2676            Bitmap icon = getTaskDescriptionIcon(filename, userId);
2677            reply.writeNoException();
2678            if (icon == null) {
2679                reply.writeInt(0);
2680            } else {
2681                reply.writeInt(1);
2682                icon.writeToParcel(reply, 0);
2683            }
2684            return true;
2685        }
2686
2687        case START_IN_PLACE_ANIMATION_TRANSACTION: {
2688            data.enforceInterface(IActivityManager.descriptor);
2689            final Bundle bundle;
2690            if (data.readInt() == 0) {
2691                bundle = null;
2692            } else {
2693                bundle = data.readBundle();
2694            }
2695            final ActivityOptions options = ActivityOptions.fromBundle(bundle);
2696            startInPlaceAnimationOnFrontMostApplication(options);
2697            reply.writeNoException();
2698            return true;
2699        }
2700
2701        case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
2702            data.enforceInterface(IActivityManager.descriptor);
2703            IBinder token = data.readStrongBinder();
2704            boolean enable = data.readInt() > 0;
2705            boolean success = requestVisibleBehind(token, enable);
2706            reply.writeNoException();
2707            reply.writeInt(success ? 1 : 0);
2708            return true;
2709        }
2710
2711        case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
2712            data.enforceInterface(IActivityManager.descriptor);
2713            IBinder token = data.readStrongBinder();
2714            final boolean enabled = isBackgroundVisibleBehind(token);
2715            reply.writeNoException();
2716            reply.writeInt(enabled ? 1 : 0);
2717            return true;
2718        }
2719
2720        case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
2721            data.enforceInterface(IActivityManager.descriptor);
2722            IBinder token = data.readStrongBinder();
2723            backgroundResourcesReleased(token);
2724            reply.writeNoException();
2725            return true;
2726        }
2727
2728        case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
2729            data.enforceInterface(IActivityManager.descriptor);
2730            IBinder token = data.readStrongBinder();
2731            notifyLaunchTaskBehindComplete(token);
2732            reply.writeNoException();
2733            return true;
2734        }
2735
2736        case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
2737            data.enforceInterface(IActivityManager.descriptor);
2738            IBinder token = data.readStrongBinder();
2739            notifyEnterAnimationComplete(token);
2740            reply.writeNoException();
2741            return true;
2742        }
2743
2744        case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
2745            data.enforceInterface(IActivityManager.descriptor);
2746            bootAnimationComplete();
2747            reply.writeNoException();
2748            return true;
2749        }
2750
2751        case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: {
2752            data.enforceInterface(IActivityManager.descriptor);
2753            final int uid = data.readInt();
2754            final byte[] firstPacket = data.createByteArray();
2755            notifyCleartextNetwork(uid, firstPacket);
2756            reply.writeNoException();
2757            return true;
2758        }
2759
2760        case SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION: {
2761            data.enforceInterface(IActivityManager.descriptor);
2762            String procName = data.readString();
2763            int uid = data.readInt();
2764            long maxMemSize = data.readLong();
2765            String reportPackage = data.readString();
2766            setDumpHeapDebugLimit(procName, uid, maxMemSize, reportPackage);
2767            reply.writeNoException();
2768            return true;
2769        }
2770
2771        case DUMP_HEAP_FINISHED_TRANSACTION: {
2772            data.enforceInterface(IActivityManager.descriptor);
2773            String path = data.readString();
2774            dumpHeapFinished(path);
2775            reply.writeNoException();
2776            return true;
2777        }
2778
2779        case SET_VOICE_KEEP_AWAKE_TRANSACTION: {
2780            data.enforceInterface(IActivityManager.descriptor);
2781            IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
2782                    data.readStrongBinder());
2783            boolean keepAwake = data.readInt() != 0;
2784            setVoiceKeepAwake(session, keepAwake);
2785            reply.writeNoException();
2786            return true;
2787        }
2788
2789        case UPDATE_LOCK_TASK_PACKAGES_TRANSACTION: {
2790            data.enforceInterface(IActivityManager.descriptor);
2791            int userId = data.readInt();
2792            String[] packages = data.readStringArray();
2793            updateLockTaskPackages(userId, packages);
2794            reply.writeNoException();
2795            return true;
2796        }
2797
2798        case UPDATE_DEVICE_OWNER_TRANSACTION: {
2799            data.enforceInterface(IActivityManager.descriptor);
2800            String packageName = data.readString();
2801            updateDeviceOwner(packageName);
2802            reply.writeNoException();
2803            return true;
2804        }
2805
2806        case GET_PACKAGE_PROCESS_STATE_TRANSACTION: {
2807            data.enforceInterface(IActivityManager.descriptor);
2808            String pkg = data.readString();
2809            String callingPackage = data.readString();
2810            int res = getPackageProcessState(pkg, callingPackage);
2811            reply.writeNoException();
2812            reply.writeInt(res);
2813            return true;
2814        }
2815
2816        case SET_PROCESS_MEMORY_TRIM_TRANSACTION: {
2817            data.enforceInterface(IActivityManager.descriptor);
2818            String process = data.readString();
2819            int userId = data.readInt();
2820            int level = data.readInt();
2821            boolean res = setProcessMemoryTrimLevel(process, userId, level);
2822            reply.writeNoException();
2823            reply.writeInt(res ? 1 : 0);
2824            return true;
2825        }
2826
2827        case IS_ROOT_VOICE_INTERACTION_TRANSACTION: {
2828            data.enforceInterface(IActivityManager.descriptor);
2829            IBinder token = data.readStrongBinder();
2830            boolean res = isRootVoiceInteraction(token);
2831            reply.writeNoException();
2832            reply.writeInt(res ? 1 : 0);
2833            return true;
2834        }
2835
2836        case START_BINDER_TRACKING_TRANSACTION: {
2837            data.enforceInterface(IActivityManager.descriptor);
2838            boolean res = startBinderTracking();
2839            reply.writeNoException();
2840            reply.writeInt(res ? 1 : 0);
2841            return true;
2842        }
2843
2844        case STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION: {
2845            data.enforceInterface(IActivityManager.descriptor);
2846            ParcelFileDescriptor fd = data.readInt() != 0
2847                    ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
2848            boolean res = stopBinderTrackingAndDump(fd);
2849            reply.writeNoException();
2850            reply.writeInt(res ? 1 : 0);
2851            return true;
2852        }
2853        case GET_ACTIVITY_STACK_ID_TRANSACTION: {
2854            data.enforceInterface(IActivityManager.descriptor);
2855            IBinder token = data.readStrongBinder();
2856            int stackId = getActivityStackId(token);
2857            reply.writeNoException();
2858            reply.writeInt(stackId);
2859            return true;
2860        }
2861        case EXIT_FREEFORM_MODE_TRANSACTION: {
2862            data.enforceInterface(IActivityManager.descriptor);
2863            IBinder token = data.readStrongBinder();
2864            exitFreeformMode(token);
2865            reply.writeNoException();
2866            return true;
2867        }
2868        case REPORT_SIZE_CONFIGURATIONS: {
2869            data.enforceInterface(IActivityManager.descriptor);
2870            IBinder token = data.readStrongBinder();
2871            int[] horizontal = readIntArray(data);
2872            int[] vertical = readIntArray(data);
2873            int[] smallest = readIntArray(data);
2874            reportSizeConfigurations(token, horizontal, vertical, smallest);
2875            return true;
2876        }
2877        case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: {
2878            data.enforceInterface(IActivityManager.descriptor);
2879            final boolean suppress = data.readInt() == 1;
2880            suppressResizeConfigChanges(suppress);
2881            reply.writeNoException();
2882            return true;
2883        }
2884        case MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION: {
2885            data.enforceInterface(IActivityManager.descriptor);
2886            final int stackId = data.readInt();
2887            final boolean onTop = data.readInt() == 1;
2888            moveTasksToFullscreenStack(stackId, onTop);
2889            reply.writeNoException();
2890            return true;
2891        }
2892        case GET_APP_START_MODE_TRANSACTION: {
2893            data.enforceInterface(IActivityManager.descriptor);
2894            final int uid = data.readInt();
2895            final String pkg = data.readString();
2896            int res = getAppStartMode(uid, pkg);
2897            reply.writeNoException();
2898            reply.writeInt(res);
2899            return true;
2900        }
2901        case IN_MULTI_WINDOW_TRANSACTION: {
2902            data.enforceInterface(IActivityManager.descriptor);
2903            final IBinder token = data.readStrongBinder();
2904            final boolean inMultiWindow = isInMultiWindowMode(token);
2905            reply.writeNoException();
2906            reply.writeInt(inMultiWindow ? 1 : 0);
2907            return true;
2908        }
2909        case IN_PICTURE_IN_PICTURE_TRANSACTION: {
2910            data.enforceInterface(IActivityManager.descriptor);
2911            final IBinder token = data.readStrongBinder();
2912            final boolean inPip = isInPictureInPictureMode(token);
2913            reply.writeNoException();
2914            reply.writeInt(inPip ? 1 : 0);
2915            return true;
2916        }
2917        case ENTER_PICTURE_IN_PICTURE_TRANSACTION: {
2918            data.enforceInterface(IActivityManager.descriptor);
2919            final IBinder token = data.readStrongBinder();
2920            enterPictureInPictureMode(token);
2921            reply.writeNoException();
2922            return true;
2923        }
2924        case SET_VR_MODE_TRANSACTION: {
2925            data.enforceInterface(IActivityManager.descriptor);
2926            final IBinder token = data.readStrongBinder();
2927            final boolean enable = data.readInt() == 1;
2928            final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2929            int res = setVrMode(token, enable, packageName);
2930            reply.writeNoException();
2931            reply.writeInt(res);
2932            return true;
2933        }
2934        case IS_VR_PACKAGE_ENABLED_TRANSACTION: {
2935            data.enforceInterface(IActivityManager.descriptor);
2936            final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2937            boolean res = isVrModePackageEnabled(packageName);
2938            reply.writeNoException();
2939            reply.writeInt(res ? 1 : 0);
2940            return true;
2941        }
2942        case IS_APP_FOREGROUND_TRANSACTION: {
2943            data.enforceInterface(IActivityManager.descriptor);
2944            final int userHandle = data.readInt();
2945            final boolean isForeground = isAppForeground(userHandle);
2946            reply.writeNoException();
2947            reply.writeInt(isForeground ? 1 : 0);
2948            return true;
2949        }
2950        case NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION: {
2951            data.enforceInterface(IActivityManager.descriptor);
2952            reply.writeNoException();
2953            return true;
2954        }
2955        case REMOVE_STACK: {
2956            data.enforceInterface(IActivityManager.descriptor);
2957            final int stackId = data.readInt();
2958            removeStack(stackId);
2959            reply.writeNoException();
2960            return true;
2961        }
2962        case NOTIFY_LOCKED_PROFILE: {
2963            data.enforceInterface(IActivityManager.descriptor);
2964            final int userId = data.readInt();
2965            notifyLockedProfile(userId);
2966            reply.writeNoException();
2967            return true;
2968        }
2969        case START_CONFIRM_DEVICE_CREDENTIAL_INTENT: {
2970            data.enforceInterface(IActivityManager.descriptor);
2971            final Intent intent = Intent.CREATOR.createFromParcel(data);
2972            startConfirmDeviceCredentialIntent(intent);
2973            reply.writeNoException();
2974            return true;
2975        }
2976        case SEND_IDLE_JOB_TRIGGER_TRANSACTION: {
2977            data.enforceInterface(IActivityManager.descriptor);
2978            sendIdleJobTrigger();
2979            reply.writeNoException();
2980            return true;
2981        }
2982        case SEND_INTENT_SENDER_TRANSACTION: {
2983            data.enforceInterface(IActivityManager.descriptor);
2984            IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
2985            int scode = data.readInt();
2986            Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
2987            String resolvedType = data.readString();
2988            IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
2989                    data.readStrongBinder());
2990            String requiredPermission = data.readString();
2991            Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
2992            int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
2993                    requiredPermission, options);
2994            reply.writeNoException();
2995            reply.writeInt(result);
2996            return true;
2997        }
2998        }
2999
3000        return super.onTransact(code, data, reply, flags);
3001    }
3002
3003    private int[] readIntArray(Parcel data) {
3004        int[] smallest = null;
3005        int smallestSize = data.readInt();
3006        if (smallestSize > 0) {
3007            smallest = new int[smallestSize];
3008            data.readIntArray(smallest);
3009        }
3010        return smallest;
3011    }
3012
3013    public IBinder asBinder() {
3014        return this;
3015    }
3016
3017    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
3018        protected IActivityManager create() {
3019            IBinder b = ServiceManager.getService("activity");
3020            if (false) {
3021                Log.v("ActivityManager", "default service binder = " + b);
3022            }
3023            IActivityManager am = asInterface(b);
3024            if (false) {
3025                Log.v("ActivityManager", "default service = " + am);
3026            }
3027            return am;
3028        }
3029    };
3030}
3031
3032class ActivityManagerProxy implements IActivityManager
3033{
3034    public ActivityManagerProxy(IBinder remote)
3035    {
3036        mRemote = remote;
3037    }
3038
3039    public IBinder asBinder()
3040    {
3041        return mRemote;
3042    }
3043
3044    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
3045            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3046            int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
3047        Parcel data = Parcel.obtain();
3048        Parcel reply = Parcel.obtain();
3049        data.writeInterfaceToken(IActivityManager.descriptor);
3050        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3051        data.writeString(callingPackage);
3052        intent.writeToParcel(data, 0);
3053        data.writeString(resolvedType);
3054        data.writeStrongBinder(resultTo);
3055        data.writeString(resultWho);
3056        data.writeInt(requestCode);
3057        data.writeInt(startFlags);
3058        if (profilerInfo != null) {
3059            data.writeInt(1);
3060            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3061        } else {
3062            data.writeInt(0);
3063        }
3064        if (options != null) {
3065            data.writeInt(1);
3066            options.writeToParcel(data, 0);
3067        } else {
3068            data.writeInt(0);
3069        }
3070        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
3071        reply.readException();
3072        int result = reply.readInt();
3073        reply.recycle();
3074        data.recycle();
3075        return result;
3076    }
3077
3078    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
3079            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3080            int startFlags, ProfilerInfo profilerInfo, Bundle options,
3081            int userId) throws RemoteException {
3082        Parcel data = Parcel.obtain();
3083        Parcel reply = Parcel.obtain();
3084        data.writeInterfaceToken(IActivityManager.descriptor);
3085        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3086        data.writeString(callingPackage);
3087        intent.writeToParcel(data, 0);
3088        data.writeString(resolvedType);
3089        data.writeStrongBinder(resultTo);
3090        data.writeString(resultWho);
3091        data.writeInt(requestCode);
3092        data.writeInt(startFlags);
3093        if (profilerInfo != null) {
3094            data.writeInt(1);
3095            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3096        } else {
3097            data.writeInt(0);
3098        }
3099        if (options != null) {
3100            data.writeInt(1);
3101            options.writeToParcel(data, 0);
3102        } else {
3103            data.writeInt(0);
3104        }
3105        data.writeInt(userId);
3106        mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
3107        reply.readException();
3108        int result = reply.readInt();
3109        reply.recycle();
3110        data.recycle();
3111        return result;
3112    }
3113    public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
3114            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3115            int startFlags, ProfilerInfo profilerInfo, Bundle options, boolean ignoreTargetSecurity,
3116            int userId) throws RemoteException {
3117        Parcel data = Parcel.obtain();
3118        Parcel reply = Parcel.obtain();
3119        data.writeInterfaceToken(IActivityManager.descriptor);
3120        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3121        data.writeString(callingPackage);
3122        intent.writeToParcel(data, 0);
3123        data.writeString(resolvedType);
3124        data.writeStrongBinder(resultTo);
3125        data.writeString(resultWho);
3126        data.writeInt(requestCode);
3127        data.writeInt(startFlags);
3128        if (profilerInfo != null) {
3129            data.writeInt(1);
3130            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3131        } else {
3132            data.writeInt(0);
3133        }
3134        if (options != null) {
3135            data.writeInt(1);
3136            options.writeToParcel(data, 0);
3137        } else {
3138            data.writeInt(0);
3139        }
3140        data.writeInt(ignoreTargetSecurity ? 1 : 0);
3141        data.writeInt(userId);
3142        mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
3143        reply.readException();
3144        int result = reply.readInt();
3145        reply.recycle();
3146        data.recycle();
3147        return result;
3148    }
3149    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
3150            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3151            int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
3152            int userId) throws RemoteException {
3153        Parcel data = Parcel.obtain();
3154        Parcel reply = Parcel.obtain();
3155        data.writeInterfaceToken(IActivityManager.descriptor);
3156        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3157        data.writeString(callingPackage);
3158        intent.writeToParcel(data, 0);
3159        data.writeString(resolvedType);
3160        data.writeStrongBinder(resultTo);
3161        data.writeString(resultWho);
3162        data.writeInt(requestCode);
3163        data.writeInt(startFlags);
3164        if (profilerInfo != null) {
3165            data.writeInt(1);
3166            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3167        } else {
3168            data.writeInt(0);
3169        }
3170        if (options != null) {
3171            data.writeInt(1);
3172            options.writeToParcel(data, 0);
3173        } else {
3174            data.writeInt(0);
3175        }
3176        data.writeInt(userId);
3177        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
3178        reply.readException();
3179        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
3180        reply.recycle();
3181        data.recycle();
3182        return result;
3183    }
3184    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
3185            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3186            int requestCode, int startFlags, Configuration config,
3187            Bundle options, int userId) throws RemoteException {
3188        Parcel data = Parcel.obtain();
3189        Parcel reply = Parcel.obtain();
3190        data.writeInterfaceToken(IActivityManager.descriptor);
3191        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3192        data.writeString(callingPackage);
3193        intent.writeToParcel(data, 0);
3194        data.writeString(resolvedType);
3195        data.writeStrongBinder(resultTo);
3196        data.writeString(resultWho);
3197        data.writeInt(requestCode);
3198        data.writeInt(startFlags);
3199        config.writeToParcel(data, 0);
3200        if (options != null) {
3201            data.writeInt(1);
3202            options.writeToParcel(data, 0);
3203        } else {
3204            data.writeInt(0);
3205        }
3206        data.writeInt(userId);
3207        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
3208        reply.readException();
3209        int result = reply.readInt();
3210        reply.recycle();
3211        data.recycle();
3212        return result;
3213    }
3214    public int startActivityIntentSender(IApplicationThread caller,
3215            IntentSender intent, Intent fillInIntent, String resolvedType,
3216            IBinder resultTo, String resultWho, int requestCode,
3217            int flagsMask, int flagsValues, Bundle options) throws RemoteException {
3218        Parcel data = Parcel.obtain();
3219        Parcel reply = Parcel.obtain();
3220        data.writeInterfaceToken(IActivityManager.descriptor);
3221        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3222        intent.writeToParcel(data, 0);
3223        if (fillInIntent != null) {
3224            data.writeInt(1);
3225            fillInIntent.writeToParcel(data, 0);
3226        } else {
3227            data.writeInt(0);
3228        }
3229        data.writeString(resolvedType);
3230        data.writeStrongBinder(resultTo);
3231        data.writeString(resultWho);
3232        data.writeInt(requestCode);
3233        data.writeInt(flagsMask);
3234        data.writeInt(flagsValues);
3235        if (options != null) {
3236            data.writeInt(1);
3237            options.writeToParcel(data, 0);
3238        } else {
3239            data.writeInt(0);
3240        }
3241        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
3242        reply.readException();
3243        int result = reply.readInt();
3244        reply.recycle();
3245        data.recycle();
3246        return result;
3247    }
3248    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
3249            Intent intent, String resolvedType, IVoiceInteractionSession session,
3250            IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
3251            Bundle options, int userId) throws RemoteException {
3252        Parcel data = Parcel.obtain();
3253        Parcel reply = Parcel.obtain();
3254        data.writeInterfaceToken(IActivityManager.descriptor);
3255        data.writeString(callingPackage);
3256        data.writeInt(callingPid);
3257        data.writeInt(callingUid);
3258        intent.writeToParcel(data, 0);
3259        data.writeString(resolvedType);
3260        data.writeStrongBinder(session.asBinder());
3261        data.writeStrongBinder(interactor.asBinder());
3262        data.writeInt(startFlags);
3263        if (profilerInfo != null) {
3264            data.writeInt(1);
3265            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3266        } else {
3267            data.writeInt(0);
3268        }
3269        if (options != null) {
3270            data.writeInt(1);
3271            options.writeToParcel(data, 0);
3272        } else {
3273            data.writeInt(0);
3274        }
3275        data.writeInt(userId);
3276        mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
3277        reply.readException();
3278        int result = reply.readInt();
3279        reply.recycle();
3280        data.recycle();
3281        return result;
3282    }
3283
3284    public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
3285            throws RemoteException {
3286        Parcel data = Parcel.obtain();
3287        Parcel reply = Parcel.obtain();
3288        data.writeInterfaceToken(IActivityManager.descriptor);
3289        data.writeStrongBinder(callingActivity);
3290        data.writeBundle(options);
3291        mRemote.transact(START_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3292        reply.readException();
3293        reply.recycle();
3294        data.recycle();
3295    }
3296
3297    public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
3298        Parcel data = Parcel.obtain();
3299        Parcel reply = Parcel.obtain();
3300        data.writeInterfaceToken(IActivityManager.descriptor);
3301        data.writeStrongBinder(callingActivity);
3302        mRemote.transact(STOP_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3303        reply.readException();
3304        reply.recycle();
3305        data.recycle();
3306    }
3307
3308    public boolean supportsLocalVoiceInteraction() throws RemoteException {
3309        Parcel data = Parcel.obtain();
3310        Parcel reply = Parcel.obtain();
3311        data.writeInterfaceToken(IActivityManager.descriptor);
3312        mRemote.transact(SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3313        reply.readException();
3314        int result = reply.readInt();
3315        reply.recycle();
3316        data.recycle();
3317        return result != 0;
3318    }
3319
3320    public boolean startNextMatchingActivity(IBinder callingActivity,
3321            Intent intent, Bundle options) throws RemoteException {
3322        Parcel data = Parcel.obtain();
3323        Parcel reply = Parcel.obtain();
3324        data.writeInterfaceToken(IActivityManager.descriptor);
3325        data.writeStrongBinder(callingActivity);
3326        intent.writeToParcel(data, 0);
3327        if (options != null) {
3328            data.writeInt(1);
3329            options.writeToParcel(data, 0);
3330        } else {
3331            data.writeInt(0);
3332        }
3333        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
3334        reply.readException();
3335        int result = reply.readInt();
3336        reply.recycle();
3337        data.recycle();
3338        return result != 0;
3339    }
3340    public int startActivityFromRecents(int taskId, Bundle options)
3341            throws RemoteException {
3342        Parcel data = Parcel.obtain();
3343        Parcel reply = Parcel.obtain();
3344        data.writeInterfaceToken(IActivityManager.descriptor);
3345        data.writeInt(taskId);
3346        if (options == null) {
3347            data.writeInt(0);
3348        } else {
3349            data.writeInt(1);
3350            options.writeToParcel(data, 0);
3351        }
3352        mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
3353        reply.readException();
3354        int result = reply.readInt();
3355        reply.recycle();
3356        data.recycle();
3357        return result;
3358    }
3359    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, int finishTask)
3360            throws RemoteException {
3361        Parcel data = Parcel.obtain();
3362        Parcel reply = Parcel.obtain();
3363        data.writeInterfaceToken(IActivityManager.descriptor);
3364        data.writeStrongBinder(token);
3365        data.writeInt(resultCode);
3366        if (resultData != null) {
3367            data.writeInt(1);
3368            resultData.writeToParcel(data, 0);
3369        } else {
3370            data.writeInt(0);
3371        }
3372        data.writeInt(finishTask);
3373        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
3374        reply.readException();
3375        boolean res = reply.readInt() != 0;
3376        data.recycle();
3377        reply.recycle();
3378        return res;
3379    }
3380    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
3381    {
3382        Parcel data = Parcel.obtain();
3383        Parcel reply = Parcel.obtain();
3384        data.writeInterfaceToken(IActivityManager.descriptor);
3385        data.writeStrongBinder(token);
3386        data.writeString(resultWho);
3387        data.writeInt(requestCode);
3388        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
3389        reply.readException();
3390        data.recycle();
3391        reply.recycle();
3392    }
3393    public boolean finishActivityAffinity(IBinder token) throws RemoteException {
3394        Parcel data = Parcel.obtain();
3395        Parcel reply = Parcel.obtain();
3396        data.writeInterfaceToken(IActivityManager.descriptor);
3397        data.writeStrongBinder(token);
3398        mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
3399        reply.readException();
3400        boolean res = reply.readInt() != 0;
3401        data.recycle();
3402        reply.recycle();
3403        return res;
3404    }
3405    public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
3406        Parcel data = Parcel.obtain();
3407        Parcel reply = Parcel.obtain();
3408        data.writeInterfaceToken(IActivityManager.descriptor);
3409        data.writeStrongBinder(session.asBinder());
3410        mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
3411        reply.readException();
3412        data.recycle();
3413        reply.recycle();
3414    }
3415    public boolean releaseActivityInstance(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(RELEASE_ACTIVITY_INSTANCE_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 releaseSomeActivities(IApplicationThread app) throws RemoteException {
3428        Parcel data = Parcel.obtain();
3429        Parcel reply = Parcel.obtain();
3430        data.writeInterfaceToken(IActivityManager.descriptor);
3431        data.writeStrongBinder(app.asBinder());
3432        mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
3433        reply.readException();
3434        data.recycle();
3435        reply.recycle();
3436    }
3437    public boolean willActivityBeVisible(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(WILL_ACTIVITY_BE_VISIBLE_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 Intent registerReceiver(IApplicationThread caller, String packageName,
3450            IIntentReceiver receiver,
3451            IntentFilter filter, String perm, int userId) throws RemoteException
3452    {
3453        Parcel data = Parcel.obtain();
3454        Parcel reply = Parcel.obtain();
3455        data.writeInterfaceToken(IActivityManager.descriptor);
3456        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3457        data.writeString(packageName);
3458        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
3459        filter.writeToParcel(data, 0);
3460        data.writeString(perm);
3461        data.writeInt(userId);
3462        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3463        reply.readException();
3464        Intent intent = null;
3465        int haveIntent = reply.readInt();
3466        if (haveIntent != 0) {
3467            intent = Intent.CREATOR.createFromParcel(reply);
3468        }
3469        reply.recycle();
3470        data.recycle();
3471        return intent;
3472    }
3473    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
3474    {
3475        Parcel data = Parcel.obtain();
3476        Parcel reply = Parcel.obtain();
3477        data.writeInterfaceToken(IActivityManager.descriptor);
3478        data.writeStrongBinder(receiver.asBinder());
3479        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3480        reply.readException();
3481        data.recycle();
3482        reply.recycle();
3483    }
3484    public int broadcastIntent(IApplicationThread caller,
3485            Intent intent, String resolvedType, IIntentReceiver resultTo,
3486            int resultCode, String resultData, Bundle map,
3487            String[] requiredPermissions, int appOp, Bundle options, boolean serialized,
3488            boolean sticky, int userId) throws RemoteException
3489    {
3490        Parcel data = Parcel.obtain();
3491        Parcel reply = Parcel.obtain();
3492        data.writeInterfaceToken(IActivityManager.descriptor);
3493        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3494        intent.writeToParcel(data, 0);
3495        data.writeString(resolvedType);
3496        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
3497        data.writeInt(resultCode);
3498        data.writeString(resultData);
3499        data.writeBundle(map);
3500        data.writeStringArray(requiredPermissions);
3501        data.writeInt(appOp);
3502        data.writeBundle(options);
3503        data.writeInt(serialized ? 1 : 0);
3504        data.writeInt(sticky ? 1 : 0);
3505        data.writeInt(userId);
3506        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
3507        reply.readException();
3508        int res = reply.readInt();
3509        reply.recycle();
3510        data.recycle();
3511        return res;
3512    }
3513    public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
3514            throws RemoteException
3515    {
3516        Parcel data = Parcel.obtain();
3517        Parcel reply = Parcel.obtain();
3518        data.writeInterfaceToken(IActivityManager.descriptor);
3519        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3520        intent.writeToParcel(data, 0);
3521        data.writeInt(userId);
3522        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
3523        reply.readException();
3524        data.recycle();
3525        reply.recycle();
3526    }
3527    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
3528            boolean abortBroadcast, int flags) throws RemoteException
3529    {
3530        Parcel data = Parcel.obtain();
3531        Parcel reply = Parcel.obtain();
3532        data.writeInterfaceToken(IActivityManager.descriptor);
3533        data.writeStrongBinder(who);
3534        data.writeInt(resultCode);
3535        data.writeString(resultData);
3536        data.writeBundle(map);
3537        data.writeInt(abortBroadcast ? 1 : 0);
3538        data.writeInt(flags);
3539        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3540        reply.readException();
3541        data.recycle();
3542        reply.recycle();
3543    }
3544    public void attachApplication(IApplicationThread app) throws RemoteException
3545    {
3546        Parcel data = Parcel.obtain();
3547        Parcel reply = Parcel.obtain();
3548        data.writeInterfaceToken(IActivityManager.descriptor);
3549        data.writeStrongBinder(app.asBinder());
3550        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
3551        reply.readException();
3552        data.recycle();
3553        reply.recycle();
3554    }
3555    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
3556            throws RemoteException
3557    {
3558        Parcel data = Parcel.obtain();
3559        Parcel reply = Parcel.obtain();
3560        data.writeInterfaceToken(IActivityManager.descriptor);
3561        data.writeStrongBinder(token);
3562        if (config != null) {
3563            data.writeInt(1);
3564            config.writeToParcel(data, 0);
3565        } else {
3566            data.writeInt(0);
3567        }
3568        data.writeInt(stopProfiling ? 1 : 0);
3569        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3570        reply.readException();
3571        data.recycle();
3572        reply.recycle();
3573    }
3574    public void activityResumed(IBinder token) throws RemoteException
3575    {
3576        Parcel data = Parcel.obtain();
3577        Parcel reply = Parcel.obtain();
3578        data.writeInterfaceToken(IActivityManager.descriptor);
3579        data.writeStrongBinder(token);
3580        mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
3581        reply.readException();
3582        data.recycle();
3583        reply.recycle();
3584    }
3585    public void activityPaused(IBinder token) throws RemoteException
3586    {
3587        Parcel data = Parcel.obtain();
3588        Parcel reply = Parcel.obtain();
3589        data.writeInterfaceToken(IActivityManager.descriptor);
3590        data.writeStrongBinder(token);
3591        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
3592        reply.readException();
3593        data.recycle();
3594        reply.recycle();
3595    }
3596    public void activityStopped(IBinder token, Bundle state,
3597            PersistableBundle persistentState, CharSequence description) throws RemoteException
3598    {
3599        Parcel data = Parcel.obtain();
3600        Parcel reply = Parcel.obtain();
3601        data.writeInterfaceToken(IActivityManager.descriptor);
3602        data.writeStrongBinder(token);
3603        data.writeBundle(state);
3604        data.writePersistableBundle(persistentState);
3605        TextUtils.writeToParcel(description, data, 0);
3606        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3607        reply.readException();
3608        data.recycle();
3609        reply.recycle();
3610    }
3611    public void activitySlept(IBinder token) throws RemoteException
3612    {
3613        Parcel data = Parcel.obtain();
3614        Parcel reply = Parcel.obtain();
3615        data.writeInterfaceToken(IActivityManager.descriptor);
3616        data.writeStrongBinder(token);
3617        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3618        reply.readException();
3619        data.recycle();
3620        reply.recycle();
3621    }
3622    public void activityDestroyed(IBinder token) throws RemoteException
3623    {
3624        Parcel data = Parcel.obtain();
3625        Parcel reply = Parcel.obtain();
3626        data.writeInterfaceToken(IActivityManager.descriptor);
3627        data.writeStrongBinder(token);
3628        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3629        reply.readException();
3630        data.recycle();
3631        reply.recycle();
3632    }
3633    public void activityRelaunched(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_RELAUNCHED_TRANSACTION, data, reply, 0);
3640        reply.readException();
3641        data.recycle();
3642        reply.recycle();
3643    }
3644    public String getCallingPackage(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(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
3651        reply.readException();
3652        String res = reply.readString();
3653        data.recycle();
3654        reply.recycle();
3655        return res;
3656    }
3657    public ComponentName getCallingActivity(IBinder token)
3658            throws RemoteException {
3659        Parcel data = Parcel.obtain();
3660        Parcel reply = Parcel.obtain();
3661        data.writeInterfaceToken(IActivityManager.descriptor);
3662        data.writeStrongBinder(token);
3663        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
3664        reply.readException();
3665        ComponentName res = ComponentName.readFromParcel(reply);
3666        data.recycle();
3667        reply.recycle();
3668        return res;
3669    }
3670    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
3671        Parcel data = Parcel.obtain();
3672        Parcel reply = Parcel.obtain();
3673        data.writeInterfaceToken(IActivityManager.descriptor);
3674        data.writeString(callingPackage);
3675        mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
3676        reply.readException();
3677        ArrayList<IAppTask> list = null;
3678        int N = reply.readInt();
3679        if (N >= 0) {
3680            list = new ArrayList<>();
3681            while (N > 0) {
3682                IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
3683                list.add(task);
3684                N--;
3685            }
3686        }
3687        data.recycle();
3688        reply.recycle();
3689        return list;
3690    }
3691    public int addAppTask(IBinder activityToken, Intent intent,
3692            ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
3693        Parcel data = Parcel.obtain();
3694        Parcel reply = Parcel.obtain();
3695        data.writeInterfaceToken(IActivityManager.descriptor);
3696        data.writeStrongBinder(activityToken);
3697        intent.writeToParcel(data, 0);
3698        description.writeToParcel(data, 0);
3699        thumbnail.writeToParcel(data, 0);
3700        mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
3701        reply.readException();
3702        int res = reply.readInt();
3703        data.recycle();
3704        reply.recycle();
3705        return res;
3706    }
3707    public Point getAppTaskThumbnailSize() throws RemoteException {
3708        Parcel data = Parcel.obtain();
3709        Parcel reply = Parcel.obtain();
3710        data.writeInterfaceToken(IActivityManager.descriptor);
3711        mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
3712        reply.readException();
3713        Point size = Point.CREATOR.createFromParcel(reply);
3714        data.recycle();
3715        reply.recycle();
3716        return size;
3717    }
3718    public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, int flags)
3719            throws RemoteException {
3720        Parcel data = Parcel.obtain();
3721        Parcel reply = Parcel.obtain();
3722        data.writeInterfaceToken(IActivityManager.descriptor);
3723        data.writeInt(maxNum);
3724        data.writeInt(flags);
3725        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
3726        reply.readException();
3727        ArrayList<ActivityManager.RunningTaskInfo> list = null;
3728        int N = reply.readInt();
3729        if (N >= 0) {
3730            list = new ArrayList<>();
3731            while (N > 0) {
3732                ActivityManager.RunningTaskInfo info =
3733                        ActivityManager.RunningTaskInfo.CREATOR
3734                                .createFromParcel(reply);
3735                list.add(info);
3736                N--;
3737            }
3738        }
3739        data.recycle();
3740        reply.recycle();
3741        return list;
3742    }
3743    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
3744            int flags, int userId) throws RemoteException {
3745        Parcel data = Parcel.obtain();
3746        Parcel reply = Parcel.obtain();
3747        data.writeInterfaceToken(IActivityManager.descriptor);
3748        data.writeInt(maxNum);
3749        data.writeInt(flags);
3750        data.writeInt(userId);
3751        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
3752        reply.readException();
3753        ArrayList<ActivityManager.RecentTaskInfo> list
3754            = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
3755        data.recycle();
3756        reply.recycle();
3757        return list;
3758    }
3759    public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
3760        Parcel data = Parcel.obtain();
3761        Parcel reply = Parcel.obtain();
3762        data.writeInterfaceToken(IActivityManager.descriptor);
3763        data.writeInt(id);
3764        mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
3765        reply.readException();
3766        ActivityManager.TaskThumbnail taskThumbnail = null;
3767        if (reply.readInt() != 0) {
3768            taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
3769        }
3770        data.recycle();
3771        reply.recycle();
3772        return taskThumbnail;
3773    }
3774    public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
3775            throws RemoteException {
3776        Parcel data = Parcel.obtain();
3777        Parcel reply = Parcel.obtain();
3778        data.writeInterfaceToken(IActivityManager.descriptor);
3779        data.writeInt(maxNum);
3780        data.writeInt(flags);
3781        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
3782        reply.readException();
3783        ArrayList<ActivityManager.RunningServiceInfo> list = null;
3784        int N = reply.readInt();
3785        if (N >= 0) {
3786            list = new ArrayList<>();
3787            while (N > 0) {
3788                ActivityManager.RunningServiceInfo info =
3789                        ActivityManager.RunningServiceInfo.CREATOR
3790                        .createFromParcel(reply);
3791                list.add(info);
3792                N--;
3793            }
3794        }
3795        data.recycle();
3796        reply.recycle();
3797        return list;
3798    }
3799    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
3800            throws RemoteException {
3801        Parcel data = Parcel.obtain();
3802        Parcel reply = Parcel.obtain();
3803        data.writeInterfaceToken(IActivityManager.descriptor);
3804        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
3805        reply.readException();
3806        ArrayList<ActivityManager.ProcessErrorStateInfo> list
3807            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
3808        data.recycle();
3809        reply.recycle();
3810        return list;
3811    }
3812    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
3813            throws RemoteException {
3814        Parcel data = Parcel.obtain();
3815        Parcel reply = Parcel.obtain();
3816        data.writeInterfaceToken(IActivityManager.descriptor);
3817        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
3818        reply.readException();
3819        ArrayList<ActivityManager.RunningAppProcessInfo> list
3820        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
3821        data.recycle();
3822        reply.recycle();
3823        return list;
3824    }
3825    public List<ApplicationInfo> getRunningExternalApplications()
3826            throws RemoteException {
3827        Parcel data = Parcel.obtain();
3828        Parcel reply = Parcel.obtain();
3829        data.writeInterfaceToken(IActivityManager.descriptor);
3830        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
3831        reply.readException();
3832        ArrayList<ApplicationInfo> list
3833        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
3834        data.recycle();
3835        reply.recycle();
3836        return list;
3837    }
3838    public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
3839    {
3840        Parcel data = Parcel.obtain();
3841        Parcel reply = Parcel.obtain();
3842        data.writeInterfaceToken(IActivityManager.descriptor);
3843        data.writeInt(task);
3844        data.writeInt(flags);
3845        if (options != null) {
3846            data.writeInt(1);
3847            options.writeToParcel(data, 0);
3848        } else {
3849            data.writeInt(0);
3850        }
3851        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
3852        reply.readException();
3853        data.recycle();
3854        reply.recycle();
3855    }
3856    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
3857            throws RemoteException {
3858        Parcel data = Parcel.obtain();
3859        Parcel reply = Parcel.obtain();
3860        data.writeInterfaceToken(IActivityManager.descriptor);
3861        data.writeStrongBinder(token);
3862        data.writeInt(nonRoot ? 1 : 0);
3863        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3864        reply.readException();
3865        boolean res = reply.readInt() != 0;
3866        data.recycle();
3867        reply.recycle();
3868        return res;
3869    }
3870    public void moveTaskBackwards(int task) throws RemoteException
3871    {
3872        Parcel data = Parcel.obtain();
3873        Parcel reply = Parcel.obtain();
3874        data.writeInterfaceToken(IActivityManager.descriptor);
3875        data.writeInt(task);
3876        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
3877        reply.readException();
3878        data.recycle();
3879        reply.recycle();
3880    }
3881    @Override
3882    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
3883    {
3884        Parcel data = Parcel.obtain();
3885        Parcel reply = Parcel.obtain();
3886        data.writeInterfaceToken(IActivityManager.descriptor);
3887        data.writeInt(taskId);
3888        data.writeInt(stackId);
3889        data.writeInt(toTop ? 1 : 0);
3890        mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
3891        reply.readException();
3892        data.recycle();
3893        reply.recycle();
3894    }
3895    @Override
3896    public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate,
3897            Rect initialBounds, boolean moveHomeStackFront) throws RemoteException
3898    {
3899        Parcel data = Parcel.obtain();
3900        Parcel reply = Parcel.obtain();
3901        data.writeInterfaceToken(IActivityManager.descriptor);
3902        data.writeInt(taskId);
3903        data.writeInt(createMode);
3904        data.writeInt(toTop ? 1 : 0);
3905        data.writeInt(animate ? 1 : 0);
3906        if (initialBounds != null) {
3907            data.writeInt(1);
3908            initialBounds.writeToParcel(data, 0);
3909        } else {
3910            data.writeInt(0);
3911        }
3912        data.writeInt(moveHomeStackFront ? 1 : 0);
3913        mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0);
3914        reply.readException();
3915        boolean res = reply.readInt() > 0;
3916        data.recycle();
3917        reply.recycle();
3918        return res;
3919    }
3920    @Override
3921    public boolean moveTopActivityToPinnedStack(int stackId, Rect r)
3922        throws RemoteException
3923    {
3924        Parcel data = Parcel.obtain();
3925        Parcel reply = Parcel.obtain();
3926        data.writeInterfaceToken(IActivityManager.descriptor);
3927        data.writeInt(stackId);
3928        r.writeToParcel(data, 0);
3929        mRemote.transact(MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION, data, reply, 0);
3930        reply.readException();
3931        final boolean res = reply.readInt() != 0;
3932        data.recycle();
3933        reply.recycle();
3934        return res;
3935    }
3936    @Override
3937    public void resizeStack(int stackId, Rect r, boolean allowResizeInDockedMode,
3938            boolean preserveWindows, boolean animate, int animationDuration)
3939            throws RemoteException {
3940        Parcel data = Parcel.obtain();
3941        Parcel reply = Parcel.obtain();
3942        data.writeInterfaceToken(IActivityManager.descriptor);
3943        data.writeInt(stackId);
3944        if (r != null) {
3945            data.writeInt(1);
3946            r.writeToParcel(data, 0);
3947        } else {
3948            data.writeInt(0);
3949        }
3950        data.writeInt(allowResizeInDockedMode ? 1 : 0);
3951        data.writeInt(preserveWindows ? 1 : 0);
3952        data.writeInt(animate ? 1 : 0);
3953        data.writeInt(animationDuration);
3954        mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0);
3955        reply.readException();
3956        data.recycle();
3957        reply.recycle();
3958    }
3959    @Override
3960    public void swapDockedAndFullscreenStack() throws RemoteException
3961    {
3962        Parcel data = Parcel.obtain();
3963        Parcel reply = Parcel.obtain();
3964        data.writeInterfaceToken(IActivityManager.descriptor);
3965        mRemote.transact(SWAP_DOCKED_AND_FULLSCREEN_STACK, data, reply, 0);
3966        reply.readException();
3967        data.recycle();
3968        reply.recycle();
3969    }
3970    @Override
3971    public void resizeDockedStack(Rect dockedBounds, Rect tempDockedTaskBounds,
3972            Rect tempDockedTaskInsetBounds,
3973            Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds)
3974            throws RemoteException
3975    {
3976        Parcel data = Parcel.obtain();
3977        Parcel reply = Parcel.obtain();
3978        data.writeInterfaceToken(IActivityManager.descriptor);
3979        if (dockedBounds != null) {
3980            data.writeInt(1);
3981            dockedBounds.writeToParcel(data, 0);
3982        } else {
3983            data.writeInt(0);
3984        }
3985        if (tempDockedTaskBounds != null) {
3986            data.writeInt(1);
3987            tempDockedTaskBounds.writeToParcel(data, 0);
3988        } else {
3989            data.writeInt(0);
3990        }
3991        if (tempDockedTaskInsetBounds != null) {
3992            data.writeInt(1);
3993            tempDockedTaskInsetBounds.writeToParcel(data, 0);
3994        } else {
3995            data.writeInt(0);
3996        }
3997        if (tempOtherTaskBounds != null) {
3998            data.writeInt(1);
3999            tempOtherTaskBounds.writeToParcel(data, 0);
4000        } else {
4001            data.writeInt(0);
4002        }
4003        if (tempOtherTaskInsetBounds != null) {
4004            data.writeInt(1);
4005            tempOtherTaskInsetBounds.writeToParcel(data, 0);
4006        } else {
4007            data.writeInt(0);
4008        }
4009        mRemote.transact(RESIZE_DOCKED_STACK_TRANSACTION, data, reply, 0);
4010        reply.readException();
4011        data.recycle();
4012        reply.recycle();
4013    }
4014
4015    @Override
4016    public void resizePinnedStack(Rect pinnedBounds, Rect tempPinnedTaskBounds) throws RemoteException
4017    {
4018        Parcel data = Parcel.obtain();
4019        Parcel reply = Parcel.obtain();
4020        data.writeInterfaceToken(IActivityManager.descriptor);
4021        if (pinnedBounds != null) {
4022            data.writeInt(1);
4023            pinnedBounds.writeToParcel(data, 0);
4024        } else {
4025            data.writeInt(0);
4026        }
4027        if (tempPinnedTaskBounds != null) {
4028            data.writeInt(1);
4029            tempPinnedTaskBounds.writeToParcel(data, 0);
4030        } else {
4031            data.writeInt(0);
4032        }
4033        mRemote.transact(RESIZE_PINNED_STACK_TRANSACTION, data, reply, 0);
4034        reply.readException();
4035        data.recycle();
4036        reply.recycle();
4037    }
4038
4039    @Override
4040    public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException
4041    {
4042        Parcel data = Parcel.obtain();
4043        Parcel reply = Parcel.obtain();
4044        data.writeInterfaceToken(IActivityManager.descriptor);
4045        data.writeInt(taskId);
4046        data.writeInt(stackId);
4047        data.writeInt(position);
4048        mRemote.transact(POSITION_TASK_IN_STACK_TRANSACTION, data, reply, 0);
4049        reply.readException();
4050        data.recycle();
4051        reply.recycle();
4052    }
4053    @Override
4054    public List<StackInfo> getAllStackInfos() throws RemoteException
4055    {
4056        Parcel data = Parcel.obtain();
4057        Parcel reply = Parcel.obtain();
4058        data.writeInterfaceToken(IActivityManager.descriptor);
4059        mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
4060        reply.readException();
4061        ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
4062        data.recycle();
4063        reply.recycle();
4064        return list;
4065    }
4066    @Override
4067    public StackInfo getStackInfo(int stackId) throws RemoteException
4068    {
4069        Parcel data = Parcel.obtain();
4070        Parcel reply = Parcel.obtain();
4071        data.writeInterfaceToken(IActivityManager.descriptor);
4072        data.writeInt(stackId);
4073        mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
4074        reply.readException();
4075        int res = reply.readInt();
4076        StackInfo info = null;
4077        if (res != 0) {
4078            info = StackInfo.CREATOR.createFromParcel(reply);
4079        }
4080        data.recycle();
4081        reply.recycle();
4082        return info;
4083    }
4084    @Override
4085    public boolean isInHomeStack(int taskId) throws RemoteException {
4086        Parcel data = Parcel.obtain();
4087        Parcel reply = Parcel.obtain();
4088        data.writeInterfaceToken(IActivityManager.descriptor);
4089        data.writeInt(taskId);
4090        mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
4091        reply.readException();
4092        boolean isInHomeStack = reply.readInt() > 0;
4093        data.recycle();
4094        reply.recycle();
4095        return isInHomeStack;
4096    }
4097    @Override
4098    public void setFocusedStack(int stackId) throws RemoteException
4099    {
4100        Parcel data = Parcel.obtain();
4101        Parcel reply = Parcel.obtain();
4102        data.writeInterfaceToken(IActivityManager.descriptor);
4103        data.writeInt(stackId);
4104        mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0);
4105        reply.readException();
4106        data.recycle();
4107        reply.recycle();
4108    }
4109    @Override
4110    public int getFocusedStackId() throws RemoteException {
4111        Parcel data = Parcel.obtain();
4112        Parcel reply = Parcel.obtain();
4113        data.writeInterfaceToken(IActivityManager.descriptor);
4114        mRemote.transact(GET_FOCUSED_STACK_ID_TRANSACTION, data, reply, 0);
4115        reply.readException();
4116        int focusedStackId = reply.readInt();
4117        data.recycle();
4118        reply.recycle();
4119        return focusedStackId;
4120    }
4121    @Override
4122    public void setFocusedTask(int taskId) throws RemoteException
4123    {
4124        Parcel data = Parcel.obtain();
4125        Parcel reply = Parcel.obtain();
4126        data.writeInterfaceToken(IActivityManager.descriptor);
4127        data.writeInt(taskId);
4128        mRemote.transact(SET_FOCUSED_TASK_TRANSACTION, data, reply, 0);
4129        reply.readException();
4130        data.recycle();
4131        reply.recycle();
4132    }
4133    @Override
4134    public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException
4135    {
4136        Parcel data = Parcel.obtain();
4137        Parcel reply = Parcel.obtain();
4138        data.writeInterfaceToken(IActivityManager.descriptor);
4139        data.writeStrongBinder(listener.asBinder());
4140        mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0);
4141        reply.readException();
4142        data.recycle();
4143        reply.recycle();
4144    }
4145    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
4146    {
4147        Parcel data = Parcel.obtain();
4148        Parcel reply = Parcel.obtain();
4149        data.writeInterfaceToken(IActivityManager.descriptor);
4150        data.writeStrongBinder(token);
4151        data.writeInt(onlyRoot ? 1 : 0);
4152        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
4153        reply.readException();
4154        int res = reply.readInt();
4155        data.recycle();
4156        reply.recycle();
4157        return res;
4158    }
4159    public ContentProviderHolder getContentProvider(IApplicationThread caller,
4160            String name, int userId, boolean stable) throws RemoteException {
4161        Parcel data = Parcel.obtain();
4162        Parcel reply = Parcel.obtain();
4163        data.writeInterfaceToken(IActivityManager.descriptor);
4164        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4165        data.writeString(name);
4166        data.writeInt(userId);
4167        data.writeInt(stable ? 1 : 0);
4168        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4169        reply.readException();
4170        int res = reply.readInt();
4171        ContentProviderHolder cph = null;
4172        if (res != 0) {
4173            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4174        }
4175        data.recycle();
4176        reply.recycle();
4177        return cph;
4178    }
4179    public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
4180            throws RemoteException {
4181        Parcel data = Parcel.obtain();
4182        Parcel reply = Parcel.obtain();
4183        data.writeInterfaceToken(IActivityManager.descriptor);
4184        data.writeString(name);
4185        data.writeInt(userId);
4186        data.writeStrongBinder(token);
4187        mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4188        reply.readException();
4189        int res = reply.readInt();
4190        ContentProviderHolder cph = null;
4191        if (res != 0) {
4192            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4193        }
4194        data.recycle();
4195        reply.recycle();
4196        return cph;
4197    }
4198    public void publishContentProviders(IApplicationThread caller,
4199            List<ContentProviderHolder> providers) throws RemoteException
4200    {
4201        Parcel data = Parcel.obtain();
4202        Parcel reply = Parcel.obtain();
4203        data.writeInterfaceToken(IActivityManager.descriptor);
4204        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4205        data.writeTypedList(providers);
4206        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
4207        reply.readException();
4208        data.recycle();
4209        reply.recycle();
4210    }
4211    public boolean refContentProvider(IBinder connection, int stable, int unstable)
4212            throws RemoteException {
4213        Parcel data = Parcel.obtain();
4214        Parcel reply = Parcel.obtain();
4215        data.writeInterfaceToken(IActivityManager.descriptor);
4216        data.writeStrongBinder(connection);
4217        data.writeInt(stable);
4218        data.writeInt(unstable);
4219        mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4220        reply.readException();
4221        boolean res = reply.readInt() != 0;
4222        data.recycle();
4223        reply.recycle();
4224        return res;
4225    }
4226
4227    public void unstableProviderDied(IBinder connection) throws RemoteException {
4228        Parcel data = Parcel.obtain();
4229        Parcel reply = Parcel.obtain();
4230        data.writeInterfaceToken(IActivityManager.descriptor);
4231        data.writeStrongBinder(connection);
4232        mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
4233        reply.readException();
4234        data.recycle();
4235        reply.recycle();
4236    }
4237
4238    @Override
4239    public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
4240        Parcel data = Parcel.obtain();
4241        Parcel reply = Parcel.obtain();
4242        data.writeInterfaceToken(IActivityManager.descriptor);
4243        data.writeStrongBinder(connection);
4244        mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
4245        reply.readException();
4246        data.recycle();
4247        reply.recycle();
4248    }
4249
4250    public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
4251        Parcel data = Parcel.obtain();
4252        Parcel reply = Parcel.obtain();
4253        data.writeInterfaceToken(IActivityManager.descriptor);
4254        data.writeStrongBinder(connection);
4255        data.writeInt(stable ? 1 : 0);
4256        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4257        reply.readException();
4258        data.recycle();
4259        reply.recycle();
4260    }
4261
4262    public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
4263        Parcel data = Parcel.obtain();
4264        Parcel reply = Parcel.obtain();
4265        data.writeInterfaceToken(IActivityManager.descriptor);
4266        data.writeString(name);
4267        data.writeStrongBinder(token);
4268        mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4269        reply.readException();
4270        data.recycle();
4271        reply.recycle();
4272    }
4273
4274    public PendingIntent getRunningServiceControlPanel(ComponentName service)
4275            throws RemoteException
4276    {
4277        Parcel data = Parcel.obtain();
4278        Parcel reply = Parcel.obtain();
4279        data.writeInterfaceToken(IActivityManager.descriptor);
4280        service.writeToParcel(data, 0);
4281        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
4282        reply.readException();
4283        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
4284        data.recycle();
4285        reply.recycle();
4286        return res;
4287    }
4288
4289    public ComponentName startService(IApplicationThread caller, Intent service,
4290            String resolvedType, String callingPackage, int userId) throws RemoteException
4291    {
4292        Parcel data = Parcel.obtain();
4293        Parcel reply = Parcel.obtain();
4294        data.writeInterfaceToken(IActivityManager.descriptor);
4295        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4296        service.writeToParcel(data, 0);
4297        data.writeString(resolvedType);
4298        data.writeString(callingPackage);
4299        data.writeInt(userId);
4300        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
4301        reply.readException();
4302        ComponentName res = ComponentName.readFromParcel(reply);
4303        data.recycle();
4304        reply.recycle();
4305        return res;
4306    }
4307    public int stopService(IApplicationThread caller, Intent service,
4308            String resolvedType, int userId) throws RemoteException
4309    {
4310        Parcel data = Parcel.obtain();
4311        Parcel reply = Parcel.obtain();
4312        data.writeInterfaceToken(IActivityManager.descriptor);
4313        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4314        service.writeToParcel(data, 0);
4315        data.writeString(resolvedType);
4316        data.writeInt(userId);
4317        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
4318        reply.readException();
4319        int res = reply.readInt();
4320        reply.recycle();
4321        data.recycle();
4322        return res;
4323    }
4324    public boolean stopServiceToken(ComponentName className, IBinder token,
4325            int startId) throws RemoteException {
4326        Parcel data = Parcel.obtain();
4327        Parcel reply = Parcel.obtain();
4328        data.writeInterfaceToken(IActivityManager.descriptor);
4329        ComponentName.writeToParcel(className, data);
4330        data.writeStrongBinder(token);
4331        data.writeInt(startId);
4332        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
4333        reply.readException();
4334        boolean res = reply.readInt() != 0;
4335        data.recycle();
4336        reply.recycle();
4337        return res;
4338    }
4339    public void setServiceForeground(ComponentName className, IBinder token,
4340            int id, Notification notification, int flags) throws RemoteException {
4341        Parcel data = Parcel.obtain();
4342        Parcel reply = Parcel.obtain();
4343        data.writeInterfaceToken(IActivityManager.descriptor);
4344        ComponentName.writeToParcel(className, data);
4345        data.writeStrongBinder(token);
4346        data.writeInt(id);
4347        if (notification != null) {
4348            data.writeInt(1);
4349            notification.writeToParcel(data, 0);
4350        } else {
4351            data.writeInt(0);
4352        }
4353        data.writeInt(flags);
4354        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
4355        reply.readException();
4356        data.recycle();
4357        reply.recycle();
4358    }
4359    public int bindService(IApplicationThread caller, IBinder token,
4360            Intent service, String resolvedType, IServiceConnection connection,
4361            int flags,  String callingPackage, int userId) throws RemoteException {
4362        Parcel data = Parcel.obtain();
4363        Parcel reply = Parcel.obtain();
4364        data.writeInterfaceToken(IActivityManager.descriptor);
4365        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4366        data.writeStrongBinder(token);
4367        service.writeToParcel(data, 0);
4368        data.writeString(resolvedType);
4369        data.writeStrongBinder(connection.asBinder());
4370        data.writeInt(flags);
4371        data.writeString(callingPackage);
4372        data.writeInt(userId);
4373        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
4374        reply.readException();
4375        int res = reply.readInt();
4376        data.recycle();
4377        reply.recycle();
4378        return res;
4379    }
4380    public boolean unbindService(IServiceConnection connection) throws RemoteException
4381    {
4382        Parcel data = Parcel.obtain();
4383        Parcel reply = Parcel.obtain();
4384        data.writeInterfaceToken(IActivityManager.descriptor);
4385        data.writeStrongBinder(connection.asBinder());
4386        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
4387        reply.readException();
4388        boolean res = reply.readInt() != 0;
4389        data.recycle();
4390        reply.recycle();
4391        return res;
4392    }
4393
4394    public void publishService(IBinder token,
4395            Intent intent, IBinder service) throws RemoteException {
4396        Parcel data = Parcel.obtain();
4397        Parcel reply = Parcel.obtain();
4398        data.writeInterfaceToken(IActivityManager.descriptor);
4399        data.writeStrongBinder(token);
4400        intent.writeToParcel(data, 0);
4401        data.writeStrongBinder(service);
4402        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
4403        reply.readException();
4404        data.recycle();
4405        reply.recycle();
4406    }
4407
4408    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
4409            throws RemoteException {
4410        Parcel data = Parcel.obtain();
4411        Parcel reply = Parcel.obtain();
4412        data.writeInterfaceToken(IActivityManager.descriptor);
4413        data.writeStrongBinder(token);
4414        intent.writeToParcel(data, 0);
4415        data.writeInt(doRebind ? 1 : 0);
4416        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
4417        reply.readException();
4418        data.recycle();
4419        reply.recycle();
4420    }
4421
4422    public void serviceDoneExecuting(IBinder token, int type, int startId,
4423            int res) throws RemoteException {
4424        Parcel data = Parcel.obtain();
4425        Parcel reply = Parcel.obtain();
4426        data.writeInterfaceToken(IActivityManager.descriptor);
4427        data.writeStrongBinder(token);
4428        data.writeInt(type);
4429        data.writeInt(startId);
4430        data.writeInt(res);
4431        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
4432        reply.readException();
4433        data.recycle();
4434        reply.recycle();
4435    }
4436
4437    public IBinder peekService(Intent service, String resolvedType, String callingPackage)
4438            throws RemoteException {
4439        Parcel data = Parcel.obtain();
4440        Parcel reply = Parcel.obtain();
4441        data.writeInterfaceToken(IActivityManager.descriptor);
4442        service.writeToParcel(data, 0);
4443        data.writeString(resolvedType);
4444        data.writeString(callingPackage);
4445        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
4446        reply.readException();
4447        IBinder binder = reply.readStrongBinder();
4448        reply.recycle();
4449        data.recycle();
4450        return binder;
4451    }
4452
4453    public boolean bindBackupAgent(String packageName, int backupRestoreMode, int userId)
4454            throws RemoteException {
4455        Parcel data = Parcel.obtain();
4456        Parcel reply = Parcel.obtain();
4457        data.writeInterfaceToken(IActivityManager.descriptor);
4458        data.writeString(packageName);
4459        data.writeInt(backupRestoreMode);
4460        data.writeInt(userId);
4461        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4462        reply.readException();
4463        boolean success = reply.readInt() != 0;
4464        reply.recycle();
4465        data.recycle();
4466        return success;
4467    }
4468
4469    public void clearPendingBackup() throws RemoteException {
4470        Parcel data = Parcel.obtain();
4471        Parcel reply = Parcel.obtain();
4472        data.writeInterfaceToken(IActivityManager.descriptor);
4473        mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
4474        reply.recycle();
4475        data.recycle();
4476    }
4477
4478    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
4479        Parcel data = Parcel.obtain();
4480        Parcel reply = Parcel.obtain();
4481        data.writeInterfaceToken(IActivityManager.descriptor);
4482        data.writeString(packageName);
4483        data.writeStrongBinder(agent);
4484        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
4485        reply.recycle();
4486        data.recycle();
4487    }
4488
4489    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
4490        Parcel data = Parcel.obtain();
4491        Parcel reply = Parcel.obtain();
4492        data.writeInterfaceToken(IActivityManager.descriptor);
4493        app.writeToParcel(data, 0);
4494        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4495        reply.readException();
4496        reply.recycle();
4497        data.recycle();
4498    }
4499
4500    public boolean startInstrumentation(ComponentName className, String profileFile,
4501            int flags, Bundle arguments, IInstrumentationWatcher watcher,
4502            IUiAutomationConnection connection, int userId, String instructionSet)
4503            throws RemoteException {
4504        Parcel data = Parcel.obtain();
4505        Parcel reply = Parcel.obtain();
4506        data.writeInterfaceToken(IActivityManager.descriptor);
4507        ComponentName.writeToParcel(className, data);
4508        data.writeString(profileFile);
4509        data.writeInt(flags);
4510        data.writeBundle(arguments);
4511        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4512        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
4513        data.writeInt(userId);
4514        data.writeString(instructionSet);
4515        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4516        reply.readException();
4517        boolean res = reply.readInt() != 0;
4518        reply.recycle();
4519        data.recycle();
4520        return res;
4521    }
4522
4523    public void finishInstrumentation(IApplicationThread target,
4524            int resultCode, Bundle results) throws RemoteException {
4525        Parcel data = Parcel.obtain();
4526        Parcel reply = Parcel.obtain();
4527        data.writeInterfaceToken(IActivityManager.descriptor);
4528        data.writeStrongBinder(target != null ? target.asBinder() : null);
4529        data.writeInt(resultCode);
4530        data.writeBundle(results);
4531        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4532        reply.readException();
4533        data.recycle();
4534        reply.recycle();
4535    }
4536    public Configuration getConfiguration() throws RemoteException
4537    {
4538        Parcel data = Parcel.obtain();
4539        Parcel reply = Parcel.obtain();
4540        data.writeInterfaceToken(IActivityManager.descriptor);
4541        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
4542        reply.readException();
4543        Configuration res = Configuration.CREATOR.createFromParcel(reply);
4544        reply.recycle();
4545        data.recycle();
4546        return res;
4547    }
4548    public void updateConfiguration(Configuration values) throws RemoteException
4549    {
4550        Parcel data = Parcel.obtain();
4551        Parcel reply = Parcel.obtain();
4552        data.writeInterfaceToken(IActivityManager.descriptor);
4553        values.writeToParcel(data, 0);
4554        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
4555        reply.readException();
4556        data.recycle();
4557        reply.recycle();
4558    }
4559    public void setRequestedOrientation(IBinder token, int requestedOrientation)
4560            throws RemoteException {
4561        Parcel data = Parcel.obtain();
4562        Parcel reply = Parcel.obtain();
4563        data.writeInterfaceToken(IActivityManager.descriptor);
4564        data.writeStrongBinder(token);
4565        data.writeInt(requestedOrientation);
4566        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4567        reply.readException();
4568        data.recycle();
4569        reply.recycle();
4570    }
4571    public int getRequestedOrientation(IBinder token) throws RemoteException {
4572        Parcel data = Parcel.obtain();
4573        Parcel reply = Parcel.obtain();
4574        data.writeInterfaceToken(IActivityManager.descriptor);
4575        data.writeStrongBinder(token);
4576        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4577        reply.readException();
4578        int res = reply.readInt();
4579        data.recycle();
4580        reply.recycle();
4581        return res;
4582    }
4583    public ComponentName getActivityClassForToken(IBinder token)
4584            throws RemoteException {
4585        Parcel data = Parcel.obtain();
4586        Parcel reply = Parcel.obtain();
4587        data.writeInterfaceToken(IActivityManager.descriptor);
4588        data.writeStrongBinder(token);
4589        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
4590        reply.readException();
4591        ComponentName res = ComponentName.readFromParcel(reply);
4592        data.recycle();
4593        reply.recycle();
4594        return res;
4595    }
4596    public String getPackageForToken(IBinder token) throws RemoteException
4597    {
4598        Parcel data = Parcel.obtain();
4599        Parcel reply = Parcel.obtain();
4600        data.writeInterfaceToken(IActivityManager.descriptor);
4601        data.writeStrongBinder(token);
4602        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
4603        reply.readException();
4604        String res = reply.readString();
4605        data.recycle();
4606        reply.recycle();
4607        return res;
4608    }
4609    public IIntentSender getIntentSender(int type,
4610            String packageName, IBinder token, String resultWho,
4611            int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
4612            Bundle options, int userId) throws RemoteException {
4613        Parcel data = Parcel.obtain();
4614        Parcel reply = Parcel.obtain();
4615        data.writeInterfaceToken(IActivityManager.descriptor);
4616        data.writeInt(type);
4617        data.writeString(packageName);
4618        data.writeStrongBinder(token);
4619        data.writeString(resultWho);
4620        data.writeInt(requestCode);
4621        if (intents != null) {
4622            data.writeInt(1);
4623            data.writeTypedArray(intents, 0);
4624            data.writeStringArray(resolvedTypes);
4625        } else {
4626            data.writeInt(0);
4627        }
4628        data.writeInt(flags);
4629        if (options != null) {
4630            data.writeInt(1);
4631            options.writeToParcel(data, 0);
4632        } else {
4633            data.writeInt(0);
4634        }
4635        data.writeInt(userId);
4636        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
4637        reply.readException();
4638        IIntentSender res = IIntentSender.Stub.asInterface(
4639                reply.readStrongBinder());
4640        data.recycle();
4641        reply.recycle();
4642        return res;
4643    }
4644    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
4645        Parcel data = Parcel.obtain();
4646        Parcel reply = Parcel.obtain();
4647        data.writeInterfaceToken(IActivityManager.descriptor);
4648        data.writeStrongBinder(sender.asBinder());
4649        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
4650        reply.readException();
4651        data.recycle();
4652        reply.recycle();
4653    }
4654    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
4655        Parcel data = Parcel.obtain();
4656        Parcel reply = Parcel.obtain();
4657        data.writeInterfaceToken(IActivityManager.descriptor);
4658        data.writeStrongBinder(sender.asBinder());
4659        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4660        reply.readException();
4661        String res = reply.readString();
4662        data.recycle();
4663        reply.recycle();
4664        return res;
4665    }
4666    public int getUidForIntentSender(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(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4672        reply.readException();
4673        int res = reply.readInt();
4674        data.recycle();
4675        reply.recycle();
4676        return res;
4677    }
4678    public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
4679            boolean requireFull, String name, String callerPackage) throws RemoteException {
4680        Parcel data = Parcel.obtain();
4681        Parcel reply = Parcel.obtain();
4682        data.writeInterfaceToken(IActivityManager.descriptor);
4683        data.writeInt(callingPid);
4684        data.writeInt(callingUid);
4685        data.writeInt(userId);
4686        data.writeInt(allowAll ? 1 : 0);
4687        data.writeInt(requireFull ? 1 : 0);
4688        data.writeString(name);
4689        data.writeString(callerPackage);
4690        mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
4691        reply.readException();
4692        int res = reply.readInt();
4693        data.recycle();
4694        reply.recycle();
4695        return res;
4696    }
4697    public void setProcessLimit(int max) throws RemoteException
4698    {
4699        Parcel data = Parcel.obtain();
4700        Parcel reply = Parcel.obtain();
4701        data.writeInterfaceToken(IActivityManager.descriptor);
4702        data.writeInt(max);
4703        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4704        reply.readException();
4705        data.recycle();
4706        reply.recycle();
4707    }
4708    public int getProcessLimit() throws RemoteException
4709    {
4710        Parcel data = Parcel.obtain();
4711        Parcel reply = Parcel.obtain();
4712        data.writeInterfaceToken(IActivityManager.descriptor);
4713        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4714        reply.readException();
4715        int res = reply.readInt();
4716        data.recycle();
4717        reply.recycle();
4718        return res;
4719    }
4720    public void setProcessForeground(IBinder token, int pid,
4721            boolean isForeground) throws RemoteException {
4722        Parcel data = Parcel.obtain();
4723        Parcel reply = Parcel.obtain();
4724        data.writeInterfaceToken(IActivityManager.descriptor);
4725        data.writeStrongBinder(token);
4726        data.writeInt(pid);
4727        data.writeInt(isForeground ? 1 : 0);
4728        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
4729        reply.readException();
4730        data.recycle();
4731        reply.recycle();
4732    }
4733    public int checkPermission(String permission, int pid, int uid)
4734            throws RemoteException {
4735        Parcel data = Parcel.obtain();
4736        Parcel reply = Parcel.obtain();
4737        data.writeInterfaceToken(IActivityManager.descriptor);
4738        data.writeString(permission);
4739        data.writeInt(pid);
4740        data.writeInt(uid);
4741        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
4742        reply.readException();
4743        int res = reply.readInt();
4744        data.recycle();
4745        reply.recycle();
4746        return res;
4747    }
4748    public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
4749            throws RemoteException {
4750        Parcel data = Parcel.obtain();
4751        Parcel reply = Parcel.obtain();
4752        data.writeInterfaceToken(IActivityManager.descriptor);
4753        data.writeString(permission);
4754        data.writeInt(pid);
4755        data.writeInt(uid);
4756        data.writeStrongBinder(callerToken);
4757        mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
4758        reply.readException();
4759        int res = reply.readInt();
4760        data.recycle();
4761        reply.recycle();
4762        return res;
4763    }
4764    public boolean clearApplicationUserData(final String packageName,
4765            final IPackageDataObserver observer, final int userId) throws RemoteException {
4766        Parcel data = Parcel.obtain();
4767        Parcel reply = Parcel.obtain();
4768        data.writeInterfaceToken(IActivityManager.descriptor);
4769        data.writeString(packageName);
4770        data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
4771        data.writeInt(userId);
4772        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
4773        reply.readException();
4774        boolean res = reply.readInt() != 0;
4775        data.recycle();
4776        reply.recycle();
4777        return res;
4778    }
4779    public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
4780            IBinder callerToken) throws RemoteException {
4781        Parcel data = Parcel.obtain();
4782        Parcel reply = Parcel.obtain();
4783        data.writeInterfaceToken(IActivityManager.descriptor);
4784        uri.writeToParcel(data, 0);
4785        data.writeInt(pid);
4786        data.writeInt(uid);
4787        data.writeInt(mode);
4788        data.writeInt(userId);
4789        data.writeStrongBinder(callerToken);
4790        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
4791        reply.readException();
4792        int res = reply.readInt();
4793        data.recycle();
4794        reply.recycle();
4795        return res;
4796    }
4797    public void grantUriPermission(IApplicationThread caller, String targetPkg,
4798            Uri uri, int mode, int userId) throws RemoteException {
4799        Parcel data = Parcel.obtain();
4800        Parcel reply = Parcel.obtain();
4801        data.writeInterfaceToken(IActivityManager.descriptor);
4802        data.writeStrongBinder(caller.asBinder());
4803        data.writeString(targetPkg);
4804        uri.writeToParcel(data, 0);
4805        data.writeInt(mode);
4806        data.writeInt(userId);
4807        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4808        reply.readException();
4809        data.recycle();
4810        reply.recycle();
4811    }
4812    public void revokeUriPermission(IApplicationThread caller, Uri uri,
4813            int mode, int userId) throws RemoteException {
4814        Parcel data = Parcel.obtain();
4815        Parcel reply = Parcel.obtain();
4816        data.writeInterfaceToken(IActivityManager.descriptor);
4817        data.writeStrongBinder(caller.asBinder());
4818        uri.writeToParcel(data, 0);
4819        data.writeInt(mode);
4820        data.writeInt(userId);
4821        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4822        reply.readException();
4823        data.recycle();
4824        reply.recycle();
4825    }
4826
4827    @Override
4828    public void takePersistableUriPermission(Uri uri, int mode, int userId)
4829            throws RemoteException {
4830        Parcel data = Parcel.obtain();
4831        Parcel reply = Parcel.obtain();
4832        data.writeInterfaceToken(IActivityManager.descriptor);
4833        uri.writeToParcel(data, 0);
4834        data.writeInt(mode);
4835        data.writeInt(userId);
4836        mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4837        reply.readException();
4838        data.recycle();
4839        reply.recycle();
4840    }
4841
4842    @Override
4843    public void releasePersistableUriPermission(Uri uri, int mode, int userId)
4844            throws RemoteException {
4845        Parcel data = Parcel.obtain();
4846        Parcel reply = Parcel.obtain();
4847        data.writeInterfaceToken(IActivityManager.descriptor);
4848        uri.writeToParcel(data, 0);
4849        data.writeInt(mode);
4850        data.writeInt(userId);
4851        mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4852        reply.readException();
4853        data.recycle();
4854        reply.recycle();
4855    }
4856
4857    @Override
4858    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
4859            String packageName, boolean incoming) throws RemoteException {
4860        Parcel data = Parcel.obtain();
4861        Parcel reply = Parcel.obtain();
4862        data.writeInterfaceToken(IActivityManager.descriptor);
4863        data.writeString(packageName);
4864        data.writeInt(incoming ? 1 : 0);
4865        mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4866        reply.readException();
4867        @SuppressWarnings("unchecked")
4868        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4869                reply);
4870        data.recycle();
4871        reply.recycle();
4872        return perms;
4873    }
4874
4875    @Override
4876    public ParceledListSlice<UriPermission> getGrantedUriPermissions(String packageName, int userId)
4877            throws RemoteException {
4878        Parcel data = Parcel.obtain();
4879        Parcel reply = Parcel.obtain();
4880        data.writeInterfaceToken(IActivityManager.descriptor);
4881        data.writeString(packageName);
4882        data.writeInt(userId);
4883        mRemote.transact(GET_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4884        reply.readException();
4885        @SuppressWarnings("unchecked")
4886        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4887                reply);
4888        data.recycle();
4889        reply.recycle();
4890        return perms;
4891    }
4892
4893    @Override
4894    public void clearGrantedUriPermissions(String packageName, int userId) throws RemoteException {
4895        Parcel data = Parcel.obtain();
4896        Parcel reply = Parcel.obtain();
4897        data.writeInterfaceToken(IActivityManager.descriptor);
4898        data.writeString(packageName);
4899        data.writeInt(userId);
4900        mRemote.transact(CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4901        reply.readException();
4902        data.recycle();
4903        reply.recycle();
4904    }
4905
4906    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
4907            throws RemoteException {
4908        Parcel data = Parcel.obtain();
4909        Parcel reply = Parcel.obtain();
4910        data.writeInterfaceToken(IActivityManager.descriptor);
4911        data.writeStrongBinder(who.asBinder());
4912        data.writeInt(waiting ? 1 : 0);
4913        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
4914        reply.readException();
4915        data.recycle();
4916        reply.recycle();
4917    }
4918    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
4919        Parcel data = Parcel.obtain();
4920        Parcel reply = Parcel.obtain();
4921        data.writeInterfaceToken(IActivityManager.descriptor);
4922        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
4923        reply.readException();
4924        outInfo.readFromParcel(reply);
4925        data.recycle();
4926        reply.recycle();
4927    }
4928    public void unhandledBack() throws RemoteException
4929    {
4930        Parcel data = Parcel.obtain();
4931        Parcel reply = Parcel.obtain();
4932        data.writeInterfaceToken(IActivityManager.descriptor);
4933        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
4934        reply.readException();
4935        data.recycle();
4936        reply.recycle();
4937    }
4938    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
4939    {
4940        Parcel data = Parcel.obtain();
4941        Parcel reply = Parcel.obtain();
4942        data.writeInterfaceToken(IActivityManager.descriptor);
4943        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
4944        reply.readException();
4945        ParcelFileDescriptor pfd = null;
4946        if (reply.readInt() != 0) {
4947            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
4948        }
4949        data.recycle();
4950        reply.recycle();
4951        return pfd;
4952    }
4953    public void setLockScreenShown(boolean showing, boolean occluded) throws RemoteException
4954    {
4955        Parcel data = Parcel.obtain();
4956        Parcel reply = Parcel.obtain();
4957        data.writeInterfaceToken(IActivityManager.descriptor);
4958        data.writeInt(showing ? 1 : 0);
4959        data.writeInt(occluded ? 1 : 0);
4960        mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
4961        reply.readException();
4962        data.recycle();
4963        reply.recycle();
4964    }
4965    public void setDebugApp(
4966        String packageName, boolean waitForDebugger, boolean persistent)
4967        throws RemoteException
4968    {
4969        Parcel data = Parcel.obtain();
4970        Parcel reply = Parcel.obtain();
4971        data.writeInterfaceToken(IActivityManager.descriptor);
4972        data.writeString(packageName);
4973        data.writeInt(waitForDebugger ? 1 : 0);
4974        data.writeInt(persistent ? 1 : 0);
4975        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
4976        reply.readException();
4977        data.recycle();
4978        reply.recycle();
4979    }
4980    public void setAlwaysFinish(boolean enabled) throws RemoteException
4981    {
4982        Parcel data = Parcel.obtain();
4983        Parcel reply = Parcel.obtain();
4984        data.writeInterfaceToken(IActivityManager.descriptor);
4985        data.writeInt(enabled ? 1 : 0);
4986        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
4987        reply.readException();
4988        data.recycle();
4989        reply.recycle();
4990    }
4991    public void setActivityController(IActivityController watcher, boolean imAMonkey)
4992            throws RemoteException
4993    {
4994        Parcel data = Parcel.obtain();
4995        Parcel reply = Parcel.obtain();
4996        data.writeInterfaceToken(IActivityManager.descriptor);
4997        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4998        data.writeInt(imAMonkey ? 1 : 0);
4999        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
5000        reply.readException();
5001        data.recycle();
5002        reply.recycle();
5003    }
5004    public void setLenientBackgroundCheck(boolean enabled) throws RemoteException
5005    {
5006        Parcel data = Parcel.obtain();
5007        Parcel reply = Parcel.obtain();
5008        data.writeInterfaceToken(IActivityManager.descriptor);
5009        data.writeInt(enabled ? 1 : 0);
5010        mRemote.transact(SET_LENIENT_BACKGROUND_CHECK_TRANSACTION, data, reply, 0);
5011        reply.readException();
5012        data.recycle();
5013        reply.recycle();
5014    }
5015    public int getMemoryTrimLevel() throws RemoteException
5016    {
5017        Parcel data = Parcel.obtain();
5018        Parcel reply = Parcel.obtain();
5019        data.writeInterfaceToken(IActivityManager.descriptor);
5020        mRemote.transact(GET_MEMORY_TRIM_LEVEL_TRANSACTION, data, reply, 0);
5021        reply.readException();
5022        int level = reply.readInt();
5023        data.recycle();
5024        reply.recycle();
5025        return level;
5026    }
5027    public void enterSafeMode() throws RemoteException {
5028        Parcel data = Parcel.obtain();
5029        data.writeInterfaceToken(IActivityManager.descriptor);
5030        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
5031        data.recycle();
5032    }
5033    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag)
5034            throws RemoteException {
5035        Parcel data = Parcel.obtain();
5036        data.writeInterfaceToken(IActivityManager.descriptor);
5037        data.writeStrongBinder(sender.asBinder());
5038        data.writeInt(sourceUid);
5039        data.writeString(sourcePkg);
5040        data.writeString(tag);
5041        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
5042        data.recycle();
5043    }
5044    public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag)
5045            throws RemoteException {
5046        Parcel data = Parcel.obtain();
5047        data.writeInterfaceToken(IActivityManager.descriptor);
5048        data.writeStrongBinder(sender.asBinder());
5049        data.writeInt(sourceUid);
5050        data.writeString(tag);
5051        mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0);
5052        data.recycle();
5053    }
5054    public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag)
5055            throws RemoteException {
5056        Parcel data = Parcel.obtain();
5057        data.writeInterfaceToken(IActivityManager.descriptor);
5058        data.writeStrongBinder(sender.asBinder());
5059        data.writeInt(sourceUid);
5060        data.writeString(tag);
5061        mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0);
5062        data.recycle();
5063    }
5064    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
5065        Parcel data = Parcel.obtain();
5066        Parcel reply = Parcel.obtain();
5067        data.writeInterfaceToken(IActivityManager.descriptor);
5068        data.writeIntArray(pids);
5069        data.writeString(reason);
5070        data.writeInt(secure ? 1 : 0);
5071        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
5072        reply.readException();
5073        boolean res = reply.readInt() != 0;
5074        data.recycle();
5075        reply.recycle();
5076        return res;
5077    }
5078    @Override
5079    public boolean killProcessesBelowForeground(String reason) throws RemoteException {
5080        Parcel data = Parcel.obtain();
5081        Parcel reply = Parcel.obtain();
5082        data.writeInterfaceToken(IActivityManager.descriptor);
5083        data.writeString(reason);
5084        mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
5085        boolean res = reply.readInt() != 0;
5086        data.recycle();
5087        reply.recycle();
5088        return res;
5089    }
5090    public boolean testIsSystemReady()
5091    {
5092        /* this base class version is never called */
5093        return true;
5094    }
5095    public void handleApplicationCrash(IBinder app,
5096            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5097    {
5098        Parcel data = Parcel.obtain();
5099        Parcel reply = Parcel.obtain();
5100        data.writeInterfaceToken(IActivityManager.descriptor);
5101        data.writeStrongBinder(app);
5102        crashInfo.writeToParcel(data, 0);
5103        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
5104        reply.readException();
5105        reply.recycle();
5106        data.recycle();
5107    }
5108
5109    public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
5110            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5111    {
5112        Parcel data = Parcel.obtain();
5113        Parcel reply = Parcel.obtain();
5114        data.writeInterfaceToken(IActivityManager.descriptor);
5115        data.writeStrongBinder(app);
5116        data.writeString(tag);
5117        data.writeInt(system ? 1 : 0);
5118        crashInfo.writeToParcel(data, 0);
5119        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
5120        reply.readException();
5121        boolean res = reply.readInt() != 0;
5122        reply.recycle();
5123        data.recycle();
5124        return res;
5125    }
5126
5127    public void handleApplicationStrictModeViolation(IBinder app,
5128            int violationMask,
5129            StrictMode.ViolationInfo info) throws RemoteException
5130    {
5131        Parcel data = Parcel.obtain();
5132        Parcel reply = Parcel.obtain();
5133        data.writeInterfaceToken(IActivityManager.descriptor);
5134        data.writeStrongBinder(app);
5135        data.writeInt(violationMask);
5136        info.writeToParcel(data, 0);
5137        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
5138        reply.readException();
5139        reply.recycle();
5140        data.recycle();
5141    }
5142
5143    public void signalPersistentProcesses(int sig) throws RemoteException {
5144        Parcel data = Parcel.obtain();
5145        Parcel reply = Parcel.obtain();
5146        data.writeInterfaceToken(IActivityManager.descriptor);
5147        data.writeInt(sig);
5148        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
5149        reply.readException();
5150        data.recycle();
5151        reply.recycle();
5152    }
5153
5154    public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
5155        Parcel data = Parcel.obtain();
5156        Parcel reply = Parcel.obtain();
5157        data.writeInterfaceToken(IActivityManager.descriptor);
5158        data.writeString(packageName);
5159        data.writeInt(userId);
5160        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5161        reply.readException();
5162        data.recycle();
5163        reply.recycle();
5164    }
5165
5166    public void killAllBackgroundProcesses() throws RemoteException {
5167        Parcel data = Parcel.obtain();
5168        Parcel reply = Parcel.obtain();
5169        data.writeInterfaceToken(IActivityManager.descriptor);
5170        mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5171        reply.readException();
5172        data.recycle();
5173        reply.recycle();
5174    }
5175
5176    public void killPackageDependents(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_PACKAGE_DEPENDENTS_TRANSACTION, data, reply, 0);
5183        reply.readException();
5184        data.recycle();
5185        reply.recycle();
5186    }
5187
5188    public void forceStopPackage(String packageName, int userId) throws RemoteException {
5189        Parcel data = Parcel.obtain();
5190        Parcel reply = Parcel.obtain();
5191        data.writeInterfaceToken(IActivityManager.descriptor);
5192        data.writeString(packageName);
5193        data.writeInt(userId);
5194        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
5195        reply.readException();
5196        data.recycle();
5197        reply.recycle();
5198    }
5199
5200    public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
5201            throws RemoteException
5202    {
5203        Parcel data = Parcel.obtain();
5204        Parcel reply = Parcel.obtain();
5205        data.writeInterfaceToken(IActivityManager.descriptor);
5206        mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
5207        reply.readException();
5208        outInfo.readFromParcel(reply);
5209        reply.recycle();
5210        data.recycle();
5211    }
5212
5213    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
5214    {
5215        Parcel data = Parcel.obtain();
5216        Parcel reply = Parcel.obtain();
5217        data.writeInterfaceToken(IActivityManager.descriptor);
5218        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
5219        reply.readException();
5220        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
5221        reply.recycle();
5222        data.recycle();
5223        return res;
5224    }
5225
5226    public boolean profileControl(String process, int userId, boolean start,
5227            ProfilerInfo profilerInfo, int profileType) throws RemoteException
5228    {
5229        Parcel data = Parcel.obtain();
5230        Parcel reply = Parcel.obtain();
5231        data.writeInterfaceToken(IActivityManager.descriptor);
5232        data.writeString(process);
5233        data.writeInt(userId);
5234        data.writeInt(start ? 1 : 0);
5235        data.writeInt(profileType);
5236        if (profilerInfo != null) {
5237            data.writeInt(1);
5238            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5239        } else {
5240            data.writeInt(0);
5241        }
5242        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
5243        reply.readException();
5244        boolean res = reply.readInt() != 0;
5245        reply.recycle();
5246        data.recycle();
5247        return res;
5248    }
5249
5250    public boolean shutdown(int timeout) throws RemoteException
5251    {
5252        Parcel data = Parcel.obtain();
5253        Parcel reply = Parcel.obtain();
5254        data.writeInterfaceToken(IActivityManager.descriptor);
5255        data.writeInt(timeout);
5256        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
5257        reply.readException();
5258        boolean res = reply.readInt() != 0;
5259        reply.recycle();
5260        data.recycle();
5261        return res;
5262    }
5263
5264    public void stopAppSwitches() throws RemoteException {
5265        Parcel data = Parcel.obtain();
5266        Parcel reply = Parcel.obtain();
5267        data.writeInterfaceToken(IActivityManager.descriptor);
5268        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
5269        reply.readException();
5270        reply.recycle();
5271        data.recycle();
5272    }
5273
5274    public void resumeAppSwitches() throws RemoteException {
5275        Parcel data = Parcel.obtain();
5276        Parcel reply = Parcel.obtain();
5277        data.writeInterfaceToken(IActivityManager.descriptor);
5278        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
5279        reply.readException();
5280        reply.recycle();
5281        data.recycle();
5282    }
5283
5284    public void addPackageDependency(String packageName) throws RemoteException {
5285        Parcel data = Parcel.obtain();
5286        Parcel reply = Parcel.obtain();
5287        data.writeInterfaceToken(IActivityManager.descriptor);
5288        data.writeString(packageName);
5289        mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
5290        reply.readException();
5291        data.recycle();
5292        reply.recycle();
5293    }
5294
5295    public void killApplicationWithAppId(String pkg, int appid, String reason)
5296            throws RemoteException {
5297        Parcel data = Parcel.obtain();
5298        Parcel reply = Parcel.obtain();
5299        data.writeInterfaceToken(IActivityManager.descriptor);
5300        data.writeString(pkg);
5301        data.writeInt(appid);
5302        data.writeString(reason);
5303        mRemote.transact(KILL_APPLICATION_WITH_APPID_TRANSACTION, data, reply, 0);
5304        reply.readException();
5305        data.recycle();
5306        reply.recycle();
5307    }
5308
5309    public void closeSystemDialogs(String reason) throws RemoteException {
5310        Parcel data = Parcel.obtain();
5311        Parcel reply = Parcel.obtain();
5312        data.writeInterfaceToken(IActivityManager.descriptor);
5313        data.writeString(reason);
5314        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
5315        reply.readException();
5316        data.recycle();
5317        reply.recycle();
5318    }
5319
5320    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
5321            throws RemoteException {
5322        Parcel data = Parcel.obtain();
5323        Parcel reply = Parcel.obtain();
5324        data.writeInterfaceToken(IActivityManager.descriptor);
5325        data.writeIntArray(pids);
5326        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
5327        reply.readException();
5328        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
5329        data.recycle();
5330        reply.recycle();
5331        return res;
5332    }
5333
5334    public void killApplicationProcess(String processName, int uid) throws RemoteException {
5335        Parcel data = Parcel.obtain();
5336        Parcel reply = Parcel.obtain();
5337        data.writeInterfaceToken(IActivityManager.descriptor);
5338        data.writeString(processName);
5339        data.writeInt(uid);
5340        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
5341        reply.readException();
5342        data.recycle();
5343        reply.recycle();
5344    }
5345
5346    public void overridePendingTransition(IBinder token, String packageName,
5347            int enterAnim, int exitAnim) throws RemoteException {
5348        Parcel data = Parcel.obtain();
5349        Parcel reply = Parcel.obtain();
5350        data.writeInterfaceToken(IActivityManager.descriptor);
5351        data.writeStrongBinder(token);
5352        data.writeString(packageName);
5353        data.writeInt(enterAnim);
5354        data.writeInt(exitAnim);
5355        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
5356        reply.readException();
5357        data.recycle();
5358        reply.recycle();
5359    }
5360
5361    public boolean isUserAMonkey() throws RemoteException {
5362        Parcel data = Parcel.obtain();
5363        Parcel reply = Parcel.obtain();
5364        data.writeInterfaceToken(IActivityManager.descriptor);
5365        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
5366        reply.readException();
5367        boolean res = reply.readInt() != 0;
5368        data.recycle();
5369        reply.recycle();
5370        return res;
5371    }
5372
5373    public void setUserIsMonkey(boolean monkey) throws RemoteException {
5374        Parcel data = Parcel.obtain();
5375        Parcel reply = Parcel.obtain();
5376        data.writeInterfaceToken(IActivityManager.descriptor);
5377        data.writeInt(monkey ? 1 : 0);
5378        mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
5379        reply.readException();
5380        data.recycle();
5381        reply.recycle();
5382    }
5383
5384    public void finishHeavyWeightApp() throws RemoteException {
5385        Parcel data = Parcel.obtain();
5386        Parcel reply = Parcel.obtain();
5387        data.writeInterfaceToken(IActivityManager.descriptor);
5388        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
5389        reply.readException();
5390        data.recycle();
5391        reply.recycle();
5392    }
5393
5394    public boolean convertFromTranslucent(IBinder token)
5395            throws RemoteException {
5396        Parcel data = Parcel.obtain();
5397        Parcel reply = Parcel.obtain();
5398        data.writeInterfaceToken(IActivityManager.descriptor);
5399        data.writeStrongBinder(token);
5400        mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
5401        reply.readException();
5402        boolean res = reply.readInt() != 0;
5403        data.recycle();
5404        reply.recycle();
5405        return res;
5406    }
5407
5408    public boolean convertToTranslucent(IBinder token, ActivityOptions options)
5409            throws RemoteException {
5410        Parcel data = Parcel.obtain();
5411        Parcel reply = Parcel.obtain();
5412        data.writeInterfaceToken(IActivityManager.descriptor);
5413        data.writeStrongBinder(token);
5414        if (options == null) {
5415            data.writeInt(0);
5416        } else {
5417            data.writeInt(1);
5418            data.writeBundle(options.toBundle());
5419        }
5420        mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
5421        reply.readException();
5422        boolean res = reply.readInt() != 0;
5423        data.recycle();
5424        reply.recycle();
5425        return res;
5426    }
5427
5428    public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
5429        Parcel data = Parcel.obtain();
5430        Parcel reply = Parcel.obtain();
5431        data.writeInterfaceToken(IActivityManager.descriptor);
5432        data.writeStrongBinder(token);
5433        mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
5434        reply.readException();
5435        ActivityOptions options = ActivityOptions.fromBundle(reply.readBundle());
5436        data.recycle();
5437        reply.recycle();
5438        return options;
5439    }
5440
5441    public void setImmersive(IBinder token, boolean immersive)
5442            throws RemoteException {
5443        Parcel data = Parcel.obtain();
5444        Parcel reply = Parcel.obtain();
5445        data.writeInterfaceToken(IActivityManager.descriptor);
5446        data.writeStrongBinder(token);
5447        data.writeInt(immersive ? 1 : 0);
5448        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
5449        reply.readException();
5450        data.recycle();
5451        reply.recycle();
5452    }
5453
5454    public boolean isImmersive(IBinder token)
5455            throws RemoteException {
5456        Parcel data = Parcel.obtain();
5457        Parcel reply = Parcel.obtain();
5458        data.writeInterfaceToken(IActivityManager.descriptor);
5459        data.writeStrongBinder(token);
5460        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
5461        reply.readException();
5462        boolean res = reply.readInt() == 1;
5463        data.recycle();
5464        reply.recycle();
5465        return res;
5466    }
5467
5468    public boolean isTopOfTask(IBinder token) throws RemoteException {
5469        Parcel data = Parcel.obtain();
5470        Parcel reply = Parcel.obtain();
5471        data.writeInterfaceToken(IActivityManager.descriptor);
5472        data.writeStrongBinder(token);
5473        mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
5474        reply.readException();
5475        boolean res = reply.readInt() == 1;
5476        data.recycle();
5477        reply.recycle();
5478        return res;
5479    }
5480
5481    public boolean isTopActivityImmersive()
5482            throws RemoteException {
5483        Parcel data = Parcel.obtain();
5484        Parcel reply = Parcel.obtain();
5485        data.writeInterfaceToken(IActivityManager.descriptor);
5486        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
5487        reply.readException();
5488        boolean res = reply.readInt() == 1;
5489        data.recycle();
5490        reply.recycle();
5491        return res;
5492    }
5493
5494    public void crashApplication(int uid, int initialPid, String packageName,
5495            String message) throws RemoteException {
5496        Parcel data = Parcel.obtain();
5497        Parcel reply = Parcel.obtain();
5498        data.writeInterfaceToken(IActivityManager.descriptor);
5499        data.writeInt(uid);
5500        data.writeInt(initialPid);
5501        data.writeString(packageName);
5502        data.writeString(message);
5503        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
5504        reply.readException();
5505        data.recycle();
5506        reply.recycle();
5507    }
5508
5509    public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
5510        Parcel data = Parcel.obtain();
5511        Parcel reply = Parcel.obtain();
5512        data.writeInterfaceToken(IActivityManager.descriptor);
5513        uri.writeToParcel(data, 0);
5514        data.writeInt(userId);
5515        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
5516        reply.readException();
5517        String res = reply.readString();
5518        data.recycle();
5519        reply.recycle();
5520        return res;
5521    }
5522
5523    public IBinder newUriPermissionOwner(String name)
5524            throws RemoteException {
5525        Parcel data = Parcel.obtain();
5526        Parcel reply = Parcel.obtain();
5527        data.writeInterfaceToken(IActivityManager.descriptor);
5528        data.writeString(name);
5529        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
5530        reply.readException();
5531        IBinder res = reply.readStrongBinder();
5532        data.recycle();
5533        reply.recycle();
5534        return res;
5535    }
5536
5537    public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
5538        Parcel data = Parcel.obtain();
5539        Parcel reply = Parcel.obtain();
5540        data.writeInterfaceToken(IActivityManager.descriptor);
5541        data.writeStrongBinder(activityToken);
5542        mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
5543        reply.readException();
5544        IBinder res = reply.readStrongBinder();
5545        data.recycle();
5546        reply.recycle();
5547        return res;
5548    }
5549
5550    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
5551            Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
5552        Parcel data = Parcel.obtain();
5553        Parcel reply = Parcel.obtain();
5554        data.writeInterfaceToken(IActivityManager.descriptor);
5555        data.writeStrongBinder(owner);
5556        data.writeInt(fromUid);
5557        data.writeString(targetPkg);
5558        uri.writeToParcel(data, 0);
5559        data.writeInt(mode);
5560        data.writeInt(sourceUserId);
5561        data.writeInt(targetUserId);
5562        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5563        reply.readException();
5564        data.recycle();
5565        reply.recycle();
5566    }
5567
5568    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
5569            int mode, int userId) throws RemoteException {
5570        Parcel data = Parcel.obtain();
5571        Parcel reply = Parcel.obtain();
5572        data.writeInterfaceToken(IActivityManager.descriptor);
5573        data.writeStrongBinder(owner);
5574        if (uri != null) {
5575            data.writeInt(1);
5576            uri.writeToParcel(data, 0);
5577        } else {
5578            data.writeInt(0);
5579        }
5580        data.writeInt(mode);
5581        data.writeInt(userId);
5582        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
5583        reply.readException();
5584        data.recycle();
5585        reply.recycle();
5586    }
5587
5588    public int checkGrantUriPermission(int callingUid, String targetPkg,
5589            Uri uri, int modeFlags, int userId) throws RemoteException {
5590        Parcel data = Parcel.obtain();
5591        Parcel reply = Parcel.obtain();
5592        data.writeInterfaceToken(IActivityManager.descriptor);
5593        data.writeInt(callingUid);
5594        data.writeString(targetPkg);
5595        uri.writeToParcel(data, 0);
5596        data.writeInt(modeFlags);
5597        data.writeInt(userId);
5598        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5599        reply.readException();
5600        int res = reply.readInt();
5601        data.recycle();
5602        reply.recycle();
5603        return res;
5604    }
5605
5606    public boolean dumpHeap(String process, int userId, boolean managed,
5607            String path, ParcelFileDescriptor fd) throws RemoteException {
5608        Parcel data = Parcel.obtain();
5609        Parcel reply = Parcel.obtain();
5610        data.writeInterfaceToken(IActivityManager.descriptor);
5611        data.writeString(process);
5612        data.writeInt(userId);
5613        data.writeInt(managed ? 1 : 0);
5614        data.writeString(path);
5615        if (fd != null) {
5616            data.writeInt(1);
5617            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5618        } else {
5619            data.writeInt(0);
5620        }
5621        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
5622        reply.readException();
5623        boolean res = reply.readInt() != 0;
5624        reply.recycle();
5625        data.recycle();
5626        return res;
5627    }
5628
5629    public int startActivities(IApplicationThread caller, String callingPackage,
5630            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
5631            Bundle options, int userId) throws RemoteException {
5632        Parcel data = Parcel.obtain();
5633        Parcel reply = Parcel.obtain();
5634        data.writeInterfaceToken(IActivityManager.descriptor);
5635        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
5636        data.writeString(callingPackage);
5637        data.writeTypedArray(intents, 0);
5638        data.writeStringArray(resolvedTypes);
5639        data.writeStrongBinder(resultTo);
5640        if (options != null) {
5641            data.writeInt(1);
5642            options.writeToParcel(data, 0);
5643        } else {
5644            data.writeInt(0);
5645        }
5646        data.writeInt(userId);
5647        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
5648        reply.readException();
5649        int result = reply.readInt();
5650        reply.recycle();
5651        data.recycle();
5652        return result;
5653    }
5654
5655    public int getFrontActivityScreenCompatMode() throws RemoteException {
5656        Parcel data = Parcel.obtain();
5657        Parcel reply = Parcel.obtain();
5658        data.writeInterfaceToken(IActivityManager.descriptor);
5659        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5660        reply.readException();
5661        int mode = reply.readInt();
5662        reply.recycle();
5663        data.recycle();
5664        return mode;
5665    }
5666
5667    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
5668        Parcel data = Parcel.obtain();
5669        Parcel reply = Parcel.obtain();
5670        data.writeInterfaceToken(IActivityManager.descriptor);
5671        data.writeInt(mode);
5672        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5673        reply.readException();
5674        reply.recycle();
5675        data.recycle();
5676    }
5677
5678    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
5679        Parcel data = Parcel.obtain();
5680        Parcel reply = Parcel.obtain();
5681        data.writeInterfaceToken(IActivityManager.descriptor);
5682        data.writeString(packageName);
5683        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5684        reply.readException();
5685        int mode = reply.readInt();
5686        reply.recycle();
5687        data.recycle();
5688        return mode;
5689    }
5690
5691    public void setPackageScreenCompatMode(String packageName, int mode)
5692            throws RemoteException {
5693        Parcel data = Parcel.obtain();
5694        Parcel reply = Parcel.obtain();
5695        data.writeInterfaceToken(IActivityManager.descriptor);
5696        data.writeString(packageName);
5697        data.writeInt(mode);
5698        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5699        reply.readException();
5700        reply.recycle();
5701        data.recycle();
5702    }
5703
5704    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
5705        Parcel data = Parcel.obtain();
5706        Parcel reply = Parcel.obtain();
5707        data.writeInterfaceToken(IActivityManager.descriptor);
5708        data.writeString(packageName);
5709        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5710        reply.readException();
5711        boolean ask = reply.readInt() != 0;
5712        reply.recycle();
5713        data.recycle();
5714        return ask;
5715    }
5716
5717    public void setPackageAskScreenCompat(String packageName, boolean ask)
5718            throws RemoteException {
5719        Parcel data = Parcel.obtain();
5720        Parcel reply = Parcel.obtain();
5721        data.writeInterfaceToken(IActivityManager.descriptor);
5722        data.writeString(packageName);
5723        data.writeInt(ask ? 1 : 0);
5724        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5725        reply.readException();
5726        reply.recycle();
5727        data.recycle();
5728    }
5729
5730    public boolean switchUser(int userid) throws RemoteException {
5731        Parcel data = Parcel.obtain();
5732        Parcel reply = Parcel.obtain();
5733        data.writeInterfaceToken(IActivityManager.descriptor);
5734        data.writeInt(userid);
5735        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
5736        reply.readException();
5737        boolean result = reply.readInt() != 0;
5738        reply.recycle();
5739        data.recycle();
5740        return result;
5741    }
5742
5743    public boolean startUserInBackground(int userid) throws RemoteException {
5744        Parcel data = Parcel.obtain();
5745        Parcel reply = Parcel.obtain();
5746        data.writeInterfaceToken(IActivityManager.descriptor);
5747        data.writeInt(userid);
5748        mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
5749        reply.readException();
5750        boolean result = reply.readInt() != 0;
5751        reply.recycle();
5752        data.recycle();
5753        return result;
5754    }
5755
5756    public boolean unlockUser(int userId, byte[] token, byte[] secret, IProgressListener listener)
5757            throws RemoteException {
5758        Parcel data = Parcel.obtain();
5759        Parcel reply = Parcel.obtain();
5760        data.writeInterfaceToken(IActivityManager.descriptor);
5761        data.writeInt(userId);
5762        data.writeByteArray(token);
5763        data.writeByteArray(secret);
5764        data.writeStrongInterface(listener);
5765        mRemote.transact(IActivityManager.UNLOCK_USER_TRANSACTION, data, reply, 0);
5766        reply.readException();
5767        boolean result = reply.readInt() != 0;
5768        reply.recycle();
5769        data.recycle();
5770        return result;
5771    }
5772
5773    public int stopUser(int userid, boolean force, IStopUserCallback callback)
5774            throws RemoteException {
5775        Parcel data = Parcel.obtain();
5776        Parcel reply = Parcel.obtain();
5777        data.writeInterfaceToken(IActivityManager.descriptor);
5778        data.writeInt(userid);
5779        data.writeInt(force ? 1 : 0);
5780        data.writeStrongInterface(callback);
5781        mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
5782        reply.readException();
5783        int result = reply.readInt();
5784        reply.recycle();
5785        data.recycle();
5786        return result;
5787    }
5788
5789    public UserInfo getCurrentUser() throws RemoteException {
5790        Parcel data = Parcel.obtain();
5791        Parcel reply = Parcel.obtain();
5792        data.writeInterfaceToken(IActivityManager.descriptor);
5793        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
5794        reply.readException();
5795        UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
5796        reply.recycle();
5797        data.recycle();
5798        return userInfo;
5799    }
5800
5801    public boolean isUserRunning(int userid, int flags) throws RemoteException {
5802        Parcel data = Parcel.obtain();
5803        Parcel reply = Parcel.obtain();
5804        data.writeInterfaceToken(IActivityManager.descriptor);
5805        data.writeInt(userid);
5806        data.writeInt(flags);
5807        mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
5808        reply.readException();
5809        boolean result = reply.readInt() != 0;
5810        reply.recycle();
5811        data.recycle();
5812        return result;
5813    }
5814
5815    public int[] getRunningUserIds() throws RemoteException {
5816        Parcel data = Parcel.obtain();
5817        Parcel reply = Parcel.obtain();
5818        data.writeInterfaceToken(IActivityManager.descriptor);
5819        mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
5820        reply.readException();
5821        int[] result = reply.createIntArray();
5822        reply.recycle();
5823        data.recycle();
5824        return result;
5825    }
5826
5827    public boolean removeTask(int taskId) throws RemoteException {
5828        Parcel data = Parcel.obtain();
5829        Parcel reply = Parcel.obtain();
5830        data.writeInterfaceToken(IActivityManager.descriptor);
5831        data.writeInt(taskId);
5832        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
5833        reply.readException();
5834        boolean result = reply.readInt() != 0;
5835        reply.recycle();
5836        data.recycle();
5837        return result;
5838    }
5839
5840    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
5841        Parcel data = Parcel.obtain();
5842        Parcel reply = Parcel.obtain();
5843        data.writeInterfaceToken(IActivityManager.descriptor);
5844        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5845        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5846        reply.readException();
5847        data.recycle();
5848        reply.recycle();
5849    }
5850
5851    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
5852        Parcel data = Parcel.obtain();
5853        Parcel reply = Parcel.obtain();
5854        data.writeInterfaceToken(IActivityManager.descriptor);
5855        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5856        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5857        reply.readException();
5858        data.recycle();
5859        reply.recycle();
5860    }
5861
5862    public void registerUidObserver(IUidObserver observer, int which) throws RemoteException {
5863        Parcel data = Parcel.obtain();
5864        Parcel reply = Parcel.obtain();
5865        data.writeInterfaceToken(IActivityManager.descriptor);
5866        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5867        data.writeInt(which);
5868        mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5869        reply.readException();
5870        data.recycle();
5871        reply.recycle();
5872    }
5873
5874    public void unregisterUidObserver(IUidObserver 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_UID_OBSERVER_TRANSACTION, data, reply, 0);
5880        reply.readException();
5881        data.recycle();
5882        reply.recycle();
5883    }
5884
5885    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
5886        Parcel data = Parcel.obtain();
5887        Parcel reply = Parcel.obtain();
5888        data.writeInterfaceToken(IActivityManager.descriptor);
5889        data.writeStrongBinder(sender.asBinder());
5890        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
5891        reply.readException();
5892        boolean res = reply.readInt() != 0;
5893        data.recycle();
5894        reply.recycle();
5895        return res;
5896    }
5897
5898    public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
5899        Parcel data = Parcel.obtain();
5900        Parcel reply = Parcel.obtain();
5901        data.writeInterfaceToken(IActivityManager.descriptor);
5902        data.writeStrongBinder(sender.asBinder());
5903        mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
5904        reply.readException();
5905        boolean res = reply.readInt() != 0;
5906        data.recycle();
5907        reply.recycle();
5908        return res;
5909    }
5910
5911    public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
5912        Parcel data = Parcel.obtain();
5913        Parcel reply = Parcel.obtain();
5914        data.writeInterfaceToken(IActivityManager.descriptor);
5915        data.writeStrongBinder(sender.asBinder());
5916        mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5917        reply.readException();
5918        Intent res = reply.readInt() != 0
5919                ? Intent.CREATOR.createFromParcel(reply) : null;
5920        data.recycle();
5921        reply.recycle();
5922        return res;
5923    }
5924
5925    public String getTagForIntentSender(IIntentSender sender, String prefix)
5926            throws RemoteException {
5927        Parcel data = Parcel.obtain();
5928        Parcel reply = Parcel.obtain();
5929        data.writeInterfaceToken(IActivityManager.descriptor);
5930        data.writeStrongBinder(sender.asBinder());
5931        data.writeString(prefix);
5932        mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5933        reply.readException();
5934        String res = reply.readString();
5935        data.recycle();
5936        reply.recycle();
5937        return res;
5938    }
5939
5940    public void updatePersistentConfiguration(Configuration values) throws RemoteException
5941    {
5942        Parcel data = Parcel.obtain();
5943        Parcel reply = Parcel.obtain();
5944        data.writeInterfaceToken(IActivityManager.descriptor);
5945        values.writeToParcel(data, 0);
5946        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
5947        reply.readException();
5948        data.recycle();
5949        reply.recycle();
5950    }
5951
5952    public long[] getProcessPss(int[] pids) throws RemoteException {
5953        Parcel data = Parcel.obtain();
5954        Parcel reply = Parcel.obtain();
5955        data.writeInterfaceToken(IActivityManager.descriptor);
5956        data.writeIntArray(pids);
5957        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
5958        reply.readException();
5959        long[] res = reply.createLongArray();
5960        data.recycle();
5961        reply.recycle();
5962        return res;
5963    }
5964
5965    public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
5966        Parcel data = Parcel.obtain();
5967        Parcel reply = Parcel.obtain();
5968        data.writeInterfaceToken(IActivityManager.descriptor);
5969        TextUtils.writeToParcel(msg, data, 0);
5970        data.writeInt(always ? 1 : 0);
5971        mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
5972        reply.readException();
5973        data.recycle();
5974        reply.recycle();
5975    }
5976
5977    public void keyguardWaitingForActivityDrawn() throws RemoteException {
5978        Parcel data = Parcel.obtain();
5979        Parcel reply = Parcel.obtain();
5980        data.writeInterfaceToken(IActivityManager.descriptor);
5981        mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
5982        reply.readException();
5983        data.recycle();
5984        reply.recycle();
5985    }
5986
5987    public void keyguardGoingAway(int flags)
5988            throws RemoteException {
5989        Parcel data = Parcel.obtain();
5990        Parcel reply = Parcel.obtain();
5991        data.writeInterfaceToken(IActivityManager.descriptor);
5992        data.writeInt(flags);
5993        mRemote.transact(KEYGUARD_GOING_AWAY_TRANSACTION, data, reply, 0);
5994        reply.readException();
5995        data.recycle();
5996        reply.recycle();
5997    }
5998
5999    public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
6000            throws RemoteException {
6001        Parcel data = Parcel.obtain();
6002        Parcel reply = Parcel.obtain();
6003        data.writeInterfaceToken(IActivityManager.descriptor);
6004        data.writeStrongBinder(token);
6005        data.writeString(destAffinity);
6006        mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
6007        reply.readException();
6008        boolean result = reply.readInt() != 0;
6009        data.recycle();
6010        reply.recycle();
6011        return result;
6012    }
6013
6014    public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
6015            throws RemoteException {
6016        Parcel data = Parcel.obtain();
6017        Parcel reply = Parcel.obtain();
6018        data.writeInterfaceToken(IActivityManager.descriptor);
6019        data.writeStrongBinder(token);
6020        target.writeToParcel(data, 0);
6021        data.writeInt(resultCode);
6022        if (resultData != null) {
6023            data.writeInt(1);
6024            resultData.writeToParcel(data, 0);
6025        } else {
6026            data.writeInt(0);
6027        }
6028        mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
6029        reply.readException();
6030        boolean result = reply.readInt() != 0;
6031        data.recycle();
6032        reply.recycle();
6033        return result;
6034    }
6035
6036    public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
6037        Parcel data = Parcel.obtain();
6038        Parcel reply = Parcel.obtain();
6039        data.writeInterfaceToken(IActivityManager.descriptor);
6040        data.writeStrongBinder(activityToken);
6041        mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
6042        reply.readException();
6043        int result = reply.readInt();
6044        data.recycle();
6045        reply.recycle();
6046        return result;
6047    }
6048
6049    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
6050        Parcel data = Parcel.obtain();
6051        Parcel reply = Parcel.obtain();
6052        data.writeInterfaceToken(IActivityManager.descriptor);
6053        data.writeStrongBinder(activityToken);
6054        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
6055        reply.readException();
6056        String result = reply.readString();
6057        data.recycle();
6058        reply.recycle();
6059        return result;
6060    }
6061
6062    public void registerUserSwitchObserver(IUserSwitchObserver observer,
6063            String name) throws RemoteException {
6064        Parcel data = Parcel.obtain();
6065        Parcel reply = Parcel.obtain();
6066        data.writeInterfaceToken(IActivityManager.descriptor);
6067        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6068        data.writeString(name);
6069        mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6070        reply.readException();
6071        data.recycle();
6072        reply.recycle();
6073    }
6074
6075    public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
6076        Parcel data = Parcel.obtain();
6077        Parcel reply = Parcel.obtain();
6078        data.writeInterfaceToken(IActivityManager.descriptor);
6079        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6080        mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6081        reply.readException();
6082        data.recycle();
6083        reply.recycle();
6084    }
6085
6086    public void requestBugReport(@ActivityManager.BugreportMode int bugreportType)
6087            throws RemoteException {
6088        Parcel data = Parcel.obtain();
6089        Parcel reply = Parcel.obtain();
6090        data.writeInterfaceToken(IActivityManager.descriptor);
6091        data.writeInt(bugreportType);
6092        mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
6093        reply.readException();
6094        data.recycle();
6095        reply.recycle();
6096    }
6097
6098    public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
6099            throws RemoteException {
6100        Parcel data = Parcel.obtain();
6101        Parcel reply = Parcel.obtain();
6102        data.writeInterfaceToken(IActivityManager.descriptor);
6103        data.writeInt(pid);
6104        data.writeInt(aboveSystem ? 1 : 0);
6105        data.writeString(reason);
6106        mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
6107        reply.readException();
6108        long res = reply.readInt();
6109        data.recycle();
6110        reply.recycle();
6111        return res;
6112    }
6113
6114    public Bundle getAssistContextExtras(int requestType) throws RemoteException {
6115        Parcel data = Parcel.obtain();
6116        Parcel reply = Parcel.obtain();
6117        data.writeInterfaceToken(IActivityManager.descriptor);
6118        data.writeInt(requestType);
6119        mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6120        reply.readException();
6121        Bundle res = reply.readBundle();
6122        data.recycle();
6123        reply.recycle();
6124        return res;
6125    }
6126
6127    public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
6128            Bundle receiverExtras,
6129            IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException {
6130        Parcel data = Parcel.obtain();
6131        Parcel reply = Parcel.obtain();
6132        data.writeInterfaceToken(IActivityManager.descriptor);
6133        data.writeInt(requestType);
6134        data.writeStrongBinder(receiver.asBinder());
6135        data.writeBundle(receiverExtras);
6136        data.writeStrongBinder(activityToken);
6137        data.writeInt(focused ? 1 : 0);
6138        data.writeInt(newSessionId ? 1 : 0);
6139        mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6140        reply.readException();
6141        boolean res = reply.readInt() != 0;
6142        data.recycle();
6143        reply.recycle();
6144        return res;
6145    }
6146
6147    public void reportAssistContextExtras(IBinder token, Bundle extras, AssistStructure structure,
6148            AssistContent content, Uri referrer) throws RemoteException {
6149        Parcel data = Parcel.obtain();
6150        Parcel reply = Parcel.obtain();
6151        data.writeInterfaceToken(IActivityManager.descriptor);
6152        data.writeStrongBinder(token);
6153        data.writeBundle(extras);
6154        structure.writeToParcel(data, 0);
6155        content.writeToParcel(data, 0);
6156        if (referrer != null) {
6157            data.writeInt(1);
6158            referrer.writeToParcel(data, 0);
6159        } else {
6160            data.writeInt(0);
6161        }
6162        mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6163        reply.readException();
6164        data.recycle();
6165        reply.recycle();
6166    }
6167
6168    public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle,
6169            Bundle args) throws RemoteException {
6170        Parcel data = Parcel.obtain();
6171        Parcel reply = Parcel.obtain();
6172        data.writeInterfaceToken(IActivityManager.descriptor);
6173        intent.writeToParcel(data, 0);
6174        data.writeInt(requestType);
6175        data.writeString(hint);
6176        data.writeInt(userHandle);
6177        data.writeBundle(args);
6178        mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
6179        reply.readException();
6180        boolean res = reply.readInt() != 0;
6181        data.recycle();
6182        reply.recycle();
6183        return res;
6184    }
6185
6186    public boolean isAssistDataAllowedOnCurrentActivity() throws RemoteException {
6187        Parcel data = Parcel.obtain();
6188        Parcel reply = Parcel.obtain();
6189        data.writeInterfaceToken(IActivityManager.descriptor);
6190        mRemote.transact(IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION, data, reply, 0);
6191        reply.readException();
6192        boolean res = reply.readInt() != 0;
6193        data.recycle();
6194        reply.recycle();
6195        return res;
6196    }
6197
6198    public boolean showAssistFromActivity(IBinder token, Bundle args) throws RemoteException {
6199        Parcel data = Parcel.obtain();
6200        Parcel reply = Parcel.obtain();
6201        data.writeInterfaceToken(IActivityManager.descriptor);
6202        data.writeStrongBinder(token);
6203        data.writeBundle(args);
6204        mRemote.transact(SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION, data, reply, 0);
6205        reply.readException();
6206        boolean res = reply.readInt() != 0;
6207        data.recycle();
6208        reply.recycle();
6209        return res;
6210    }
6211
6212    public void killUid(int appId, int userId, String reason) throws RemoteException {
6213        Parcel data = Parcel.obtain();
6214        Parcel reply = Parcel.obtain();
6215        data.writeInterfaceToken(IActivityManager.descriptor);
6216        data.writeInt(appId);
6217        data.writeInt(userId);
6218        data.writeString(reason);
6219        mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
6220        reply.readException();
6221        data.recycle();
6222        reply.recycle();
6223    }
6224
6225    public void hang(IBinder who, boolean allowRestart) throws RemoteException {
6226        Parcel data = Parcel.obtain();
6227        Parcel reply = Parcel.obtain();
6228        data.writeInterfaceToken(IActivityManager.descriptor);
6229        data.writeStrongBinder(who);
6230        data.writeInt(allowRestart ? 1 : 0);
6231        mRemote.transact(HANG_TRANSACTION, data, reply, 0);
6232        reply.readException();
6233        data.recycle();
6234        reply.recycle();
6235    }
6236
6237    public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
6238        Parcel data = Parcel.obtain();
6239        Parcel reply = Parcel.obtain();
6240        data.writeInterfaceToken(IActivityManager.descriptor);
6241        data.writeStrongBinder(token);
6242        mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
6243        reply.readException();
6244        data.recycle();
6245        reply.recycle();
6246    }
6247
6248    public void notifyActivityDrawn(IBinder token) throws RemoteException {
6249        Parcel data = Parcel.obtain();
6250        Parcel reply = Parcel.obtain();
6251        data.writeInterfaceToken(IActivityManager.descriptor);
6252        data.writeStrongBinder(token);
6253        mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
6254        reply.readException();
6255        data.recycle();
6256        reply.recycle();
6257    }
6258
6259    public void restart() throws RemoteException {
6260        Parcel data = Parcel.obtain();
6261        Parcel reply = Parcel.obtain();
6262        data.writeInterfaceToken(IActivityManager.descriptor);
6263        mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
6264        reply.readException();
6265        data.recycle();
6266        reply.recycle();
6267    }
6268
6269    public void performIdleMaintenance() throws RemoteException {
6270        Parcel data = Parcel.obtain();
6271        Parcel reply = Parcel.obtain();
6272        data.writeInterfaceToken(IActivityManager.descriptor);
6273        mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
6274        reply.readException();
6275        data.recycle();
6276        reply.recycle();
6277    }
6278
6279    public void sendIdleJobTrigger() throws RemoteException {
6280        Parcel data = Parcel.obtain();
6281        Parcel reply = Parcel.obtain();
6282        data.writeInterfaceToken(IActivityManager.descriptor);
6283        mRemote.transact(SEND_IDLE_JOB_TRIGGER_TRANSACTION, data, reply, 0);
6284        reply.readException();
6285        data.recycle();
6286        reply.recycle();
6287    }
6288
6289    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
6290            IActivityContainerCallback callback) throws RemoteException {
6291        Parcel data = Parcel.obtain();
6292        Parcel reply = Parcel.obtain();
6293        data.writeInterfaceToken(IActivityManager.descriptor);
6294        data.writeStrongBinder(parentActivityToken);
6295        data.writeStrongBinder(callback == null ? null : callback.asBinder());
6296        mRemote.transact(CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6297        reply.readException();
6298        final int result = reply.readInt();
6299        final IActivityContainer res;
6300        if (result == 1) {
6301            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6302        } else {
6303            res = null;
6304        }
6305        data.recycle();
6306        reply.recycle();
6307        return res;
6308    }
6309
6310    public void deleteActivityContainer(IActivityContainer activityContainer)
6311            throws RemoteException {
6312        Parcel data = Parcel.obtain();
6313        Parcel reply = Parcel.obtain();
6314        data.writeInterfaceToken(IActivityManager.descriptor);
6315        data.writeStrongBinder(activityContainer.asBinder());
6316        mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6317        reply.readException();
6318        data.recycle();
6319        reply.recycle();
6320    }
6321
6322    public boolean startBinderTracking() throws RemoteException {
6323        Parcel data = Parcel.obtain();
6324        Parcel reply = Parcel.obtain();
6325        data.writeInterfaceToken(IActivityManager.descriptor);
6326        mRemote.transact(START_BINDER_TRACKING_TRANSACTION, data, reply, 0);
6327        reply.readException();
6328        boolean res = reply.readInt() != 0;
6329        reply.recycle();
6330        data.recycle();
6331        return res;
6332    }
6333
6334    public boolean stopBinderTrackingAndDump(ParcelFileDescriptor fd) throws RemoteException {
6335        Parcel data = Parcel.obtain();
6336        Parcel reply = Parcel.obtain();
6337        data.writeInterfaceToken(IActivityManager.descriptor);
6338        if (fd != null) {
6339            data.writeInt(1);
6340            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
6341        } else {
6342            data.writeInt(0);
6343        }
6344        mRemote.transact(STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION, data, reply, 0);
6345        reply.readException();
6346        boolean res = reply.readInt() != 0;
6347        reply.recycle();
6348        data.recycle();
6349        return res;
6350    }
6351
6352    public int setVrMode(IBinder token, boolean enabled, ComponentName packageName)
6353            throws RemoteException {
6354        Parcel data = Parcel.obtain();
6355        Parcel reply = Parcel.obtain();
6356        data.writeInterfaceToken(IActivityManager.descriptor);
6357        data.writeStrongBinder(token);
6358        data.writeInt(enabled ? 1 : 0);
6359        packageName.writeToParcel(data, 0);
6360        mRemote.transact(SET_VR_MODE_TRANSACTION, data, reply, 0);
6361        reply.readException();
6362        int res = reply.readInt();
6363        data.recycle();
6364        reply.recycle();
6365        return res;
6366    }
6367
6368    public boolean isVrModePackageEnabled(ComponentName packageName)
6369            throws RemoteException {
6370        Parcel data = Parcel.obtain();
6371        Parcel reply = Parcel.obtain();
6372        data.writeInterfaceToken(IActivityManager.descriptor);
6373        packageName.writeToParcel(data, 0);
6374        mRemote.transact(IS_VR_PACKAGE_ENABLED_TRANSACTION, data, reply, 0);
6375        reply.readException();
6376        int res = reply.readInt();
6377        data.recycle();
6378        reply.recycle();
6379        return res == 1;
6380    }
6381
6382    @Override
6383    public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
6384        Parcel data = Parcel.obtain();
6385        Parcel reply = Parcel.obtain();
6386        data.writeInterfaceToken(IActivityManager.descriptor);
6387        data.writeInt(displayId);
6388        mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0);
6389        reply.readException();
6390        final int result = reply.readInt();
6391        final IActivityContainer res;
6392        if (result == 1) {
6393            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6394        } else {
6395            res = null;
6396        }
6397        data.recycle();
6398        reply.recycle();
6399        return res;
6400    }
6401
6402    @Override
6403    public int getActivityDisplayId(IBinder activityToken)
6404            throws RemoteException {
6405        Parcel data = Parcel.obtain();
6406        Parcel reply = Parcel.obtain();
6407        data.writeInterfaceToken(IActivityManager.descriptor);
6408        data.writeStrongBinder(activityToken);
6409        mRemote.transact(GET_ACTIVITY_DISPLAY_ID_TRANSACTION, data, reply, 0);
6410        reply.readException();
6411        final int displayId = reply.readInt();
6412        data.recycle();
6413        reply.recycle();
6414        return displayId;
6415    }
6416
6417    @Override
6418    public void startLockTaskMode(int taskId) throws RemoteException {
6419        Parcel data = Parcel.obtain();
6420        Parcel reply = Parcel.obtain();
6421        data.writeInterfaceToken(IActivityManager.descriptor);
6422        data.writeInt(taskId);
6423        mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
6424        reply.readException();
6425        data.recycle();
6426        reply.recycle();
6427    }
6428
6429    @Override
6430    public void startLockTaskMode(IBinder token) throws RemoteException {
6431        Parcel data = Parcel.obtain();
6432        Parcel reply = Parcel.obtain();
6433        data.writeInterfaceToken(IActivityManager.descriptor);
6434        data.writeStrongBinder(token);
6435        mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
6436        reply.readException();
6437        data.recycle();
6438        reply.recycle();
6439    }
6440
6441    @Override
6442    public void startSystemLockTaskMode(int taskId) throws RemoteException {
6443        Parcel data = Parcel.obtain();
6444        Parcel reply = Parcel.obtain();
6445        data.writeInterfaceToken(IActivityManager.descriptor);
6446        data.writeInt(taskId);
6447        mRemote.transact(START_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6448        reply.readException();
6449        data.recycle();
6450        reply.recycle();
6451    }
6452
6453    @Override
6454    public void stopLockTaskMode() throws RemoteException {
6455        Parcel data = Parcel.obtain();
6456        Parcel reply = Parcel.obtain();
6457        data.writeInterfaceToken(IActivityManager.descriptor);
6458        mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6459        reply.readException();
6460        data.recycle();
6461        reply.recycle();
6462    }
6463
6464    @Override
6465    public void stopSystemLockTaskMode() throws RemoteException {
6466        Parcel data = Parcel.obtain();
6467        Parcel reply = Parcel.obtain();
6468        data.writeInterfaceToken(IActivityManager.descriptor);
6469        mRemote.transact(STOP_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6470        reply.readException();
6471        data.recycle();
6472        reply.recycle();
6473    }
6474
6475    @Override
6476    public boolean isInLockTaskMode() throws RemoteException {
6477        Parcel data = Parcel.obtain();
6478        Parcel reply = Parcel.obtain();
6479        data.writeInterfaceToken(IActivityManager.descriptor);
6480        mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6481        reply.readException();
6482        boolean isInLockTaskMode = reply.readInt() == 1;
6483        data.recycle();
6484        reply.recycle();
6485        return isInLockTaskMode;
6486    }
6487
6488    @Override
6489    public int getLockTaskModeState() throws RemoteException {
6490        Parcel data = Parcel.obtain();
6491        Parcel reply = Parcel.obtain();
6492        data.writeInterfaceToken(IActivityManager.descriptor);
6493        mRemote.transact(GET_LOCK_TASK_MODE_STATE_TRANSACTION, data, reply, 0);
6494        reply.readException();
6495        int lockTaskModeState = reply.readInt();
6496        data.recycle();
6497        reply.recycle();
6498        return lockTaskModeState;
6499    }
6500
6501    @Override
6502    public void showLockTaskEscapeMessage(IBinder token) throws RemoteException {
6503        Parcel data = Parcel.obtain();
6504        Parcel reply = Parcel.obtain();
6505        data.writeInterfaceToken(IActivityManager.descriptor);
6506        data.writeStrongBinder(token);
6507        mRemote.transact(SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION, data, reply,
6508                IBinder.FLAG_ONEWAY);
6509        reply.readException();
6510        data.recycle();
6511        reply.recycle();
6512    }
6513
6514    @Override
6515    public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
6516            throws RemoteException {
6517        Parcel data = Parcel.obtain();
6518        Parcel reply = Parcel.obtain();
6519        data.writeInterfaceToken(IActivityManager.descriptor);
6520        data.writeStrongBinder(token);
6521        values.writeToParcel(data, 0);
6522        mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0);
6523        reply.readException();
6524        data.recycle();
6525        reply.recycle();
6526    }
6527
6528    @Override
6529    public void setTaskResizeable(int taskId, int resizeableMode) throws  RemoteException {
6530        Parcel data = Parcel.obtain();
6531        Parcel reply = Parcel.obtain();
6532        data.writeInterfaceToken(IActivityManager.descriptor);
6533        data.writeInt(taskId);
6534        data.writeInt(resizeableMode);
6535        mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0);
6536        reply.readException();
6537        data.recycle();
6538        reply.recycle();
6539    }
6540
6541    @Override
6542    public void resizeTask(int taskId, Rect r, int resizeMode) throws RemoteException
6543    {
6544        Parcel data = Parcel.obtain();
6545        Parcel reply = Parcel.obtain();
6546        data.writeInterfaceToken(IActivityManager.descriptor);
6547        data.writeInt(taskId);
6548        data.writeInt(resizeMode);
6549        r.writeToParcel(data, 0);
6550        mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0);
6551        reply.readException();
6552        data.recycle();
6553        reply.recycle();
6554    }
6555
6556    @Override
6557    public Rect getTaskBounds(int taskId) throws RemoteException
6558    {
6559        Parcel data = Parcel.obtain();
6560        Parcel reply = Parcel.obtain();
6561        data.writeInterfaceToken(IActivityManager.descriptor);
6562        data.writeInt(taskId);
6563        mRemote.transact(GET_TASK_BOUNDS_TRANSACTION, data, reply, 0);
6564        reply.readException();
6565        Rect rect = Rect.CREATOR.createFromParcel(reply);
6566        data.recycle();
6567        reply.recycle();
6568        return rect;
6569    }
6570
6571    @Override
6572    public Bitmap getTaskDescriptionIcon(String filename, int userId) throws RemoteException {
6573        Parcel data = Parcel.obtain();
6574        Parcel reply = Parcel.obtain();
6575        data.writeInterfaceToken(IActivityManager.descriptor);
6576        data.writeString(filename);
6577        data.writeInt(userId);
6578        mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
6579        reply.readException();
6580        final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
6581        data.recycle();
6582        reply.recycle();
6583        return icon;
6584    }
6585
6586    @Override
6587    public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
6588            throws RemoteException {
6589        Parcel data = Parcel.obtain();
6590        Parcel reply = Parcel.obtain();
6591        data.writeInterfaceToken(IActivityManager.descriptor);
6592        if (options == null) {
6593            data.writeInt(0);
6594        } else {
6595            data.writeInt(1);
6596            data.writeBundle(options.toBundle());
6597        }
6598        mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0);
6599        reply.readException();
6600        data.recycle();
6601        reply.recycle();
6602    }
6603
6604    @Override
6605    public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
6606        Parcel data = Parcel.obtain();
6607        Parcel reply = Parcel.obtain();
6608        data.writeInterfaceToken(IActivityManager.descriptor);
6609        data.writeStrongBinder(token);
6610        data.writeInt(visible ? 1 : 0);
6611        mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6612        reply.readException();
6613        boolean success = reply.readInt() > 0;
6614        data.recycle();
6615        reply.recycle();
6616        return success;
6617    }
6618
6619    @Override
6620    public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
6621        Parcel data = Parcel.obtain();
6622        Parcel reply = Parcel.obtain();
6623        data.writeInterfaceToken(IActivityManager.descriptor);
6624        data.writeStrongBinder(token);
6625        mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6626        reply.readException();
6627        final boolean visible = reply.readInt() > 0;
6628        data.recycle();
6629        reply.recycle();
6630        return visible;
6631    }
6632
6633    @Override
6634    public void backgroundResourcesReleased(IBinder token) throws RemoteException {
6635        Parcel data = Parcel.obtain();
6636        Parcel reply = Parcel.obtain();
6637        data.writeInterfaceToken(IActivityManager.descriptor);
6638        data.writeStrongBinder(token);
6639        mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0);
6640        reply.readException();
6641        data.recycle();
6642        reply.recycle();
6643    }
6644
6645    @Override
6646    public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
6647        Parcel data = Parcel.obtain();
6648        Parcel reply = Parcel.obtain();
6649        data.writeInterfaceToken(IActivityManager.descriptor);
6650        data.writeStrongBinder(token);
6651        mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0);
6652        reply.readException();
6653        data.recycle();
6654        reply.recycle();
6655    }
6656
6657    @Override
6658    public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
6659        Parcel data = Parcel.obtain();
6660        Parcel reply = Parcel.obtain();
6661        data.writeInterfaceToken(IActivityManager.descriptor);
6662        data.writeStrongBinder(token);
6663        mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6664        reply.readException();
6665        data.recycle();
6666        reply.recycle();
6667    }
6668
6669    @Override
6670    public void bootAnimationComplete() throws RemoteException {
6671        Parcel data = Parcel.obtain();
6672        Parcel reply = Parcel.obtain();
6673        data.writeInterfaceToken(IActivityManager.descriptor);
6674        mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6675        reply.readException();
6676        data.recycle();
6677        reply.recycle();
6678    }
6679
6680    @Override
6681    public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException {
6682        Parcel data = Parcel.obtain();
6683        Parcel reply = Parcel.obtain();
6684        data.writeInterfaceToken(IActivityManager.descriptor);
6685        data.writeInt(uid);
6686        data.writeByteArray(firstPacket);
6687        mRemote.transact(NOTIFY_CLEARTEXT_NETWORK_TRANSACTION, data, reply, 0);
6688        reply.readException();
6689        data.recycle();
6690        reply.recycle();
6691    }
6692
6693    @Override
6694    public void setDumpHeapDebugLimit(String processName, int uid, long maxMemSize,
6695            String reportPackage) throws RemoteException {
6696        Parcel data = Parcel.obtain();
6697        Parcel reply = Parcel.obtain();
6698        data.writeInterfaceToken(IActivityManager.descriptor);
6699        data.writeString(processName);
6700        data.writeInt(uid);
6701        data.writeLong(maxMemSize);
6702        data.writeString(reportPackage);
6703        mRemote.transact(SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION, data, reply, 0);
6704        reply.readException();
6705        data.recycle();
6706        reply.recycle();
6707    }
6708
6709    @Override
6710    public void dumpHeapFinished(String path) throws RemoteException {
6711        Parcel data = Parcel.obtain();
6712        Parcel reply = Parcel.obtain();
6713        data.writeInterfaceToken(IActivityManager.descriptor);
6714        data.writeString(path);
6715        mRemote.transact(DUMP_HEAP_FINISHED_TRANSACTION, data, reply, 0);
6716        reply.readException();
6717        data.recycle();
6718        reply.recycle();
6719    }
6720
6721    @Override
6722    public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake)
6723            throws RemoteException {
6724        Parcel data = Parcel.obtain();
6725        Parcel reply = Parcel.obtain();
6726        data.writeInterfaceToken(IActivityManager.descriptor);
6727        data.writeStrongBinder(session.asBinder());
6728        data.writeInt(keepAwake ? 1 : 0);
6729        mRemote.transact(SET_VOICE_KEEP_AWAKE_TRANSACTION, data, reply, 0);
6730        reply.readException();
6731        data.recycle();
6732        reply.recycle();
6733    }
6734
6735    @Override
6736    public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException {
6737        Parcel data = Parcel.obtain();
6738        Parcel reply = Parcel.obtain();
6739        data.writeInterfaceToken(IActivityManager.descriptor);
6740        data.writeInt(userId);
6741        data.writeStringArray(packages);
6742        mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0);
6743        reply.readException();
6744        data.recycle();
6745        reply.recycle();
6746    }
6747
6748    @Override
6749    public void updateDeviceOwner(String packageName) throws RemoteException {
6750        Parcel data = Parcel.obtain();
6751        Parcel reply = Parcel.obtain();
6752        data.writeInterfaceToken(IActivityManager.descriptor);
6753        data.writeString(packageName);
6754        mRemote.transact(UPDATE_DEVICE_OWNER_TRANSACTION, data, reply, 0);
6755        reply.readException();
6756        data.recycle();
6757        reply.recycle();
6758    }
6759
6760    @Override
6761    public int getPackageProcessState(String packageName, String callingPackage)
6762            throws RemoteException {
6763        Parcel data = Parcel.obtain();
6764        Parcel reply = Parcel.obtain();
6765        data.writeInterfaceToken(IActivityManager.descriptor);
6766        data.writeString(packageName);
6767        data.writeString(callingPackage);
6768        mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0);
6769        reply.readException();
6770        int res = reply.readInt();
6771        data.recycle();
6772        reply.recycle();
6773        return res;
6774    }
6775
6776    @Override
6777    public boolean setProcessMemoryTrimLevel(String process, int userId, int level)
6778            throws RemoteException {
6779        Parcel data = Parcel.obtain();
6780        Parcel reply = Parcel.obtain();
6781        data.writeInterfaceToken(IActivityManager.descriptor);
6782        data.writeString(process);
6783        data.writeInt(userId);
6784        data.writeInt(level);
6785        mRemote.transact(SET_PROCESS_MEMORY_TRIM_TRANSACTION, data, reply, 0);
6786        reply.readException();
6787        int res = reply.readInt();
6788        data.recycle();
6789        reply.recycle();
6790        return res != 0;
6791    }
6792
6793    @Override
6794    public boolean isRootVoiceInteraction(IBinder token) throws RemoteException {
6795        Parcel data = Parcel.obtain();
6796        Parcel reply = Parcel.obtain();
6797        data.writeInterfaceToken(IActivityManager.descriptor);
6798        data.writeStrongBinder(token);
6799        mRemote.transact(IS_ROOT_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
6800        reply.readException();
6801        int res = reply.readInt();
6802        data.recycle();
6803        reply.recycle();
6804        return res != 0;
6805    }
6806
6807    @Override
6808    public void exitFreeformMode(IBinder token) throws RemoteException {
6809        Parcel data = Parcel.obtain();
6810        Parcel reply = Parcel.obtain();
6811        data.writeInterfaceToken(IActivityManager.descriptor);
6812        data.writeStrongBinder(token);
6813        mRemote.transact(EXIT_FREEFORM_MODE_TRANSACTION, data, reply, 0);
6814        reply.readException();
6815        data.recycle();
6816        reply.recycle();
6817    }
6818
6819    @Override
6820    public int getActivityStackId(IBinder token) throws RemoteException {
6821        Parcel data = Parcel.obtain();
6822        Parcel reply = Parcel.obtain();
6823        data.writeInterfaceToken(IActivityManager.descriptor);
6824        data.writeStrongBinder(token);
6825        mRemote.transact(GET_ACTIVITY_STACK_ID_TRANSACTION, data, reply, 0);
6826        reply.readException();
6827        int stackId = reply.readInt();
6828        data.recycle();
6829        reply.recycle();
6830        return stackId;
6831    }
6832
6833    @Override
6834    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
6835            int[] verticalSizeConfigurations, int[] smallestSizeConfigurations)
6836            throws RemoteException {
6837        Parcel data = Parcel.obtain();
6838        Parcel reply = Parcel.obtain();
6839        data.writeInterfaceToken(IActivityManager.descriptor);
6840        data.writeStrongBinder(token);
6841        writeIntArray(horizontalSizeConfiguration, data);
6842        writeIntArray(verticalSizeConfigurations, data);
6843        writeIntArray(smallestSizeConfigurations, data);
6844        mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
6845        reply.readException();
6846        data.recycle();
6847        reply.recycle();
6848    }
6849
6850    private static void writeIntArray(int[] array, Parcel data) {
6851        if (array == null) {
6852            data.writeInt(0);
6853        } else {
6854            data.writeInt(array.length);
6855            data.writeIntArray(array);
6856        }
6857    }
6858
6859    @Override
6860    public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
6861        Parcel data = Parcel.obtain();
6862        Parcel reply = Parcel.obtain();
6863        data.writeInterfaceToken(IActivityManager.descriptor);
6864        data.writeInt(suppress ? 1 : 0);
6865        mRemote.transact(SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION, data, reply, 0);
6866        reply.readException();
6867        data.recycle();
6868        reply.recycle();
6869    }
6870
6871    @Override
6872    public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException {
6873        Parcel data = Parcel.obtain();
6874        Parcel reply = Parcel.obtain();
6875        data.writeInterfaceToken(IActivityManager.descriptor);
6876        data.writeInt(fromStackId);
6877        data.writeInt(onTop ? 1 : 0);
6878        mRemote.transact(MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION, data, reply, 0);
6879        reply.readException();
6880        data.recycle();
6881        reply.recycle();
6882    }
6883
6884    @Override
6885    public int getAppStartMode(int uid, String packageName) throws RemoteException {
6886        Parcel data = Parcel.obtain();
6887        Parcel reply = Parcel.obtain();
6888        data.writeInterfaceToken(IActivityManager.descriptor);
6889        data.writeInt(uid);
6890        data.writeString(packageName);
6891        mRemote.transact(GET_APP_START_MODE_TRANSACTION, data, reply, 0);
6892        reply.readException();
6893        int res = reply.readInt();
6894        data.recycle();
6895        reply.recycle();
6896        return res;
6897    }
6898
6899    @Override
6900    public boolean isInMultiWindowMode(IBinder token) throws RemoteException {
6901        Parcel data = Parcel.obtain();
6902        Parcel reply = Parcel.obtain();
6903        data.writeInterfaceToken(IActivityManager.descriptor);
6904        data.writeStrongBinder(token);
6905        mRemote.transact(IN_MULTI_WINDOW_TRANSACTION, data, reply, 0);
6906        reply.readException();
6907        final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
6908        data.recycle();
6909        reply.recycle();
6910        return multiWindowMode;
6911    }
6912
6913    @Override
6914    public boolean isInPictureInPictureMode(IBinder token) throws RemoteException {
6915        Parcel data = Parcel.obtain();
6916        Parcel reply = Parcel.obtain();
6917        data.writeInterfaceToken(IActivityManager.descriptor);
6918        data.writeStrongBinder(token);
6919        mRemote.transact(IN_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6920        reply.readException();
6921        final boolean pipMode = reply.readInt() == 1 ? true : false;
6922        data.recycle();
6923        reply.recycle();
6924        return pipMode;
6925    }
6926
6927    @Override
6928    public void enterPictureInPictureMode(IBinder token) throws RemoteException {
6929        Parcel data = Parcel.obtain();
6930        Parcel reply = Parcel.obtain();
6931        data.writeInterfaceToken(IActivityManager.descriptor);
6932        data.writeStrongBinder(token);
6933        mRemote.transact(ENTER_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6934        reply.readException();
6935        data.recycle();
6936        reply.recycle();
6937    }
6938
6939    @Override
6940    public boolean isAppForeground(int uid) throws RemoteException {
6941        Parcel data = Parcel.obtain();
6942        Parcel reply = Parcel.obtain();
6943        data.writeInterfaceToken(IActivityManager.descriptor);
6944        data.writeInt(uid);
6945        mRemote.transact(IS_APP_FOREGROUND_TRANSACTION, data, reply, 0);
6946        final boolean isForeground = reply.readInt() == 1 ? true : false;
6947        data.recycle();
6948        reply.recycle();
6949        return isForeground;
6950    };
6951
6952    @Override
6953    public void notifyPinnedStackAnimationEnded() throws RemoteException {
6954        Parcel data = Parcel.obtain();
6955        Parcel reply = Parcel.obtain();
6956        data.writeInterfaceToken(IActivityManager.descriptor);
6957        mRemote.transact(NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION, data, reply, 0);
6958        data.recycle();
6959        reply.recycle();
6960    };
6961
6962    @Override
6963    public void removeStack(int stackId) throws RemoteException {
6964        Parcel data = Parcel.obtain();
6965        Parcel reply = Parcel.obtain();
6966        data.writeInterfaceToken(IActivityManager.descriptor);
6967        data.writeInt(stackId);
6968        mRemote.transact(REMOVE_STACK, data, reply, 0);
6969        reply.readException();
6970        data.recycle();
6971        reply.recycle();
6972    }
6973
6974    @Override
6975    public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException {
6976        Parcel data = Parcel.obtain();
6977        Parcel reply = Parcel.obtain();
6978        data.writeInterfaceToken(IActivityManager.descriptor);
6979        data.writeInt(userId);
6980        mRemote.transact(NOTIFY_LOCKED_PROFILE, data, reply, 0);
6981        reply.readException();
6982        data.recycle();
6983        reply.recycle();
6984    }
6985
6986    @Override
6987    public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException {
6988        Parcel data = Parcel.obtain();
6989        Parcel reply = Parcel.obtain();
6990        data.writeInterfaceToken(IActivityManager.descriptor);
6991        intent.writeToParcel(data, 0);
6992        mRemote.transact(START_CONFIRM_DEVICE_CREDENTIAL_INTENT, data, reply, 0);
6993        reply.readException();
6994        data.recycle();
6995        reply.recycle();
6996    }
6997
6998    @Override
6999    public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
7000            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
7001            throws RemoteException {
7002        Parcel data = Parcel.obtain();
7003        Parcel reply = Parcel.obtain();
7004        data.writeInterfaceToken(IActivityManager.descriptor);
7005        data.writeStrongBinder(target.asBinder());
7006        data.writeInt(code);
7007        if ((intent!=null)) {
7008            data.writeInt(1);
7009            intent.writeToParcel(data, 0);
7010        }
7011        else {
7012            data.writeInt(0);
7013        }
7014        data.writeString(resolvedType);
7015        data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
7016        data.writeString(requiredPermission);
7017        if ((options!=null)) {
7018            data.writeInt(1);
7019            options.writeToParcel(data, 0);
7020        }
7021        else {
7022            data.writeInt(0);
7023        }
7024        mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
7025        reply.readException();
7026        final int res = reply.readInt();
7027        data.recycle();
7028        reply.recycle();
7029        return res;
7030    }
7031
7032    private IBinder mRemote;
7033}
7034