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