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