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