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