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