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