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