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