ActivityManagerNative.java revision 62f20ecf492d2b29881bba307c79ff55e68760e6
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.Intent;
21import android.content.IntentFilter;
22import android.content.IIntentSender;
23import android.content.IIntentReceiver;
24import android.content.IntentSender;
25import android.content.pm.ApplicationInfo;
26import android.content.pm.ConfigurationInfo;
27import android.content.pm.IPackageDataObserver;
28import android.content.res.Configuration;
29import android.graphics.Bitmap;
30import android.net.Uri;
31import android.os.Binder;
32import android.os.Bundle;
33import android.os.Debug;
34import android.os.Parcelable;
35import android.os.ParcelFileDescriptor;
36import android.os.RemoteException;
37import android.os.IBinder;
38import android.os.Parcel;
39import android.os.ServiceManager;
40import android.os.StrictMode;
41import android.text.TextUtils;
42import android.util.Log;
43import android.util.Singleton;
44
45import java.util.ArrayList;
46import java.util.List;
47
48/** {@hide} */
49public abstract class ActivityManagerNative extends Binder implements IActivityManager
50{
51    /**
52     * Cast a Binder object into an activity manager interface, generating
53     * a proxy if needed.
54     */
55    static public IActivityManager asInterface(IBinder obj) {
56        if (obj == null) {
57            return null;
58        }
59        IActivityManager in =
60            (IActivityManager)obj.queryLocalInterface(descriptor);
61        if (in != null) {
62            return in;
63        }
64
65        return new ActivityManagerProxy(obj);
66    }
67
68    /**
69     * Retrieve the system's default/global activity manager.
70     */
71    static public IActivityManager getDefault() {
72        return gDefault.get();
73    }
74
75    /**
76     * Convenience for checking whether the system is ready.  For internal use only.
77     */
78    static public boolean isSystemReady() {
79        if (!sSystemReady) {
80            sSystemReady = getDefault().testIsSystemReady();
81        }
82        return sSystemReady;
83    }
84    static boolean sSystemReady = false;
85
86    /**
87     * Convenience for sending a sticky broadcast.  For internal use only.
88     * If you don't care about permission, use null.
89     */
90    static public void broadcastStickyIntent(Intent intent, String permission) {
91        try {
92            getDefault().broadcastIntent(
93                null, intent, null, null, Activity.RESULT_OK, null, null,
94                null /*permission*/, false, true);
95        } catch (RemoteException ex) {
96        }
97    }
98
99    static public void noteWakeupAlarm(PendingIntent ps) {
100        try {
101            getDefault().noteWakeupAlarm(ps.getTarget());
102        } catch (RemoteException ex) {
103        }
104    }
105
106    public ActivityManagerNative() {
107        attachInterface(this, descriptor);
108    }
109
110    public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
111            throws RemoteException {
112        switch (code) {
113        case START_ACTIVITY_TRANSACTION:
114        {
115            data.enforceInterface(IActivityManager.descriptor);
116            IBinder b = data.readStrongBinder();
117            IApplicationThread app = ApplicationThreadNative.asInterface(b);
118            Intent intent = Intent.CREATOR.createFromParcel(data);
119            String resolvedType = data.readString();
120            Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR);
121            int grantedMode = data.readInt();
122            IBinder resultTo = data.readStrongBinder();
123            String resultWho = data.readString();
124            int requestCode = data.readInt();
125            boolean onlyIfNeeded = data.readInt() != 0;
126            boolean debug = data.readInt() != 0;
127            String profileFile = data.readString();
128            ParcelFileDescriptor profileFd = data.readInt() != 0
129                    ? data.readFileDescriptor() : null;
130            boolean autoStopProfiler = data.readInt() != 0;
131            int result = startActivity(app, intent, resolvedType,
132                    grantedUriPermissions, grantedMode, resultTo, resultWho,
133                    requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler);
134            reply.writeNoException();
135            reply.writeInt(result);
136            return true;
137        }
138
139        case START_ACTIVITY_AND_WAIT_TRANSACTION:
140        {
141            data.enforceInterface(IActivityManager.descriptor);
142            IBinder b = data.readStrongBinder();
143            IApplicationThread app = ApplicationThreadNative.asInterface(b);
144            Intent intent = Intent.CREATOR.createFromParcel(data);
145            String resolvedType = data.readString();
146            Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR);
147            int grantedMode = data.readInt();
148            IBinder resultTo = data.readStrongBinder();
149            String resultWho = data.readString();
150            int requestCode = data.readInt();
151            boolean onlyIfNeeded = data.readInt() != 0;
152            boolean debug = data.readInt() != 0;
153            String profileFile = data.readString();
154            ParcelFileDescriptor profileFd = data.readInt() != 0
155                    ? data.readFileDescriptor() : null;
156            boolean autoStopProfiler = data.readInt() != 0;
157            WaitResult result = startActivityAndWait(app, intent, resolvedType,
158                    grantedUriPermissions, grantedMode, resultTo, resultWho,
159                    requestCode, onlyIfNeeded, debug, profileFile, profileFd, autoStopProfiler);
160            reply.writeNoException();
161            result.writeToParcel(reply, 0);
162            return true;
163        }
164
165        case START_ACTIVITY_WITH_CONFIG_TRANSACTION:
166        {
167            data.enforceInterface(IActivityManager.descriptor);
168            IBinder b = data.readStrongBinder();
169            IApplicationThread app = ApplicationThreadNative.asInterface(b);
170            Intent intent = Intent.CREATOR.createFromParcel(data);
171            String resolvedType = data.readString();
172            Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR);
173            int grantedMode = data.readInt();
174            IBinder resultTo = data.readStrongBinder();
175            String resultWho = data.readString();
176            int requestCode = data.readInt();
177            boolean onlyIfNeeded = data.readInt() != 0;
178            boolean debug = data.readInt() != 0;
179            Configuration config = Configuration.CREATOR.createFromParcel(data);
180            int result = startActivityWithConfig(app, intent, resolvedType,
181                    grantedUriPermissions, grantedMode, resultTo, resultWho,
182                    requestCode, onlyIfNeeded, debug, config);
183            reply.writeNoException();
184            reply.writeInt(result);
185            return true;
186        }
187
188        case START_ACTIVITY_INTENT_SENDER_TRANSACTION:
189        {
190            data.enforceInterface(IActivityManager.descriptor);
191            IBinder b = data.readStrongBinder();
192            IApplicationThread app = ApplicationThreadNative.asInterface(b);
193            IntentSender intent = IntentSender.CREATOR.createFromParcel(data);
194            Intent fillInIntent = null;
195            if (data.readInt() != 0) {
196                fillInIntent = Intent.CREATOR.createFromParcel(data);
197            }
198            String resolvedType = data.readString();
199            IBinder resultTo = data.readStrongBinder();
200            String resultWho = data.readString();
201            int requestCode = data.readInt();
202            int flagsMask = data.readInt();
203            int flagsValues = data.readInt();
204            int result = startActivityIntentSender(app, intent,
205                    fillInIntent, resolvedType, resultTo, resultWho,
206                    requestCode, flagsMask, flagsValues);
207            reply.writeNoException();
208            reply.writeInt(result);
209            return true;
210        }
211
212        case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
213        {
214            data.enforceInterface(IActivityManager.descriptor);
215            IBinder callingActivity = data.readStrongBinder();
216            Intent intent = Intent.CREATOR.createFromParcel(data);
217            boolean result = startNextMatchingActivity(callingActivity, intent);
218            reply.writeNoException();
219            reply.writeInt(result ? 1 : 0);
220            return true;
221        }
222
223        case FINISH_ACTIVITY_TRANSACTION: {
224            data.enforceInterface(IActivityManager.descriptor);
225            IBinder token = data.readStrongBinder();
226            Intent resultData = null;
227            int resultCode = data.readInt();
228            if (data.readInt() != 0) {
229                resultData = Intent.CREATOR.createFromParcel(data);
230            }
231            boolean res = finishActivity(token, resultCode, resultData);
232            reply.writeNoException();
233            reply.writeInt(res ? 1 : 0);
234            return true;
235        }
236
237        case FINISH_SUB_ACTIVITY_TRANSACTION: {
238            data.enforceInterface(IActivityManager.descriptor);
239            IBinder token = data.readStrongBinder();
240            String resultWho = data.readString();
241            int requestCode = data.readInt();
242            finishSubActivity(token, resultWho, requestCode);
243            reply.writeNoException();
244            return true;
245        }
246
247        case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: {
248            data.enforceInterface(IActivityManager.descriptor);
249            IBinder token = data.readStrongBinder();
250            boolean res = willActivityBeVisible(token);
251            reply.writeNoException();
252            reply.writeInt(res ? 1 : 0);
253            return true;
254        }
255
256        case REGISTER_RECEIVER_TRANSACTION:
257        {
258            data.enforceInterface(IActivityManager.descriptor);
259            IBinder b = data.readStrongBinder();
260            IApplicationThread app =
261                b != null ? ApplicationThreadNative.asInterface(b) : null;
262            String packageName = data.readString();
263            b = data.readStrongBinder();
264            IIntentReceiver rec
265                = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
266            IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
267            String perm = data.readString();
268            Intent intent = registerReceiver(app, packageName, rec, filter, perm);
269            reply.writeNoException();
270            if (intent != null) {
271                reply.writeInt(1);
272                intent.writeToParcel(reply, 0);
273            } else {
274                reply.writeInt(0);
275            }
276            return true;
277        }
278
279        case UNREGISTER_RECEIVER_TRANSACTION:
280        {
281            data.enforceInterface(IActivityManager.descriptor);
282            IBinder b = data.readStrongBinder();
283            if (b == null) {
284                return true;
285            }
286            IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
287            unregisterReceiver(rec);
288            reply.writeNoException();
289            return true;
290        }
291
292        case BROADCAST_INTENT_TRANSACTION:
293        {
294            data.enforceInterface(IActivityManager.descriptor);
295            IBinder b = data.readStrongBinder();
296            IApplicationThread app =
297                b != null ? ApplicationThreadNative.asInterface(b) : null;
298            Intent intent = Intent.CREATOR.createFromParcel(data);
299            String resolvedType = data.readString();
300            b = data.readStrongBinder();
301            IIntentReceiver resultTo =
302                b != null ? IIntentReceiver.Stub.asInterface(b) : null;
303            int resultCode = data.readInt();
304            String resultData = data.readString();
305            Bundle resultExtras = data.readBundle();
306            String perm = data.readString();
307            boolean serialized = data.readInt() != 0;
308            boolean sticky = data.readInt() != 0;
309            int res = broadcastIntent(app, intent, resolvedType, resultTo,
310                    resultCode, resultData, resultExtras, perm,
311                    serialized, sticky);
312            reply.writeNoException();
313            reply.writeInt(res);
314            return true;
315        }
316
317        case UNBROADCAST_INTENT_TRANSACTION:
318        {
319            data.enforceInterface(IActivityManager.descriptor);
320            IBinder b = data.readStrongBinder();
321            IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
322            Intent intent = Intent.CREATOR.createFromParcel(data);
323            unbroadcastIntent(app, intent);
324            reply.writeNoException();
325            return true;
326        }
327
328        case FINISH_RECEIVER_TRANSACTION: {
329            data.enforceInterface(IActivityManager.descriptor);
330            IBinder who = data.readStrongBinder();
331            int resultCode = data.readInt();
332            String resultData = data.readString();
333            Bundle resultExtras = data.readBundle();
334            boolean resultAbort = data.readInt() != 0;
335            if (who != null) {
336                finishReceiver(who, resultCode, resultData, resultExtras, resultAbort);
337            }
338            reply.writeNoException();
339            return true;
340        }
341
342        case ATTACH_APPLICATION_TRANSACTION: {
343            data.enforceInterface(IActivityManager.descriptor);
344            IApplicationThread app = ApplicationThreadNative.asInterface(
345                    data.readStrongBinder());
346            if (app != null) {
347                attachApplication(app);
348            }
349            reply.writeNoException();
350            return true;
351        }
352
353        case ACTIVITY_IDLE_TRANSACTION: {
354            data.enforceInterface(IActivityManager.descriptor);
355            IBinder token = data.readStrongBinder();
356            Configuration config = null;
357            if (data.readInt() != 0) {
358                config = Configuration.CREATOR.createFromParcel(data);
359            }
360            boolean stopProfiling = data.readInt() != 0;
361            if (token != null) {
362                activityIdle(token, config, stopProfiling);
363            }
364            reply.writeNoException();
365            return true;
366        }
367
368        case ACTIVITY_PAUSED_TRANSACTION: {
369            data.enforceInterface(IActivityManager.descriptor);
370            IBinder token = data.readStrongBinder();
371            activityPaused(token);
372            reply.writeNoException();
373            return true;
374        }
375
376        case ACTIVITY_STOPPED_TRANSACTION: {
377            data.enforceInterface(IActivityManager.descriptor);
378            IBinder token = data.readStrongBinder();
379            Bundle map = data.readBundle();
380            Bitmap thumbnail = data.readInt() != 0
381                ? Bitmap.CREATOR.createFromParcel(data) : null;
382            CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
383            activityStopped(token, map, thumbnail, description);
384            reply.writeNoException();
385            return true;
386        }
387
388        case ACTIVITY_SLEPT_TRANSACTION: {
389            data.enforceInterface(IActivityManager.descriptor);
390            IBinder token = data.readStrongBinder();
391            activitySlept(token);
392            reply.writeNoException();
393            return true;
394        }
395
396        case ACTIVITY_DESTROYED_TRANSACTION: {
397            data.enforceInterface(IActivityManager.descriptor);
398            IBinder token = data.readStrongBinder();
399            activityDestroyed(token);
400            reply.writeNoException();
401            return true;
402        }
403
404        case GET_CALLING_PACKAGE_TRANSACTION: {
405            data.enforceInterface(IActivityManager.descriptor);
406            IBinder token = data.readStrongBinder();
407            String res = token != null ? getCallingPackage(token) : null;
408            reply.writeNoException();
409            reply.writeString(res);
410            return true;
411        }
412
413        case GET_CALLING_ACTIVITY_TRANSACTION: {
414            data.enforceInterface(IActivityManager.descriptor);
415            IBinder token = data.readStrongBinder();
416            ComponentName cn = getCallingActivity(token);
417            reply.writeNoException();
418            ComponentName.writeToParcel(cn, reply);
419            return true;
420        }
421
422        case GET_TASKS_TRANSACTION: {
423            data.enforceInterface(IActivityManager.descriptor);
424            int maxNum = data.readInt();
425            int fl = data.readInt();
426            IBinder receiverBinder = data.readStrongBinder();
427            IThumbnailReceiver receiver = receiverBinder != null
428                ? IThumbnailReceiver.Stub.asInterface(receiverBinder)
429                : null;
430            List list = getTasks(maxNum, fl, receiver);
431            reply.writeNoException();
432            int N = list != null ? list.size() : -1;
433            reply.writeInt(N);
434            int i;
435            for (i=0; i<N; i++) {
436                ActivityManager.RunningTaskInfo info =
437                        (ActivityManager.RunningTaskInfo)list.get(i);
438                info.writeToParcel(reply, 0);
439            }
440            return true;
441        }
442
443        case GET_RECENT_TASKS_TRANSACTION: {
444            data.enforceInterface(IActivityManager.descriptor);
445            int maxNum = data.readInt();
446            int fl = data.readInt();
447            List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
448                    fl);
449            reply.writeNoException();
450            reply.writeTypedList(list);
451            return true;
452        }
453
454        case GET_TASK_THUMBNAILS_TRANSACTION: {
455            data.enforceInterface(IActivityManager.descriptor);
456            int id = data.readInt();
457            ActivityManager.TaskThumbnails bm = getTaskThumbnails(id);
458            reply.writeNoException();
459            if (bm != null) {
460                reply.writeInt(1);
461                bm.writeToParcel(reply, 0);
462            } else {
463                reply.writeInt(0);
464            }
465            return true;
466        }
467
468        case GET_SERVICES_TRANSACTION: {
469            data.enforceInterface(IActivityManager.descriptor);
470            int maxNum = data.readInt();
471            int fl = data.readInt();
472            List list = getServices(maxNum, fl);
473            reply.writeNoException();
474            int N = list != null ? list.size() : -1;
475            reply.writeInt(N);
476            int i;
477            for (i=0; i<N; i++) {
478                ActivityManager.RunningServiceInfo info =
479                        (ActivityManager.RunningServiceInfo)list.get(i);
480                info.writeToParcel(reply, 0);
481            }
482            return true;
483        }
484
485        case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
486            data.enforceInterface(IActivityManager.descriptor);
487            List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
488            reply.writeNoException();
489            reply.writeTypedList(list);
490            return true;
491        }
492
493        case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
494            data.enforceInterface(IActivityManager.descriptor);
495            List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
496            reply.writeNoException();
497            reply.writeTypedList(list);
498            return true;
499        }
500
501        case GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION: {
502            data.enforceInterface(IActivityManager.descriptor);
503            List<ApplicationInfo> list = getRunningExternalApplications();
504            reply.writeNoException();
505            reply.writeTypedList(list);
506            return true;
507        }
508
509        case MOVE_TASK_TO_FRONT_TRANSACTION: {
510            data.enforceInterface(IActivityManager.descriptor);
511            int task = data.readInt();
512            int fl = data.readInt();
513            moveTaskToFront(task, fl);
514            reply.writeNoException();
515            return true;
516        }
517
518        case MOVE_TASK_TO_BACK_TRANSACTION: {
519            data.enforceInterface(IActivityManager.descriptor);
520            int task = data.readInt();
521            moveTaskToBack(task);
522            reply.writeNoException();
523            return true;
524        }
525
526        case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
527            data.enforceInterface(IActivityManager.descriptor);
528            IBinder token = data.readStrongBinder();
529            boolean nonRoot = data.readInt() != 0;
530            boolean res = moveActivityTaskToBack(token, nonRoot);
531            reply.writeNoException();
532            reply.writeInt(res ? 1 : 0);
533            return true;
534        }
535
536        case MOVE_TASK_BACKWARDS_TRANSACTION: {
537            data.enforceInterface(IActivityManager.descriptor);
538            int task = data.readInt();
539            moveTaskBackwards(task);
540            reply.writeNoException();
541            return true;
542        }
543
544        case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
545            data.enforceInterface(IActivityManager.descriptor);
546            IBinder token = data.readStrongBinder();
547            boolean onlyRoot = data.readInt() != 0;
548            int res = token != null
549                ? getTaskForActivity(token, onlyRoot) : -1;
550                reply.writeNoException();
551            reply.writeInt(res);
552            return true;
553        }
554
555        case FINISH_OTHER_INSTANCES_TRANSACTION: {
556            data.enforceInterface(IActivityManager.descriptor);
557            IBinder token = data.readStrongBinder();
558            ComponentName className = ComponentName.readFromParcel(data);
559            finishOtherInstances(token, className);
560            reply.writeNoException();
561            return true;
562        }
563
564        case REPORT_THUMBNAIL_TRANSACTION: {
565            data.enforceInterface(IActivityManager.descriptor);
566            IBinder token = data.readStrongBinder();
567            Bitmap thumbnail = data.readInt() != 0
568                ? Bitmap.CREATOR.createFromParcel(data) : null;
569            CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
570            reportThumbnail(token, thumbnail, description);
571            reply.writeNoException();
572            return true;
573        }
574
575        case GET_CONTENT_PROVIDER_TRANSACTION: {
576            data.enforceInterface(IActivityManager.descriptor);
577            IBinder b = data.readStrongBinder();
578            IApplicationThread app = ApplicationThreadNative.asInterface(b);
579            String name = data.readString();
580            ContentProviderHolder cph = getContentProvider(app, name);
581            reply.writeNoException();
582            if (cph != null) {
583                reply.writeInt(1);
584                cph.writeToParcel(reply, 0);
585            } else {
586                reply.writeInt(0);
587            }
588            return true;
589        }
590
591        case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
592            data.enforceInterface(IActivityManager.descriptor);
593            IBinder b = data.readStrongBinder();
594            IApplicationThread app = ApplicationThreadNative.asInterface(b);
595            ArrayList<ContentProviderHolder> providers =
596                data.createTypedArrayList(ContentProviderHolder.CREATOR);
597            publishContentProviders(app, providers);
598            reply.writeNoException();
599            return true;
600        }
601
602        case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
603            data.enforceInterface(IActivityManager.descriptor);
604            IBinder b = data.readStrongBinder();
605            IApplicationThread app = ApplicationThreadNative.asInterface(b);
606            String name = data.readString();
607            removeContentProvider(app, name);
608            reply.writeNoException();
609            return true;
610        }
611
612        case GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION: {
613            data.enforceInterface(IActivityManager.descriptor);
614            ComponentName comp = ComponentName.CREATOR.createFromParcel(data);
615            PendingIntent pi = getRunningServiceControlPanel(comp);
616            reply.writeNoException();
617            PendingIntent.writePendingIntentOrNullToParcel(pi, reply);
618            return true;
619        }
620
621        case START_SERVICE_TRANSACTION: {
622            data.enforceInterface(IActivityManager.descriptor);
623            IBinder b = data.readStrongBinder();
624            IApplicationThread app = ApplicationThreadNative.asInterface(b);
625            Intent service = Intent.CREATOR.createFromParcel(data);
626            String resolvedType = data.readString();
627            ComponentName cn = startService(app, service, resolvedType);
628            reply.writeNoException();
629            ComponentName.writeToParcel(cn, reply);
630            return true;
631        }
632
633        case STOP_SERVICE_TRANSACTION: {
634            data.enforceInterface(IActivityManager.descriptor);
635            IBinder b = data.readStrongBinder();
636            IApplicationThread app = ApplicationThreadNative.asInterface(b);
637            Intent service = Intent.CREATOR.createFromParcel(data);
638            String resolvedType = data.readString();
639            int res = stopService(app, service, resolvedType);
640            reply.writeNoException();
641            reply.writeInt(res);
642            return true;
643        }
644
645        case STOP_SERVICE_TOKEN_TRANSACTION: {
646            data.enforceInterface(IActivityManager.descriptor);
647            ComponentName className = ComponentName.readFromParcel(data);
648            IBinder token = data.readStrongBinder();
649            int startId = data.readInt();
650            boolean res = stopServiceToken(className, token, startId);
651            reply.writeNoException();
652            reply.writeInt(res ? 1 : 0);
653            return true;
654        }
655
656        case SET_SERVICE_FOREGROUND_TRANSACTION: {
657            data.enforceInterface(IActivityManager.descriptor);
658            ComponentName className = ComponentName.readFromParcel(data);
659            IBinder token = data.readStrongBinder();
660            int id = data.readInt();
661            Notification notification = null;
662            if (data.readInt() != 0) {
663                notification = Notification.CREATOR.createFromParcel(data);
664            }
665            boolean removeNotification = data.readInt() != 0;
666            setServiceForeground(className, token, id, notification, removeNotification);
667            reply.writeNoException();
668            return true;
669        }
670
671        case BIND_SERVICE_TRANSACTION: {
672            data.enforceInterface(IActivityManager.descriptor);
673            IBinder b = data.readStrongBinder();
674            IApplicationThread app = ApplicationThreadNative.asInterface(b);
675            IBinder token = data.readStrongBinder();
676            Intent service = Intent.CREATOR.createFromParcel(data);
677            String resolvedType = data.readString();
678            b = data.readStrongBinder();
679            int fl = data.readInt();
680            IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
681            int res = bindService(app, token, service, resolvedType, conn, fl);
682            reply.writeNoException();
683            reply.writeInt(res);
684            return true;
685        }
686
687        case UNBIND_SERVICE_TRANSACTION: {
688            data.enforceInterface(IActivityManager.descriptor);
689            IBinder b = data.readStrongBinder();
690            IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
691            boolean res = unbindService(conn);
692            reply.writeNoException();
693            reply.writeInt(res ? 1 : 0);
694            return true;
695        }
696
697        case PUBLISH_SERVICE_TRANSACTION: {
698            data.enforceInterface(IActivityManager.descriptor);
699            IBinder token = data.readStrongBinder();
700            Intent intent = Intent.CREATOR.createFromParcel(data);
701            IBinder service = data.readStrongBinder();
702            publishService(token, intent, service);
703            reply.writeNoException();
704            return true;
705        }
706
707        case UNBIND_FINISHED_TRANSACTION: {
708            data.enforceInterface(IActivityManager.descriptor);
709            IBinder token = data.readStrongBinder();
710            Intent intent = Intent.CREATOR.createFromParcel(data);
711            boolean doRebind = data.readInt() != 0;
712            unbindFinished(token, intent, doRebind);
713            reply.writeNoException();
714            return true;
715        }
716
717        case SERVICE_DONE_EXECUTING_TRANSACTION: {
718            data.enforceInterface(IActivityManager.descriptor);
719            IBinder token = data.readStrongBinder();
720            int type = data.readInt();
721            int startId = data.readInt();
722            int res = data.readInt();
723            serviceDoneExecuting(token, type, startId, res);
724            reply.writeNoException();
725            return true;
726        }
727
728        case START_INSTRUMENTATION_TRANSACTION: {
729            data.enforceInterface(IActivityManager.descriptor);
730            ComponentName className = ComponentName.readFromParcel(data);
731            String profileFile = data.readString();
732            int fl = data.readInt();
733            Bundle arguments = data.readBundle();
734            IBinder b = data.readStrongBinder();
735            IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
736            boolean res = startInstrumentation(className, profileFile, fl, arguments, w);
737            reply.writeNoException();
738            reply.writeInt(res ? 1 : 0);
739            return true;
740        }
741
742
743        case FINISH_INSTRUMENTATION_TRANSACTION: {
744            data.enforceInterface(IActivityManager.descriptor);
745            IBinder b = data.readStrongBinder();
746            IApplicationThread app = ApplicationThreadNative.asInterface(b);
747            int resultCode = data.readInt();
748            Bundle results = data.readBundle();
749            finishInstrumentation(app, resultCode, results);
750            reply.writeNoException();
751            return true;
752        }
753
754        case GET_CONFIGURATION_TRANSACTION: {
755            data.enforceInterface(IActivityManager.descriptor);
756            Configuration config = getConfiguration();
757            reply.writeNoException();
758            config.writeToParcel(reply, 0);
759            return true;
760        }
761
762        case UPDATE_CONFIGURATION_TRANSACTION: {
763            data.enforceInterface(IActivityManager.descriptor);
764            Configuration config = Configuration.CREATOR.createFromParcel(data);
765            updateConfiguration(config);
766            reply.writeNoException();
767            return true;
768        }
769
770        case SET_REQUESTED_ORIENTATION_TRANSACTION: {
771            data.enforceInterface(IActivityManager.descriptor);
772            IBinder token = data.readStrongBinder();
773            int requestedOrientation = data.readInt();
774            setRequestedOrientation(token, requestedOrientation);
775            reply.writeNoException();
776            return true;
777        }
778
779        case GET_REQUESTED_ORIENTATION_TRANSACTION: {
780            data.enforceInterface(IActivityManager.descriptor);
781            IBinder token = data.readStrongBinder();
782            int req = getRequestedOrientation(token);
783            reply.writeNoException();
784            reply.writeInt(req);
785            return true;
786        }
787
788        case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
789            data.enforceInterface(IActivityManager.descriptor);
790            IBinder token = data.readStrongBinder();
791            ComponentName cn = getActivityClassForToken(token);
792            reply.writeNoException();
793            ComponentName.writeToParcel(cn, reply);
794            return true;
795        }
796
797        case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
798            data.enforceInterface(IActivityManager.descriptor);
799            IBinder token = data.readStrongBinder();
800            reply.writeNoException();
801            reply.writeString(getPackageForToken(token));
802            return true;
803        }
804
805        case GET_INTENT_SENDER_TRANSACTION: {
806            data.enforceInterface(IActivityManager.descriptor);
807            int type = data.readInt();
808            String packageName = data.readString();
809            IBinder token = data.readStrongBinder();
810            String resultWho = data.readString();
811            int requestCode = data.readInt();
812            Intent[] requestIntents;
813            String[] requestResolvedTypes;
814            if (data.readInt() != 0) {
815                requestIntents = data.createTypedArray(Intent.CREATOR);
816                requestResolvedTypes = data.createStringArray();
817            } else {
818                requestIntents = null;
819                requestResolvedTypes = null;
820            }
821            int fl = data.readInt();
822            IIntentSender res = getIntentSender(type, packageName, token,
823                    resultWho, requestCode, requestIntents,
824                    requestResolvedTypes, fl);
825            reply.writeNoException();
826            reply.writeStrongBinder(res != null ? res.asBinder() : null);
827            return true;
828        }
829
830        case CANCEL_INTENT_SENDER_TRANSACTION: {
831            data.enforceInterface(IActivityManager.descriptor);
832            IIntentSender r = IIntentSender.Stub.asInterface(
833                data.readStrongBinder());
834            cancelIntentSender(r);
835            reply.writeNoException();
836            return true;
837        }
838
839        case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
840            data.enforceInterface(IActivityManager.descriptor);
841            IIntentSender r = IIntentSender.Stub.asInterface(
842                data.readStrongBinder());
843            String res = getPackageForIntentSender(r);
844            reply.writeNoException();
845            reply.writeString(res);
846            return true;
847        }
848
849        case SET_PROCESS_LIMIT_TRANSACTION: {
850            data.enforceInterface(IActivityManager.descriptor);
851            int max = data.readInt();
852            setProcessLimit(max);
853            reply.writeNoException();
854            return true;
855        }
856
857        case GET_PROCESS_LIMIT_TRANSACTION: {
858            data.enforceInterface(IActivityManager.descriptor);
859            int limit = getProcessLimit();
860            reply.writeNoException();
861            reply.writeInt(limit);
862            return true;
863        }
864
865        case SET_PROCESS_FOREGROUND_TRANSACTION: {
866            data.enforceInterface(IActivityManager.descriptor);
867            IBinder token = data.readStrongBinder();
868            int pid = data.readInt();
869            boolean isForeground = data.readInt() != 0;
870            setProcessForeground(token, pid, isForeground);
871            reply.writeNoException();
872            return true;
873        }
874
875        case CHECK_PERMISSION_TRANSACTION: {
876            data.enforceInterface(IActivityManager.descriptor);
877            String perm = data.readString();
878            int pid = data.readInt();
879            int uid = data.readInt();
880            int res = checkPermission(perm, pid, uid);
881            reply.writeNoException();
882            reply.writeInt(res);
883            return true;
884        }
885
886        case CHECK_URI_PERMISSION_TRANSACTION: {
887            data.enforceInterface(IActivityManager.descriptor);
888            Uri uri = Uri.CREATOR.createFromParcel(data);
889            int pid = data.readInt();
890            int uid = data.readInt();
891            int mode = data.readInt();
892            int res = checkUriPermission(uri, pid, uid, mode);
893            reply.writeNoException();
894            reply.writeInt(res);
895            return true;
896        }
897
898        case CLEAR_APP_DATA_TRANSACTION: {
899            data.enforceInterface(IActivityManager.descriptor);
900            String packageName = data.readString();
901            IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
902                    data.readStrongBinder());
903            boolean res = clearApplicationUserData(packageName, observer);
904            reply.writeNoException();
905            reply.writeInt(res ? 1 : 0);
906            return true;
907        }
908
909        case GRANT_URI_PERMISSION_TRANSACTION: {
910            data.enforceInterface(IActivityManager.descriptor);
911            IBinder b = data.readStrongBinder();
912            IApplicationThread app = ApplicationThreadNative.asInterface(b);
913            String targetPkg = data.readString();
914            Uri uri = Uri.CREATOR.createFromParcel(data);
915            int mode = data.readInt();
916            grantUriPermission(app, targetPkg, uri, mode);
917            reply.writeNoException();
918            return true;
919        }
920
921        case REVOKE_URI_PERMISSION_TRANSACTION: {
922            data.enforceInterface(IActivityManager.descriptor);
923            IBinder b = data.readStrongBinder();
924            IApplicationThread app = ApplicationThreadNative.asInterface(b);
925            Uri uri = Uri.CREATOR.createFromParcel(data);
926            int mode = data.readInt();
927            revokeUriPermission(app, uri, mode);
928            reply.writeNoException();
929            return true;
930        }
931
932        case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
933            data.enforceInterface(IActivityManager.descriptor);
934            IBinder b = data.readStrongBinder();
935            IApplicationThread app = ApplicationThreadNative.asInterface(b);
936            boolean waiting = data.readInt() != 0;
937            showWaitingForDebugger(app, waiting);
938            reply.writeNoException();
939            return true;
940        }
941
942        case GET_MEMORY_INFO_TRANSACTION: {
943            data.enforceInterface(IActivityManager.descriptor);
944            ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
945            getMemoryInfo(mi);
946            reply.writeNoException();
947            mi.writeToParcel(reply, 0);
948            return true;
949        }
950
951        case UNHANDLED_BACK_TRANSACTION: {
952            data.enforceInterface(IActivityManager.descriptor);
953            unhandledBack();
954            reply.writeNoException();
955            return true;
956        }
957
958        case OPEN_CONTENT_URI_TRANSACTION: {
959            data.enforceInterface(IActivityManager.descriptor);
960            Uri uri = Uri.parse(data.readString());
961            ParcelFileDescriptor pfd = openContentUri(uri);
962            reply.writeNoException();
963            if (pfd != null) {
964                reply.writeInt(1);
965                pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
966            } else {
967                reply.writeInt(0);
968            }
969            return true;
970        }
971
972        case GOING_TO_SLEEP_TRANSACTION: {
973            data.enforceInterface(IActivityManager.descriptor);
974            goingToSleep();
975            reply.writeNoException();
976            return true;
977        }
978
979        case WAKING_UP_TRANSACTION: {
980            data.enforceInterface(IActivityManager.descriptor);
981            wakingUp();
982            reply.writeNoException();
983            return true;
984        }
985
986        case SET_DEBUG_APP_TRANSACTION: {
987            data.enforceInterface(IActivityManager.descriptor);
988            String pn = data.readString();
989            boolean wfd = data.readInt() != 0;
990            boolean per = data.readInt() != 0;
991            setDebugApp(pn, wfd, per);
992            reply.writeNoException();
993            return true;
994        }
995
996        case SET_ALWAYS_FINISH_TRANSACTION: {
997            data.enforceInterface(IActivityManager.descriptor);
998            boolean enabled = data.readInt() != 0;
999            setAlwaysFinish(enabled);
1000            reply.writeNoException();
1001            return true;
1002        }
1003
1004        case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
1005            data.enforceInterface(IActivityManager.descriptor);
1006            IActivityController watcher = IActivityController.Stub.asInterface(
1007                    data.readStrongBinder());
1008            setActivityController(watcher);
1009            return true;
1010        }
1011
1012        case ENTER_SAFE_MODE_TRANSACTION: {
1013            data.enforceInterface(IActivityManager.descriptor);
1014            enterSafeMode();
1015            reply.writeNoException();
1016            return true;
1017        }
1018
1019        case NOTE_WAKEUP_ALARM_TRANSACTION: {
1020            data.enforceInterface(IActivityManager.descriptor);
1021            IIntentSender is = IIntentSender.Stub.asInterface(
1022                    data.readStrongBinder());
1023            noteWakeupAlarm(is);
1024            reply.writeNoException();
1025            return true;
1026        }
1027
1028        case KILL_PIDS_TRANSACTION: {
1029            data.enforceInterface(IActivityManager.descriptor);
1030            int[] pids = data.createIntArray();
1031            String reason = data.readString();
1032            boolean secure = data.readInt() != 0;
1033            boolean res = killPids(pids, reason, secure);
1034            reply.writeNoException();
1035            reply.writeInt(res ? 1 : 0);
1036            return true;
1037        }
1038
1039        case START_RUNNING_TRANSACTION: {
1040            data.enforceInterface(IActivityManager.descriptor);
1041            String pkg = data.readString();
1042            String cls = data.readString();
1043            String action = data.readString();
1044            String indata = data.readString();
1045            startRunning(pkg, cls, action, indata);
1046            reply.writeNoException();
1047            return true;
1048        }
1049
1050        case HANDLE_APPLICATION_CRASH_TRANSACTION: {
1051            data.enforceInterface(IActivityManager.descriptor);
1052            IBinder app = data.readStrongBinder();
1053            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1054            handleApplicationCrash(app, ci);
1055            reply.writeNoException();
1056            return true;
1057        }
1058
1059        case HANDLE_APPLICATION_WTF_TRANSACTION: {
1060            data.enforceInterface(IActivityManager.descriptor);
1061            IBinder app = data.readStrongBinder();
1062            String tag = data.readString();
1063            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1064            boolean res = handleApplicationWtf(app, tag, ci);
1065            reply.writeNoException();
1066            reply.writeInt(res ? 1 : 0);
1067            return true;
1068        }
1069
1070        case HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION: {
1071            data.enforceInterface(IActivityManager.descriptor);
1072            IBinder app = data.readStrongBinder();
1073            int violationMask = data.readInt();
1074            StrictMode.ViolationInfo info = new StrictMode.ViolationInfo(data);
1075            handleApplicationStrictModeViolation(app, violationMask, info);
1076            reply.writeNoException();
1077            return true;
1078        }
1079
1080        case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
1081            data.enforceInterface(IActivityManager.descriptor);
1082            int sig = data.readInt();
1083            signalPersistentProcesses(sig);
1084            reply.writeNoException();
1085            return true;
1086        }
1087
1088        case KILL_BACKGROUND_PROCESSES_TRANSACTION: {
1089            data.enforceInterface(IActivityManager.descriptor);
1090            String packageName = data.readString();
1091            killBackgroundProcesses(packageName);
1092            reply.writeNoException();
1093            return true;
1094        }
1095
1096        case FORCE_STOP_PACKAGE_TRANSACTION: {
1097            data.enforceInterface(IActivityManager.descriptor);
1098            String packageName = data.readString();
1099            forceStopPackage(packageName);
1100            reply.writeNoException();
1101            return true;
1102        }
1103
1104        case GET_DEVICE_CONFIGURATION_TRANSACTION: {
1105            data.enforceInterface(IActivityManager.descriptor);
1106            ConfigurationInfo config = getDeviceConfigurationInfo();
1107            reply.writeNoException();
1108            config.writeToParcel(reply, 0);
1109            return true;
1110        }
1111
1112        case PROFILE_CONTROL_TRANSACTION: {
1113            data.enforceInterface(IActivityManager.descriptor);
1114            String process = data.readString();
1115            boolean start = data.readInt() != 0;
1116            int profileType = data.readInt();
1117            String path = data.readString();
1118            ParcelFileDescriptor fd = data.readInt() != 0
1119                    ? data.readFileDescriptor() : null;
1120            boolean res = profileControl(process, start, path, fd, profileType);
1121            reply.writeNoException();
1122            reply.writeInt(res ? 1 : 0);
1123            return true;
1124        }
1125
1126        case SHUTDOWN_TRANSACTION: {
1127            data.enforceInterface(IActivityManager.descriptor);
1128            boolean res = shutdown(data.readInt());
1129            reply.writeNoException();
1130            reply.writeInt(res ? 1 : 0);
1131            return true;
1132        }
1133
1134        case STOP_APP_SWITCHES_TRANSACTION: {
1135            data.enforceInterface(IActivityManager.descriptor);
1136            stopAppSwitches();
1137            reply.writeNoException();
1138            return true;
1139        }
1140
1141        case RESUME_APP_SWITCHES_TRANSACTION: {
1142            data.enforceInterface(IActivityManager.descriptor);
1143            resumeAppSwitches();
1144            reply.writeNoException();
1145            return true;
1146        }
1147
1148        case PEEK_SERVICE_TRANSACTION: {
1149            data.enforceInterface(IActivityManager.descriptor);
1150            Intent service = Intent.CREATOR.createFromParcel(data);
1151            String resolvedType = data.readString();
1152            IBinder binder = peekService(service, resolvedType);
1153            reply.writeNoException();
1154            reply.writeStrongBinder(binder);
1155            return true;
1156        }
1157
1158        case START_BACKUP_AGENT_TRANSACTION: {
1159            data.enforceInterface(IActivityManager.descriptor);
1160            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1161            int backupRestoreMode = data.readInt();
1162            boolean success = bindBackupAgent(info, backupRestoreMode);
1163            reply.writeNoException();
1164            reply.writeInt(success ? 1 : 0);
1165            return true;
1166        }
1167
1168        case BACKUP_AGENT_CREATED_TRANSACTION: {
1169            data.enforceInterface(IActivityManager.descriptor);
1170            String packageName = data.readString();
1171            IBinder agent = data.readStrongBinder();
1172            backupAgentCreated(packageName, agent);
1173            reply.writeNoException();
1174            return true;
1175        }
1176
1177        case UNBIND_BACKUP_AGENT_TRANSACTION: {
1178            data.enforceInterface(IActivityManager.descriptor);
1179            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1180            unbindBackupAgent(info);
1181            reply.writeNoException();
1182            return true;
1183        }
1184
1185        case REGISTER_ACTIVITY_WATCHER_TRANSACTION: {
1186            data.enforceInterface(IActivityManager.descriptor);
1187            IActivityWatcher watcher = IActivityWatcher.Stub.asInterface(
1188                    data.readStrongBinder());
1189            registerActivityWatcher(watcher);
1190            return true;
1191        }
1192
1193        case UNREGISTER_ACTIVITY_WATCHER_TRANSACTION: {
1194            data.enforceInterface(IActivityManager.descriptor);
1195            IActivityWatcher watcher = IActivityWatcher.Stub.asInterface(
1196                    data.readStrongBinder());
1197            unregisterActivityWatcher(watcher);
1198            return true;
1199        }
1200
1201        case START_ACTIVITY_IN_PACKAGE_TRANSACTION:
1202        {
1203            data.enforceInterface(IActivityManager.descriptor);
1204            int uid = data.readInt();
1205            Intent intent = Intent.CREATOR.createFromParcel(data);
1206            String resolvedType = data.readString();
1207            IBinder resultTo = data.readStrongBinder();
1208            String resultWho = data.readString();
1209            int requestCode = data.readInt();
1210            boolean onlyIfNeeded = data.readInt() != 0;
1211            int result = startActivityInPackage(uid, intent, resolvedType,
1212                    resultTo, resultWho, requestCode, onlyIfNeeded);
1213            reply.writeNoException();
1214            reply.writeInt(result);
1215            return true;
1216        }
1217
1218        case KILL_APPLICATION_WITH_UID_TRANSACTION: {
1219            data.enforceInterface(IActivityManager.descriptor);
1220            String pkg = data.readString();
1221            int uid = data.readInt();
1222            killApplicationWithUid(pkg, uid);
1223            reply.writeNoException();
1224            return true;
1225        }
1226
1227        case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1228            data.enforceInterface(IActivityManager.descriptor);
1229            String reason = data.readString();
1230            closeSystemDialogs(reason);
1231            reply.writeNoException();
1232            return true;
1233        }
1234
1235        case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1236            data.enforceInterface(IActivityManager.descriptor);
1237            int[] pids = data.createIntArray();
1238            Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
1239            reply.writeNoException();
1240            reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1241            return true;
1242        }
1243
1244        case KILL_APPLICATION_PROCESS_TRANSACTION: {
1245            data.enforceInterface(IActivityManager.descriptor);
1246            String processName = data.readString();
1247            int uid = data.readInt();
1248            killApplicationProcess(processName, uid);
1249            reply.writeNoException();
1250            return true;
1251        }
1252
1253        case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
1254            data.enforceInterface(IActivityManager.descriptor);
1255            IBinder token = data.readStrongBinder();
1256            String packageName = data.readString();
1257            int enterAnim = data.readInt();
1258            int exitAnim = data.readInt();
1259            overridePendingTransition(token, packageName, enterAnim, exitAnim);
1260            reply.writeNoException();
1261            return true;
1262        }
1263
1264        case IS_USER_A_MONKEY_TRANSACTION: {
1265            data.enforceInterface(IActivityManager.descriptor);
1266            boolean areThey = isUserAMonkey();
1267            reply.writeNoException();
1268            reply.writeInt(areThey ? 1 : 0);
1269            return true;
1270        }
1271
1272        case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
1273            data.enforceInterface(IActivityManager.descriptor);
1274            finishHeavyWeightApp();
1275            reply.writeNoException();
1276            return true;
1277        }
1278
1279        case IS_IMMERSIVE_TRANSACTION: {
1280            data.enforceInterface(IActivityManager.descriptor);
1281            IBinder token = data.readStrongBinder();
1282            boolean isit = isImmersive(token);
1283            reply.writeNoException();
1284            reply.writeInt(isit ? 1 : 0);
1285            return true;
1286        }
1287
1288        case SET_IMMERSIVE_TRANSACTION: {
1289            data.enforceInterface(IActivityManager.descriptor);
1290            IBinder token = data.readStrongBinder();
1291            boolean imm = data.readInt() == 1;
1292            setImmersive(token, imm);
1293            reply.writeNoException();
1294            return true;
1295        }
1296
1297        case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
1298            data.enforceInterface(IActivityManager.descriptor);
1299            boolean isit = isTopActivityImmersive();
1300            reply.writeNoException();
1301            reply.writeInt(isit ? 1 : 0);
1302            return true;
1303        }
1304
1305        case CRASH_APPLICATION_TRANSACTION: {
1306            data.enforceInterface(IActivityManager.descriptor);
1307            int uid = data.readInt();
1308            int initialPid = data.readInt();
1309            String packageName = data.readString();
1310            String message = data.readString();
1311            crashApplication(uid, initialPid, packageName, message);
1312            reply.writeNoException();
1313            return true;
1314        }
1315
1316        case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
1317            data.enforceInterface(IActivityManager.descriptor);
1318            Uri uri = Uri.CREATOR.createFromParcel(data);
1319            String type = getProviderMimeType(uri);
1320            reply.writeNoException();
1321            reply.writeString(type);
1322            return true;
1323        }
1324
1325        case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
1326            data.enforceInterface(IActivityManager.descriptor);
1327            String name = data.readString();
1328            IBinder perm = newUriPermissionOwner(name);
1329            reply.writeNoException();
1330            reply.writeStrongBinder(perm);
1331            return true;
1332        }
1333
1334        case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1335            data.enforceInterface(IActivityManager.descriptor);
1336            IBinder owner = data.readStrongBinder();
1337            int fromUid = data.readInt();
1338            String targetPkg = data.readString();
1339            Uri uri = Uri.CREATOR.createFromParcel(data);
1340            int mode = data.readInt();
1341            grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode);
1342            reply.writeNoException();
1343            return true;
1344        }
1345
1346        case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1347            data.enforceInterface(IActivityManager.descriptor);
1348            IBinder owner = data.readStrongBinder();
1349            Uri uri = null;
1350            if (data.readInt() != 0) {
1351                Uri.CREATOR.createFromParcel(data);
1352            }
1353            int mode = data.readInt();
1354            revokeUriPermissionFromOwner(owner, uri, mode);
1355            reply.writeNoException();
1356            return true;
1357        }
1358
1359        case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
1360            data.enforceInterface(IActivityManager.descriptor);
1361            int callingUid = data.readInt();
1362            String targetPkg = data.readString();
1363            Uri uri = Uri.CREATOR.createFromParcel(data);
1364            int modeFlags = data.readInt();
1365            int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags);
1366            reply.writeNoException();
1367            reply.writeInt(res);
1368            return true;
1369        }
1370
1371        case DUMP_HEAP_TRANSACTION: {
1372            data.enforceInterface(IActivityManager.descriptor);
1373            String process = data.readString();
1374            boolean managed = data.readInt() != 0;
1375            String path = data.readString();
1376            ParcelFileDescriptor fd = data.readInt() != 0
1377                    ? data.readFileDescriptor() : null;
1378            boolean res = dumpHeap(process, managed, path, fd);
1379            reply.writeNoException();
1380            reply.writeInt(res ? 1 : 0);
1381            return true;
1382        }
1383
1384        case START_ACTIVITIES_IN_PACKAGE_TRANSACTION:
1385        {
1386            data.enforceInterface(IActivityManager.descriptor);
1387            int uid = data.readInt();
1388            Intent[] intents = data.createTypedArray(Intent.CREATOR);
1389            String[] resolvedTypes = data.createStringArray();
1390            IBinder resultTo = data.readStrongBinder();
1391            int result = startActivitiesInPackage(uid, intents, resolvedTypes, resultTo);
1392            reply.writeNoException();
1393            reply.writeInt(result);
1394            return true;
1395        }
1396
1397        case START_ACTIVITIES_TRANSACTION:
1398        {
1399            data.enforceInterface(IActivityManager.descriptor);
1400            IBinder b = data.readStrongBinder();
1401            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1402            Intent[] intents = data.createTypedArray(Intent.CREATOR);
1403            String[] resolvedTypes = data.createStringArray();
1404            IBinder resultTo = data.readStrongBinder();
1405            int result = startActivities(app, intents, resolvedTypes, resultTo);
1406            reply.writeNoException();
1407            reply.writeInt(result);
1408            return true;
1409        }
1410
1411        case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1412        {
1413            data.enforceInterface(IActivityManager.descriptor);
1414            int mode = getFrontActivityScreenCompatMode();
1415            reply.writeNoException();
1416            reply.writeInt(mode);
1417            return true;
1418        }
1419
1420        case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1421        {
1422            data.enforceInterface(IActivityManager.descriptor);
1423            int mode = data.readInt();
1424            setFrontActivityScreenCompatMode(mode);
1425            reply.writeNoException();
1426            reply.writeInt(mode);
1427            return true;
1428        }
1429
1430        case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1431        {
1432            data.enforceInterface(IActivityManager.descriptor);
1433            String pkg = data.readString();
1434            int mode = getPackageScreenCompatMode(pkg);
1435            reply.writeNoException();
1436            reply.writeInt(mode);
1437            return true;
1438        }
1439
1440        case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1441        {
1442            data.enforceInterface(IActivityManager.descriptor);
1443            String pkg = data.readString();
1444            int mode = data.readInt();
1445            setPackageScreenCompatMode(pkg, mode);
1446            reply.writeNoException();
1447            return true;
1448        }
1449
1450        case SWITCH_USER_TRANSACTION: {
1451            data.enforceInterface(IActivityManager.descriptor);
1452            int userid = data.readInt();
1453            boolean result = switchUser(userid);
1454            reply.writeNoException();
1455            reply.writeInt(result ? 1 : 0);
1456            return true;
1457        }
1458
1459        case REMOVE_SUB_TASK_TRANSACTION:
1460        {
1461            data.enforceInterface(IActivityManager.descriptor);
1462            int taskId = data.readInt();
1463            int subTaskIndex = data.readInt();
1464            boolean result = removeSubTask(taskId, subTaskIndex);
1465            reply.writeNoException();
1466            reply.writeInt(result ? 1 : 0);
1467            return true;
1468        }
1469
1470        case REMOVE_TASK_TRANSACTION:
1471        {
1472            data.enforceInterface(IActivityManager.descriptor);
1473            int taskId = data.readInt();
1474            int fl = data.readInt();
1475            boolean result = removeTask(taskId, fl);
1476            reply.writeNoException();
1477            reply.writeInt(result ? 1 : 0);
1478            return true;
1479        }
1480
1481        case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
1482            data.enforceInterface(IActivityManager.descriptor);
1483            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1484                    data.readStrongBinder());
1485            registerProcessObserver(observer);
1486            return true;
1487        }
1488
1489        case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
1490            data.enforceInterface(IActivityManager.descriptor);
1491            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1492                    data.readStrongBinder());
1493            unregisterProcessObserver(observer);
1494            return true;
1495        }
1496
1497        case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1498        {
1499            data.enforceInterface(IActivityManager.descriptor);
1500            String pkg = data.readString();
1501            boolean ask = getPackageAskScreenCompat(pkg);
1502            reply.writeNoException();
1503            reply.writeInt(ask ? 1 : 0);
1504            return true;
1505        }
1506
1507        case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1508        {
1509            data.enforceInterface(IActivityManager.descriptor);
1510            String pkg = data.readString();
1511            boolean ask = data.readInt() != 0;
1512            setPackageAskScreenCompat(pkg, ask);
1513            reply.writeNoException();
1514            return true;
1515        }
1516
1517        case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
1518            data.enforceInterface(IActivityManager.descriptor);
1519            IIntentSender r = IIntentSender.Stub.asInterface(
1520                data.readStrongBinder());
1521            boolean res = isIntentSenderTargetedToPackage(r);
1522            reply.writeNoException();
1523            reply.writeInt(res ? 1 : 0);
1524            return true;
1525        }
1526
1527        case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
1528            data.enforceInterface(IActivityManager.descriptor);
1529            Configuration config = Configuration.CREATOR.createFromParcel(data);
1530            updatePersistentConfiguration(config);
1531            reply.writeNoException();
1532            return true;
1533        }
1534
1535        case GET_PROCESS_PSS_TRANSACTION: {
1536            data.enforceInterface(IActivityManager.descriptor);
1537            int[] pids = data.createIntArray();
1538            long[] pss = getProcessPss(pids);
1539            reply.writeNoException();
1540            reply.writeLongArray(pss);
1541            return true;
1542        }
1543
1544        }
1545
1546        return super.onTransact(code, data, reply, flags);
1547    }
1548
1549    public IBinder asBinder() {
1550        return this;
1551    }
1552
1553    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
1554        protected IActivityManager create() {
1555            IBinder b = ServiceManager.getService("activity");
1556            if (false) {
1557                Log.v("ActivityManager", "default service binder = " + b);
1558            }
1559            IActivityManager am = asInterface(b);
1560            if (false) {
1561                Log.v("ActivityManager", "default service = " + am);
1562            }
1563            return am;
1564        }
1565    };
1566}
1567
1568class ActivityManagerProxy implements IActivityManager
1569{
1570    public ActivityManagerProxy(IBinder remote)
1571    {
1572        mRemote = remote;
1573    }
1574
1575    public IBinder asBinder()
1576    {
1577        return mRemote;
1578    }
1579
1580    public int startActivity(IApplicationThread caller, Intent intent,
1581            String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1582            IBinder resultTo, String resultWho,
1583            int requestCode, boolean onlyIfNeeded,
1584            boolean debug, String profileFile, ParcelFileDescriptor profileFd,
1585            boolean autoStopProfiler) throws RemoteException {
1586        Parcel data = Parcel.obtain();
1587        Parcel reply = Parcel.obtain();
1588        data.writeInterfaceToken(IActivityManager.descriptor);
1589        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1590        intent.writeToParcel(data, 0);
1591        data.writeString(resolvedType);
1592        data.writeTypedArray(grantedUriPermissions, 0);
1593        data.writeInt(grantedMode);
1594        data.writeStrongBinder(resultTo);
1595        data.writeString(resultWho);
1596        data.writeInt(requestCode);
1597        data.writeInt(onlyIfNeeded ? 1 : 0);
1598        data.writeInt(debug ? 1 : 0);
1599        data.writeString(profileFile);
1600        if (profileFd != null) {
1601            data.writeInt(1);
1602            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1603        } else {
1604            data.writeInt(0);
1605        }
1606        data.writeInt(autoStopProfiler ? 1 : 0);
1607        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1608        reply.readException();
1609        int result = reply.readInt();
1610        reply.recycle();
1611        data.recycle();
1612        return result;
1613    }
1614    public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent,
1615            String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1616            IBinder resultTo, String resultWho,
1617            int requestCode, boolean onlyIfNeeded,
1618            boolean debug, String profileFile, ParcelFileDescriptor profileFd,
1619            boolean autoStopProfiler) throws RemoteException {
1620        Parcel data = Parcel.obtain();
1621        Parcel reply = Parcel.obtain();
1622        data.writeInterfaceToken(IActivityManager.descriptor);
1623        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1624        intent.writeToParcel(data, 0);
1625        data.writeString(resolvedType);
1626        data.writeTypedArray(grantedUriPermissions, 0);
1627        data.writeInt(grantedMode);
1628        data.writeStrongBinder(resultTo);
1629        data.writeString(resultWho);
1630        data.writeInt(requestCode);
1631        data.writeInt(onlyIfNeeded ? 1 : 0);
1632        data.writeInt(debug ? 1 : 0);
1633        data.writeString(profileFile);
1634        if (profileFd != null) {
1635            data.writeInt(1);
1636            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1637        } else {
1638            data.writeInt(0);
1639        }
1640        data.writeInt(autoStopProfiler ? 1 : 0);
1641        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
1642        reply.readException();
1643        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
1644        reply.recycle();
1645        data.recycle();
1646        return result;
1647    }
1648    public int startActivityWithConfig(IApplicationThread caller, Intent intent,
1649            String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1650            IBinder resultTo, String resultWho,
1651            int requestCode, boolean onlyIfNeeded,
1652            boolean debug, Configuration config) throws RemoteException {
1653        Parcel data = Parcel.obtain();
1654        Parcel reply = Parcel.obtain();
1655        data.writeInterfaceToken(IActivityManager.descriptor);
1656        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1657        intent.writeToParcel(data, 0);
1658        data.writeString(resolvedType);
1659        data.writeTypedArray(grantedUriPermissions, 0);
1660        data.writeInt(grantedMode);
1661        data.writeStrongBinder(resultTo);
1662        data.writeString(resultWho);
1663        data.writeInt(requestCode);
1664        data.writeInt(onlyIfNeeded ? 1 : 0);
1665        data.writeInt(debug ? 1 : 0);
1666        config.writeToParcel(data, 0);
1667        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1668        reply.readException();
1669        int result = reply.readInt();
1670        reply.recycle();
1671        data.recycle();
1672        return result;
1673    }
1674    public int startActivityIntentSender(IApplicationThread caller,
1675            IntentSender intent, Intent fillInIntent, String resolvedType,
1676            IBinder resultTo, String resultWho, int requestCode,
1677            int flagsMask, int flagsValues) throws RemoteException {
1678        Parcel data = Parcel.obtain();
1679        Parcel reply = Parcel.obtain();
1680        data.writeInterfaceToken(IActivityManager.descriptor);
1681        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1682        intent.writeToParcel(data, 0);
1683        if (fillInIntent != null) {
1684            data.writeInt(1);
1685            fillInIntent.writeToParcel(data, 0);
1686        } else {
1687            data.writeInt(0);
1688        }
1689        data.writeString(resolvedType);
1690        data.writeStrongBinder(resultTo);
1691        data.writeString(resultWho);
1692        data.writeInt(requestCode);
1693        data.writeInt(flagsMask);
1694        data.writeInt(flagsValues);
1695        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
1696        reply.readException();
1697        int result = reply.readInt();
1698        reply.recycle();
1699        data.recycle();
1700        return result;
1701    }
1702    public boolean startNextMatchingActivity(IBinder callingActivity,
1703            Intent intent) throws RemoteException {
1704        Parcel data = Parcel.obtain();
1705        Parcel reply = Parcel.obtain();
1706        data.writeInterfaceToken(IActivityManager.descriptor);
1707        data.writeStrongBinder(callingActivity);
1708        intent.writeToParcel(data, 0);
1709        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
1710        reply.readException();
1711        int result = reply.readInt();
1712        reply.recycle();
1713        data.recycle();
1714        return result != 0;
1715    }
1716    public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
1717            throws RemoteException {
1718        Parcel data = Parcel.obtain();
1719        Parcel reply = Parcel.obtain();
1720        data.writeInterfaceToken(IActivityManager.descriptor);
1721        data.writeStrongBinder(token);
1722        data.writeInt(resultCode);
1723        if (resultData != null) {
1724            data.writeInt(1);
1725            resultData.writeToParcel(data, 0);
1726        } else {
1727            data.writeInt(0);
1728        }
1729        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
1730        reply.readException();
1731        boolean res = reply.readInt() != 0;
1732        data.recycle();
1733        reply.recycle();
1734        return res;
1735    }
1736    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
1737    {
1738        Parcel data = Parcel.obtain();
1739        Parcel reply = Parcel.obtain();
1740        data.writeInterfaceToken(IActivityManager.descriptor);
1741        data.writeStrongBinder(token);
1742        data.writeString(resultWho);
1743        data.writeInt(requestCode);
1744        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
1745        reply.readException();
1746        data.recycle();
1747        reply.recycle();
1748    }
1749    public boolean willActivityBeVisible(IBinder token) throws RemoteException {
1750        Parcel data = Parcel.obtain();
1751        Parcel reply = Parcel.obtain();
1752        data.writeInterfaceToken(IActivityManager.descriptor);
1753        data.writeStrongBinder(token);
1754        mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
1755        reply.readException();
1756        boolean res = reply.readInt() != 0;
1757        data.recycle();
1758        reply.recycle();
1759        return res;
1760    }
1761    public Intent registerReceiver(IApplicationThread caller, String packageName,
1762            IIntentReceiver receiver,
1763            IntentFilter filter, String perm) throws RemoteException
1764    {
1765        Parcel data = Parcel.obtain();
1766        Parcel reply = Parcel.obtain();
1767        data.writeInterfaceToken(IActivityManager.descriptor);
1768        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1769        data.writeString(packageName);
1770        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1771        filter.writeToParcel(data, 0);
1772        data.writeString(perm);
1773        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1774        reply.readException();
1775        Intent intent = null;
1776        int haveIntent = reply.readInt();
1777        if (haveIntent != 0) {
1778            intent = Intent.CREATOR.createFromParcel(reply);
1779        }
1780        reply.recycle();
1781        data.recycle();
1782        return intent;
1783    }
1784    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
1785    {
1786        Parcel data = Parcel.obtain();
1787        Parcel reply = Parcel.obtain();
1788        data.writeInterfaceToken(IActivityManager.descriptor);
1789        data.writeStrongBinder(receiver.asBinder());
1790        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1791        reply.readException();
1792        data.recycle();
1793        reply.recycle();
1794    }
1795    public int broadcastIntent(IApplicationThread caller,
1796            Intent intent, String resolvedType,  IIntentReceiver resultTo,
1797            int resultCode, String resultData, Bundle map,
1798            String requiredPermission, boolean serialized,
1799            boolean sticky) throws RemoteException
1800    {
1801        Parcel data = Parcel.obtain();
1802        Parcel reply = Parcel.obtain();
1803        data.writeInterfaceToken(IActivityManager.descriptor);
1804        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1805        intent.writeToParcel(data, 0);
1806        data.writeString(resolvedType);
1807        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
1808        data.writeInt(resultCode);
1809        data.writeString(resultData);
1810        data.writeBundle(map);
1811        data.writeString(requiredPermission);
1812        data.writeInt(serialized ? 1 : 0);
1813        data.writeInt(sticky ? 1 : 0);
1814        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
1815        reply.readException();
1816        int res = reply.readInt();
1817        reply.recycle();
1818        data.recycle();
1819        return res;
1820    }
1821    public void unbroadcastIntent(IApplicationThread caller, Intent intent) throws RemoteException
1822    {
1823        Parcel data = Parcel.obtain();
1824        Parcel reply = Parcel.obtain();
1825        data.writeInterfaceToken(IActivityManager.descriptor);
1826        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1827        intent.writeToParcel(data, 0);
1828        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
1829        reply.readException();
1830        data.recycle();
1831        reply.recycle();
1832    }
1833    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
1834    {
1835        Parcel data = Parcel.obtain();
1836        Parcel reply = Parcel.obtain();
1837        data.writeInterfaceToken(IActivityManager.descriptor);
1838        data.writeStrongBinder(who);
1839        data.writeInt(resultCode);
1840        data.writeString(resultData);
1841        data.writeBundle(map);
1842        data.writeInt(abortBroadcast ? 1 : 0);
1843        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1844        reply.readException();
1845        data.recycle();
1846        reply.recycle();
1847    }
1848    public void attachApplication(IApplicationThread app) throws RemoteException
1849    {
1850        Parcel data = Parcel.obtain();
1851        Parcel reply = Parcel.obtain();
1852        data.writeInterfaceToken(IActivityManager.descriptor);
1853        data.writeStrongBinder(app.asBinder());
1854        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
1855        reply.readException();
1856        data.recycle();
1857        reply.recycle();
1858    }
1859    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
1860            throws RemoteException
1861    {
1862        Parcel data = Parcel.obtain();
1863        Parcel reply = Parcel.obtain();
1864        data.writeInterfaceToken(IActivityManager.descriptor);
1865        data.writeStrongBinder(token);
1866        if (config != null) {
1867            data.writeInt(1);
1868            config.writeToParcel(data, 0);
1869        } else {
1870            data.writeInt(0);
1871        }
1872        data.writeInt(stopProfiling ? 1 : 0);
1873        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1874        reply.readException();
1875        data.recycle();
1876        reply.recycle();
1877    }
1878    public void activityPaused(IBinder token) throws RemoteException
1879    {
1880        Parcel data = Parcel.obtain();
1881        Parcel reply = Parcel.obtain();
1882        data.writeInterfaceToken(IActivityManager.descriptor);
1883        data.writeStrongBinder(token);
1884        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
1885        reply.readException();
1886        data.recycle();
1887        reply.recycle();
1888    }
1889    public void activityStopped(IBinder token, Bundle state,
1890            Bitmap thumbnail, CharSequence description) throws RemoteException
1891    {
1892        Parcel data = Parcel.obtain();
1893        Parcel reply = Parcel.obtain();
1894        data.writeInterfaceToken(IActivityManager.descriptor);
1895        data.writeStrongBinder(token);
1896        data.writeBundle(state);
1897        if (thumbnail != null) {
1898            data.writeInt(1);
1899            thumbnail.writeToParcel(data, 0);
1900        } else {
1901            data.writeInt(0);
1902        }
1903        TextUtils.writeToParcel(description, data, 0);
1904        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1905        reply.readException();
1906        data.recycle();
1907        reply.recycle();
1908    }
1909    public void activitySlept(IBinder token) throws RemoteException
1910    {
1911        Parcel data = Parcel.obtain();
1912        Parcel reply = Parcel.obtain();
1913        data.writeInterfaceToken(IActivityManager.descriptor);
1914        data.writeStrongBinder(token);
1915        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1916        reply.readException();
1917        data.recycle();
1918        reply.recycle();
1919    }
1920    public void activityDestroyed(IBinder token) throws RemoteException
1921    {
1922        Parcel data = Parcel.obtain();
1923        Parcel reply = Parcel.obtain();
1924        data.writeInterfaceToken(IActivityManager.descriptor);
1925        data.writeStrongBinder(token);
1926        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1927        reply.readException();
1928        data.recycle();
1929        reply.recycle();
1930    }
1931    public String getCallingPackage(IBinder token) throws RemoteException
1932    {
1933        Parcel data = Parcel.obtain();
1934        Parcel reply = Parcel.obtain();
1935        data.writeInterfaceToken(IActivityManager.descriptor);
1936        data.writeStrongBinder(token);
1937        mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
1938        reply.readException();
1939        String res = reply.readString();
1940        data.recycle();
1941        reply.recycle();
1942        return res;
1943    }
1944    public ComponentName getCallingActivity(IBinder token)
1945            throws RemoteException {
1946        Parcel data = Parcel.obtain();
1947        Parcel reply = Parcel.obtain();
1948        data.writeInterfaceToken(IActivityManager.descriptor);
1949        data.writeStrongBinder(token);
1950        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
1951        reply.readException();
1952        ComponentName res = ComponentName.readFromParcel(reply);
1953        data.recycle();
1954        reply.recycle();
1955        return res;
1956    }
1957    public List getTasks(int maxNum, int flags,
1958            IThumbnailReceiver receiver) throws RemoteException {
1959        Parcel data = Parcel.obtain();
1960        Parcel reply = Parcel.obtain();
1961        data.writeInterfaceToken(IActivityManager.descriptor);
1962        data.writeInt(maxNum);
1963        data.writeInt(flags);
1964        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1965        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
1966        reply.readException();
1967        ArrayList list = null;
1968        int N = reply.readInt();
1969        if (N >= 0) {
1970            list = new ArrayList();
1971            while (N > 0) {
1972                ActivityManager.RunningTaskInfo info =
1973                        ActivityManager.RunningTaskInfo.CREATOR
1974                        .createFromParcel(reply);
1975                list.add(info);
1976                N--;
1977            }
1978        }
1979        data.recycle();
1980        reply.recycle();
1981        return list;
1982    }
1983    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
1984            int flags) throws RemoteException {
1985        Parcel data = Parcel.obtain();
1986        Parcel reply = Parcel.obtain();
1987        data.writeInterfaceToken(IActivityManager.descriptor);
1988        data.writeInt(maxNum);
1989        data.writeInt(flags);
1990        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
1991        reply.readException();
1992        ArrayList<ActivityManager.RecentTaskInfo> list
1993            = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
1994        data.recycle();
1995        reply.recycle();
1996        return list;
1997    }
1998    public ActivityManager.TaskThumbnails getTaskThumbnails(int id) throws RemoteException {
1999        Parcel data = Parcel.obtain();
2000        Parcel reply = Parcel.obtain();
2001        data.writeInterfaceToken(IActivityManager.descriptor);
2002        data.writeInt(id);
2003        mRemote.transact(GET_TASK_THUMBNAILS_TRANSACTION, data, reply, 0);
2004        reply.readException();
2005        ActivityManager.TaskThumbnails bm = null;
2006        if (reply.readInt() != 0) {
2007            bm = ActivityManager.TaskThumbnails.CREATOR.createFromParcel(reply);
2008        }
2009        data.recycle();
2010        reply.recycle();
2011        return bm;
2012    }
2013    public List getServices(int maxNum, int flags) throws RemoteException {
2014        Parcel data = Parcel.obtain();
2015        Parcel reply = Parcel.obtain();
2016        data.writeInterfaceToken(IActivityManager.descriptor);
2017        data.writeInt(maxNum);
2018        data.writeInt(flags);
2019        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
2020        reply.readException();
2021        ArrayList list = null;
2022        int N = reply.readInt();
2023        if (N >= 0) {
2024            list = new ArrayList();
2025            while (N > 0) {
2026                ActivityManager.RunningServiceInfo info =
2027                        ActivityManager.RunningServiceInfo.CREATOR
2028                        .createFromParcel(reply);
2029                list.add(info);
2030                N--;
2031            }
2032        }
2033        data.recycle();
2034        reply.recycle();
2035        return list;
2036    }
2037    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
2038            throws RemoteException {
2039        Parcel data = Parcel.obtain();
2040        Parcel reply = Parcel.obtain();
2041        data.writeInterfaceToken(IActivityManager.descriptor);
2042        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
2043        reply.readException();
2044        ArrayList<ActivityManager.ProcessErrorStateInfo> list
2045            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
2046        data.recycle();
2047        reply.recycle();
2048        return list;
2049    }
2050    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
2051            throws RemoteException {
2052        Parcel data = Parcel.obtain();
2053        Parcel reply = Parcel.obtain();
2054        data.writeInterfaceToken(IActivityManager.descriptor);
2055        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
2056        reply.readException();
2057        ArrayList<ActivityManager.RunningAppProcessInfo> list
2058        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
2059        data.recycle();
2060        reply.recycle();
2061        return list;
2062    }
2063    public List<ApplicationInfo> getRunningExternalApplications()
2064            throws RemoteException {
2065        Parcel data = Parcel.obtain();
2066        Parcel reply = Parcel.obtain();
2067        data.writeInterfaceToken(IActivityManager.descriptor);
2068        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
2069        reply.readException();
2070        ArrayList<ApplicationInfo> list
2071        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
2072        data.recycle();
2073        reply.recycle();
2074        return list;
2075    }
2076    public void moveTaskToFront(int task, int flags) throws RemoteException
2077    {
2078        Parcel data = Parcel.obtain();
2079        Parcel reply = Parcel.obtain();
2080        data.writeInterfaceToken(IActivityManager.descriptor);
2081        data.writeInt(task);
2082        data.writeInt(flags);
2083        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
2084        reply.readException();
2085        data.recycle();
2086        reply.recycle();
2087    }
2088    public void moveTaskToBack(int task) throws RemoteException
2089    {
2090        Parcel data = Parcel.obtain();
2091        Parcel reply = Parcel.obtain();
2092        data.writeInterfaceToken(IActivityManager.descriptor);
2093        data.writeInt(task);
2094        mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
2095        reply.readException();
2096        data.recycle();
2097        reply.recycle();
2098    }
2099    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
2100            throws RemoteException {
2101        Parcel data = Parcel.obtain();
2102        Parcel reply = Parcel.obtain();
2103        data.writeInterfaceToken(IActivityManager.descriptor);
2104        data.writeStrongBinder(token);
2105        data.writeInt(nonRoot ? 1 : 0);
2106        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
2107        reply.readException();
2108        boolean res = reply.readInt() != 0;
2109        data.recycle();
2110        reply.recycle();
2111        return res;
2112    }
2113    public void moveTaskBackwards(int task) throws RemoteException
2114    {
2115        Parcel data = Parcel.obtain();
2116        Parcel reply = Parcel.obtain();
2117        data.writeInterfaceToken(IActivityManager.descriptor);
2118        data.writeInt(task);
2119        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
2120        reply.readException();
2121        data.recycle();
2122        reply.recycle();
2123    }
2124    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
2125    {
2126        Parcel data = Parcel.obtain();
2127        Parcel reply = Parcel.obtain();
2128        data.writeInterfaceToken(IActivityManager.descriptor);
2129        data.writeStrongBinder(token);
2130        data.writeInt(onlyRoot ? 1 : 0);
2131        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
2132        reply.readException();
2133        int res = reply.readInt();
2134        data.recycle();
2135        reply.recycle();
2136        return res;
2137    }
2138    public void finishOtherInstances(IBinder token, ComponentName className) throws RemoteException
2139    {
2140        Parcel data = Parcel.obtain();
2141        Parcel reply = Parcel.obtain();
2142        data.writeInterfaceToken(IActivityManager.descriptor);
2143        data.writeStrongBinder(token);
2144        ComponentName.writeToParcel(className, data);
2145        mRemote.transact(FINISH_OTHER_INSTANCES_TRANSACTION, data, reply, 0);
2146        reply.readException();
2147        data.recycle();
2148        reply.recycle();
2149    }
2150    public void reportThumbnail(IBinder token,
2151                                Bitmap thumbnail, CharSequence description) throws RemoteException
2152    {
2153        Parcel data = Parcel.obtain();
2154        Parcel reply = Parcel.obtain();
2155        data.writeInterfaceToken(IActivityManager.descriptor);
2156        data.writeStrongBinder(token);
2157        if (thumbnail != null) {
2158            data.writeInt(1);
2159            thumbnail.writeToParcel(data, 0);
2160        } else {
2161            data.writeInt(0);
2162        }
2163        TextUtils.writeToParcel(description, data, 0);
2164        mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2165        reply.readException();
2166        data.recycle();
2167        reply.recycle();
2168    }
2169    public ContentProviderHolder getContentProvider(IApplicationThread caller,
2170                                                    String name) throws RemoteException
2171    {
2172        Parcel data = Parcel.obtain();
2173        Parcel reply = Parcel.obtain();
2174        data.writeInterfaceToken(IActivityManager.descriptor);
2175        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2176        data.writeString(name);
2177        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
2178        reply.readException();
2179        int res = reply.readInt();
2180        ContentProviderHolder cph = null;
2181        if (res != 0) {
2182            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
2183        }
2184        data.recycle();
2185        reply.recycle();
2186        return cph;
2187    }
2188    public void publishContentProviders(IApplicationThread caller,
2189                                        List<ContentProviderHolder> providers) throws RemoteException
2190    {
2191        Parcel data = Parcel.obtain();
2192        Parcel reply = Parcel.obtain();
2193        data.writeInterfaceToken(IActivityManager.descriptor);
2194        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2195        data.writeTypedList(providers);
2196        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
2197        reply.readException();
2198        data.recycle();
2199        reply.recycle();
2200    }
2201
2202    public void removeContentProvider(IApplicationThread caller,
2203            String name) throws RemoteException {
2204        Parcel data = Parcel.obtain();
2205        Parcel reply = Parcel.obtain();
2206        data.writeInterfaceToken(IActivityManager.descriptor);
2207        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2208        data.writeString(name);
2209        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
2210        reply.readException();
2211        data.recycle();
2212        reply.recycle();
2213    }
2214
2215    public PendingIntent getRunningServiceControlPanel(ComponentName service)
2216            throws RemoteException
2217    {
2218        Parcel data = Parcel.obtain();
2219        Parcel reply = Parcel.obtain();
2220        data.writeInterfaceToken(IActivityManager.descriptor);
2221        service.writeToParcel(data, 0);
2222        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
2223        reply.readException();
2224        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
2225        data.recycle();
2226        reply.recycle();
2227        return res;
2228    }
2229
2230    public ComponentName startService(IApplicationThread caller, Intent service,
2231            String resolvedType) throws RemoteException
2232    {
2233        Parcel data = Parcel.obtain();
2234        Parcel reply = Parcel.obtain();
2235        data.writeInterfaceToken(IActivityManager.descriptor);
2236        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2237        service.writeToParcel(data, 0);
2238        data.writeString(resolvedType);
2239        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
2240        reply.readException();
2241        ComponentName res = ComponentName.readFromParcel(reply);
2242        data.recycle();
2243        reply.recycle();
2244        return res;
2245    }
2246    public int stopService(IApplicationThread caller, Intent service,
2247            String resolvedType) throws RemoteException
2248    {
2249        Parcel data = Parcel.obtain();
2250        Parcel reply = Parcel.obtain();
2251        data.writeInterfaceToken(IActivityManager.descriptor);
2252        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2253        service.writeToParcel(data, 0);
2254        data.writeString(resolvedType);
2255        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
2256        reply.readException();
2257        int res = reply.readInt();
2258        reply.recycle();
2259        data.recycle();
2260        return res;
2261    }
2262    public boolean stopServiceToken(ComponentName className, IBinder token,
2263            int startId) throws RemoteException {
2264        Parcel data = Parcel.obtain();
2265        Parcel reply = Parcel.obtain();
2266        data.writeInterfaceToken(IActivityManager.descriptor);
2267        ComponentName.writeToParcel(className, data);
2268        data.writeStrongBinder(token);
2269        data.writeInt(startId);
2270        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
2271        reply.readException();
2272        boolean res = reply.readInt() != 0;
2273        data.recycle();
2274        reply.recycle();
2275        return res;
2276    }
2277    public void setServiceForeground(ComponentName className, IBinder token,
2278            int id, Notification notification, boolean removeNotification) throws RemoteException {
2279        Parcel data = Parcel.obtain();
2280        Parcel reply = Parcel.obtain();
2281        data.writeInterfaceToken(IActivityManager.descriptor);
2282        ComponentName.writeToParcel(className, data);
2283        data.writeStrongBinder(token);
2284        data.writeInt(id);
2285        if (notification != null) {
2286            data.writeInt(1);
2287            notification.writeToParcel(data, 0);
2288        } else {
2289            data.writeInt(0);
2290        }
2291        data.writeInt(removeNotification ? 1 : 0);
2292        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
2293        reply.readException();
2294        data.recycle();
2295        reply.recycle();
2296    }
2297    public int bindService(IApplicationThread caller, IBinder token,
2298            Intent service, String resolvedType, IServiceConnection connection,
2299            int flags) throws RemoteException {
2300        Parcel data = Parcel.obtain();
2301        Parcel reply = Parcel.obtain();
2302        data.writeInterfaceToken(IActivityManager.descriptor);
2303        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2304        data.writeStrongBinder(token);
2305        service.writeToParcel(data, 0);
2306        data.writeString(resolvedType);
2307        data.writeStrongBinder(connection.asBinder());
2308        data.writeInt(flags);
2309        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
2310        reply.readException();
2311        int res = reply.readInt();
2312        data.recycle();
2313        reply.recycle();
2314        return res;
2315    }
2316    public boolean unbindService(IServiceConnection connection) throws RemoteException
2317    {
2318        Parcel data = Parcel.obtain();
2319        Parcel reply = Parcel.obtain();
2320        data.writeInterfaceToken(IActivityManager.descriptor);
2321        data.writeStrongBinder(connection.asBinder());
2322        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
2323        reply.readException();
2324        boolean res = reply.readInt() != 0;
2325        data.recycle();
2326        reply.recycle();
2327        return res;
2328    }
2329
2330    public void publishService(IBinder token,
2331            Intent intent, IBinder service) throws RemoteException {
2332        Parcel data = Parcel.obtain();
2333        Parcel reply = Parcel.obtain();
2334        data.writeInterfaceToken(IActivityManager.descriptor);
2335        data.writeStrongBinder(token);
2336        intent.writeToParcel(data, 0);
2337        data.writeStrongBinder(service);
2338        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
2339        reply.readException();
2340        data.recycle();
2341        reply.recycle();
2342    }
2343
2344    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
2345            throws RemoteException {
2346        Parcel data = Parcel.obtain();
2347        Parcel reply = Parcel.obtain();
2348        data.writeInterfaceToken(IActivityManager.descriptor);
2349        data.writeStrongBinder(token);
2350        intent.writeToParcel(data, 0);
2351        data.writeInt(doRebind ? 1 : 0);
2352        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
2353        reply.readException();
2354        data.recycle();
2355        reply.recycle();
2356    }
2357
2358    public void serviceDoneExecuting(IBinder token, int type, int startId,
2359            int res) throws RemoteException {
2360        Parcel data = Parcel.obtain();
2361        Parcel reply = Parcel.obtain();
2362        data.writeInterfaceToken(IActivityManager.descriptor);
2363        data.writeStrongBinder(token);
2364        data.writeInt(type);
2365        data.writeInt(startId);
2366        data.writeInt(res);
2367        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2368        reply.readException();
2369        data.recycle();
2370        reply.recycle();
2371    }
2372
2373    public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
2374        Parcel data = Parcel.obtain();
2375        Parcel reply = Parcel.obtain();
2376        data.writeInterfaceToken(IActivityManager.descriptor);
2377        service.writeToParcel(data, 0);
2378        data.writeString(resolvedType);
2379        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
2380        reply.readException();
2381        IBinder binder = reply.readStrongBinder();
2382        reply.recycle();
2383        data.recycle();
2384        return binder;
2385    }
2386
2387    public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
2388            throws RemoteException {
2389        Parcel data = Parcel.obtain();
2390        Parcel reply = Parcel.obtain();
2391        data.writeInterfaceToken(IActivityManager.descriptor);
2392        app.writeToParcel(data, 0);
2393        data.writeInt(backupRestoreMode);
2394        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
2395        reply.readException();
2396        boolean success = reply.readInt() != 0;
2397        reply.recycle();
2398        data.recycle();
2399        return success;
2400    }
2401
2402    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
2403        Parcel data = Parcel.obtain();
2404        Parcel reply = Parcel.obtain();
2405        data.writeInterfaceToken(IActivityManager.descriptor);
2406        data.writeString(packageName);
2407        data.writeStrongBinder(agent);
2408        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
2409        reply.recycle();
2410        data.recycle();
2411    }
2412
2413    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
2414        Parcel data = Parcel.obtain();
2415        Parcel reply = Parcel.obtain();
2416        data.writeInterfaceToken(IActivityManager.descriptor);
2417        app.writeToParcel(data, 0);
2418        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
2419        reply.readException();
2420        reply.recycle();
2421        data.recycle();
2422    }
2423
2424    public boolean startInstrumentation(ComponentName className, String profileFile,
2425            int flags, Bundle arguments, IInstrumentationWatcher watcher)
2426            throws RemoteException {
2427        Parcel data = Parcel.obtain();
2428        Parcel reply = Parcel.obtain();
2429        data.writeInterfaceToken(IActivityManager.descriptor);
2430        ComponentName.writeToParcel(className, data);
2431        data.writeString(profileFile);
2432        data.writeInt(flags);
2433        data.writeBundle(arguments);
2434        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2435        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
2436        reply.readException();
2437        boolean res = reply.readInt() != 0;
2438        reply.recycle();
2439        data.recycle();
2440        return res;
2441    }
2442
2443    public void finishInstrumentation(IApplicationThread target,
2444            int resultCode, Bundle results) throws RemoteException {
2445        Parcel data = Parcel.obtain();
2446        Parcel reply = Parcel.obtain();
2447        data.writeInterfaceToken(IActivityManager.descriptor);
2448        data.writeStrongBinder(target != null ? target.asBinder() : null);
2449        data.writeInt(resultCode);
2450        data.writeBundle(results);
2451        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
2452        reply.readException();
2453        data.recycle();
2454        reply.recycle();
2455    }
2456    public Configuration getConfiguration() throws RemoteException
2457    {
2458        Parcel data = Parcel.obtain();
2459        Parcel reply = Parcel.obtain();
2460        data.writeInterfaceToken(IActivityManager.descriptor);
2461        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
2462        reply.readException();
2463        Configuration res = Configuration.CREATOR.createFromParcel(reply);
2464        reply.recycle();
2465        data.recycle();
2466        return res;
2467    }
2468    public void updateConfiguration(Configuration values) throws RemoteException
2469    {
2470        Parcel data = Parcel.obtain();
2471        Parcel reply = Parcel.obtain();
2472        data.writeInterfaceToken(IActivityManager.descriptor);
2473        values.writeToParcel(data, 0);
2474        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
2475        reply.readException();
2476        data.recycle();
2477        reply.recycle();
2478    }
2479    public void setRequestedOrientation(IBinder token, int requestedOrientation)
2480            throws RemoteException {
2481        Parcel data = Parcel.obtain();
2482        Parcel reply = Parcel.obtain();
2483        data.writeInterfaceToken(IActivityManager.descriptor);
2484        data.writeStrongBinder(token);
2485        data.writeInt(requestedOrientation);
2486        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
2487        reply.readException();
2488        data.recycle();
2489        reply.recycle();
2490    }
2491    public int getRequestedOrientation(IBinder token) throws RemoteException {
2492        Parcel data = Parcel.obtain();
2493        Parcel reply = Parcel.obtain();
2494        data.writeInterfaceToken(IActivityManager.descriptor);
2495        data.writeStrongBinder(token);
2496        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
2497        reply.readException();
2498        int res = reply.readInt();
2499        data.recycle();
2500        reply.recycle();
2501        return res;
2502    }
2503    public ComponentName getActivityClassForToken(IBinder token)
2504            throws RemoteException {
2505        Parcel data = Parcel.obtain();
2506        Parcel reply = Parcel.obtain();
2507        data.writeInterfaceToken(IActivityManager.descriptor);
2508        data.writeStrongBinder(token);
2509        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
2510        reply.readException();
2511        ComponentName res = ComponentName.readFromParcel(reply);
2512        data.recycle();
2513        reply.recycle();
2514        return res;
2515    }
2516    public String getPackageForToken(IBinder token) throws RemoteException
2517    {
2518        Parcel data = Parcel.obtain();
2519        Parcel reply = Parcel.obtain();
2520        data.writeInterfaceToken(IActivityManager.descriptor);
2521        data.writeStrongBinder(token);
2522        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
2523        reply.readException();
2524        String res = reply.readString();
2525        data.recycle();
2526        reply.recycle();
2527        return res;
2528    }
2529    public IIntentSender getIntentSender(int type,
2530            String packageName, IBinder token, String resultWho,
2531            int requestCode, Intent[] intents, String[] resolvedTypes, int flags)
2532            throws RemoteException {
2533        Parcel data = Parcel.obtain();
2534        Parcel reply = Parcel.obtain();
2535        data.writeInterfaceToken(IActivityManager.descriptor);
2536        data.writeInt(type);
2537        data.writeString(packageName);
2538        data.writeStrongBinder(token);
2539        data.writeString(resultWho);
2540        data.writeInt(requestCode);
2541        if (intents != null) {
2542            data.writeInt(1);
2543            data.writeTypedArray(intents, 0);
2544            data.writeStringArray(resolvedTypes);
2545        } else {
2546            data.writeInt(0);
2547        }
2548        data.writeInt(flags);
2549        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
2550        reply.readException();
2551        IIntentSender res = IIntentSender.Stub.asInterface(
2552            reply.readStrongBinder());
2553        data.recycle();
2554        reply.recycle();
2555        return res;
2556    }
2557    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
2558        Parcel data = Parcel.obtain();
2559        Parcel reply = Parcel.obtain();
2560        data.writeInterfaceToken(IActivityManager.descriptor);
2561        data.writeStrongBinder(sender.asBinder());
2562        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
2563        reply.readException();
2564        data.recycle();
2565        reply.recycle();
2566    }
2567    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
2568        Parcel data = Parcel.obtain();
2569        Parcel reply = Parcel.obtain();
2570        data.writeInterfaceToken(IActivityManager.descriptor);
2571        data.writeStrongBinder(sender.asBinder());
2572        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
2573        reply.readException();
2574        String res = reply.readString();
2575        data.recycle();
2576        reply.recycle();
2577        return res;
2578    }
2579    public void setProcessLimit(int max) throws RemoteException
2580    {
2581        Parcel data = Parcel.obtain();
2582        Parcel reply = Parcel.obtain();
2583        data.writeInterfaceToken(IActivityManager.descriptor);
2584        data.writeInt(max);
2585        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2586        reply.readException();
2587        data.recycle();
2588        reply.recycle();
2589    }
2590    public int getProcessLimit() throws RemoteException
2591    {
2592        Parcel data = Parcel.obtain();
2593        Parcel reply = Parcel.obtain();
2594        data.writeInterfaceToken(IActivityManager.descriptor);
2595        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2596        reply.readException();
2597        int res = reply.readInt();
2598        data.recycle();
2599        reply.recycle();
2600        return res;
2601    }
2602    public void setProcessForeground(IBinder token, int pid,
2603            boolean isForeground) throws RemoteException {
2604        Parcel data = Parcel.obtain();
2605        Parcel reply = Parcel.obtain();
2606        data.writeInterfaceToken(IActivityManager.descriptor);
2607        data.writeStrongBinder(token);
2608        data.writeInt(pid);
2609        data.writeInt(isForeground ? 1 : 0);
2610        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
2611        reply.readException();
2612        data.recycle();
2613        reply.recycle();
2614    }
2615    public int checkPermission(String permission, int pid, int uid)
2616            throws RemoteException {
2617        Parcel data = Parcel.obtain();
2618        Parcel reply = Parcel.obtain();
2619        data.writeInterfaceToken(IActivityManager.descriptor);
2620        data.writeString(permission);
2621        data.writeInt(pid);
2622        data.writeInt(uid);
2623        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
2624        reply.readException();
2625        int res = reply.readInt();
2626        data.recycle();
2627        reply.recycle();
2628        return res;
2629    }
2630    public boolean clearApplicationUserData(final String packageName,
2631            final IPackageDataObserver observer) throws RemoteException {
2632        Parcel data = Parcel.obtain();
2633        Parcel reply = Parcel.obtain();
2634        data.writeInterfaceToken(IActivityManager.descriptor);
2635        data.writeString(packageName);
2636        data.writeStrongBinder(observer.asBinder());
2637        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
2638        reply.readException();
2639        boolean res = reply.readInt() != 0;
2640        data.recycle();
2641        reply.recycle();
2642        return res;
2643    }
2644    public int checkUriPermission(Uri uri, int pid, int uid, int mode)
2645            throws RemoteException {
2646        Parcel data = Parcel.obtain();
2647        Parcel reply = Parcel.obtain();
2648        data.writeInterfaceToken(IActivityManager.descriptor);
2649        uri.writeToParcel(data, 0);
2650        data.writeInt(pid);
2651        data.writeInt(uid);
2652        data.writeInt(mode);
2653        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
2654        reply.readException();
2655        int res = reply.readInt();
2656        data.recycle();
2657        reply.recycle();
2658        return res;
2659    }
2660    public void grantUriPermission(IApplicationThread caller, String targetPkg,
2661            Uri uri, int mode) throws RemoteException {
2662        Parcel data = Parcel.obtain();
2663        Parcel reply = Parcel.obtain();
2664        data.writeInterfaceToken(IActivityManager.descriptor);
2665        data.writeStrongBinder(caller.asBinder());
2666        data.writeString(targetPkg);
2667        uri.writeToParcel(data, 0);
2668        data.writeInt(mode);
2669        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
2670        reply.readException();
2671        data.recycle();
2672        reply.recycle();
2673    }
2674    public void revokeUriPermission(IApplicationThread caller, Uri uri,
2675            int mode) throws RemoteException {
2676        Parcel data = Parcel.obtain();
2677        Parcel reply = Parcel.obtain();
2678        data.writeInterfaceToken(IActivityManager.descriptor);
2679        data.writeStrongBinder(caller.asBinder());
2680        uri.writeToParcel(data, 0);
2681        data.writeInt(mode);
2682        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
2683        reply.readException();
2684        data.recycle();
2685        reply.recycle();
2686    }
2687    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
2688            throws RemoteException {
2689        Parcel data = Parcel.obtain();
2690        Parcel reply = Parcel.obtain();
2691        data.writeInterfaceToken(IActivityManager.descriptor);
2692        data.writeStrongBinder(who.asBinder());
2693        data.writeInt(waiting ? 1 : 0);
2694        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
2695        reply.readException();
2696        data.recycle();
2697        reply.recycle();
2698    }
2699    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
2700        Parcel data = Parcel.obtain();
2701        Parcel reply = Parcel.obtain();
2702        data.writeInterfaceToken(IActivityManager.descriptor);
2703        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
2704        reply.readException();
2705        outInfo.readFromParcel(reply);
2706        data.recycle();
2707        reply.recycle();
2708    }
2709    public void unhandledBack() throws RemoteException
2710    {
2711        Parcel data = Parcel.obtain();
2712        Parcel reply = Parcel.obtain();
2713        data.writeInterfaceToken(IActivityManager.descriptor);
2714        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
2715        reply.readException();
2716        data.recycle();
2717        reply.recycle();
2718    }
2719    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
2720    {
2721        Parcel data = Parcel.obtain();
2722        Parcel reply = Parcel.obtain();
2723        data.writeInterfaceToken(IActivityManager.descriptor);
2724        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
2725        reply.readException();
2726        ParcelFileDescriptor pfd = null;
2727        if (reply.readInt() != 0) {
2728            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
2729        }
2730        data.recycle();
2731        reply.recycle();
2732        return pfd;
2733    }
2734    public void goingToSleep() throws RemoteException
2735    {
2736        Parcel data = Parcel.obtain();
2737        Parcel reply = Parcel.obtain();
2738        data.writeInterfaceToken(IActivityManager.descriptor);
2739        mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0);
2740        reply.readException();
2741        data.recycle();
2742        reply.recycle();
2743    }
2744    public void wakingUp() throws RemoteException
2745    {
2746        Parcel data = Parcel.obtain();
2747        Parcel reply = Parcel.obtain();
2748        data.writeInterfaceToken(IActivityManager.descriptor);
2749        mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0);
2750        reply.readException();
2751        data.recycle();
2752        reply.recycle();
2753    }
2754    public void setDebugApp(
2755        String packageName, boolean waitForDebugger, boolean persistent)
2756        throws RemoteException
2757    {
2758        Parcel data = Parcel.obtain();
2759        Parcel reply = Parcel.obtain();
2760        data.writeInterfaceToken(IActivityManager.descriptor);
2761        data.writeString(packageName);
2762        data.writeInt(waitForDebugger ? 1 : 0);
2763        data.writeInt(persistent ? 1 : 0);
2764        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
2765        reply.readException();
2766        data.recycle();
2767        reply.recycle();
2768    }
2769    public void setAlwaysFinish(boolean enabled) throws RemoteException
2770    {
2771        Parcel data = Parcel.obtain();
2772        Parcel reply = Parcel.obtain();
2773        data.writeInterfaceToken(IActivityManager.descriptor);
2774        data.writeInt(enabled ? 1 : 0);
2775        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
2776        reply.readException();
2777        data.recycle();
2778        reply.recycle();
2779    }
2780    public void setActivityController(IActivityController watcher) throws RemoteException
2781    {
2782        Parcel data = Parcel.obtain();
2783        Parcel reply = Parcel.obtain();
2784        data.writeInterfaceToken(IActivityManager.descriptor);
2785        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2786        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
2787        reply.readException();
2788        data.recycle();
2789        reply.recycle();
2790    }
2791    public void enterSafeMode() throws RemoteException {
2792        Parcel data = Parcel.obtain();
2793        data.writeInterfaceToken(IActivityManager.descriptor);
2794        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
2795        data.recycle();
2796    }
2797    public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
2798        Parcel data = Parcel.obtain();
2799        data.writeStrongBinder(sender.asBinder());
2800        data.writeInterfaceToken(IActivityManager.descriptor);
2801        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
2802        data.recycle();
2803    }
2804    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
2805        Parcel data = Parcel.obtain();
2806        Parcel reply = Parcel.obtain();
2807        data.writeInterfaceToken(IActivityManager.descriptor);
2808        data.writeIntArray(pids);
2809        data.writeString(reason);
2810        data.writeInt(secure ? 1 : 0);
2811        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
2812        boolean res = reply.readInt() != 0;
2813        data.recycle();
2814        reply.recycle();
2815        return res;
2816    }
2817    public void startRunning(String pkg, String cls, String action,
2818            String indata) throws RemoteException {
2819        Parcel data = Parcel.obtain();
2820        Parcel reply = Parcel.obtain();
2821        data.writeInterfaceToken(IActivityManager.descriptor);
2822        data.writeString(pkg);
2823        data.writeString(cls);
2824        data.writeString(action);
2825        data.writeString(indata);
2826        mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0);
2827        reply.readException();
2828        data.recycle();
2829        reply.recycle();
2830    }
2831    public boolean testIsSystemReady()
2832    {
2833        /* this base class version is never called */
2834        return true;
2835    }
2836    public void handleApplicationCrash(IBinder app,
2837            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
2838    {
2839        Parcel data = Parcel.obtain();
2840        Parcel reply = Parcel.obtain();
2841        data.writeInterfaceToken(IActivityManager.descriptor);
2842        data.writeStrongBinder(app);
2843        crashInfo.writeToParcel(data, 0);
2844        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
2845        reply.readException();
2846        reply.recycle();
2847        data.recycle();
2848    }
2849
2850    public boolean handleApplicationWtf(IBinder app, String tag,
2851            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
2852    {
2853        Parcel data = Parcel.obtain();
2854        Parcel reply = Parcel.obtain();
2855        data.writeInterfaceToken(IActivityManager.descriptor);
2856        data.writeStrongBinder(app);
2857        data.writeString(tag);
2858        crashInfo.writeToParcel(data, 0);
2859        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
2860        reply.readException();
2861        boolean res = reply.readInt() != 0;
2862        reply.recycle();
2863        data.recycle();
2864        return res;
2865    }
2866
2867    public void handleApplicationStrictModeViolation(IBinder app,
2868            int violationMask,
2869            StrictMode.ViolationInfo info) throws RemoteException
2870    {
2871        Parcel data = Parcel.obtain();
2872        Parcel reply = Parcel.obtain();
2873        data.writeInterfaceToken(IActivityManager.descriptor);
2874        data.writeStrongBinder(app);
2875        data.writeInt(violationMask);
2876        info.writeToParcel(data, 0);
2877        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
2878        reply.readException();
2879        reply.recycle();
2880        data.recycle();
2881    }
2882
2883    public void signalPersistentProcesses(int sig) throws RemoteException {
2884        Parcel data = Parcel.obtain();
2885        Parcel reply = Parcel.obtain();
2886        data.writeInterfaceToken(IActivityManager.descriptor);
2887        data.writeInt(sig);
2888        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
2889        reply.readException();
2890        data.recycle();
2891        reply.recycle();
2892    }
2893
2894    public void killBackgroundProcesses(String packageName) throws RemoteException {
2895        Parcel data = Parcel.obtain();
2896        Parcel reply = Parcel.obtain();
2897        data.writeInterfaceToken(IActivityManager.descriptor);
2898        data.writeString(packageName);
2899        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
2900        reply.readException();
2901        data.recycle();
2902        reply.recycle();
2903    }
2904
2905    public void forceStopPackage(String packageName) throws RemoteException {
2906        Parcel data = Parcel.obtain();
2907        Parcel reply = Parcel.obtain();
2908        data.writeInterfaceToken(IActivityManager.descriptor);
2909        data.writeString(packageName);
2910        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
2911        reply.readException();
2912        data.recycle();
2913        reply.recycle();
2914    }
2915
2916    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
2917    {
2918        Parcel data = Parcel.obtain();
2919        Parcel reply = Parcel.obtain();
2920        data.writeInterfaceToken(IActivityManager.descriptor);
2921        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
2922        reply.readException();
2923        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
2924        reply.recycle();
2925        data.recycle();
2926        return res;
2927    }
2928
2929    public boolean profileControl(String process, boolean start,
2930            String path, ParcelFileDescriptor fd, int profileType) throws RemoteException
2931    {
2932        Parcel data = Parcel.obtain();
2933        Parcel reply = Parcel.obtain();
2934        data.writeInterfaceToken(IActivityManager.descriptor);
2935        data.writeString(process);
2936        data.writeInt(start ? 1 : 0);
2937        data.writeInt(profileType);
2938        data.writeString(path);
2939        if (fd != null) {
2940            data.writeInt(1);
2941            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2942        } else {
2943            data.writeInt(0);
2944        }
2945        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
2946        reply.readException();
2947        boolean res = reply.readInt() != 0;
2948        reply.recycle();
2949        data.recycle();
2950        return res;
2951    }
2952
2953    public boolean shutdown(int timeout) throws RemoteException
2954    {
2955        Parcel data = Parcel.obtain();
2956        Parcel reply = Parcel.obtain();
2957        data.writeInterfaceToken(IActivityManager.descriptor);
2958        data.writeInt(timeout);
2959        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
2960        reply.readException();
2961        boolean res = reply.readInt() != 0;
2962        reply.recycle();
2963        data.recycle();
2964        return res;
2965    }
2966
2967    public void stopAppSwitches() throws RemoteException {
2968        Parcel data = Parcel.obtain();
2969        Parcel reply = Parcel.obtain();
2970        data.writeInterfaceToken(IActivityManager.descriptor);
2971        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
2972        reply.readException();
2973        reply.recycle();
2974        data.recycle();
2975    }
2976
2977    public void resumeAppSwitches() throws RemoteException {
2978        Parcel data = Parcel.obtain();
2979        Parcel reply = Parcel.obtain();
2980        data.writeInterfaceToken(IActivityManager.descriptor);
2981        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
2982        reply.readException();
2983        reply.recycle();
2984        data.recycle();
2985    }
2986
2987    public void registerActivityWatcher(IActivityWatcher watcher)
2988            throws RemoteException {
2989        Parcel data = Parcel.obtain();
2990        Parcel reply = Parcel.obtain();
2991        data.writeInterfaceToken(IActivityManager.descriptor);
2992        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2993        mRemote.transact(REGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2994        reply.readException();
2995        data.recycle();
2996        reply.recycle();
2997    }
2998
2999    public void unregisterActivityWatcher(IActivityWatcher watcher)
3000            throws RemoteException {
3001        Parcel data = Parcel.obtain();
3002        Parcel reply = Parcel.obtain();
3003        data.writeInterfaceToken(IActivityManager.descriptor);
3004        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
3005        mRemote.transact(UNREGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
3006        reply.readException();
3007        data.recycle();
3008        reply.recycle();
3009    }
3010
3011    public int startActivityInPackage(int uid,
3012            Intent intent, String resolvedType, IBinder resultTo,
3013            String resultWho, int requestCode, boolean onlyIfNeeded)
3014            throws RemoteException {
3015        Parcel data = Parcel.obtain();
3016        Parcel reply = Parcel.obtain();
3017        data.writeInterfaceToken(IActivityManager.descriptor);
3018        data.writeInt(uid);
3019        intent.writeToParcel(data, 0);
3020        data.writeString(resolvedType);
3021        data.writeStrongBinder(resultTo);
3022        data.writeString(resultWho);
3023        data.writeInt(requestCode);
3024        data.writeInt(onlyIfNeeded ? 1 : 0);
3025        mRemote.transact(START_ACTIVITY_IN_PACKAGE_TRANSACTION, data, reply, 0);
3026        reply.readException();
3027        int result = reply.readInt();
3028        reply.recycle();
3029        data.recycle();
3030        return result;
3031    }
3032
3033    public void killApplicationWithUid(String pkg, int uid) throws RemoteException {
3034        Parcel data = Parcel.obtain();
3035        Parcel reply = Parcel.obtain();
3036        data.writeInterfaceToken(IActivityManager.descriptor);
3037        data.writeString(pkg);
3038        data.writeInt(uid);
3039        mRemote.transact(KILL_APPLICATION_WITH_UID_TRANSACTION, data, reply, 0);
3040        reply.readException();
3041        data.recycle();
3042        reply.recycle();
3043    }
3044
3045    public void closeSystemDialogs(String reason) throws RemoteException {
3046        Parcel data = Parcel.obtain();
3047        Parcel reply = Parcel.obtain();
3048        data.writeInterfaceToken(IActivityManager.descriptor);
3049        data.writeString(reason);
3050        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
3051        reply.readException();
3052        data.recycle();
3053        reply.recycle();
3054    }
3055
3056    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
3057            throws RemoteException {
3058        Parcel data = Parcel.obtain();
3059        Parcel reply = Parcel.obtain();
3060        data.writeInterfaceToken(IActivityManager.descriptor);
3061        data.writeIntArray(pids);
3062        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
3063        reply.readException();
3064        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
3065        data.recycle();
3066        reply.recycle();
3067        return res;
3068    }
3069
3070    public void killApplicationProcess(String processName, int uid) throws RemoteException {
3071        Parcel data = Parcel.obtain();
3072        Parcel reply = Parcel.obtain();
3073        data.writeInterfaceToken(IActivityManager.descriptor);
3074        data.writeString(processName);
3075        data.writeInt(uid);
3076        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
3077        reply.readException();
3078        data.recycle();
3079        reply.recycle();
3080    }
3081
3082    public void overridePendingTransition(IBinder token, String packageName,
3083            int enterAnim, int exitAnim) throws RemoteException {
3084        Parcel data = Parcel.obtain();
3085        Parcel reply = Parcel.obtain();
3086        data.writeInterfaceToken(IActivityManager.descriptor);
3087        data.writeStrongBinder(token);
3088        data.writeString(packageName);
3089        data.writeInt(enterAnim);
3090        data.writeInt(exitAnim);
3091        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
3092        reply.readException();
3093        data.recycle();
3094        reply.recycle();
3095    }
3096
3097    public boolean isUserAMonkey() throws RemoteException {
3098        Parcel data = Parcel.obtain();
3099        Parcel reply = Parcel.obtain();
3100        data.writeInterfaceToken(IActivityManager.descriptor);
3101        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
3102        reply.readException();
3103        boolean res = reply.readInt() != 0;
3104        data.recycle();
3105        reply.recycle();
3106        return res;
3107    }
3108
3109    public void finishHeavyWeightApp() throws RemoteException {
3110        Parcel data = Parcel.obtain();
3111        Parcel reply = Parcel.obtain();
3112        data.writeInterfaceToken(IActivityManager.descriptor);
3113        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
3114        reply.readException();
3115        data.recycle();
3116        reply.recycle();
3117    }
3118
3119    public void setImmersive(IBinder token, boolean immersive)
3120            throws RemoteException {
3121        Parcel data = Parcel.obtain();
3122        Parcel reply = Parcel.obtain();
3123        data.writeInterfaceToken(IActivityManager.descriptor);
3124        data.writeStrongBinder(token);
3125        data.writeInt(immersive ? 1 : 0);
3126        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
3127        reply.readException();
3128        data.recycle();
3129        reply.recycle();
3130    }
3131
3132    public boolean isImmersive(IBinder token)
3133            throws RemoteException {
3134        Parcel data = Parcel.obtain();
3135        Parcel reply = Parcel.obtain();
3136        data.writeInterfaceToken(IActivityManager.descriptor);
3137        data.writeStrongBinder(token);
3138        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
3139        reply.readException();
3140        boolean res = reply.readInt() == 1;
3141        data.recycle();
3142        reply.recycle();
3143        return res;
3144    }
3145
3146    public boolean isTopActivityImmersive()
3147            throws RemoteException {
3148        Parcel data = Parcel.obtain();
3149        Parcel reply = Parcel.obtain();
3150        data.writeInterfaceToken(IActivityManager.descriptor);
3151        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
3152        reply.readException();
3153        boolean res = reply.readInt() == 1;
3154        data.recycle();
3155        reply.recycle();
3156        return res;
3157    }
3158
3159    public void crashApplication(int uid, int initialPid, String packageName,
3160            String message) throws RemoteException {
3161        Parcel data = Parcel.obtain();
3162        Parcel reply = Parcel.obtain();
3163        data.writeInterfaceToken(IActivityManager.descriptor);
3164        data.writeInt(uid);
3165        data.writeInt(initialPid);
3166        data.writeString(packageName);
3167        data.writeString(message);
3168        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
3169        reply.readException();
3170        data.recycle();
3171        reply.recycle();
3172    }
3173
3174    public String getProviderMimeType(Uri uri)
3175            throws RemoteException {
3176        Parcel data = Parcel.obtain();
3177        Parcel reply = Parcel.obtain();
3178        data.writeInterfaceToken(IActivityManager.descriptor);
3179        uri.writeToParcel(data, 0);
3180        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
3181        reply.readException();
3182        String res = reply.readString();
3183        data.recycle();
3184        reply.recycle();
3185        return res;
3186    }
3187
3188    public IBinder newUriPermissionOwner(String name)
3189            throws RemoteException {
3190        Parcel data = Parcel.obtain();
3191        Parcel reply = Parcel.obtain();
3192        data.writeInterfaceToken(IActivityManager.descriptor);
3193        data.writeString(name);
3194        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
3195        reply.readException();
3196        IBinder res = reply.readStrongBinder();
3197        data.recycle();
3198        reply.recycle();
3199        return res;
3200    }
3201
3202    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
3203            Uri uri, int mode) throws RemoteException {
3204        Parcel data = Parcel.obtain();
3205        Parcel reply = Parcel.obtain();
3206        data.writeInterfaceToken(IActivityManager.descriptor);
3207        data.writeStrongBinder(owner);
3208        data.writeInt(fromUid);
3209        data.writeString(targetPkg);
3210        uri.writeToParcel(data, 0);
3211        data.writeInt(mode);
3212        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3213        reply.readException();
3214        data.recycle();
3215        reply.recycle();
3216    }
3217
3218    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
3219            int mode) throws RemoteException {
3220        Parcel data = Parcel.obtain();
3221        Parcel reply = Parcel.obtain();
3222        data.writeInterfaceToken(IActivityManager.descriptor);
3223        data.writeStrongBinder(owner);
3224        if (uri != null) {
3225            data.writeInt(1);
3226            uri.writeToParcel(data, 0);
3227        } else {
3228            data.writeInt(0);
3229        }
3230        data.writeInt(mode);
3231        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3232        reply.readException();
3233        data.recycle();
3234        reply.recycle();
3235    }
3236
3237    public int checkGrantUriPermission(int callingUid, String targetPkg,
3238            Uri uri, int modeFlags) throws RemoteException {
3239        Parcel data = Parcel.obtain();
3240        Parcel reply = Parcel.obtain();
3241        data.writeInterfaceToken(IActivityManager.descriptor);
3242        data.writeInt(callingUid);
3243        data.writeString(targetPkg);
3244        uri.writeToParcel(data, 0);
3245        data.writeInt(modeFlags);
3246        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3247        reply.readException();
3248        int res = reply.readInt();
3249        data.recycle();
3250        reply.recycle();
3251        return res;
3252    }
3253
3254    public boolean dumpHeap(String process, boolean managed,
3255            String path, ParcelFileDescriptor fd) throws RemoteException {
3256        Parcel data = Parcel.obtain();
3257        Parcel reply = Parcel.obtain();
3258        data.writeInterfaceToken(IActivityManager.descriptor);
3259        data.writeString(process);
3260        data.writeInt(managed ? 1 : 0);
3261        data.writeString(path);
3262        if (fd != null) {
3263            data.writeInt(1);
3264            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3265        } else {
3266            data.writeInt(0);
3267        }
3268        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
3269        reply.readException();
3270        boolean res = reply.readInt() != 0;
3271        reply.recycle();
3272        data.recycle();
3273        return res;
3274    }
3275
3276    public int startActivities(IApplicationThread caller,
3277            Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException {
3278        Parcel data = Parcel.obtain();
3279        Parcel reply = Parcel.obtain();
3280        data.writeInterfaceToken(IActivityManager.descriptor);
3281        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3282        data.writeTypedArray(intents, 0);
3283        data.writeStringArray(resolvedTypes);
3284        data.writeStrongBinder(resultTo);
3285        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
3286        reply.readException();
3287        int result = reply.readInt();
3288        reply.recycle();
3289        data.recycle();
3290        return result;
3291    }
3292
3293    public int startActivitiesInPackage(int uid,
3294            Intent[] intents, String[] resolvedTypes, IBinder resultTo) throws RemoteException {
3295        Parcel data = Parcel.obtain();
3296        Parcel reply = Parcel.obtain();
3297        data.writeInterfaceToken(IActivityManager.descriptor);
3298        data.writeInt(uid);
3299        data.writeTypedArray(intents, 0);
3300        data.writeStringArray(resolvedTypes);
3301        data.writeStrongBinder(resultTo);
3302        mRemote.transact(START_ACTIVITIES_IN_PACKAGE_TRANSACTION, data, reply, 0);
3303        reply.readException();
3304        int result = reply.readInt();
3305        reply.recycle();
3306        data.recycle();
3307        return result;
3308    }
3309
3310    public int getFrontActivityScreenCompatMode() throws RemoteException {
3311        Parcel data = Parcel.obtain();
3312        Parcel reply = Parcel.obtain();
3313        data.writeInterfaceToken(IActivityManager.descriptor);
3314        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3315        reply.readException();
3316        int mode = reply.readInt();
3317        reply.recycle();
3318        data.recycle();
3319        return mode;
3320    }
3321
3322    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
3323        Parcel data = Parcel.obtain();
3324        Parcel reply = Parcel.obtain();
3325        data.writeInterfaceToken(IActivityManager.descriptor);
3326        data.writeInt(mode);
3327        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3328        reply.readException();
3329        reply.recycle();
3330        data.recycle();
3331    }
3332
3333    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
3334        Parcel data = Parcel.obtain();
3335        Parcel reply = Parcel.obtain();
3336        data.writeInterfaceToken(IActivityManager.descriptor);
3337        data.writeString(packageName);
3338        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3339        reply.readException();
3340        int mode = reply.readInt();
3341        reply.recycle();
3342        data.recycle();
3343        return mode;
3344    }
3345
3346    public void setPackageScreenCompatMode(String packageName, int mode)
3347            throws RemoteException {
3348        Parcel data = Parcel.obtain();
3349        Parcel reply = Parcel.obtain();
3350        data.writeInterfaceToken(IActivityManager.descriptor);
3351        data.writeString(packageName);
3352        data.writeInt(mode);
3353        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3354        reply.readException();
3355        reply.recycle();
3356        data.recycle();
3357    }
3358
3359    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
3360        Parcel data = Parcel.obtain();
3361        Parcel reply = Parcel.obtain();
3362        data.writeInterfaceToken(IActivityManager.descriptor);
3363        data.writeString(packageName);
3364        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
3365        reply.readException();
3366        boolean ask = reply.readInt() != 0;
3367        reply.recycle();
3368        data.recycle();
3369        return ask;
3370    }
3371
3372    public void setPackageAskScreenCompat(String packageName, boolean ask)
3373            throws RemoteException {
3374        Parcel data = Parcel.obtain();
3375        Parcel reply = Parcel.obtain();
3376        data.writeInterfaceToken(IActivityManager.descriptor);
3377        data.writeString(packageName);
3378        data.writeInt(ask ? 1 : 0);
3379        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
3380        reply.readException();
3381        reply.recycle();
3382        data.recycle();
3383    }
3384
3385    public boolean switchUser(int userid) throws RemoteException {
3386        Parcel data = Parcel.obtain();
3387        Parcel reply = Parcel.obtain();
3388        data.writeInterfaceToken(IActivityManager.descriptor);
3389        data.writeInt(userid);
3390        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
3391        reply.readException();
3392        boolean result = reply.readInt() != 0;
3393        reply.recycle();
3394        data.recycle();
3395        return result;
3396    }
3397
3398    public boolean removeSubTask(int taskId, int subTaskIndex) throws RemoteException {
3399        Parcel data = Parcel.obtain();
3400        Parcel reply = Parcel.obtain();
3401        data.writeInterfaceToken(IActivityManager.descriptor);
3402        data.writeInt(taskId);
3403        data.writeInt(subTaskIndex);
3404        mRemote.transact(REMOVE_SUB_TASK_TRANSACTION, data, reply, 0);
3405        reply.readException();
3406        boolean result = reply.readInt() != 0;
3407        reply.recycle();
3408        data.recycle();
3409        return result;
3410    }
3411
3412    public boolean removeTask(int taskId, int flags) throws RemoteException {
3413        Parcel data = Parcel.obtain();
3414        Parcel reply = Parcel.obtain();
3415        data.writeInterfaceToken(IActivityManager.descriptor);
3416        data.writeInt(taskId);
3417        data.writeInt(flags);
3418        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
3419        reply.readException();
3420        boolean result = reply.readInt() != 0;
3421        reply.recycle();
3422        data.recycle();
3423        return result;
3424    }
3425
3426    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
3427        Parcel data = Parcel.obtain();
3428        Parcel reply = Parcel.obtain();
3429        data.writeInterfaceToken(IActivityManager.descriptor);
3430        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
3431        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
3432        reply.readException();
3433        data.recycle();
3434        reply.recycle();
3435    }
3436
3437    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
3438        Parcel data = Parcel.obtain();
3439        Parcel reply = Parcel.obtain();
3440        data.writeInterfaceToken(IActivityManager.descriptor);
3441        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
3442        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
3443        reply.readException();
3444        data.recycle();
3445        reply.recycle();
3446    }
3447
3448    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
3449        Parcel data = Parcel.obtain();
3450        Parcel reply = Parcel.obtain();
3451        data.writeInterfaceToken(IActivityManager.descriptor);
3452        data.writeStrongBinder(sender.asBinder());
3453        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
3454        reply.readException();
3455        boolean res = reply.readInt() != 0;
3456        data.recycle();
3457        reply.recycle();
3458        return res;
3459    }
3460
3461    public void updatePersistentConfiguration(Configuration values) throws RemoteException
3462    {
3463        Parcel data = Parcel.obtain();
3464        Parcel reply = Parcel.obtain();
3465        data.writeInterfaceToken(IActivityManager.descriptor);
3466        values.writeToParcel(data, 0);
3467        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
3468        reply.readException();
3469        data.recycle();
3470        reply.recycle();
3471    }
3472
3473    public long[] getProcessPss(int[] pids) throws RemoteException {
3474        Parcel data = Parcel.obtain();
3475        Parcel reply = Parcel.obtain();
3476        data.writeInterfaceToken(IActivityManager.descriptor);
3477        data.writeIntArray(pids);
3478        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
3479        reply.readException();
3480        long[] res = reply.createLongArray();
3481        data.recycle();
3482        reply.recycle();
3483        return res;
3484    }
3485
3486    private IBinder mRemote;
3487}
3488