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