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