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