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