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