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