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