ActivityManagerNative.java revision cf910b0c714b2ca90ea0013e5695850506a1d36f
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.IIntentReceiver;
21import android.content.IIntentSender;
22import android.content.Intent;
23import android.content.IntentFilter;
24import android.content.IntentSender;
25import android.content.pm.ApplicationInfo;
26import android.content.pm.ConfigurationInfo;
27import android.content.pm.IPackageDataObserver;
28import android.content.pm.UserInfo;
29import android.content.res.Configuration;
30import android.graphics.Bitmap;
31import android.net.Uri;
32import android.os.Binder;
33import android.os.Bundle;
34import android.os.Debug;
35import android.os.IBinder;
36import android.os.Parcel;
37import android.os.ParcelFileDescriptor;
38import android.os.Parcelable;
39import android.os.RemoteException;
40import android.os.ServiceManager;
41import android.os.StrictMode;
42import android.text.TextUtils;
43import android.util.Log;
44import android.util.Singleton;
45
46import java.util.ArrayList;
47import java.util.List;
48
49/** {@hide} */
50public abstract class ActivityManagerNative extends Binder implements IActivityManager
51{
52    /**
53     * Cast a Binder object into an activity manager interface, generating
54     * a proxy if needed.
55     */
56    static public IActivityManager asInterface(IBinder obj) {
57        if (obj == null) {
58            return null;
59        }
60        IActivityManager in =
61            (IActivityManager)obj.queryLocalInterface(descriptor);
62        if (in != null) {
63            return in;
64        }
65
66        return new ActivityManagerProxy(obj);
67    }
68
69    /**
70     * Retrieve the system's default/global activity manager.
71     */
72    static public IActivityManager getDefault() {
73        return gDefault.get();
74    }
75
76    /**
77     * Convenience for checking whether the system is ready.  For internal use only.
78     */
79    static public boolean isSystemReady() {
80        if (!sSystemReady) {
81            sSystemReady = getDefault().testIsSystemReady();
82        }
83        return sSystemReady;
84    }
85    static boolean sSystemReady = false;
86
87    /**
88     * Convenience for sending a sticky broadcast.  For internal use only.
89     * If you don't care about permission, use null.
90     */
91    static public void broadcastStickyIntent(Intent intent, String permission, int userId) {
92        try {
93            getDefault().broadcastIntent(
94                null, intent, null, null, Activity.RESULT_OK, null, null,
95                null /*permission*/, AppOpsManager.OP_NONE, false, true, userId);
96        } catch (RemoteException ex) {
97        }
98    }
99
100    static public void noteWakeupAlarm(PendingIntent ps) {
101        try {
102            getDefault().noteWakeupAlarm(ps.getTarget());
103        } catch (RemoteException ex) {
104        }
105    }
106
107    public ActivityManagerNative() {
108        attachInterface(this, descriptor);
109    }
110
111    @Override
112    public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
113            throws RemoteException {
114        switch (code) {
115        case START_ACTIVITY_TRANSACTION:
116        {
117            data.enforceInterface(IActivityManager.descriptor);
118            IBinder b = data.readStrongBinder();
119            IApplicationThread app = ApplicationThreadNative.asInterface(b);
120            String callingPackage = data.readString();
121            Intent intent = Intent.CREATOR.createFromParcel(data);
122            String resolvedType = data.readString();
123            IBinder resultTo = data.readStrongBinder();
124            String resultWho = data.readString();
125            int requestCode = data.readInt();
126            int startFlags = data.readInt();
127            String profileFile = data.readString();
128            ParcelFileDescriptor profileFd = data.readInt() != 0
129                    ? data.readFileDescriptor() : null;
130            Bundle options = data.readInt() != 0
131                    ? Bundle.CREATOR.createFromParcel(data) : null;
132            int result = startActivity(app, callingPackage, intent, resolvedType,
133                    resultTo, resultWho, requestCode, startFlags,
134                    profileFile, profileFd, options);
135            reply.writeNoException();
136            reply.writeInt(result);
137            return true;
138        }
139
140        case START_ACTIVITY_AS_USER_TRANSACTION:
141        {
142            data.enforceInterface(IActivityManager.descriptor);
143            IBinder b = data.readStrongBinder();
144            IApplicationThread app = ApplicationThreadNative.asInterface(b);
145            String callingPackage = data.readString();
146            Intent intent = Intent.CREATOR.createFromParcel(data);
147            String resolvedType = data.readString();
148            IBinder resultTo = data.readStrongBinder();
149            String resultWho = data.readString();
150            int requestCode = data.readInt();
151            int startFlags = data.readInt();
152            String profileFile = data.readString();
153            ParcelFileDescriptor profileFd = data.readInt() != 0
154                    ? data.readFileDescriptor() : null;
155            Bundle options = data.readInt() != 0
156                    ? Bundle.CREATOR.createFromParcel(data) : null;
157            int userId = data.readInt();
158            int result = startActivityAsUser(app, callingPackage, intent, resolvedType,
159                    resultTo, resultWho, requestCode, startFlags,
160                    profileFile, profileFd, options, userId);
161            reply.writeNoException();
162            reply.writeInt(result);
163            return true;
164        }
165
166        case START_ACTIVITY_AND_WAIT_TRANSACTION:
167        {
168            data.enforceInterface(IActivityManager.descriptor);
169            IBinder b = data.readStrongBinder();
170            IApplicationThread app = ApplicationThreadNative.asInterface(b);
171            String callingPackage = data.readString();
172            Intent intent = Intent.CREATOR.createFromParcel(data);
173            String resolvedType = data.readString();
174            IBinder resultTo = data.readStrongBinder();
175            String resultWho = data.readString();
176            int requestCode = data.readInt();
177            int startFlags = data.readInt();
178            String profileFile = data.readString();
179            ParcelFileDescriptor profileFd = data.readInt() != 0
180                    ? data.readFileDescriptor() : null;
181            Bundle options = data.readInt() != 0
182                    ? Bundle.CREATOR.createFromParcel(data) : null;
183            int userId = data.readInt();
184            WaitResult result = startActivityAndWait(app, callingPackage, intent, resolvedType,
185                    resultTo, resultWho, requestCode, startFlags,
186                    profileFile, profileFd, options, userId);
187            reply.writeNoException();
188            result.writeToParcel(reply, 0);
189            return true;
190        }
191
192        case START_ACTIVITY_WITH_CONFIG_TRANSACTION:
193        {
194            data.enforceInterface(IActivityManager.descriptor);
195            IBinder b = data.readStrongBinder();
196            IApplicationThread app = ApplicationThreadNative.asInterface(b);
197            String callingPackage = data.readString();
198            Intent intent = Intent.CREATOR.createFromParcel(data);
199            String resolvedType = data.readString();
200            IBinder resultTo = data.readStrongBinder();
201            String resultWho = data.readString();
202            int requestCode = data.readInt();
203            int startFlags = data.readInt();
204            Configuration config = Configuration.CREATOR.createFromParcel(data);
205            Bundle options = data.readInt() != 0
206                    ? Bundle.CREATOR.createFromParcel(data) : null;
207            int userId = data.readInt();
208            int result = startActivityWithConfig(app, callingPackage, intent, resolvedType,
209                    resultTo, resultWho, requestCode, startFlags, config, options, userId);
210            reply.writeNoException();
211            reply.writeInt(result);
212            return true;
213        }
214
215        case START_ACTIVITY_INTENT_SENDER_TRANSACTION:
216        {
217            data.enforceInterface(IActivityManager.descriptor);
218            IBinder b = data.readStrongBinder();
219            IApplicationThread app = ApplicationThreadNative.asInterface(b);
220            IntentSender intent = IntentSender.CREATOR.createFromParcel(data);
221            Intent fillInIntent = null;
222            if (data.readInt() != 0) {
223                fillInIntent = Intent.CREATOR.createFromParcel(data);
224            }
225            String resolvedType = data.readString();
226            IBinder resultTo = data.readStrongBinder();
227            String resultWho = data.readString();
228            int requestCode = data.readInt();
229            int flagsMask = data.readInt();
230            int flagsValues = data.readInt();
231            Bundle options = data.readInt() != 0
232                    ? Bundle.CREATOR.createFromParcel(data) : null;
233            int result = startActivityIntentSender(app, intent,
234                    fillInIntent, resolvedType, resultTo, resultWho,
235                    requestCode, flagsMask, flagsValues, options);
236            reply.writeNoException();
237            reply.writeInt(result);
238            return true;
239        }
240
241        case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
242        {
243            data.enforceInterface(IActivityManager.descriptor);
244            IBinder callingActivity = data.readStrongBinder();
245            Intent intent = Intent.CREATOR.createFromParcel(data);
246            Bundle options = data.readInt() != 0
247                    ? Bundle.CREATOR.createFromParcel(data) : null;
248            boolean result = startNextMatchingActivity(callingActivity, intent, options);
249            reply.writeNoException();
250            reply.writeInt(result ? 1 : 0);
251            return true;
252        }
253
254        case FINISH_ACTIVITY_TRANSACTION: {
255            data.enforceInterface(IActivityManager.descriptor);
256            IBinder token = data.readStrongBinder();
257            Intent resultData = null;
258            int resultCode = data.readInt();
259            if (data.readInt() != 0) {
260                resultData = Intent.CREATOR.createFromParcel(data);
261            }
262            boolean res = finishActivity(token, resultCode, resultData);
263            reply.writeNoException();
264            reply.writeInt(res ? 1 : 0);
265            return true;
266        }
267
268        case FINISH_SUB_ACTIVITY_TRANSACTION: {
269            data.enforceInterface(IActivityManager.descriptor);
270            IBinder token = data.readStrongBinder();
271            String resultWho = data.readString();
272            int requestCode = data.readInt();
273            finishSubActivity(token, resultWho, requestCode);
274            reply.writeNoException();
275            return true;
276        }
277
278        case FINISH_ACTIVITY_AFFINITY_TRANSACTION: {
279            data.enforceInterface(IActivityManager.descriptor);
280            IBinder token = data.readStrongBinder();
281            boolean res = finishActivityAffinity(token);
282            reply.writeNoException();
283            reply.writeInt(res ? 1 : 0);
284            return true;
285        }
286
287        case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: {
288            data.enforceInterface(IActivityManager.descriptor);
289            IBinder token = data.readStrongBinder();
290            boolean res = willActivityBeVisible(token);
291            reply.writeNoException();
292            reply.writeInt(res ? 1 : 0);
293            return true;
294        }
295
296        case REGISTER_RECEIVER_TRANSACTION:
297        {
298            data.enforceInterface(IActivityManager.descriptor);
299            IBinder b = data.readStrongBinder();
300            IApplicationThread app =
301                b != null ? ApplicationThreadNative.asInterface(b) : null;
302            String packageName = data.readString();
303            b = data.readStrongBinder();
304            IIntentReceiver rec
305                = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
306            IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
307            String perm = data.readString();
308            int userId = data.readInt();
309            Intent intent = registerReceiver(app, packageName, rec, filter, perm, userId);
310            reply.writeNoException();
311            if (intent != null) {
312                reply.writeInt(1);
313                intent.writeToParcel(reply, 0);
314            } else {
315                reply.writeInt(0);
316            }
317            return true;
318        }
319
320        case UNREGISTER_RECEIVER_TRANSACTION:
321        {
322            data.enforceInterface(IActivityManager.descriptor);
323            IBinder b = data.readStrongBinder();
324            if (b == null) {
325                return true;
326            }
327            IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
328            unregisterReceiver(rec);
329            reply.writeNoException();
330            return true;
331        }
332
333        case BROADCAST_INTENT_TRANSACTION:
334        {
335            data.enforceInterface(IActivityManager.descriptor);
336            IBinder b = data.readStrongBinder();
337            IApplicationThread app =
338                b != null ? ApplicationThreadNative.asInterface(b) : null;
339            Intent intent = Intent.CREATOR.createFromParcel(data);
340            String resolvedType = data.readString();
341            b = data.readStrongBinder();
342            IIntentReceiver resultTo =
343                b != null ? IIntentReceiver.Stub.asInterface(b) : null;
344            int resultCode = data.readInt();
345            String resultData = data.readString();
346            Bundle resultExtras = data.readBundle();
347            String perm = data.readString();
348            int appOp = data.readInt();
349            boolean serialized = data.readInt() != 0;
350            boolean sticky = data.readInt() != 0;
351            int userId = data.readInt();
352            int res = broadcastIntent(app, intent, resolvedType, resultTo,
353                    resultCode, resultData, resultExtras, perm, appOp,
354                    serialized, sticky, userId);
355            reply.writeNoException();
356            reply.writeInt(res);
357            return true;
358        }
359
360        case UNBROADCAST_INTENT_TRANSACTION:
361        {
362            data.enforceInterface(IActivityManager.descriptor);
363            IBinder b = data.readStrongBinder();
364            IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
365            Intent intent = Intent.CREATOR.createFromParcel(data);
366            int userId = data.readInt();
367            unbroadcastIntent(app, intent, userId);
368            reply.writeNoException();
369            return true;
370        }
371
372        case FINISH_RECEIVER_TRANSACTION: {
373            data.enforceInterface(IActivityManager.descriptor);
374            IBinder who = data.readStrongBinder();
375            int resultCode = data.readInt();
376            String resultData = data.readString();
377            Bundle resultExtras = data.readBundle();
378            boolean resultAbort = data.readInt() != 0;
379            if (who != null) {
380                finishReceiver(who, resultCode, resultData, resultExtras, resultAbort);
381            }
382            reply.writeNoException();
383            return true;
384        }
385
386        case ATTACH_APPLICATION_TRANSACTION: {
387            data.enforceInterface(IActivityManager.descriptor);
388            IApplicationThread app = ApplicationThreadNative.asInterface(
389                    data.readStrongBinder());
390            if (app != null) {
391                attachApplication(app);
392            }
393            reply.writeNoException();
394            return true;
395        }
396
397        case ACTIVITY_IDLE_TRANSACTION: {
398            data.enforceInterface(IActivityManager.descriptor);
399            IBinder token = data.readStrongBinder();
400            Configuration config = null;
401            if (data.readInt() != 0) {
402                config = Configuration.CREATOR.createFromParcel(data);
403            }
404            boolean stopProfiling = data.readInt() != 0;
405            if (token != null) {
406                activityIdle(token, config, stopProfiling);
407            }
408            reply.writeNoException();
409            return true;
410        }
411
412        case ACTIVITY_RESUMED_TRANSACTION: {
413            data.enforceInterface(IActivityManager.descriptor);
414            IBinder token = data.readStrongBinder();
415            activityResumed(token);
416            reply.writeNoException();
417            return true;
418        }
419
420        case ACTIVITY_PAUSED_TRANSACTION: {
421            data.enforceInterface(IActivityManager.descriptor);
422            IBinder token = data.readStrongBinder();
423            activityPaused(token);
424            reply.writeNoException();
425            return true;
426        }
427
428        case ACTIVITY_STOPPED_TRANSACTION: {
429            data.enforceInterface(IActivityManager.descriptor);
430            IBinder token = data.readStrongBinder();
431            Bundle map = data.readBundle();
432            Bitmap thumbnail = data.readInt() != 0
433                ? Bitmap.CREATOR.createFromParcel(data) : null;
434            CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
435            activityStopped(token, map, thumbnail, description);
436            reply.writeNoException();
437            return true;
438        }
439
440        case ACTIVITY_SLEPT_TRANSACTION: {
441            data.enforceInterface(IActivityManager.descriptor);
442            IBinder token = data.readStrongBinder();
443            activitySlept(token);
444            reply.writeNoException();
445            return true;
446        }
447
448        case ACTIVITY_DESTROYED_TRANSACTION: {
449            data.enforceInterface(IActivityManager.descriptor);
450            IBinder token = data.readStrongBinder();
451            activityDestroyed(token);
452            reply.writeNoException();
453            return true;
454        }
455
456        case GET_CALLING_PACKAGE_TRANSACTION: {
457            data.enforceInterface(IActivityManager.descriptor);
458            IBinder token = data.readStrongBinder();
459            String res = token != null ? getCallingPackage(token) : null;
460            reply.writeNoException();
461            reply.writeString(res);
462            return true;
463        }
464
465        case GET_CALLING_ACTIVITY_TRANSACTION: {
466            data.enforceInterface(IActivityManager.descriptor);
467            IBinder token = data.readStrongBinder();
468            ComponentName cn = getCallingActivity(token);
469            reply.writeNoException();
470            ComponentName.writeToParcel(cn, reply);
471            return true;
472        }
473
474        case GET_TASKS_TRANSACTION: {
475            data.enforceInterface(IActivityManager.descriptor);
476            int maxNum = data.readInt();
477            int fl = data.readInt();
478            IBinder receiverBinder = data.readStrongBinder();
479            IThumbnailReceiver receiver = receiverBinder != null
480                ? IThumbnailReceiver.Stub.asInterface(receiverBinder)
481                : null;
482            List<ActivityManager.RunningTaskInfo> list = getTasks(maxNum, fl, receiver);
483            reply.writeNoException();
484            int N = list != null ? list.size() : -1;
485            reply.writeInt(N);
486            int i;
487            for (i=0; i<N; i++) {
488                ActivityManager.RunningTaskInfo info = list.get(i);
489                info.writeToParcel(reply, 0);
490            }
491            return true;
492        }
493
494        case GET_RECENT_TASKS_TRANSACTION: {
495            data.enforceInterface(IActivityManager.descriptor);
496            int maxNum = data.readInt();
497            int fl = data.readInt();
498            int userId = data.readInt();
499            List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
500                    fl, userId);
501            reply.writeNoException();
502            reply.writeTypedList(list);
503            return true;
504        }
505
506        case GET_TASK_THUMBNAILS_TRANSACTION: {
507            data.enforceInterface(IActivityManager.descriptor);
508            int id = data.readInt();
509            ActivityManager.TaskThumbnails bm = getTaskThumbnails(id);
510            reply.writeNoException();
511            if (bm != null) {
512                reply.writeInt(1);
513                bm.writeToParcel(reply, 0);
514            } else {
515                reply.writeInt(0);
516            }
517            return true;
518        }
519
520        case GET_TASK_TOP_THUMBNAIL_TRANSACTION: {
521            data.enforceInterface(IActivityManager.descriptor);
522            int id = data.readInt();
523            Bitmap bm = getTaskTopThumbnail(id);
524            reply.writeNoException();
525            if (bm != null) {
526                reply.writeInt(1);
527                bm.writeToParcel(reply, 0);
528            } else {
529                reply.writeInt(0);
530            }
531            return true;
532        }
533
534        case GET_SERVICES_TRANSACTION: {
535            data.enforceInterface(IActivityManager.descriptor);
536            int maxNum = data.readInt();
537            int fl = data.readInt();
538            List<ActivityManager.RunningServiceInfo> list = getServices(maxNum, fl);
539            reply.writeNoException();
540            int N = list != null ? list.size() : -1;
541            reply.writeInt(N);
542            int i;
543            for (i=0; i<N; i++) {
544                ActivityManager.RunningServiceInfo info = list.get(i);
545                info.writeToParcel(reply, 0);
546            }
547            return true;
548        }
549
550        case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
551            data.enforceInterface(IActivityManager.descriptor);
552            List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
553            reply.writeNoException();
554            reply.writeTypedList(list);
555            return true;
556        }
557
558        case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
559            data.enforceInterface(IActivityManager.descriptor);
560            List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
561            reply.writeNoException();
562            reply.writeTypedList(list);
563            return true;
564        }
565
566        case GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION: {
567            data.enforceInterface(IActivityManager.descriptor);
568            List<ApplicationInfo> list = getRunningExternalApplications();
569            reply.writeNoException();
570            reply.writeTypedList(list);
571            return true;
572        }
573
574        case MOVE_TASK_TO_FRONT_TRANSACTION: {
575            data.enforceInterface(IActivityManager.descriptor);
576            int task = data.readInt();
577            int fl = data.readInt();
578            Bundle options = data.readInt() != 0
579                    ? Bundle.CREATOR.createFromParcel(data) : null;
580            moveTaskToFront(task, fl, options);
581            reply.writeNoException();
582            return true;
583        }
584
585        case MOVE_TASK_TO_BACK_TRANSACTION: {
586            data.enforceInterface(IActivityManager.descriptor);
587            int task = data.readInt();
588            moveTaskToBack(task);
589            reply.writeNoException();
590            return true;
591        }
592
593        case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
594            data.enforceInterface(IActivityManager.descriptor);
595            IBinder token = data.readStrongBinder();
596            boolean nonRoot = data.readInt() != 0;
597            boolean res = moveActivityTaskToBack(token, nonRoot);
598            reply.writeNoException();
599            reply.writeInt(res ? 1 : 0);
600            return true;
601        }
602
603        case MOVE_TASK_BACKWARDS_TRANSACTION: {
604            data.enforceInterface(IActivityManager.descriptor);
605            int task = data.readInt();
606            moveTaskBackwards(task);
607            reply.writeNoException();
608            return true;
609        }
610
611        case CREATE_STACK_TRANSACTION: {
612            data.enforceInterface(IActivityManager.descriptor);
613            int taskId = data.readInt();
614            int relativeStackId = data.readInt();
615            int position = data.readInt();
616            float weight = data.readFloat();
617            int res = createStack(taskId, relativeStackId, position, weight);
618            reply.writeNoException();
619            reply.writeInt(res);
620            return true;
621        }
622
623        case MOVE_TASK_TO_STACK_TRANSACTION: {
624            data.enforceInterface(IActivityManager.descriptor);
625            int taskId = data.readInt();
626            int stackId = data.readInt();
627            boolean toTop = data.readInt() != 0;
628            moveTaskToStack(taskId, stackId, toTop);
629            reply.writeNoException();
630            return true;
631        }
632
633        case RESIZE_STACK_TRANSACTION: {
634            data.enforceInterface(IActivityManager.descriptor);
635            int stackId = data.readInt();
636            float weight = data.readFloat();
637            resizeStack(stackId, weight);
638            reply.writeNoException();
639            return true;
640        }
641
642        case GET_STACKS_TRANSACTION: {
643            data.enforceInterface(IActivityManager.descriptor);
644            List<ActivityManager.StackInfo> list = getStacks();
645            reply.writeNoException();
646            reply.writeTypedList(list);
647            return true;
648        }
649
650        case SET_FOCUSED_STACK_TRANSACTION: {
651            data.enforceInterface(IActivityManager.descriptor);
652            int stackId = data.readInt();
653            setFocusedStack(stackId);
654            reply.writeNoException();
655            return true;
656        }
657
658        case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
659            data.enforceInterface(IActivityManager.descriptor);
660            IBinder token = data.readStrongBinder();
661            boolean onlyRoot = data.readInt() != 0;
662            int res = token != null
663                ? getTaskForActivity(token, onlyRoot) : -1;
664                reply.writeNoException();
665            reply.writeInt(res);
666            return true;
667        }
668
669        case REPORT_THUMBNAIL_TRANSACTION: {
670            data.enforceInterface(IActivityManager.descriptor);
671            IBinder token = data.readStrongBinder();
672            Bitmap thumbnail = data.readInt() != 0
673                ? Bitmap.CREATOR.createFromParcel(data) : null;
674            CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
675            reportThumbnail(token, thumbnail, description);
676            reply.writeNoException();
677            return true;
678        }
679
680        case GET_CONTENT_PROVIDER_TRANSACTION: {
681            data.enforceInterface(IActivityManager.descriptor);
682            IBinder b = data.readStrongBinder();
683            IApplicationThread app = ApplicationThreadNative.asInterface(b);
684            String name = data.readString();
685            int userId = data.readInt();
686            boolean stable = data.readInt() != 0;
687            ContentProviderHolder cph = getContentProvider(app, name, userId, stable);
688            reply.writeNoException();
689            if (cph != null) {
690                reply.writeInt(1);
691                cph.writeToParcel(reply, 0);
692            } else {
693                reply.writeInt(0);
694            }
695            return true;
696        }
697
698        case GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
699            data.enforceInterface(IActivityManager.descriptor);
700            String name = data.readString();
701            int userId = data.readInt();
702            IBinder token = data.readStrongBinder();
703            ContentProviderHolder cph = getContentProviderExternal(name, userId, token);
704            reply.writeNoException();
705            if (cph != null) {
706                reply.writeInt(1);
707                cph.writeToParcel(reply, 0);
708            } else {
709                reply.writeInt(0);
710            }
711            return true;
712        }
713
714        case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
715            data.enforceInterface(IActivityManager.descriptor);
716            IBinder b = data.readStrongBinder();
717            IApplicationThread app = ApplicationThreadNative.asInterface(b);
718            ArrayList<ContentProviderHolder> providers =
719                data.createTypedArrayList(ContentProviderHolder.CREATOR);
720            publishContentProviders(app, providers);
721            reply.writeNoException();
722            return true;
723        }
724
725        case REF_CONTENT_PROVIDER_TRANSACTION: {
726            data.enforceInterface(IActivityManager.descriptor);
727            IBinder b = data.readStrongBinder();
728            int stable = data.readInt();
729            int unstable = data.readInt();
730            boolean res = refContentProvider(b, stable, unstable);
731            reply.writeNoException();
732            reply.writeInt(res ? 1 : 0);
733            return true;
734        }
735
736        case UNSTABLE_PROVIDER_DIED_TRANSACTION: {
737            data.enforceInterface(IActivityManager.descriptor);
738            IBinder b = data.readStrongBinder();
739            unstableProviderDied(b);
740            reply.writeNoException();
741            return true;
742        }
743
744        case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
745            data.enforceInterface(IActivityManager.descriptor);
746            IBinder b = data.readStrongBinder();
747            boolean stable = data.readInt() != 0;
748            removeContentProvider(b, stable);
749            reply.writeNoException();
750            return true;
751        }
752
753        case REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
754            data.enforceInterface(IActivityManager.descriptor);
755            String name = data.readString();
756            IBinder token = data.readStrongBinder();
757            removeContentProviderExternal(name, token);
758            reply.writeNoException();
759            return true;
760        }
761
762        case GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION: {
763            data.enforceInterface(IActivityManager.descriptor);
764            ComponentName comp = ComponentName.CREATOR.createFromParcel(data);
765            PendingIntent pi = getRunningServiceControlPanel(comp);
766            reply.writeNoException();
767            PendingIntent.writePendingIntentOrNullToParcel(pi, reply);
768            return true;
769        }
770
771        case START_SERVICE_TRANSACTION: {
772            data.enforceInterface(IActivityManager.descriptor);
773            IBinder b = data.readStrongBinder();
774            IApplicationThread app = ApplicationThreadNative.asInterface(b);
775            Intent service = Intent.CREATOR.createFromParcel(data);
776            String resolvedType = data.readString();
777            int userId = data.readInt();
778            ComponentName cn = startService(app, service, resolvedType, userId);
779            reply.writeNoException();
780            ComponentName.writeToParcel(cn, reply);
781            return true;
782        }
783
784        case STOP_SERVICE_TRANSACTION: {
785            data.enforceInterface(IActivityManager.descriptor);
786            IBinder b = data.readStrongBinder();
787            IApplicationThread app = ApplicationThreadNative.asInterface(b);
788            Intent service = Intent.CREATOR.createFromParcel(data);
789            String resolvedType = data.readString();
790            int userId = data.readInt();
791            int res = stopService(app, service, resolvedType, userId);
792            reply.writeNoException();
793            reply.writeInt(res);
794            return true;
795        }
796
797        case STOP_SERVICE_TOKEN_TRANSACTION: {
798            data.enforceInterface(IActivityManager.descriptor);
799            ComponentName className = ComponentName.readFromParcel(data);
800            IBinder token = data.readStrongBinder();
801            int startId = data.readInt();
802            boolean res = stopServiceToken(className, token, startId);
803            reply.writeNoException();
804            reply.writeInt(res ? 1 : 0);
805            return true;
806        }
807
808        case SET_SERVICE_FOREGROUND_TRANSACTION: {
809            data.enforceInterface(IActivityManager.descriptor);
810            ComponentName className = ComponentName.readFromParcel(data);
811            IBinder token = data.readStrongBinder();
812            int id = data.readInt();
813            Notification notification = null;
814            if (data.readInt() != 0) {
815                notification = Notification.CREATOR.createFromParcel(data);
816            }
817            boolean removeNotification = data.readInt() != 0;
818            setServiceForeground(className, token, id, notification, removeNotification);
819            reply.writeNoException();
820            return true;
821        }
822
823        case BIND_SERVICE_TRANSACTION: {
824            data.enforceInterface(IActivityManager.descriptor);
825            IBinder b = data.readStrongBinder();
826            IApplicationThread app = ApplicationThreadNative.asInterface(b);
827            IBinder token = data.readStrongBinder();
828            Intent service = Intent.CREATOR.createFromParcel(data);
829            String resolvedType = data.readString();
830            b = data.readStrongBinder();
831            int fl = data.readInt();
832            int userId = data.readInt();
833            IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
834            int res = bindService(app, token, service, resolvedType, conn, fl, userId);
835            reply.writeNoException();
836            reply.writeInt(res);
837            return true;
838        }
839
840        case UNBIND_SERVICE_TRANSACTION: {
841            data.enforceInterface(IActivityManager.descriptor);
842            IBinder b = data.readStrongBinder();
843            IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
844            boolean res = unbindService(conn);
845            reply.writeNoException();
846            reply.writeInt(res ? 1 : 0);
847            return true;
848        }
849
850        case PUBLISH_SERVICE_TRANSACTION: {
851            data.enforceInterface(IActivityManager.descriptor);
852            IBinder token = data.readStrongBinder();
853            Intent intent = Intent.CREATOR.createFromParcel(data);
854            IBinder service = data.readStrongBinder();
855            publishService(token, intent, service);
856            reply.writeNoException();
857            return true;
858        }
859
860        case UNBIND_FINISHED_TRANSACTION: {
861            data.enforceInterface(IActivityManager.descriptor);
862            IBinder token = data.readStrongBinder();
863            Intent intent = Intent.CREATOR.createFromParcel(data);
864            boolean doRebind = data.readInt() != 0;
865            unbindFinished(token, intent, doRebind);
866            reply.writeNoException();
867            return true;
868        }
869
870        case SERVICE_DONE_EXECUTING_TRANSACTION: {
871            data.enforceInterface(IActivityManager.descriptor);
872            IBinder token = data.readStrongBinder();
873            int type = data.readInt();
874            int startId = data.readInt();
875            int res = data.readInt();
876            serviceDoneExecuting(token, type, startId, res);
877            reply.writeNoException();
878            return true;
879        }
880
881        case START_INSTRUMENTATION_TRANSACTION: {
882            data.enforceInterface(IActivityManager.descriptor);
883            ComponentName className = ComponentName.readFromParcel(data);
884            String profileFile = data.readString();
885            int fl = data.readInt();
886            Bundle arguments = data.readBundle();
887            IBinder b = data.readStrongBinder();
888            IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
889            b = data.readStrongBinder();
890            IUiAutomationConnection c = IUiAutomationConnection.Stub.asInterface(b);
891            int userId = data.readInt();
892            boolean res = startInstrumentation(className, profileFile, fl, arguments, w, c, userId);
893            reply.writeNoException();
894            reply.writeInt(res ? 1 : 0);
895            return true;
896        }
897
898
899        case FINISH_INSTRUMENTATION_TRANSACTION: {
900            data.enforceInterface(IActivityManager.descriptor);
901            IBinder b = data.readStrongBinder();
902            IApplicationThread app = ApplicationThreadNative.asInterface(b);
903            int resultCode = data.readInt();
904            Bundle results = data.readBundle();
905            finishInstrumentation(app, resultCode, results);
906            reply.writeNoException();
907            return true;
908        }
909
910        case GET_CONFIGURATION_TRANSACTION: {
911            data.enforceInterface(IActivityManager.descriptor);
912            Configuration config = getConfiguration();
913            reply.writeNoException();
914            config.writeToParcel(reply, 0);
915            return true;
916        }
917
918        case UPDATE_CONFIGURATION_TRANSACTION: {
919            data.enforceInterface(IActivityManager.descriptor);
920            Configuration config = Configuration.CREATOR.createFromParcel(data);
921            updateConfiguration(config);
922            reply.writeNoException();
923            return true;
924        }
925
926        case SET_REQUESTED_ORIENTATION_TRANSACTION: {
927            data.enforceInterface(IActivityManager.descriptor);
928            IBinder token = data.readStrongBinder();
929            int requestedOrientation = data.readInt();
930            setRequestedOrientation(token, requestedOrientation);
931            reply.writeNoException();
932            return true;
933        }
934
935        case GET_REQUESTED_ORIENTATION_TRANSACTION: {
936            data.enforceInterface(IActivityManager.descriptor);
937            IBinder token = data.readStrongBinder();
938            int req = getRequestedOrientation(token);
939            reply.writeNoException();
940            reply.writeInt(req);
941            return true;
942        }
943
944        case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
945            data.enforceInterface(IActivityManager.descriptor);
946            IBinder token = data.readStrongBinder();
947            ComponentName cn = getActivityClassForToken(token);
948            reply.writeNoException();
949            ComponentName.writeToParcel(cn, reply);
950            return true;
951        }
952
953        case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
954            data.enforceInterface(IActivityManager.descriptor);
955            IBinder token = data.readStrongBinder();
956            reply.writeNoException();
957            reply.writeString(getPackageForToken(token));
958            return true;
959        }
960
961        case GET_INTENT_SENDER_TRANSACTION: {
962            data.enforceInterface(IActivityManager.descriptor);
963            int type = data.readInt();
964            String packageName = data.readString();
965            IBinder token = data.readStrongBinder();
966            String resultWho = data.readString();
967            int requestCode = data.readInt();
968            Intent[] requestIntents;
969            String[] requestResolvedTypes;
970            if (data.readInt() != 0) {
971                requestIntents = data.createTypedArray(Intent.CREATOR);
972                requestResolvedTypes = data.createStringArray();
973            } else {
974                requestIntents = null;
975                requestResolvedTypes = null;
976            }
977            int fl = data.readInt();
978            Bundle options = data.readInt() != 0
979                    ? Bundle.CREATOR.createFromParcel(data) : null;
980            int userId = data.readInt();
981            IIntentSender res = getIntentSender(type, packageName, token,
982                    resultWho, requestCode, requestIntents,
983                    requestResolvedTypes, fl, options, userId);
984            reply.writeNoException();
985            reply.writeStrongBinder(res != null ? res.asBinder() : null);
986            return true;
987        }
988
989        case CANCEL_INTENT_SENDER_TRANSACTION: {
990            data.enforceInterface(IActivityManager.descriptor);
991            IIntentSender r = IIntentSender.Stub.asInterface(
992                data.readStrongBinder());
993            cancelIntentSender(r);
994            reply.writeNoException();
995            return true;
996        }
997
998        case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
999            data.enforceInterface(IActivityManager.descriptor);
1000            IIntentSender r = IIntentSender.Stub.asInterface(
1001                data.readStrongBinder());
1002            String res = getPackageForIntentSender(r);
1003            reply.writeNoException();
1004            reply.writeString(res);
1005            return true;
1006        }
1007
1008        case GET_UID_FOR_INTENT_SENDER_TRANSACTION: {
1009            data.enforceInterface(IActivityManager.descriptor);
1010            IIntentSender r = IIntentSender.Stub.asInterface(
1011                data.readStrongBinder());
1012            int res = getUidForIntentSender(r);
1013            reply.writeNoException();
1014            reply.writeInt(res);
1015            return true;
1016        }
1017
1018        case HANDLE_INCOMING_USER_TRANSACTION: {
1019            data.enforceInterface(IActivityManager.descriptor);
1020            int callingPid = data.readInt();
1021            int callingUid = data.readInt();
1022            int userId = data.readInt();
1023            boolean allowAll = data.readInt() != 0 ;
1024            boolean requireFull = data.readInt() != 0;
1025            String name = data.readString();
1026            String callerPackage = data.readString();
1027            int res = handleIncomingUser(callingPid, callingUid, userId, allowAll,
1028                    requireFull, name, callerPackage);
1029            reply.writeNoException();
1030            reply.writeInt(res);
1031            return true;
1032        }
1033
1034        case SET_PROCESS_LIMIT_TRANSACTION: {
1035            data.enforceInterface(IActivityManager.descriptor);
1036            int max = data.readInt();
1037            setProcessLimit(max);
1038            reply.writeNoException();
1039            return true;
1040        }
1041
1042        case GET_PROCESS_LIMIT_TRANSACTION: {
1043            data.enforceInterface(IActivityManager.descriptor);
1044            int limit = getProcessLimit();
1045            reply.writeNoException();
1046            reply.writeInt(limit);
1047            return true;
1048        }
1049
1050        case SET_PROCESS_FOREGROUND_TRANSACTION: {
1051            data.enforceInterface(IActivityManager.descriptor);
1052            IBinder token = data.readStrongBinder();
1053            int pid = data.readInt();
1054            boolean isForeground = data.readInt() != 0;
1055            setProcessForeground(token, pid, isForeground);
1056            reply.writeNoException();
1057            return true;
1058        }
1059
1060        case CHECK_PERMISSION_TRANSACTION: {
1061            data.enforceInterface(IActivityManager.descriptor);
1062            String perm = data.readString();
1063            int pid = data.readInt();
1064            int uid = data.readInt();
1065            int res = checkPermission(perm, pid, uid);
1066            reply.writeNoException();
1067            reply.writeInt(res);
1068            return true;
1069        }
1070
1071        case CHECK_URI_PERMISSION_TRANSACTION: {
1072            data.enforceInterface(IActivityManager.descriptor);
1073            Uri uri = Uri.CREATOR.createFromParcel(data);
1074            int pid = data.readInt();
1075            int uid = data.readInt();
1076            int mode = data.readInt();
1077            int res = checkUriPermission(uri, pid, uid, mode);
1078            reply.writeNoException();
1079            reply.writeInt(res);
1080            return true;
1081        }
1082
1083        case CLEAR_APP_DATA_TRANSACTION: {
1084            data.enforceInterface(IActivityManager.descriptor);
1085            String packageName = data.readString();
1086            IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
1087                    data.readStrongBinder());
1088            int userId = data.readInt();
1089            boolean res = clearApplicationUserData(packageName, observer, userId);
1090            reply.writeNoException();
1091            reply.writeInt(res ? 1 : 0);
1092            return true;
1093        }
1094
1095        case GRANT_URI_PERMISSION_TRANSACTION: {
1096            data.enforceInterface(IActivityManager.descriptor);
1097            IBinder b = data.readStrongBinder();
1098            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1099            String targetPkg = data.readString();
1100            Uri uri = Uri.CREATOR.createFromParcel(data);
1101            int mode = data.readInt();
1102            grantUriPermission(app, targetPkg, uri, mode);
1103            reply.writeNoException();
1104            return true;
1105        }
1106
1107        case REVOKE_URI_PERMISSION_TRANSACTION: {
1108            data.enforceInterface(IActivityManager.descriptor);
1109            IBinder b = data.readStrongBinder();
1110            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1111            Uri uri = Uri.CREATOR.createFromParcel(data);
1112            int mode = data.readInt();
1113            revokeUriPermission(app, uri, mode);
1114            reply.writeNoException();
1115            return true;
1116        }
1117
1118        case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
1119            data.enforceInterface(IActivityManager.descriptor);
1120            IBinder b = data.readStrongBinder();
1121            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1122            boolean waiting = data.readInt() != 0;
1123            showWaitingForDebugger(app, waiting);
1124            reply.writeNoException();
1125            return true;
1126        }
1127
1128        case GET_MEMORY_INFO_TRANSACTION: {
1129            data.enforceInterface(IActivityManager.descriptor);
1130            ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
1131            getMemoryInfo(mi);
1132            reply.writeNoException();
1133            mi.writeToParcel(reply, 0);
1134            return true;
1135        }
1136
1137        case UNHANDLED_BACK_TRANSACTION: {
1138            data.enforceInterface(IActivityManager.descriptor);
1139            unhandledBack();
1140            reply.writeNoException();
1141            return true;
1142        }
1143
1144        case OPEN_CONTENT_URI_TRANSACTION: {
1145            data.enforceInterface(IActivityManager.descriptor);
1146            Uri uri = Uri.parse(data.readString());
1147            ParcelFileDescriptor pfd = openContentUri(uri);
1148            reply.writeNoException();
1149            if (pfd != null) {
1150                reply.writeInt(1);
1151                pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1152            } else {
1153                reply.writeInt(0);
1154            }
1155            return true;
1156        }
1157
1158        case GOING_TO_SLEEP_TRANSACTION: {
1159            data.enforceInterface(IActivityManager.descriptor);
1160            goingToSleep();
1161            reply.writeNoException();
1162            return true;
1163        }
1164
1165        case WAKING_UP_TRANSACTION: {
1166            data.enforceInterface(IActivityManager.descriptor);
1167            wakingUp();
1168            reply.writeNoException();
1169            return true;
1170        }
1171
1172        case SET_LOCK_SCREEN_SHOWN_TRANSACTION: {
1173            data.enforceInterface(IActivityManager.descriptor);
1174            setLockScreenShown(data.readInt() != 0);
1175            reply.writeNoException();
1176            return true;
1177        }
1178
1179        case SET_DEBUG_APP_TRANSACTION: {
1180            data.enforceInterface(IActivityManager.descriptor);
1181            String pn = data.readString();
1182            boolean wfd = data.readInt() != 0;
1183            boolean per = data.readInt() != 0;
1184            setDebugApp(pn, wfd, per);
1185            reply.writeNoException();
1186            return true;
1187        }
1188
1189        case SET_ALWAYS_FINISH_TRANSACTION: {
1190            data.enforceInterface(IActivityManager.descriptor);
1191            boolean enabled = data.readInt() != 0;
1192            setAlwaysFinish(enabled);
1193            reply.writeNoException();
1194            return true;
1195        }
1196
1197        case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
1198            data.enforceInterface(IActivityManager.descriptor);
1199            IActivityController watcher = IActivityController.Stub.asInterface(
1200                    data.readStrongBinder());
1201            setActivityController(watcher);
1202            reply.writeNoException();
1203            return true;
1204        }
1205
1206        case ENTER_SAFE_MODE_TRANSACTION: {
1207            data.enforceInterface(IActivityManager.descriptor);
1208            enterSafeMode();
1209            reply.writeNoException();
1210            return true;
1211        }
1212
1213        case NOTE_WAKEUP_ALARM_TRANSACTION: {
1214            data.enforceInterface(IActivityManager.descriptor);
1215            IIntentSender is = IIntentSender.Stub.asInterface(
1216                    data.readStrongBinder());
1217            noteWakeupAlarm(is);
1218            reply.writeNoException();
1219            return true;
1220        }
1221
1222        case KILL_PIDS_TRANSACTION: {
1223            data.enforceInterface(IActivityManager.descriptor);
1224            int[] pids = data.createIntArray();
1225            String reason = data.readString();
1226            boolean secure = data.readInt() != 0;
1227            boolean res = killPids(pids, reason, secure);
1228            reply.writeNoException();
1229            reply.writeInt(res ? 1 : 0);
1230            return true;
1231        }
1232
1233        case KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION: {
1234            data.enforceInterface(IActivityManager.descriptor);
1235            String reason = data.readString();
1236            boolean res = killProcessesBelowForeground(reason);
1237            reply.writeNoException();
1238            reply.writeInt(res ? 1 : 0);
1239            return true;
1240        }
1241
1242        case START_RUNNING_TRANSACTION: {
1243            data.enforceInterface(IActivityManager.descriptor);
1244            String pkg = data.readString();
1245            String cls = data.readString();
1246            String action = data.readString();
1247            String indata = data.readString();
1248            startRunning(pkg, cls, action, indata);
1249            reply.writeNoException();
1250            return true;
1251        }
1252
1253        case HANDLE_APPLICATION_CRASH_TRANSACTION: {
1254            data.enforceInterface(IActivityManager.descriptor);
1255            IBinder app = data.readStrongBinder();
1256            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1257            handleApplicationCrash(app, ci);
1258            reply.writeNoException();
1259            return true;
1260        }
1261
1262        case HANDLE_APPLICATION_WTF_TRANSACTION: {
1263            data.enforceInterface(IActivityManager.descriptor);
1264            IBinder app = data.readStrongBinder();
1265            String tag = data.readString();
1266            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1267            boolean res = handleApplicationWtf(app, tag, ci);
1268            reply.writeNoException();
1269            reply.writeInt(res ? 1 : 0);
1270            return true;
1271        }
1272
1273        case HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION: {
1274            data.enforceInterface(IActivityManager.descriptor);
1275            IBinder app = data.readStrongBinder();
1276            int violationMask = data.readInt();
1277            StrictMode.ViolationInfo info = new StrictMode.ViolationInfo(data);
1278            handleApplicationStrictModeViolation(app, violationMask, info);
1279            reply.writeNoException();
1280            return true;
1281        }
1282
1283        case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
1284            data.enforceInterface(IActivityManager.descriptor);
1285            int sig = data.readInt();
1286            signalPersistentProcesses(sig);
1287            reply.writeNoException();
1288            return true;
1289        }
1290
1291        case KILL_BACKGROUND_PROCESSES_TRANSACTION: {
1292            data.enforceInterface(IActivityManager.descriptor);
1293            String packageName = data.readString();
1294            int userId = data.readInt();
1295            killBackgroundProcesses(packageName, userId);
1296            reply.writeNoException();
1297            return true;
1298        }
1299
1300        case KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION: {
1301            data.enforceInterface(IActivityManager.descriptor);
1302            killAllBackgroundProcesses();
1303            reply.writeNoException();
1304            return true;
1305        }
1306
1307        case FORCE_STOP_PACKAGE_TRANSACTION: {
1308            data.enforceInterface(IActivityManager.descriptor);
1309            String packageName = data.readString();
1310            int userId = data.readInt();
1311            forceStopPackage(packageName, userId);
1312            reply.writeNoException();
1313            return true;
1314        }
1315
1316        case GET_MY_MEMORY_STATE_TRANSACTION: {
1317            data.enforceInterface(IActivityManager.descriptor);
1318            ActivityManager.RunningAppProcessInfo info =
1319                    new ActivityManager.RunningAppProcessInfo();
1320            getMyMemoryState(info);
1321            reply.writeNoException();
1322            info.writeToParcel(reply, 0);
1323            return true;
1324        }
1325
1326        case GET_DEVICE_CONFIGURATION_TRANSACTION: {
1327            data.enforceInterface(IActivityManager.descriptor);
1328            ConfigurationInfo config = getDeviceConfigurationInfo();
1329            reply.writeNoException();
1330            config.writeToParcel(reply, 0);
1331            return true;
1332        }
1333
1334        case PROFILE_CONTROL_TRANSACTION: {
1335            data.enforceInterface(IActivityManager.descriptor);
1336            String process = data.readString();
1337            int userId = data.readInt();
1338            boolean start = data.readInt() != 0;
1339            int profileType = data.readInt();
1340            String path = data.readString();
1341            ParcelFileDescriptor fd = data.readInt() != 0
1342                    ? data.readFileDescriptor() : null;
1343            boolean res = profileControl(process, userId, start, path, fd, profileType);
1344            reply.writeNoException();
1345            reply.writeInt(res ? 1 : 0);
1346            return true;
1347        }
1348
1349        case SHUTDOWN_TRANSACTION: {
1350            data.enforceInterface(IActivityManager.descriptor);
1351            boolean res = shutdown(data.readInt());
1352            reply.writeNoException();
1353            reply.writeInt(res ? 1 : 0);
1354            return true;
1355        }
1356
1357        case STOP_APP_SWITCHES_TRANSACTION: {
1358            data.enforceInterface(IActivityManager.descriptor);
1359            stopAppSwitches();
1360            reply.writeNoException();
1361            return true;
1362        }
1363
1364        case RESUME_APP_SWITCHES_TRANSACTION: {
1365            data.enforceInterface(IActivityManager.descriptor);
1366            resumeAppSwitches();
1367            reply.writeNoException();
1368            return true;
1369        }
1370
1371        case PEEK_SERVICE_TRANSACTION: {
1372            data.enforceInterface(IActivityManager.descriptor);
1373            Intent service = Intent.CREATOR.createFromParcel(data);
1374            String resolvedType = data.readString();
1375            IBinder binder = peekService(service, resolvedType);
1376            reply.writeNoException();
1377            reply.writeStrongBinder(binder);
1378            return true;
1379        }
1380
1381        case START_BACKUP_AGENT_TRANSACTION: {
1382            data.enforceInterface(IActivityManager.descriptor);
1383            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1384            int backupRestoreMode = data.readInt();
1385            boolean success = bindBackupAgent(info, backupRestoreMode);
1386            reply.writeNoException();
1387            reply.writeInt(success ? 1 : 0);
1388            return true;
1389        }
1390
1391        case BACKUP_AGENT_CREATED_TRANSACTION: {
1392            data.enforceInterface(IActivityManager.descriptor);
1393            String packageName = data.readString();
1394            IBinder agent = data.readStrongBinder();
1395            backupAgentCreated(packageName, agent);
1396            reply.writeNoException();
1397            return true;
1398        }
1399
1400        case UNBIND_BACKUP_AGENT_TRANSACTION: {
1401            data.enforceInterface(IActivityManager.descriptor);
1402            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1403            unbindBackupAgent(info);
1404            reply.writeNoException();
1405            return true;
1406        }
1407
1408        case KILL_APPLICATION_WITH_APPID_TRANSACTION: {
1409            data.enforceInterface(IActivityManager.descriptor);
1410            String pkg = data.readString();
1411            int appid = data.readInt();
1412            killApplicationWithAppId(pkg, appid);
1413            reply.writeNoException();
1414            return true;
1415        }
1416
1417        case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1418            data.enforceInterface(IActivityManager.descriptor);
1419            String reason = data.readString();
1420            closeSystemDialogs(reason);
1421            reply.writeNoException();
1422            return true;
1423        }
1424
1425        case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1426            data.enforceInterface(IActivityManager.descriptor);
1427            int[] pids = data.createIntArray();
1428            Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
1429            reply.writeNoException();
1430            reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1431            return true;
1432        }
1433
1434        case KILL_APPLICATION_PROCESS_TRANSACTION: {
1435            data.enforceInterface(IActivityManager.descriptor);
1436            String processName = data.readString();
1437            int uid = data.readInt();
1438            killApplicationProcess(processName, uid);
1439            reply.writeNoException();
1440            return true;
1441        }
1442
1443        case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
1444            data.enforceInterface(IActivityManager.descriptor);
1445            IBinder token = data.readStrongBinder();
1446            String packageName = data.readString();
1447            int enterAnim = data.readInt();
1448            int exitAnim = data.readInt();
1449            overridePendingTransition(token, packageName, enterAnim, exitAnim);
1450            reply.writeNoException();
1451            return true;
1452        }
1453
1454        case IS_USER_A_MONKEY_TRANSACTION: {
1455            data.enforceInterface(IActivityManager.descriptor);
1456            boolean areThey = isUserAMonkey();
1457            reply.writeNoException();
1458            reply.writeInt(areThey ? 1 : 0);
1459            return true;
1460        }
1461
1462        case SET_USER_IS_MONKEY_TRANSACTION: {
1463            data.enforceInterface(IActivityManager.descriptor);
1464            final boolean monkey = (data.readInt() == 1);
1465            setUserIsMonkey(monkey);
1466            reply.writeNoException();
1467            return true;
1468        }
1469
1470        case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
1471            data.enforceInterface(IActivityManager.descriptor);
1472            finishHeavyWeightApp();
1473            reply.writeNoException();
1474            return true;
1475        }
1476
1477        case IS_IMMERSIVE_TRANSACTION: {
1478            data.enforceInterface(IActivityManager.descriptor);
1479            IBinder token = data.readStrongBinder();
1480            boolean isit = isImmersive(token);
1481            reply.writeNoException();
1482            reply.writeInt(isit ? 1 : 0);
1483            return true;
1484        }
1485
1486        case SET_IMMERSIVE_TRANSACTION: {
1487            data.enforceInterface(IActivityManager.descriptor);
1488            IBinder token = data.readStrongBinder();
1489            boolean imm = data.readInt() == 1;
1490            setImmersive(token, imm);
1491            reply.writeNoException();
1492            return true;
1493        }
1494
1495        case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
1496            data.enforceInterface(IActivityManager.descriptor);
1497            boolean isit = isTopActivityImmersive();
1498            reply.writeNoException();
1499            reply.writeInt(isit ? 1 : 0);
1500            return true;
1501        }
1502
1503        case CRASH_APPLICATION_TRANSACTION: {
1504            data.enforceInterface(IActivityManager.descriptor);
1505            int uid = data.readInt();
1506            int initialPid = data.readInt();
1507            String packageName = data.readString();
1508            String message = data.readString();
1509            crashApplication(uid, initialPid, packageName, message);
1510            reply.writeNoException();
1511            return true;
1512        }
1513
1514        case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
1515            data.enforceInterface(IActivityManager.descriptor);
1516            Uri uri = Uri.CREATOR.createFromParcel(data);
1517            int userId = data.readInt();
1518            String type = getProviderMimeType(uri, userId);
1519            reply.writeNoException();
1520            reply.writeString(type);
1521            return true;
1522        }
1523
1524        case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
1525            data.enforceInterface(IActivityManager.descriptor);
1526            String name = data.readString();
1527            IBinder perm = newUriPermissionOwner(name);
1528            reply.writeNoException();
1529            reply.writeStrongBinder(perm);
1530            return true;
1531        }
1532
1533        case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1534            data.enforceInterface(IActivityManager.descriptor);
1535            IBinder owner = data.readStrongBinder();
1536            int fromUid = data.readInt();
1537            String targetPkg = data.readString();
1538            Uri uri = Uri.CREATOR.createFromParcel(data);
1539            int mode = data.readInt();
1540            grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode);
1541            reply.writeNoException();
1542            return true;
1543        }
1544
1545        case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1546            data.enforceInterface(IActivityManager.descriptor);
1547            IBinder owner = data.readStrongBinder();
1548            Uri uri = null;
1549            if (data.readInt() != 0) {
1550                Uri.CREATOR.createFromParcel(data);
1551            }
1552            int mode = data.readInt();
1553            revokeUriPermissionFromOwner(owner, uri, mode);
1554            reply.writeNoException();
1555            return true;
1556        }
1557
1558        case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
1559            data.enforceInterface(IActivityManager.descriptor);
1560            int callingUid = data.readInt();
1561            String targetPkg = data.readString();
1562            Uri uri = Uri.CREATOR.createFromParcel(data);
1563            int modeFlags = data.readInt();
1564            int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags);
1565            reply.writeNoException();
1566            reply.writeInt(res);
1567            return true;
1568        }
1569
1570        case DUMP_HEAP_TRANSACTION: {
1571            data.enforceInterface(IActivityManager.descriptor);
1572            String process = data.readString();
1573            int userId = data.readInt();
1574            boolean managed = data.readInt() != 0;
1575            String path = data.readString();
1576            ParcelFileDescriptor fd = data.readInt() != 0
1577                    ? data.readFileDescriptor() : null;
1578            boolean res = dumpHeap(process, userId, managed, path, fd);
1579            reply.writeNoException();
1580            reply.writeInt(res ? 1 : 0);
1581            return true;
1582        }
1583
1584        case START_ACTIVITIES_TRANSACTION:
1585        {
1586            data.enforceInterface(IActivityManager.descriptor);
1587            IBinder b = data.readStrongBinder();
1588            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1589            String callingPackage = data.readString();
1590            Intent[] intents = data.createTypedArray(Intent.CREATOR);
1591            String[] resolvedTypes = data.createStringArray();
1592            IBinder resultTo = data.readStrongBinder();
1593            Bundle options = data.readInt() != 0
1594                    ? Bundle.CREATOR.createFromParcel(data) : null;
1595            int userId = data.readInt();
1596            int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
1597                    options, userId);
1598            reply.writeNoException();
1599            reply.writeInt(result);
1600            return true;
1601        }
1602
1603        case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1604        {
1605            data.enforceInterface(IActivityManager.descriptor);
1606            int mode = getFrontActivityScreenCompatMode();
1607            reply.writeNoException();
1608            reply.writeInt(mode);
1609            return true;
1610        }
1611
1612        case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1613        {
1614            data.enforceInterface(IActivityManager.descriptor);
1615            int mode = data.readInt();
1616            setFrontActivityScreenCompatMode(mode);
1617            reply.writeNoException();
1618            reply.writeInt(mode);
1619            return true;
1620        }
1621
1622        case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1623        {
1624            data.enforceInterface(IActivityManager.descriptor);
1625            String pkg = data.readString();
1626            int mode = getPackageScreenCompatMode(pkg);
1627            reply.writeNoException();
1628            reply.writeInt(mode);
1629            return true;
1630        }
1631
1632        case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1633        {
1634            data.enforceInterface(IActivityManager.descriptor);
1635            String pkg = data.readString();
1636            int mode = data.readInt();
1637            setPackageScreenCompatMode(pkg, mode);
1638            reply.writeNoException();
1639            return true;
1640        }
1641
1642        case SWITCH_USER_TRANSACTION: {
1643            data.enforceInterface(IActivityManager.descriptor);
1644            int userid = data.readInt();
1645            boolean result = switchUser(userid);
1646            reply.writeNoException();
1647            reply.writeInt(result ? 1 : 0);
1648            return true;
1649        }
1650
1651        case STOP_USER_TRANSACTION: {
1652            data.enforceInterface(IActivityManager.descriptor);
1653            int userid = data.readInt();
1654            IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
1655                    data.readStrongBinder());
1656            int result = stopUser(userid, callback);
1657            reply.writeNoException();
1658            reply.writeInt(result);
1659            return true;
1660        }
1661
1662        case GET_CURRENT_USER_TRANSACTION: {
1663            data.enforceInterface(IActivityManager.descriptor);
1664            UserInfo userInfo = getCurrentUser();
1665            reply.writeNoException();
1666            userInfo.writeToParcel(reply, 0);
1667            return true;
1668        }
1669
1670        case IS_USER_RUNNING_TRANSACTION: {
1671            data.enforceInterface(IActivityManager.descriptor);
1672            int userid = data.readInt();
1673            boolean orStopping = data.readInt() != 0;
1674            boolean result = isUserRunning(userid, orStopping);
1675            reply.writeNoException();
1676            reply.writeInt(result ? 1 : 0);
1677            return true;
1678        }
1679
1680        case GET_RUNNING_USER_IDS_TRANSACTION: {
1681            data.enforceInterface(IActivityManager.descriptor);
1682            int[] result = getRunningUserIds();
1683            reply.writeNoException();
1684            reply.writeIntArray(result);
1685            return true;
1686        }
1687
1688        case REMOVE_SUB_TASK_TRANSACTION:
1689        {
1690            data.enforceInterface(IActivityManager.descriptor);
1691            int taskId = data.readInt();
1692            int subTaskIndex = data.readInt();
1693            boolean result = removeSubTask(taskId, subTaskIndex);
1694            reply.writeNoException();
1695            reply.writeInt(result ? 1 : 0);
1696            return true;
1697        }
1698
1699        case REMOVE_TASK_TRANSACTION:
1700        {
1701            data.enforceInterface(IActivityManager.descriptor);
1702            int taskId = data.readInt();
1703            int fl = data.readInt();
1704            boolean result = removeTask(taskId, fl);
1705            reply.writeNoException();
1706            reply.writeInt(result ? 1 : 0);
1707            return true;
1708        }
1709
1710        case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
1711            data.enforceInterface(IActivityManager.descriptor);
1712            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1713                    data.readStrongBinder());
1714            registerProcessObserver(observer);
1715            return true;
1716        }
1717
1718        case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
1719            data.enforceInterface(IActivityManager.descriptor);
1720            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1721                    data.readStrongBinder());
1722            unregisterProcessObserver(observer);
1723            return true;
1724        }
1725
1726        case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1727        {
1728            data.enforceInterface(IActivityManager.descriptor);
1729            String pkg = data.readString();
1730            boolean ask = getPackageAskScreenCompat(pkg);
1731            reply.writeNoException();
1732            reply.writeInt(ask ? 1 : 0);
1733            return true;
1734        }
1735
1736        case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1737        {
1738            data.enforceInterface(IActivityManager.descriptor);
1739            String pkg = data.readString();
1740            boolean ask = data.readInt() != 0;
1741            setPackageAskScreenCompat(pkg, ask);
1742            reply.writeNoException();
1743            return true;
1744        }
1745
1746        case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
1747            data.enforceInterface(IActivityManager.descriptor);
1748            IIntentSender r = IIntentSender.Stub.asInterface(
1749                data.readStrongBinder());
1750            boolean res = isIntentSenderTargetedToPackage(r);
1751            reply.writeNoException();
1752            reply.writeInt(res ? 1 : 0);
1753            return true;
1754        }
1755
1756        case IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION: {
1757            data.enforceInterface(IActivityManager.descriptor);
1758            IIntentSender r = IIntentSender.Stub.asInterface(
1759                data.readStrongBinder());
1760            boolean res = isIntentSenderAnActivity(r);
1761            reply.writeNoException();
1762            reply.writeInt(res ? 1 : 0);
1763            return true;
1764        }
1765
1766        case GET_INTENT_FOR_INTENT_SENDER_TRANSACTION: {
1767            data.enforceInterface(IActivityManager.descriptor);
1768            IIntentSender r = IIntentSender.Stub.asInterface(
1769                data.readStrongBinder());
1770            Intent intent = getIntentForIntentSender(r);
1771            reply.writeNoException();
1772            if (intent != null) {
1773                reply.writeInt(1);
1774                intent.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1775            } else {
1776                reply.writeInt(0);
1777            }
1778            return true;
1779        }
1780
1781        case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
1782            data.enforceInterface(IActivityManager.descriptor);
1783            Configuration config = Configuration.CREATOR.createFromParcel(data);
1784            updatePersistentConfiguration(config);
1785            reply.writeNoException();
1786            return true;
1787        }
1788
1789        case GET_PROCESS_PSS_TRANSACTION: {
1790            data.enforceInterface(IActivityManager.descriptor);
1791            int[] pids = data.createIntArray();
1792            long[] pss = getProcessPss(pids);
1793            reply.writeNoException();
1794            reply.writeLongArray(pss);
1795            return true;
1796        }
1797
1798        case SHOW_BOOT_MESSAGE_TRANSACTION: {
1799            data.enforceInterface(IActivityManager.descriptor);
1800            CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
1801            boolean always = data.readInt() != 0;
1802            showBootMessage(msg, always);
1803            reply.writeNoException();
1804            return true;
1805        }
1806
1807        case DISMISS_KEYGUARD_ON_NEXT_ACTIVITY_TRANSACTION: {
1808            data.enforceInterface(IActivityManager.descriptor);
1809            dismissKeyguardOnNextActivity();
1810            reply.writeNoException();
1811            return true;
1812        }
1813
1814        case TARGET_TASK_AFFINITY_MATCHES_ACTIVITY_TRANSACTION: {
1815            data.enforceInterface(IActivityManager.descriptor);
1816            IBinder token = data.readStrongBinder();
1817            String destAffinity = data.readString();
1818            boolean res = targetTaskAffinityMatchesActivity(token, destAffinity);
1819            reply.writeNoException();
1820            reply.writeInt(res ? 1 : 0);
1821            return true;
1822        }
1823
1824        case NAVIGATE_UP_TO_TRANSACTION: {
1825            data.enforceInterface(IActivityManager.descriptor);
1826            IBinder token = data.readStrongBinder();
1827            Intent target = Intent.CREATOR.createFromParcel(data);
1828            int resultCode = data.readInt();
1829            Intent resultData = null;
1830            if (data.readInt() != 0) {
1831                resultData = Intent.CREATOR.createFromParcel(data);
1832            }
1833            boolean res = navigateUpTo(token, target, resultCode, resultData);
1834            reply.writeNoException();
1835            reply.writeInt(res ? 1 : 0);
1836            return true;
1837        }
1838
1839        case GET_LAUNCHED_FROM_UID_TRANSACTION: {
1840            data.enforceInterface(IActivityManager.descriptor);
1841            IBinder token = data.readStrongBinder();
1842            int res = getLaunchedFromUid(token);
1843            reply.writeNoException();
1844            reply.writeInt(res);
1845            return true;
1846        }
1847
1848        case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
1849            data.enforceInterface(IActivityManager.descriptor);
1850            IBinder token = data.readStrongBinder();
1851            String res = getLaunchedFromPackage(token);
1852            reply.writeNoException();
1853            reply.writeString(res);
1854            return true;
1855        }
1856
1857        case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
1858            data.enforceInterface(IActivityManager.descriptor);
1859            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
1860                    data.readStrongBinder());
1861            registerUserSwitchObserver(observer);
1862            reply.writeNoException();
1863            return true;
1864        }
1865
1866        case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
1867            data.enforceInterface(IActivityManager.descriptor);
1868            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
1869                    data.readStrongBinder());
1870            unregisterUserSwitchObserver(observer);
1871            reply.writeNoException();
1872            return true;
1873        }
1874
1875        case REQUEST_BUG_REPORT_TRANSACTION: {
1876            data.enforceInterface(IActivityManager.descriptor);
1877            requestBugReport();
1878            reply.writeNoException();
1879            return true;
1880        }
1881
1882        case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
1883            data.enforceInterface(IActivityManager.descriptor);
1884            int pid = data.readInt();
1885            boolean aboveSystem = data.readInt() != 0;
1886            long res = inputDispatchingTimedOut(pid, aboveSystem);
1887            reply.writeNoException();
1888            reply.writeLong(res);
1889            return true;
1890        }
1891
1892        case GET_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
1893            data.enforceInterface(IActivityManager.descriptor);
1894            int requestType = data.readInt();
1895            Bundle res = getTopActivityExtras(requestType);
1896            reply.writeNoException();
1897            reply.writeBundle(res);
1898            return true;
1899        }
1900
1901        case REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
1902            data.enforceInterface(IActivityManager.descriptor);
1903            IBinder token = data.readStrongBinder();
1904            Bundle extras = data.readBundle();
1905            reportTopActivityExtras(token, extras);
1906            reply.writeNoException();
1907            return true;
1908        }
1909
1910        case KILL_UID_TRANSACTION: {
1911            data.enforceInterface(IActivityManager.descriptor);
1912            int uid = data.readInt();
1913            String reason = data.readString();
1914            killUid(uid, reason);
1915            reply.writeNoException();
1916            return true;
1917        }
1918
1919        }
1920
1921        return super.onTransact(code, data, reply, flags);
1922    }
1923
1924    public IBinder asBinder() {
1925        return this;
1926    }
1927
1928    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
1929        protected IActivityManager create() {
1930            IBinder b = ServiceManager.getService("activity");
1931            if (false) {
1932                Log.v("ActivityManager", "default service binder = " + b);
1933            }
1934            IActivityManager am = asInterface(b);
1935            if (false) {
1936                Log.v("ActivityManager", "default service = " + am);
1937            }
1938            return am;
1939        }
1940    };
1941}
1942
1943class ActivityManagerProxy implements IActivityManager
1944{
1945    public ActivityManagerProxy(IBinder remote)
1946    {
1947        mRemote = remote;
1948    }
1949
1950    public IBinder asBinder()
1951    {
1952        return mRemote;
1953    }
1954
1955    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
1956            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
1957            int startFlags, String profileFile,
1958            ParcelFileDescriptor profileFd, Bundle options) throws RemoteException {
1959        Parcel data = Parcel.obtain();
1960        Parcel reply = Parcel.obtain();
1961        data.writeInterfaceToken(IActivityManager.descriptor);
1962        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1963        data.writeString(callingPackage);
1964        intent.writeToParcel(data, 0);
1965        data.writeString(resolvedType);
1966        data.writeStrongBinder(resultTo);
1967        data.writeString(resultWho);
1968        data.writeInt(requestCode);
1969        data.writeInt(startFlags);
1970        data.writeString(profileFile);
1971        if (profileFd != null) {
1972            data.writeInt(1);
1973            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1974        } else {
1975            data.writeInt(0);
1976        }
1977        if (options != null) {
1978            data.writeInt(1);
1979            options.writeToParcel(data, 0);
1980        } else {
1981            data.writeInt(0);
1982        }
1983        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1984        reply.readException();
1985        int result = reply.readInt();
1986        reply.recycle();
1987        data.recycle();
1988        return result;
1989    }
1990
1991    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
1992            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
1993            int startFlags, String profileFile,
1994            ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException {
1995        Parcel data = Parcel.obtain();
1996        Parcel reply = Parcel.obtain();
1997        data.writeInterfaceToken(IActivityManager.descriptor);
1998        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1999        data.writeString(callingPackage);
2000        intent.writeToParcel(data, 0);
2001        data.writeString(resolvedType);
2002        data.writeStrongBinder(resultTo);
2003        data.writeString(resultWho);
2004        data.writeInt(requestCode);
2005        data.writeInt(startFlags);
2006        data.writeString(profileFile);
2007        if (profileFd != null) {
2008            data.writeInt(1);
2009            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2010        } else {
2011            data.writeInt(0);
2012        }
2013        if (options != null) {
2014            data.writeInt(1);
2015            options.writeToParcel(data, 0);
2016        } else {
2017            data.writeInt(0);
2018        }
2019        data.writeInt(userId);
2020        mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
2021        reply.readException();
2022        int result = reply.readInt();
2023        reply.recycle();
2024        data.recycle();
2025        return result;
2026    }
2027    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
2028            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2029            int requestCode, int startFlags, String profileFile,
2030            ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException {
2031        Parcel data = Parcel.obtain();
2032        Parcel reply = Parcel.obtain();
2033        data.writeInterfaceToken(IActivityManager.descriptor);
2034        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2035        data.writeString(callingPackage);
2036        intent.writeToParcel(data, 0);
2037        data.writeString(resolvedType);
2038        data.writeStrongBinder(resultTo);
2039        data.writeString(resultWho);
2040        data.writeInt(requestCode);
2041        data.writeInt(startFlags);
2042        data.writeString(profileFile);
2043        if (profileFd != null) {
2044            data.writeInt(1);
2045            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2046        } else {
2047            data.writeInt(0);
2048        }
2049        if (options != null) {
2050            data.writeInt(1);
2051            options.writeToParcel(data, 0);
2052        } else {
2053            data.writeInt(0);
2054        }
2055        data.writeInt(userId);
2056        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
2057        reply.readException();
2058        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
2059        reply.recycle();
2060        data.recycle();
2061        return result;
2062    }
2063    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
2064            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2065            int requestCode, int startFlags, Configuration config,
2066            Bundle options, int userId) throws RemoteException {
2067        Parcel data = Parcel.obtain();
2068        Parcel reply = Parcel.obtain();
2069        data.writeInterfaceToken(IActivityManager.descriptor);
2070        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2071        data.writeString(callingPackage);
2072        intent.writeToParcel(data, 0);
2073        data.writeString(resolvedType);
2074        data.writeStrongBinder(resultTo);
2075        data.writeString(resultWho);
2076        data.writeInt(requestCode);
2077        data.writeInt(startFlags);
2078        config.writeToParcel(data, 0);
2079        if (options != null) {
2080            data.writeInt(1);
2081            options.writeToParcel(data, 0);
2082        } else {
2083            data.writeInt(0);
2084        }
2085        data.writeInt(userId);
2086        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
2087        reply.readException();
2088        int result = reply.readInt();
2089        reply.recycle();
2090        data.recycle();
2091        return result;
2092    }
2093    public int startActivityIntentSender(IApplicationThread caller,
2094            IntentSender intent, Intent fillInIntent, String resolvedType,
2095            IBinder resultTo, String resultWho, int requestCode,
2096            int flagsMask, int flagsValues, Bundle options) throws RemoteException {
2097        Parcel data = Parcel.obtain();
2098        Parcel reply = Parcel.obtain();
2099        data.writeInterfaceToken(IActivityManager.descriptor);
2100        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2101        intent.writeToParcel(data, 0);
2102        if (fillInIntent != null) {
2103            data.writeInt(1);
2104            fillInIntent.writeToParcel(data, 0);
2105        } else {
2106            data.writeInt(0);
2107        }
2108        data.writeString(resolvedType);
2109        data.writeStrongBinder(resultTo);
2110        data.writeString(resultWho);
2111        data.writeInt(requestCode);
2112        data.writeInt(flagsMask);
2113        data.writeInt(flagsValues);
2114        if (options != null) {
2115            data.writeInt(1);
2116            options.writeToParcel(data, 0);
2117        } else {
2118            data.writeInt(0);
2119        }
2120        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
2121        reply.readException();
2122        int result = reply.readInt();
2123        reply.recycle();
2124        data.recycle();
2125        return result;
2126    }
2127    public boolean startNextMatchingActivity(IBinder callingActivity,
2128            Intent intent, Bundle options) throws RemoteException {
2129        Parcel data = Parcel.obtain();
2130        Parcel reply = Parcel.obtain();
2131        data.writeInterfaceToken(IActivityManager.descriptor);
2132        data.writeStrongBinder(callingActivity);
2133        intent.writeToParcel(data, 0);
2134        if (options != null) {
2135            data.writeInt(1);
2136            options.writeToParcel(data, 0);
2137        } else {
2138            data.writeInt(0);
2139        }
2140        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
2141        reply.readException();
2142        int result = reply.readInt();
2143        reply.recycle();
2144        data.recycle();
2145        return result != 0;
2146    }
2147    public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
2148            throws RemoteException {
2149        Parcel data = Parcel.obtain();
2150        Parcel reply = Parcel.obtain();
2151        data.writeInterfaceToken(IActivityManager.descriptor);
2152        data.writeStrongBinder(token);
2153        data.writeInt(resultCode);
2154        if (resultData != null) {
2155            data.writeInt(1);
2156            resultData.writeToParcel(data, 0);
2157        } else {
2158            data.writeInt(0);
2159        }
2160        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
2161        reply.readException();
2162        boolean res = reply.readInt() != 0;
2163        data.recycle();
2164        reply.recycle();
2165        return res;
2166    }
2167    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
2168    {
2169        Parcel data = Parcel.obtain();
2170        Parcel reply = Parcel.obtain();
2171        data.writeInterfaceToken(IActivityManager.descriptor);
2172        data.writeStrongBinder(token);
2173        data.writeString(resultWho);
2174        data.writeInt(requestCode);
2175        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
2176        reply.readException();
2177        data.recycle();
2178        reply.recycle();
2179    }
2180    public boolean finishActivityAffinity(IBinder token) throws RemoteException {
2181        Parcel data = Parcel.obtain();
2182        Parcel reply = Parcel.obtain();
2183        data.writeInterfaceToken(IActivityManager.descriptor);
2184        data.writeStrongBinder(token);
2185        mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
2186        reply.readException();
2187        boolean res = reply.readInt() != 0;
2188        data.recycle();
2189        reply.recycle();
2190        return res;
2191    }
2192    public boolean willActivityBeVisible(IBinder token) throws RemoteException {
2193        Parcel data = Parcel.obtain();
2194        Parcel reply = Parcel.obtain();
2195        data.writeInterfaceToken(IActivityManager.descriptor);
2196        data.writeStrongBinder(token);
2197        mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
2198        reply.readException();
2199        boolean res = reply.readInt() != 0;
2200        data.recycle();
2201        reply.recycle();
2202        return res;
2203    }
2204    public Intent registerReceiver(IApplicationThread caller, String packageName,
2205            IIntentReceiver receiver,
2206            IntentFilter filter, String perm, int userId) throws RemoteException
2207    {
2208        Parcel data = Parcel.obtain();
2209        Parcel reply = Parcel.obtain();
2210        data.writeInterfaceToken(IActivityManager.descriptor);
2211        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2212        data.writeString(packageName);
2213        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
2214        filter.writeToParcel(data, 0);
2215        data.writeString(perm);
2216        data.writeInt(userId);
2217        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2218        reply.readException();
2219        Intent intent = null;
2220        int haveIntent = reply.readInt();
2221        if (haveIntent != 0) {
2222            intent = Intent.CREATOR.createFromParcel(reply);
2223        }
2224        reply.recycle();
2225        data.recycle();
2226        return intent;
2227    }
2228    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
2229    {
2230        Parcel data = Parcel.obtain();
2231        Parcel reply = Parcel.obtain();
2232        data.writeInterfaceToken(IActivityManager.descriptor);
2233        data.writeStrongBinder(receiver.asBinder());
2234        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2235        reply.readException();
2236        data.recycle();
2237        reply.recycle();
2238    }
2239    public int broadcastIntent(IApplicationThread caller,
2240            Intent intent, String resolvedType,  IIntentReceiver resultTo,
2241            int resultCode, String resultData, Bundle map,
2242            String requiredPermission, int appOp, boolean serialized,
2243            boolean sticky, int userId) throws RemoteException
2244    {
2245        Parcel data = Parcel.obtain();
2246        Parcel reply = Parcel.obtain();
2247        data.writeInterfaceToken(IActivityManager.descriptor);
2248        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2249        intent.writeToParcel(data, 0);
2250        data.writeString(resolvedType);
2251        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
2252        data.writeInt(resultCode);
2253        data.writeString(resultData);
2254        data.writeBundle(map);
2255        data.writeString(requiredPermission);
2256        data.writeInt(appOp);
2257        data.writeInt(serialized ? 1 : 0);
2258        data.writeInt(sticky ? 1 : 0);
2259        data.writeInt(userId);
2260        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
2261        reply.readException();
2262        int res = reply.readInt();
2263        reply.recycle();
2264        data.recycle();
2265        return res;
2266    }
2267    public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
2268            throws RemoteException
2269    {
2270        Parcel data = Parcel.obtain();
2271        Parcel reply = Parcel.obtain();
2272        data.writeInterfaceToken(IActivityManager.descriptor);
2273        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2274        intent.writeToParcel(data, 0);
2275        data.writeInt(userId);
2276        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
2277        reply.readException();
2278        data.recycle();
2279        reply.recycle();
2280    }
2281    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
2282    {
2283        Parcel data = Parcel.obtain();
2284        Parcel reply = Parcel.obtain();
2285        data.writeInterfaceToken(IActivityManager.descriptor);
2286        data.writeStrongBinder(who);
2287        data.writeInt(resultCode);
2288        data.writeString(resultData);
2289        data.writeBundle(map);
2290        data.writeInt(abortBroadcast ? 1 : 0);
2291        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2292        reply.readException();
2293        data.recycle();
2294        reply.recycle();
2295    }
2296    public void attachApplication(IApplicationThread app) throws RemoteException
2297    {
2298        Parcel data = Parcel.obtain();
2299        Parcel reply = Parcel.obtain();
2300        data.writeInterfaceToken(IActivityManager.descriptor);
2301        data.writeStrongBinder(app.asBinder());
2302        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
2303        reply.readException();
2304        data.recycle();
2305        reply.recycle();
2306    }
2307    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
2308            throws RemoteException
2309    {
2310        Parcel data = Parcel.obtain();
2311        Parcel reply = Parcel.obtain();
2312        data.writeInterfaceToken(IActivityManager.descriptor);
2313        data.writeStrongBinder(token);
2314        if (config != null) {
2315            data.writeInt(1);
2316            config.writeToParcel(data, 0);
2317        } else {
2318            data.writeInt(0);
2319        }
2320        data.writeInt(stopProfiling ? 1 : 0);
2321        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2322        reply.readException();
2323        data.recycle();
2324        reply.recycle();
2325    }
2326    public void activityResumed(IBinder token) throws RemoteException
2327    {
2328        Parcel data = Parcel.obtain();
2329        Parcel reply = Parcel.obtain();
2330        data.writeInterfaceToken(IActivityManager.descriptor);
2331        data.writeStrongBinder(token);
2332        mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
2333        reply.readException();
2334        data.recycle();
2335        reply.recycle();
2336    }
2337    public void activityPaused(IBinder token) throws RemoteException
2338    {
2339        Parcel data = Parcel.obtain();
2340        Parcel reply = Parcel.obtain();
2341        data.writeInterfaceToken(IActivityManager.descriptor);
2342        data.writeStrongBinder(token);
2343        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
2344        reply.readException();
2345        data.recycle();
2346        reply.recycle();
2347    }
2348    public void activityStopped(IBinder token, Bundle state,
2349            Bitmap thumbnail, CharSequence description) throws RemoteException
2350    {
2351        Parcel data = Parcel.obtain();
2352        Parcel reply = Parcel.obtain();
2353        data.writeInterfaceToken(IActivityManager.descriptor);
2354        data.writeStrongBinder(token);
2355        data.writeBundle(state);
2356        if (thumbnail != null) {
2357            data.writeInt(1);
2358            thumbnail.writeToParcel(data, 0);
2359        } else {
2360            data.writeInt(0);
2361        }
2362        TextUtils.writeToParcel(description, data, 0);
2363        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2364        reply.readException();
2365        data.recycle();
2366        reply.recycle();
2367    }
2368    public void activitySlept(IBinder token) throws RemoteException
2369    {
2370        Parcel data = Parcel.obtain();
2371        Parcel reply = Parcel.obtain();
2372        data.writeInterfaceToken(IActivityManager.descriptor);
2373        data.writeStrongBinder(token);
2374        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2375        reply.readException();
2376        data.recycle();
2377        reply.recycle();
2378    }
2379    public void activityDestroyed(IBinder token) throws RemoteException
2380    {
2381        Parcel data = Parcel.obtain();
2382        Parcel reply = Parcel.obtain();
2383        data.writeInterfaceToken(IActivityManager.descriptor);
2384        data.writeStrongBinder(token);
2385        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2386        reply.readException();
2387        data.recycle();
2388        reply.recycle();
2389    }
2390    public String getCallingPackage(IBinder token) throws RemoteException
2391    {
2392        Parcel data = Parcel.obtain();
2393        Parcel reply = Parcel.obtain();
2394        data.writeInterfaceToken(IActivityManager.descriptor);
2395        data.writeStrongBinder(token);
2396        mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
2397        reply.readException();
2398        String res = reply.readString();
2399        data.recycle();
2400        reply.recycle();
2401        return res;
2402    }
2403    public ComponentName getCallingActivity(IBinder token)
2404            throws RemoteException {
2405        Parcel data = Parcel.obtain();
2406        Parcel reply = Parcel.obtain();
2407        data.writeInterfaceToken(IActivityManager.descriptor);
2408        data.writeStrongBinder(token);
2409        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
2410        reply.readException();
2411        ComponentName res = ComponentName.readFromParcel(reply);
2412        data.recycle();
2413        reply.recycle();
2414        return res;
2415    }
2416    public List getTasks(int maxNum, int flags,
2417            IThumbnailReceiver receiver) throws RemoteException {
2418        Parcel data = Parcel.obtain();
2419        Parcel reply = Parcel.obtain();
2420        data.writeInterfaceToken(IActivityManager.descriptor);
2421        data.writeInt(maxNum);
2422        data.writeInt(flags);
2423        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
2424        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
2425        reply.readException();
2426        ArrayList list = null;
2427        int N = reply.readInt();
2428        if (N >= 0) {
2429            list = new ArrayList();
2430            while (N > 0) {
2431                ActivityManager.RunningTaskInfo info =
2432                        ActivityManager.RunningTaskInfo.CREATOR
2433                        .createFromParcel(reply);
2434                list.add(info);
2435                N--;
2436            }
2437        }
2438        data.recycle();
2439        reply.recycle();
2440        return list;
2441    }
2442    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
2443            int flags, int userId) throws RemoteException {
2444        Parcel data = Parcel.obtain();
2445        Parcel reply = Parcel.obtain();
2446        data.writeInterfaceToken(IActivityManager.descriptor);
2447        data.writeInt(maxNum);
2448        data.writeInt(flags);
2449        data.writeInt(userId);
2450        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
2451        reply.readException();
2452        ArrayList<ActivityManager.RecentTaskInfo> list
2453            = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
2454        data.recycle();
2455        reply.recycle();
2456        return list;
2457    }
2458    public ActivityManager.TaskThumbnails getTaskThumbnails(int id) throws RemoteException {
2459        Parcel data = Parcel.obtain();
2460        Parcel reply = Parcel.obtain();
2461        data.writeInterfaceToken(IActivityManager.descriptor);
2462        data.writeInt(id);
2463        mRemote.transact(GET_TASK_THUMBNAILS_TRANSACTION, data, reply, 0);
2464        reply.readException();
2465        ActivityManager.TaskThumbnails bm = null;
2466        if (reply.readInt() != 0) {
2467            bm = ActivityManager.TaskThumbnails.CREATOR.createFromParcel(reply);
2468        }
2469        data.recycle();
2470        reply.recycle();
2471        return bm;
2472    }
2473    public Bitmap getTaskTopThumbnail(int id) throws RemoteException {
2474        Parcel data = Parcel.obtain();
2475        Parcel reply = Parcel.obtain();
2476        data.writeInterfaceToken(IActivityManager.descriptor);
2477        data.writeInt(id);
2478        mRemote.transact(GET_TASK_TOP_THUMBNAIL_TRANSACTION, data, reply, 0);
2479        reply.readException();
2480        Bitmap bm = null;
2481        if (reply.readInt() != 0) {
2482            bm = Bitmap.CREATOR.createFromParcel(reply);
2483        }
2484        data.recycle();
2485        reply.recycle();
2486        return bm;
2487    }
2488    public List getServices(int maxNum, int flags) throws RemoteException {
2489        Parcel data = Parcel.obtain();
2490        Parcel reply = Parcel.obtain();
2491        data.writeInterfaceToken(IActivityManager.descriptor);
2492        data.writeInt(maxNum);
2493        data.writeInt(flags);
2494        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
2495        reply.readException();
2496        ArrayList list = null;
2497        int N = reply.readInt();
2498        if (N >= 0) {
2499            list = new ArrayList();
2500            while (N > 0) {
2501                ActivityManager.RunningServiceInfo info =
2502                        ActivityManager.RunningServiceInfo.CREATOR
2503                        .createFromParcel(reply);
2504                list.add(info);
2505                N--;
2506            }
2507        }
2508        data.recycle();
2509        reply.recycle();
2510        return list;
2511    }
2512    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
2513            throws RemoteException {
2514        Parcel data = Parcel.obtain();
2515        Parcel reply = Parcel.obtain();
2516        data.writeInterfaceToken(IActivityManager.descriptor);
2517        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
2518        reply.readException();
2519        ArrayList<ActivityManager.ProcessErrorStateInfo> list
2520            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
2521        data.recycle();
2522        reply.recycle();
2523        return list;
2524    }
2525    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
2526            throws RemoteException {
2527        Parcel data = Parcel.obtain();
2528        Parcel reply = Parcel.obtain();
2529        data.writeInterfaceToken(IActivityManager.descriptor);
2530        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
2531        reply.readException();
2532        ArrayList<ActivityManager.RunningAppProcessInfo> list
2533        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
2534        data.recycle();
2535        reply.recycle();
2536        return list;
2537    }
2538    public List<ApplicationInfo> getRunningExternalApplications()
2539            throws RemoteException {
2540        Parcel data = Parcel.obtain();
2541        Parcel reply = Parcel.obtain();
2542        data.writeInterfaceToken(IActivityManager.descriptor);
2543        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
2544        reply.readException();
2545        ArrayList<ApplicationInfo> list
2546        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
2547        data.recycle();
2548        reply.recycle();
2549        return list;
2550    }
2551    public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
2552    {
2553        Parcel data = Parcel.obtain();
2554        Parcel reply = Parcel.obtain();
2555        data.writeInterfaceToken(IActivityManager.descriptor);
2556        data.writeInt(task);
2557        data.writeInt(flags);
2558        if (options != null) {
2559            data.writeInt(1);
2560            options.writeToParcel(data, 0);
2561        } else {
2562            data.writeInt(0);
2563        }
2564        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
2565        reply.readException();
2566        data.recycle();
2567        reply.recycle();
2568    }
2569    public void moveTaskToBack(int task) throws RemoteException
2570    {
2571        Parcel data = Parcel.obtain();
2572        Parcel reply = Parcel.obtain();
2573        data.writeInterfaceToken(IActivityManager.descriptor);
2574        data.writeInt(task);
2575        mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
2576        reply.readException();
2577        data.recycle();
2578        reply.recycle();
2579    }
2580    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
2581            throws RemoteException {
2582        Parcel data = Parcel.obtain();
2583        Parcel reply = Parcel.obtain();
2584        data.writeInterfaceToken(IActivityManager.descriptor);
2585        data.writeStrongBinder(token);
2586        data.writeInt(nonRoot ? 1 : 0);
2587        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
2588        reply.readException();
2589        boolean res = reply.readInt() != 0;
2590        data.recycle();
2591        reply.recycle();
2592        return res;
2593    }
2594    public void moveTaskBackwards(int task) throws RemoteException
2595    {
2596        Parcel data = Parcel.obtain();
2597        Parcel reply = Parcel.obtain();
2598        data.writeInterfaceToken(IActivityManager.descriptor);
2599        data.writeInt(task);
2600        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
2601        reply.readException();
2602        data.recycle();
2603        reply.recycle();
2604    }
2605    @Override
2606    public int createStack(int taskId, int relativeStackId, int position, float weight)
2607            throws RemoteException
2608    {
2609        Parcel data = Parcel.obtain();
2610        Parcel reply = Parcel.obtain();
2611        data.writeInterfaceToken(IActivityManager.descriptor);
2612        data.writeInt(taskId);
2613        data.writeInt(relativeStackId);
2614        data.writeInt(position);
2615        data.writeFloat(weight);
2616        mRemote.transact(CREATE_STACK_TRANSACTION, data, reply, 0);
2617        reply.readException();
2618        int res = reply.readInt();
2619        data.recycle();
2620        reply.recycle();
2621        return res;
2622    }
2623    @Override
2624    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
2625    {
2626        Parcel data = Parcel.obtain();
2627        Parcel reply = Parcel.obtain();
2628        data.writeInterfaceToken(IActivityManager.descriptor);
2629        data.writeInt(taskId);
2630        data.writeInt(stackId);
2631        data.writeInt(toTop ? 1 : 0);
2632        mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
2633        reply.readException();
2634        data.recycle();
2635        reply.recycle();
2636    }
2637    @Override
2638    public void resizeStack(int stackId, float weight) throws RemoteException
2639    {
2640        Parcel data = Parcel.obtain();
2641        Parcel reply = Parcel.obtain();
2642        data.writeInterfaceToken(IActivityManager.descriptor);
2643        data.writeInt(stackId);
2644        data.writeFloat(weight);
2645        mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2646        reply.readException();
2647        data.recycle();
2648        reply.recycle();
2649    }
2650    @Override
2651    public List<ActivityManager.StackInfo> getStacks() throws RemoteException
2652    {
2653        Parcel data = Parcel.obtain();
2654        Parcel reply = Parcel.obtain();
2655        data.writeInterfaceToken(IActivityManager.descriptor);
2656        mRemote.transact(GET_STACKS_TRANSACTION, data, reply, 0);
2657        reply.readException();
2658        ArrayList<ActivityManager.StackInfo> list
2659                = reply.createTypedArrayList(ActivityManager.StackInfo.CREATOR);
2660        data.recycle();
2661        reply.recycle();
2662        return list;
2663    }
2664    @Override
2665    public void setFocusedStack(int stackId) throws RemoteException
2666    {
2667        Parcel data = Parcel.obtain();
2668        Parcel reply = Parcel.obtain();
2669        data.writeInterfaceToken(IActivityManager.descriptor);
2670        data.writeInt(stackId);
2671        mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2672        reply.readException();
2673        data.recycle();
2674        reply.recycle();
2675    }
2676    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
2677    {
2678        Parcel data = Parcel.obtain();
2679        Parcel reply = Parcel.obtain();
2680        data.writeInterfaceToken(IActivityManager.descriptor);
2681        data.writeStrongBinder(token);
2682        data.writeInt(onlyRoot ? 1 : 0);
2683        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
2684        reply.readException();
2685        int res = reply.readInt();
2686        data.recycle();
2687        reply.recycle();
2688        return res;
2689    }
2690    public void reportThumbnail(IBinder token,
2691                                Bitmap thumbnail, CharSequence description) throws RemoteException
2692    {
2693        Parcel data = Parcel.obtain();
2694        Parcel reply = Parcel.obtain();
2695        data.writeInterfaceToken(IActivityManager.descriptor);
2696        data.writeStrongBinder(token);
2697        if (thumbnail != null) {
2698            data.writeInt(1);
2699            thumbnail.writeToParcel(data, 0);
2700        } else {
2701            data.writeInt(0);
2702        }
2703        TextUtils.writeToParcel(description, data, 0);
2704        mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2705        reply.readException();
2706        data.recycle();
2707        reply.recycle();
2708    }
2709    public ContentProviderHolder getContentProvider(IApplicationThread caller,
2710            String name, int userId, boolean stable) throws RemoteException {
2711        Parcel data = Parcel.obtain();
2712        Parcel reply = Parcel.obtain();
2713        data.writeInterfaceToken(IActivityManager.descriptor);
2714        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2715        data.writeString(name);
2716        data.writeInt(userId);
2717        data.writeInt(stable ? 1 : 0);
2718        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
2719        reply.readException();
2720        int res = reply.readInt();
2721        ContentProviderHolder cph = null;
2722        if (res != 0) {
2723            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
2724        }
2725        data.recycle();
2726        reply.recycle();
2727        return cph;
2728    }
2729    public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
2730            throws RemoteException {
2731        Parcel data = Parcel.obtain();
2732        Parcel reply = Parcel.obtain();
2733        data.writeInterfaceToken(IActivityManager.descriptor);
2734        data.writeString(name);
2735        data.writeInt(userId);
2736        data.writeStrongBinder(token);
2737        mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
2738        reply.readException();
2739        int res = reply.readInt();
2740        ContentProviderHolder cph = null;
2741        if (res != 0) {
2742            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
2743        }
2744        data.recycle();
2745        reply.recycle();
2746        return cph;
2747    }
2748    public void publishContentProviders(IApplicationThread caller,
2749            List<ContentProviderHolder> providers) throws RemoteException
2750    {
2751        Parcel data = Parcel.obtain();
2752        Parcel reply = Parcel.obtain();
2753        data.writeInterfaceToken(IActivityManager.descriptor);
2754        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2755        data.writeTypedList(providers);
2756        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
2757        reply.readException();
2758        data.recycle();
2759        reply.recycle();
2760    }
2761    public boolean refContentProvider(IBinder connection, int stable, int unstable)
2762            throws RemoteException {
2763        Parcel data = Parcel.obtain();
2764        Parcel reply = Parcel.obtain();
2765        data.writeInterfaceToken(IActivityManager.descriptor);
2766        data.writeStrongBinder(connection);
2767        data.writeInt(stable);
2768        data.writeInt(unstable);
2769        mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
2770        reply.readException();
2771        boolean res = reply.readInt() != 0;
2772        data.recycle();
2773        reply.recycle();
2774        return res;
2775    }
2776    public void unstableProviderDied(IBinder connection) throws RemoteException {
2777        Parcel data = Parcel.obtain();
2778        Parcel reply = Parcel.obtain();
2779        data.writeInterfaceToken(IActivityManager.descriptor);
2780        data.writeStrongBinder(connection);
2781        mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
2782        reply.readException();
2783        data.recycle();
2784        reply.recycle();
2785    }
2786
2787    public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
2788        Parcel data = Parcel.obtain();
2789        Parcel reply = Parcel.obtain();
2790        data.writeInterfaceToken(IActivityManager.descriptor);
2791        data.writeStrongBinder(connection);
2792        data.writeInt(stable ? 1 : 0);
2793        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
2794        reply.readException();
2795        data.recycle();
2796        reply.recycle();
2797    }
2798
2799    public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
2800        Parcel data = Parcel.obtain();
2801        Parcel reply = Parcel.obtain();
2802        data.writeInterfaceToken(IActivityManager.descriptor);
2803        data.writeString(name);
2804        data.writeStrongBinder(token);
2805        mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
2806        reply.readException();
2807        data.recycle();
2808        reply.recycle();
2809    }
2810
2811    public PendingIntent getRunningServiceControlPanel(ComponentName service)
2812            throws RemoteException
2813    {
2814        Parcel data = Parcel.obtain();
2815        Parcel reply = Parcel.obtain();
2816        data.writeInterfaceToken(IActivityManager.descriptor);
2817        service.writeToParcel(data, 0);
2818        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
2819        reply.readException();
2820        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
2821        data.recycle();
2822        reply.recycle();
2823        return res;
2824    }
2825
2826    public ComponentName startService(IApplicationThread caller, Intent service,
2827            String resolvedType, int userId) throws RemoteException
2828    {
2829        Parcel data = Parcel.obtain();
2830        Parcel reply = Parcel.obtain();
2831        data.writeInterfaceToken(IActivityManager.descriptor);
2832        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2833        service.writeToParcel(data, 0);
2834        data.writeString(resolvedType);
2835        data.writeInt(userId);
2836        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
2837        reply.readException();
2838        ComponentName res = ComponentName.readFromParcel(reply);
2839        data.recycle();
2840        reply.recycle();
2841        return res;
2842    }
2843    public int stopService(IApplicationThread caller, Intent service,
2844            String resolvedType, int userId) throws RemoteException
2845    {
2846        Parcel data = Parcel.obtain();
2847        Parcel reply = Parcel.obtain();
2848        data.writeInterfaceToken(IActivityManager.descriptor);
2849        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2850        service.writeToParcel(data, 0);
2851        data.writeString(resolvedType);
2852        data.writeInt(userId);
2853        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
2854        reply.readException();
2855        int res = reply.readInt();
2856        reply.recycle();
2857        data.recycle();
2858        return res;
2859    }
2860    public boolean stopServiceToken(ComponentName className, IBinder token,
2861            int startId) throws RemoteException {
2862        Parcel data = Parcel.obtain();
2863        Parcel reply = Parcel.obtain();
2864        data.writeInterfaceToken(IActivityManager.descriptor);
2865        ComponentName.writeToParcel(className, data);
2866        data.writeStrongBinder(token);
2867        data.writeInt(startId);
2868        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
2869        reply.readException();
2870        boolean res = reply.readInt() != 0;
2871        data.recycle();
2872        reply.recycle();
2873        return res;
2874    }
2875    public void setServiceForeground(ComponentName className, IBinder token,
2876            int id, Notification notification, boolean removeNotification) throws RemoteException {
2877        Parcel data = Parcel.obtain();
2878        Parcel reply = Parcel.obtain();
2879        data.writeInterfaceToken(IActivityManager.descriptor);
2880        ComponentName.writeToParcel(className, data);
2881        data.writeStrongBinder(token);
2882        data.writeInt(id);
2883        if (notification != null) {
2884            data.writeInt(1);
2885            notification.writeToParcel(data, 0);
2886        } else {
2887            data.writeInt(0);
2888        }
2889        data.writeInt(removeNotification ? 1 : 0);
2890        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
2891        reply.readException();
2892        data.recycle();
2893        reply.recycle();
2894    }
2895    public int bindService(IApplicationThread caller, IBinder token,
2896            Intent service, String resolvedType, IServiceConnection connection,
2897            int flags, int userId) throws RemoteException {
2898        Parcel data = Parcel.obtain();
2899        Parcel reply = Parcel.obtain();
2900        data.writeInterfaceToken(IActivityManager.descriptor);
2901        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2902        data.writeStrongBinder(token);
2903        service.writeToParcel(data, 0);
2904        data.writeString(resolvedType);
2905        data.writeStrongBinder(connection.asBinder());
2906        data.writeInt(flags);
2907        data.writeInt(userId);
2908        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
2909        reply.readException();
2910        int res = reply.readInt();
2911        data.recycle();
2912        reply.recycle();
2913        return res;
2914    }
2915    public boolean unbindService(IServiceConnection connection) throws RemoteException
2916    {
2917        Parcel data = Parcel.obtain();
2918        Parcel reply = Parcel.obtain();
2919        data.writeInterfaceToken(IActivityManager.descriptor);
2920        data.writeStrongBinder(connection.asBinder());
2921        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
2922        reply.readException();
2923        boolean res = reply.readInt() != 0;
2924        data.recycle();
2925        reply.recycle();
2926        return res;
2927    }
2928
2929    public void publishService(IBinder token,
2930            Intent intent, IBinder service) throws RemoteException {
2931        Parcel data = Parcel.obtain();
2932        Parcel reply = Parcel.obtain();
2933        data.writeInterfaceToken(IActivityManager.descriptor);
2934        data.writeStrongBinder(token);
2935        intent.writeToParcel(data, 0);
2936        data.writeStrongBinder(service);
2937        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
2938        reply.readException();
2939        data.recycle();
2940        reply.recycle();
2941    }
2942
2943    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
2944            throws RemoteException {
2945        Parcel data = Parcel.obtain();
2946        Parcel reply = Parcel.obtain();
2947        data.writeInterfaceToken(IActivityManager.descriptor);
2948        data.writeStrongBinder(token);
2949        intent.writeToParcel(data, 0);
2950        data.writeInt(doRebind ? 1 : 0);
2951        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
2952        reply.readException();
2953        data.recycle();
2954        reply.recycle();
2955    }
2956
2957    public void serviceDoneExecuting(IBinder token, int type, int startId,
2958            int res) throws RemoteException {
2959        Parcel data = Parcel.obtain();
2960        Parcel reply = Parcel.obtain();
2961        data.writeInterfaceToken(IActivityManager.descriptor);
2962        data.writeStrongBinder(token);
2963        data.writeInt(type);
2964        data.writeInt(startId);
2965        data.writeInt(res);
2966        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2967        reply.readException();
2968        data.recycle();
2969        reply.recycle();
2970    }
2971
2972    public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
2973        Parcel data = Parcel.obtain();
2974        Parcel reply = Parcel.obtain();
2975        data.writeInterfaceToken(IActivityManager.descriptor);
2976        service.writeToParcel(data, 0);
2977        data.writeString(resolvedType);
2978        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
2979        reply.readException();
2980        IBinder binder = reply.readStrongBinder();
2981        reply.recycle();
2982        data.recycle();
2983        return binder;
2984    }
2985
2986    public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
2987            throws RemoteException {
2988        Parcel data = Parcel.obtain();
2989        Parcel reply = Parcel.obtain();
2990        data.writeInterfaceToken(IActivityManager.descriptor);
2991        app.writeToParcel(data, 0);
2992        data.writeInt(backupRestoreMode);
2993        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
2994        reply.readException();
2995        boolean success = reply.readInt() != 0;
2996        reply.recycle();
2997        data.recycle();
2998        return success;
2999    }
3000
3001    public void clearPendingBackup() throws RemoteException {
3002        Parcel data = Parcel.obtain();
3003        Parcel reply = Parcel.obtain();
3004        data.writeInterfaceToken(IActivityManager.descriptor);
3005        mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
3006        reply.recycle();
3007        data.recycle();
3008    }
3009
3010    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
3011        Parcel data = Parcel.obtain();
3012        Parcel reply = Parcel.obtain();
3013        data.writeInterfaceToken(IActivityManager.descriptor);
3014        data.writeString(packageName);
3015        data.writeStrongBinder(agent);
3016        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
3017        reply.recycle();
3018        data.recycle();
3019    }
3020
3021    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
3022        Parcel data = Parcel.obtain();
3023        Parcel reply = Parcel.obtain();
3024        data.writeInterfaceToken(IActivityManager.descriptor);
3025        app.writeToParcel(data, 0);
3026        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
3027        reply.readException();
3028        reply.recycle();
3029        data.recycle();
3030    }
3031
3032    public boolean startInstrumentation(ComponentName className, String profileFile,
3033            int flags, Bundle arguments, IInstrumentationWatcher watcher,
3034            IUiAutomationConnection connection, int userId) throws RemoteException {
3035        Parcel data = Parcel.obtain();
3036        Parcel reply = Parcel.obtain();
3037        data.writeInterfaceToken(IActivityManager.descriptor);
3038        ComponentName.writeToParcel(className, data);
3039        data.writeString(profileFile);
3040        data.writeInt(flags);
3041        data.writeBundle(arguments);
3042        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
3043        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
3044        data.writeInt(userId);
3045        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3046        reply.readException();
3047        boolean res = reply.readInt() != 0;
3048        reply.recycle();
3049        data.recycle();
3050        return res;
3051    }
3052
3053    public void finishInstrumentation(IApplicationThread target,
3054            int resultCode, Bundle results) throws RemoteException {
3055        Parcel data = Parcel.obtain();
3056        Parcel reply = Parcel.obtain();
3057        data.writeInterfaceToken(IActivityManager.descriptor);
3058        data.writeStrongBinder(target != null ? target.asBinder() : null);
3059        data.writeInt(resultCode);
3060        data.writeBundle(results);
3061        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3062        reply.readException();
3063        data.recycle();
3064        reply.recycle();
3065    }
3066    public Configuration getConfiguration() throws RemoteException
3067    {
3068        Parcel data = Parcel.obtain();
3069        Parcel reply = Parcel.obtain();
3070        data.writeInterfaceToken(IActivityManager.descriptor);
3071        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
3072        reply.readException();
3073        Configuration res = Configuration.CREATOR.createFromParcel(reply);
3074        reply.recycle();
3075        data.recycle();
3076        return res;
3077    }
3078    public void updateConfiguration(Configuration values) throws RemoteException
3079    {
3080        Parcel data = Parcel.obtain();
3081        Parcel reply = Parcel.obtain();
3082        data.writeInterfaceToken(IActivityManager.descriptor);
3083        values.writeToParcel(data, 0);
3084        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
3085        reply.readException();
3086        data.recycle();
3087        reply.recycle();
3088    }
3089    public void setRequestedOrientation(IBinder token, int requestedOrientation)
3090            throws RemoteException {
3091        Parcel data = Parcel.obtain();
3092        Parcel reply = Parcel.obtain();
3093        data.writeInterfaceToken(IActivityManager.descriptor);
3094        data.writeStrongBinder(token);
3095        data.writeInt(requestedOrientation);
3096        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3097        reply.readException();
3098        data.recycle();
3099        reply.recycle();
3100    }
3101    public int getRequestedOrientation(IBinder token) throws RemoteException {
3102        Parcel data = Parcel.obtain();
3103        Parcel reply = Parcel.obtain();
3104        data.writeInterfaceToken(IActivityManager.descriptor);
3105        data.writeStrongBinder(token);
3106        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3107        reply.readException();
3108        int res = reply.readInt();
3109        data.recycle();
3110        reply.recycle();
3111        return res;
3112    }
3113    public ComponentName getActivityClassForToken(IBinder token)
3114            throws RemoteException {
3115        Parcel data = Parcel.obtain();
3116        Parcel reply = Parcel.obtain();
3117        data.writeInterfaceToken(IActivityManager.descriptor);
3118        data.writeStrongBinder(token);
3119        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
3120        reply.readException();
3121        ComponentName res = ComponentName.readFromParcel(reply);
3122        data.recycle();
3123        reply.recycle();
3124        return res;
3125    }
3126    public String getPackageForToken(IBinder token) throws RemoteException
3127    {
3128        Parcel data = Parcel.obtain();
3129        Parcel reply = Parcel.obtain();
3130        data.writeInterfaceToken(IActivityManager.descriptor);
3131        data.writeStrongBinder(token);
3132        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
3133        reply.readException();
3134        String res = reply.readString();
3135        data.recycle();
3136        reply.recycle();
3137        return res;
3138    }
3139    public IIntentSender getIntentSender(int type,
3140            String packageName, IBinder token, String resultWho,
3141            int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
3142            Bundle options, int userId) throws RemoteException {
3143        Parcel data = Parcel.obtain();
3144        Parcel reply = Parcel.obtain();
3145        data.writeInterfaceToken(IActivityManager.descriptor);
3146        data.writeInt(type);
3147        data.writeString(packageName);
3148        data.writeStrongBinder(token);
3149        data.writeString(resultWho);
3150        data.writeInt(requestCode);
3151        if (intents != null) {
3152            data.writeInt(1);
3153            data.writeTypedArray(intents, 0);
3154            data.writeStringArray(resolvedTypes);
3155        } else {
3156            data.writeInt(0);
3157        }
3158        data.writeInt(flags);
3159        if (options != null) {
3160            data.writeInt(1);
3161            options.writeToParcel(data, 0);
3162        } else {
3163            data.writeInt(0);
3164        }
3165        data.writeInt(userId);
3166        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
3167        reply.readException();
3168        IIntentSender res = IIntentSender.Stub.asInterface(
3169            reply.readStrongBinder());
3170        data.recycle();
3171        reply.recycle();
3172        return res;
3173    }
3174    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
3175        Parcel data = Parcel.obtain();
3176        Parcel reply = Parcel.obtain();
3177        data.writeInterfaceToken(IActivityManager.descriptor);
3178        data.writeStrongBinder(sender.asBinder());
3179        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
3180        reply.readException();
3181        data.recycle();
3182        reply.recycle();
3183    }
3184    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
3185        Parcel data = Parcel.obtain();
3186        Parcel reply = Parcel.obtain();
3187        data.writeInterfaceToken(IActivityManager.descriptor);
3188        data.writeStrongBinder(sender.asBinder());
3189        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
3190        reply.readException();
3191        String res = reply.readString();
3192        data.recycle();
3193        reply.recycle();
3194        return res;
3195    }
3196    public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
3197        Parcel data = Parcel.obtain();
3198        Parcel reply = Parcel.obtain();
3199        data.writeInterfaceToken(IActivityManager.descriptor);
3200        data.writeStrongBinder(sender.asBinder());
3201        mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
3202        reply.readException();
3203        int res = reply.readInt();
3204        data.recycle();
3205        reply.recycle();
3206        return res;
3207    }
3208    public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
3209            boolean requireFull, String name, String callerPackage) throws RemoteException {
3210        Parcel data = Parcel.obtain();
3211        Parcel reply = Parcel.obtain();
3212        data.writeInterfaceToken(IActivityManager.descriptor);
3213        data.writeInt(callingPid);
3214        data.writeInt(callingUid);
3215        data.writeInt(userId);
3216        data.writeInt(allowAll ? 1 : 0);
3217        data.writeInt(requireFull ? 1 : 0);
3218        data.writeString(name);
3219        data.writeString(callerPackage);
3220        mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
3221        reply.readException();
3222        int res = reply.readInt();
3223        data.recycle();
3224        reply.recycle();
3225        return res;
3226    }
3227    public void setProcessLimit(int max) throws RemoteException
3228    {
3229        Parcel data = Parcel.obtain();
3230        Parcel reply = Parcel.obtain();
3231        data.writeInterfaceToken(IActivityManager.descriptor);
3232        data.writeInt(max);
3233        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
3234        reply.readException();
3235        data.recycle();
3236        reply.recycle();
3237    }
3238    public int getProcessLimit() throws RemoteException
3239    {
3240        Parcel data = Parcel.obtain();
3241        Parcel reply = Parcel.obtain();
3242        data.writeInterfaceToken(IActivityManager.descriptor);
3243        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
3244        reply.readException();
3245        int res = reply.readInt();
3246        data.recycle();
3247        reply.recycle();
3248        return res;
3249    }
3250    public void setProcessForeground(IBinder token, int pid,
3251            boolean isForeground) throws RemoteException {
3252        Parcel data = Parcel.obtain();
3253        Parcel reply = Parcel.obtain();
3254        data.writeInterfaceToken(IActivityManager.descriptor);
3255        data.writeStrongBinder(token);
3256        data.writeInt(pid);
3257        data.writeInt(isForeground ? 1 : 0);
3258        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
3259        reply.readException();
3260        data.recycle();
3261        reply.recycle();
3262    }
3263    public int checkPermission(String permission, int pid, int uid)
3264            throws RemoteException {
3265        Parcel data = Parcel.obtain();
3266        Parcel reply = Parcel.obtain();
3267        data.writeInterfaceToken(IActivityManager.descriptor);
3268        data.writeString(permission);
3269        data.writeInt(pid);
3270        data.writeInt(uid);
3271        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
3272        reply.readException();
3273        int res = reply.readInt();
3274        data.recycle();
3275        reply.recycle();
3276        return res;
3277    }
3278    public boolean clearApplicationUserData(final String packageName,
3279            final IPackageDataObserver observer, final int userId) throws RemoteException {
3280        Parcel data = Parcel.obtain();
3281        Parcel reply = Parcel.obtain();
3282        data.writeInterfaceToken(IActivityManager.descriptor);
3283        data.writeString(packageName);
3284        data.writeStrongBinder(observer.asBinder());
3285        data.writeInt(userId);
3286        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
3287        reply.readException();
3288        boolean res = reply.readInt() != 0;
3289        data.recycle();
3290        reply.recycle();
3291        return res;
3292    }
3293    public int checkUriPermission(Uri uri, int pid, int uid, int mode)
3294            throws RemoteException {
3295        Parcel data = Parcel.obtain();
3296        Parcel reply = Parcel.obtain();
3297        data.writeInterfaceToken(IActivityManager.descriptor);
3298        uri.writeToParcel(data, 0);
3299        data.writeInt(pid);
3300        data.writeInt(uid);
3301        data.writeInt(mode);
3302        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
3303        reply.readException();
3304        int res = reply.readInt();
3305        data.recycle();
3306        reply.recycle();
3307        return res;
3308    }
3309    public void grantUriPermission(IApplicationThread caller, String targetPkg,
3310            Uri uri, int mode) throws RemoteException {
3311        Parcel data = Parcel.obtain();
3312        Parcel reply = Parcel.obtain();
3313        data.writeInterfaceToken(IActivityManager.descriptor);
3314        data.writeStrongBinder(caller.asBinder());
3315        data.writeString(targetPkg);
3316        uri.writeToParcel(data, 0);
3317        data.writeInt(mode);
3318        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3319        reply.readException();
3320        data.recycle();
3321        reply.recycle();
3322    }
3323    public void revokeUriPermission(IApplicationThread caller, Uri uri,
3324            int mode) throws RemoteException {
3325        Parcel data = Parcel.obtain();
3326        Parcel reply = Parcel.obtain();
3327        data.writeInterfaceToken(IActivityManager.descriptor);
3328        data.writeStrongBinder(caller.asBinder());
3329        uri.writeToParcel(data, 0);
3330        data.writeInt(mode);
3331        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3332        reply.readException();
3333        data.recycle();
3334        reply.recycle();
3335    }
3336    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
3337            throws RemoteException {
3338        Parcel data = Parcel.obtain();
3339        Parcel reply = Parcel.obtain();
3340        data.writeInterfaceToken(IActivityManager.descriptor);
3341        data.writeStrongBinder(who.asBinder());
3342        data.writeInt(waiting ? 1 : 0);
3343        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
3344        reply.readException();
3345        data.recycle();
3346        reply.recycle();
3347    }
3348    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
3349        Parcel data = Parcel.obtain();
3350        Parcel reply = Parcel.obtain();
3351        data.writeInterfaceToken(IActivityManager.descriptor);
3352        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
3353        reply.readException();
3354        outInfo.readFromParcel(reply);
3355        data.recycle();
3356        reply.recycle();
3357    }
3358    public void unhandledBack() throws RemoteException
3359    {
3360        Parcel data = Parcel.obtain();
3361        Parcel reply = Parcel.obtain();
3362        data.writeInterfaceToken(IActivityManager.descriptor);
3363        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
3364        reply.readException();
3365        data.recycle();
3366        reply.recycle();
3367    }
3368    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
3369    {
3370        Parcel data = Parcel.obtain();
3371        Parcel reply = Parcel.obtain();
3372        data.writeInterfaceToken(IActivityManager.descriptor);
3373        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
3374        reply.readException();
3375        ParcelFileDescriptor pfd = null;
3376        if (reply.readInt() != 0) {
3377            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
3378        }
3379        data.recycle();
3380        reply.recycle();
3381        return pfd;
3382    }
3383    public void goingToSleep() throws RemoteException
3384    {
3385        Parcel data = Parcel.obtain();
3386        Parcel reply = Parcel.obtain();
3387        data.writeInterfaceToken(IActivityManager.descriptor);
3388        mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0);
3389        reply.readException();
3390        data.recycle();
3391        reply.recycle();
3392    }
3393    public void wakingUp() throws RemoteException
3394    {
3395        Parcel data = Parcel.obtain();
3396        Parcel reply = Parcel.obtain();
3397        data.writeInterfaceToken(IActivityManager.descriptor);
3398        mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0);
3399        reply.readException();
3400        data.recycle();
3401        reply.recycle();
3402    }
3403    public void setLockScreenShown(boolean shown) throws RemoteException
3404    {
3405        Parcel data = Parcel.obtain();
3406        Parcel reply = Parcel.obtain();
3407        data.writeInterfaceToken(IActivityManager.descriptor);
3408        data.writeInt(shown ? 1 : 0);
3409        mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
3410        reply.readException();
3411        data.recycle();
3412        reply.recycle();
3413    }
3414    public void setDebugApp(
3415        String packageName, boolean waitForDebugger, boolean persistent)
3416        throws RemoteException
3417    {
3418        Parcel data = Parcel.obtain();
3419        Parcel reply = Parcel.obtain();
3420        data.writeInterfaceToken(IActivityManager.descriptor);
3421        data.writeString(packageName);
3422        data.writeInt(waitForDebugger ? 1 : 0);
3423        data.writeInt(persistent ? 1 : 0);
3424        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
3425        reply.readException();
3426        data.recycle();
3427        reply.recycle();
3428    }
3429    public void setAlwaysFinish(boolean enabled) throws RemoteException
3430    {
3431        Parcel data = Parcel.obtain();
3432        Parcel reply = Parcel.obtain();
3433        data.writeInterfaceToken(IActivityManager.descriptor);
3434        data.writeInt(enabled ? 1 : 0);
3435        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
3436        reply.readException();
3437        data.recycle();
3438        reply.recycle();
3439    }
3440    public void setActivityController(IActivityController watcher) throws RemoteException
3441    {
3442        Parcel data = Parcel.obtain();
3443        Parcel reply = Parcel.obtain();
3444        data.writeInterfaceToken(IActivityManager.descriptor);
3445        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
3446        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
3447        reply.readException();
3448        data.recycle();
3449        reply.recycle();
3450    }
3451    public void enterSafeMode() throws RemoteException {
3452        Parcel data = Parcel.obtain();
3453        data.writeInterfaceToken(IActivityManager.descriptor);
3454        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
3455        data.recycle();
3456    }
3457    public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
3458        Parcel data = Parcel.obtain();
3459        data.writeStrongBinder(sender.asBinder());
3460        data.writeInterfaceToken(IActivityManager.descriptor);
3461        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
3462        data.recycle();
3463    }
3464    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
3465        Parcel data = Parcel.obtain();
3466        Parcel reply = Parcel.obtain();
3467        data.writeInterfaceToken(IActivityManager.descriptor);
3468        data.writeIntArray(pids);
3469        data.writeString(reason);
3470        data.writeInt(secure ? 1 : 0);
3471        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
3472        reply.readException();
3473        boolean res = reply.readInt() != 0;
3474        data.recycle();
3475        reply.recycle();
3476        return res;
3477    }
3478    @Override
3479    public boolean killProcessesBelowForeground(String reason) throws RemoteException {
3480        Parcel data = Parcel.obtain();
3481        Parcel reply = Parcel.obtain();
3482        data.writeInterfaceToken(IActivityManager.descriptor);
3483        data.writeString(reason);
3484        mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
3485        boolean res = reply.readInt() != 0;
3486        data.recycle();
3487        reply.recycle();
3488        return res;
3489    }
3490    public void startRunning(String pkg, String cls, String action,
3491            String indata) throws RemoteException {
3492        Parcel data = Parcel.obtain();
3493        Parcel reply = Parcel.obtain();
3494        data.writeInterfaceToken(IActivityManager.descriptor);
3495        data.writeString(pkg);
3496        data.writeString(cls);
3497        data.writeString(action);
3498        data.writeString(indata);
3499        mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0);
3500        reply.readException();
3501        data.recycle();
3502        reply.recycle();
3503    }
3504    public boolean testIsSystemReady()
3505    {
3506        /* this base class version is never called */
3507        return true;
3508    }
3509    public void handleApplicationCrash(IBinder app,
3510            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
3511    {
3512        Parcel data = Parcel.obtain();
3513        Parcel reply = Parcel.obtain();
3514        data.writeInterfaceToken(IActivityManager.descriptor);
3515        data.writeStrongBinder(app);
3516        crashInfo.writeToParcel(data, 0);
3517        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
3518        reply.readException();
3519        reply.recycle();
3520        data.recycle();
3521    }
3522
3523    public boolean handleApplicationWtf(IBinder app, String tag,
3524            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
3525    {
3526        Parcel data = Parcel.obtain();
3527        Parcel reply = Parcel.obtain();
3528        data.writeInterfaceToken(IActivityManager.descriptor);
3529        data.writeStrongBinder(app);
3530        data.writeString(tag);
3531        crashInfo.writeToParcel(data, 0);
3532        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
3533        reply.readException();
3534        boolean res = reply.readInt() != 0;
3535        reply.recycle();
3536        data.recycle();
3537        return res;
3538    }
3539
3540    public void handleApplicationStrictModeViolation(IBinder app,
3541            int violationMask,
3542            StrictMode.ViolationInfo info) throws RemoteException
3543    {
3544        Parcel data = Parcel.obtain();
3545        Parcel reply = Parcel.obtain();
3546        data.writeInterfaceToken(IActivityManager.descriptor);
3547        data.writeStrongBinder(app);
3548        data.writeInt(violationMask);
3549        info.writeToParcel(data, 0);
3550        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
3551        reply.readException();
3552        reply.recycle();
3553        data.recycle();
3554    }
3555
3556    public void signalPersistentProcesses(int sig) throws RemoteException {
3557        Parcel data = Parcel.obtain();
3558        Parcel reply = Parcel.obtain();
3559        data.writeInterfaceToken(IActivityManager.descriptor);
3560        data.writeInt(sig);
3561        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
3562        reply.readException();
3563        data.recycle();
3564        reply.recycle();
3565    }
3566
3567    public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
3568        Parcel data = Parcel.obtain();
3569        Parcel reply = Parcel.obtain();
3570        data.writeInterfaceToken(IActivityManager.descriptor);
3571        data.writeString(packageName);
3572        data.writeInt(userId);
3573        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
3574        reply.readException();
3575        data.recycle();
3576        reply.recycle();
3577    }
3578
3579    public void killAllBackgroundProcesses() throws RemoteException {
3580        Parcel data = Parcel.obtain();
3581        Parcel reply = Parcel.obtain();
3582        data.writeInterfaceToken(IActivityManager.descriptor);
3583        mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
3584        reply.readException();
3585        data.recycle();
3586        reply.recycle();
3587    }
3588
3589    public void forceStopPackage(String packageName, int userId) throws RemoteException {
3590        Parcel data = Parcel.obtain();
3591        Parcel reply = Parcel.obtain();
3592        data.writeInterfaceToken(IActivityManager.descriptor);
3593        data.writeString(packageName);
3594        data.writeInt(userId);
3595        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
3596        reply.readException();
3597        data.recycle();
3598        reply.recycle();
3599    }
3600
3601    public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
3602            throws RemoteException
3603    {
3604        Parcel data = Parcel.obtain();
3605        Parcel reply = Parcel.obtain();
3606        data.writeInterfaceToken(IActivityManager.descriptor);
3607        mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
3608        reply.readException();
3609        outInfo.readFromParcel(reply);
3610        reply.recycle();
3611        data.recycle();
3612    }
3613
3614    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
3615    {
3616        Parcel data = Parcel.obtain();
3617        Parcel reply = Parcel.obtain();
3618        data.writeInterfaceToken(IActivityManager.descriptor);
3619        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
3620        reply.readException();
3621        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
3622        reply.recycle();
3623        data.recycle();
3624        return res;
3625    }
3626
3627    public boolean profileControl(String process, int userId, boolean start,
3628            String path, ParcelFileDescriptor fd, int profileType) throws RemoteException
3629    {
3630        Parcel data = Parcel.obtain();
3631        Parcel reply = Parcel.obtain();
3632        data.writeInterfaceToken(IActivityManager.descriptor);
3633        data.writeString(process);
3634        data.writeInt(userId);
3635        data.writeInt(start ? 1 : 0);
3636        data.writeInt(profileType);
3637        data.writeString(path);
3638        if (fd != null) {
3639            data.writeInt(1);
3640            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3641        } else {
3642            data.writeInt(0);
3643        }
3644        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
3645        reply.readException();
3646        boolean res = reply.readInt() != 0;
3647        reply.recycle();
3648        data.recycle();
3649        return res;
3650    }
3651
3652    public boolean shutdown(int timeout) throws RemoteException
3653    {
3654        Parcel data = Parcel.obtain();
3655        Parcel reply = Parcel.obtain();
3656        data.writeInterfaceToken(IActivityManager.descriptor);
3657        data.writeInt(timeout);
3658        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
3659        reply.readException();
3660        boolean res = reply.readInt() != 0;
3661        reply.recycle();
3662        data.recycle();
3663        return res;
3664    }
3665
3666    public void stopAppSwitches() throws RemoteException {
3667        Parcel data = Parcel.obtain();
3668        Parcel reply = Parcel.obtain();
3669        data.writeInterfaceToken(IActivityManager.descriptor);
3670        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
3671        reply.readException();
3672        reply.recycle();
3673        data.recycle();
3674    }
3675
3676    public void resumeAppSwitches() throws RemoteException {
3677        Parcel data = Parcel.obtain();
3678        Parcel reply = Parcel.obtain();
3679        data.writeInterfaceToken(IActivityManager.descriptor);
3680        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
3681        reply.readException();
3682        reply.recycle();
3683        data.recycle();
3684    }
3685
3686    public void killApplicationWithAppId(String pkg, int appid) throws RemoteException {
3687        Parcel data = Parcel.obtain();
3688        Parcel reply = Parcel.obtain();
3689        data.writeInterfaceToken(IActivityManager.descriptor);
3690        data.writeString(pkg);
3691        data.writeInt(appid);
3692        mRemote.transact(KILL_APPLICATION_WITH_APPID_TRANSACTION, data, reply, 0);
3693        reply.readException();
3694        data.recycle();
3695        reply.recycle();
3696    }
3697
3698    public void closeSystemDialogs(String reason) throws RemoteException {
3699        Parcel data = Parcel.obtain();
3700        Parcel reply = Parcel.obtain();
3701        data.writeInterfaceToken(IActivityManager.descriptor);
3702        data.writeString(reason);
3703        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
3704        reply.readException();
3705        data.recycle();
3706        reply.recycle();
3707    }
3708
3709    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
3710            throws RemoteException {
3711        Parcel data = Parcel.obtain();
3712        Parcel reply = Parcel.obtain();
3713        data.writeInterfaceToken(IActivityManager.descriptor);
3714        data.writeIntArray(pids);
3715        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
3716        reply.readException();
3717        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
3718        data.recycle();
3719        reply.recycle();
3720        return res;
3721    }
3722
3723    public void killApplicationProcess(String processName, int uid) throws RemoteException {
3724        Parcel data = Parcel.obtain();
3725        Parcel reply = Parcel.obtain();
3726        data.writeInterfaceToken(IActivityManager.descriptor);
3727        data.writeString(processName);
3728        data.writeInt(uid);
3729        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
3730        reply.readException();
3731        data.recycle();
3732        reply.recycle();
3733    }
3734
3735    public void overridePendingTransition(IBinder token, String packageName,
3736            int enterAnim, int exitAnim) throws RemoteException {
3737        Parcel data = Parcel.obtain();
3738        Parcel reply = Parcel.obtain();
3739        data.writeInterfaceToken(IActivityManager.descriptor);
3740        data.writeStrongBinder(token);
3741        data.writeString(packageName);
3742        data.writeInt(enterAnim);
3743        data.writeInt(exitAnim);
3744        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
3745        reply.readException();
3746        data.recycle();
3747        reply.recycle();
3748    }
3749
3750    public boolean isUserAMonkey() throws RemoteException {
3751        Parcel data = Parcel.obtain();
3752        Parcel reply = Parcel.obtain();
3753        data.writeInterfaceToken(IActivityManager.descriptor);
3754        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
3755        reply.readException();
3756        boolean res = reply.readInt() != 0;
3757        data.recycle();
3758        reply.recycle();
3759        return res;
3760    }
3761
3762    public void setUserIsMonkey(boolean monkey) throws RemoteException {
3763        Parcel data = Parcel.obtain();
3764        Parcel reply = Parcel.obtain();
3765        data.writeInterfaceToken(IActivityManager.descriptor);
3766        data.writeInt(monkey ? 1 : 0);
3767        mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
3768        reply.readException();
3769        data.recycle();
3770        reply.recycle();
3771    }
3772
3773    public void finishHeavyWeightApp() throws RemoteException {
3774        Parcel data = Parcel.obtain();
3775        Parcel reply = Parcel.obtain();
3776        data.writeInterfaceToken(IActivityManager.descriptor);
3777        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
3778        reply.readException();
3779        data.recycle();
3780        reply.recycle();
3781    }
3782
3783    public void setImmersive(IBinder token, boolean immersive)
3784            throws RemoteException {
3785        Parcel data = Parcel.obtain();
3786        Parcel reply = Parcel.obtain();
3787        data.writeInterfaceToken(IActivityManager.descriptor);
3788        data.writeStrongBinder(token);
3789        data.writeInt(immersive ? 1 : 0);
3790        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
3791        reply.readException();
3792        data.recycle();
3793        reply.recycle();
3794    }
3795
3796    public boolean isImmersive(IBinder token)
3797            throws RemoteException {
3798        Parcel data = Parcel.obtain();
3799        Parcel reply = Parcel.obtain();
3800        data.writeInterfaceToken(IActivityManager.descriptor);
3801        data.writeStrongBinder(token);
3802        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
3803        reply.readException();
3804        boolean res = reply.readInt() == 1;
3805        data.recycle();
3806        reply.recycle();
3807        return res;
3808    }
3809
3810    public boolean isTopActivityImmersive()
3811            throws RemoteException {
3812        Parcel data = Parcel.obtain();
3813        Parcel reply = Parcel.obtain();
3814        data.writeInterfaceToken(IActivityManager.descriptor);
3815        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
3816        reply.readException();
3817        boolean res = reply.readInt() == 1;
3818        data.recycle();
3819        reply.recycle();
3820        return res;
3821    }
3822
3823    public void crashApplication(int uid, int initialPid, String packageName,
3824            String message) throws RemoteException {
3825        Parcel data = Parcel.obtain();
3826        Parcel reply = Parcel.obtain();
3827        data.writeInterfaceToken(IActivityManager.descriptor);
3828        data.writeInt(uid);
3829        data.writeInt(initialPid);
3830        data.writeString(packageName);
3831        data.writeString(message);
3832        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
3833        reply.readException();
3834        data.recycle();
3835        reply.recycle();
3836    }
3837
3838    public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
3839        Parcel data = Parcel.obtain();
3840        Parcel reply = Parcel.obtain();
3841        data.writeInterfaceToken(IActivityManager.descriptor);
3842        uri.writeToParcel(data, 0);
3843        data.writeInt(userId);
3844        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
3845        reply.readException();
3846        String res = reply.readString();
3847        data.recycle();
3848        reply.recycle();
3849        return res;
3850    }
3851
3852    public IBinder newUriPermissionOwner(String name)
3853            throws RemoteException {
3854        Parcel data = Parcel.obtain();
3855        Parcel reply = Parcel.obtain();
3856        data.writeInterfaceToken(IActivityManager.descriptor);
3857        data.writeString(name);
3858        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
3859        reply.readException();
3860        IBinder res = reply.readStrongBinder();
3861        data.recycle();
3862        reply.recycle();
3863        return res;
3864    }
3865
3866    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
3867            Uri uri, int mode) throws RemoteException {
3868        Parcel data = Parcel.obtain();
3869        Parcel reply = Parcel.obtain();
3870        data.writeInterfaceToken(IActivityManager.descriptor);
3871        data.writeStrongBinder(owner);
3872        data.writeInt(fromUid);
3873        data.writeString(targetPkg);
3874        uri.writeToParcel(data, 0);
3875        data.writeInt(mode);
3876        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3877        reply.readException();
3878        data.recycle();
3879        reply.recycle();
3880    }
3881
3882    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
3883            int mode) throws RemoteException {
3884        Parcel data = Parcel.obtain();
3885        Parcel reply = Parcel.obtain();
3886        data.writeInterfaceToken(IActivityManager.descriptor);
3887        data.writeStrongBinder(owner);
3888        if (uri != null) {
3889            data.writeInt(1);
3890            uri.writeToParcel(data, 0);
3891        } else {
3892            data.writeInt(0);
3893        }
3894        data.writeInt(mode);
3895        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3896        reply.readException();
3897        data.recycle();
3898        reply.recycle();
3899    }
3900
3901    public int checkGrantUriPermission(int callingUid, String targetPkg,
3902            Uri uri, int modeFlags) throws RemoteException {
3903        Parcel data = Parcel.obtain();
3904        Parcel reply = Parcel.obtain();
3905        data.writeInterfaceToken(IActivityManager.descriptor);
3906        data.writeInt(callingUid);
3907        data.writeString(targetPkg);
3908        uri.writeToParcel(data, 0);
3909        data.writeInt(modeFlags);
3910        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3911        reply.readException();
3912        int res = reply.readInt();
3913        data.recycle();
3914        reply.recycle();
3915        return res;
3916    }
3917
3918    public boolean dumpHeap(String process, int userId, boolean managed,
3919            String path, ParcelFileDescriptor fd) throws RemoteException {
3920        Parcel data = Parcel.obtain();
3921        Parcel reply = Parcel.obtain();
3922        data.writeInterfaceToken(IActivityManager.descriptor);
3923        data.writeString(process);
3924        data.writeInt(userId);
3925        data.writeInt(managed ? 1 : 0);
3926        data.writeString(path);
3927        if (fd != null) {
3928            data.writeInt(1);
3929            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3930        } else {
3931            data.writeInt(0);
3932        }
3933        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
3934        reply.readException();
3935        boolean res = reply.readInt() != 0;
3936        reply.recycle();
3937        data.recycle();
3938        return res;
3939    }
3940
3941    public int startActivities(IApplicationThread caller, String callingPackage,
3942            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
3943            Bundle options, int userId) throws RemoteException {
3944        Parcel data = Parcel.obtain();
3945        Parcel reply = Parcel.obtain();
3946        data.writeInterfaceToken(IActivityManager.descriptor);
3947        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3948        data.writeString(callingPackage);
3949        data.writeTypedArray(intents, 0);
3950        data.writeStringArray(resolvedTypes);
3951        data.writeStrongBinder(resultTo);
3952        if (options != null) {
3953            data.writeInt(1);
3954            options.writeToParcel(data, 0);
3955        } else {
3956            data.writeInt(0);
3957        }
3958        data.writeInt(userId);
3959        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
3960        reply.readException();
3961        int result = reply.readInt();
3962        reply.recycle();
3963        data.recycle();
3964        return result;
3965    }
3966
3967    public int getFrontActivityScreenCompatMode() throws RemoteException {
3968        Parcel data = Parcel.obtain();
3969        Parcel reply = Parcel.obtain();
3970        data.writeInterfaceToken(IActivityManager.descriptor);
3971        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3972        reply.readException();
3973        int mode = reply.readInt();
3974        reply.recycle();
3975        data.recycle();
3976        return mode;
3977    }
3978
3979    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
3980        Parcel data = Parcel.obtain();
3981        Parcel reply = Parcel.obtain();
3982        data.writeInterfaceToken(IActivityManager.descriptor);
3983        data.writeInt(mode);
3984        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3985        reply.readException();
3986        reply.recycle();
3987        data.recycle();
3988    }
3989
3990    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
3991        Parcel data = Parcel.obtain();
3992        Parcel reply = Parcel.obtain();
3993        data.writeInterfaceToken(IActivityManager.descriptor);
3994        data.writeString(packageName);
3995        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
3996        reply.readException();
3997        int mode = reply.readInt();
3998        reply.recycle();
3999        data.recycle();
4000        return mode;
4001    }
4002
4003    public void setPackageScreenCompatMode(String packageName, int mode)
4004            throws RemoteException {
4005        Parcel data = Parcel.obtain();
4006        Parcel reply = Parcel.obtain();
4007        data.writeInterfaceToken(IActivityManager.descriptor);
4008        data.writeString(packageName);
4009        data.writeInt(mode);
4010        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4011        reply.readException();
4012        reply.recycle();
4013        data.recycle();
4014    }
4015
4016    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
4017        Parcel data = Parcel.obtain();
4018        Parcel reply = Parcel.obtain();
4019        data.writeInterfaceToken(IActivityManager.descriptor);
4020        data.writeString(packageName);
4021        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4022        reply.readException();
4023        boolean ask = reply.readInt() != 0;
4024        reply.recycle();
4025        data.recycle();
4026        return ask;
4027    }
4028
4029    public void setPackageAskScreenCompat(String packageName, boolean ask)
4030            throws RemoteException {
4031        Parcel data = Parcel.obtain();
4032        Parcel reply = Parcel.obtain();
4033        data.writeInterfaceToken(IActivityManager.descriptor);
4034        data.writeString(packageName);
4035        data.writeInt(ask ? 1 : 0);
4036        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4037        reply.readException();
4038        reply.recycle();
4039        data.recycle();
4040    }
4041
4042    public boolean switchUser(int userid) throws RemoteException {
4043        Parcel data = Parcel.obtain();
4044        Parcel reply = Parcel.obtain();
4045        data.writeInterfaceToken(IActivityManager.descriptor);
4046        data.writeInt(userid);
4047        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
4048        reply.readException();
4049        boolean result = reply.readInt() != 0;
4050        reply.recycle();
4051        data.recycle();
4052        return result;
4053    }
4054
4055    public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
4056        Parcel data = Parcel.obtain();
4057        Parcel reply = Parcel.obtain();
4058        data.writeInterfaceToken(IActivityManager.descriptor);
4059        data.writeInt(userid);
4060        data.writeStrongInterface(callback);
4061        mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
4062        reply.readException();
4063        int result = reply.readInt();
4064        reply.recycle();
4065        data.recycle();
4066        return result;
4067    }
4068
4069    public UserInfo getCurrentUser() throws RemoteException {
4070        Parcel data = Parcel.obtain();
4071        Parcel reply = Parcel.obtain();
4072        data.writeInterfaceToken(IActivityManager.descriptor);
4073        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
4074        reply.readException();
4075        UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
4076        reply.recycle();
4077        data.recycle();
4078        return userInfo;
4079    }
4080
4081    public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException {
4082        Parcel data = Parcel.obtain();
4083        Parcel reply = Parcel.obtain();
4084        data.writeInterfaceToken(IActivityManager.descriptor);
4085        data.writeInt(userid);
4086        data.writeInt(orStopping ? 1 : 0);
4087        mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
4088        reply.readException();
4089        boolean result = reply.readInt() != 0;
4090        reply.recycle();
4091        data.recycle();
4092        return result;
4093    }
4094
4095    public int[] getRunningUserIds() throws RemoteException {
4096        Parcel data = Parcel.obtain();
4097        Parcel reply = Parcel.obtain();
4098        data.writeInterfaceToken(IActivityManager.descriptor);
4099        mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
4100        reply.readException();
4101        int[] result = reply.createIntArray();
4102        reply.recycle();
4103        data.recycle();
4104        return result;
4105    }
4106
4107    public boolean removeSubTask(int taskId, int subTaskIndex) throws RemoteException {
4108        Parcel data = Parcel.obtain();
4109        Parcel reply = Parcel.obtain();
4110        data.writeInterfaceToken(IActivityManager.descriptor);
4111        data.writeInt(taskId);
4112        data.writeInt(subTaskIndex);
4113        mRemote.transact(REMOVE_SUB_TASK_TRANSACTION, data, reply, 0);
4114        reply.readException();
4115        boolean result = reply.readInt() != 0;
4116        reply.recycle();
4117        data.recycle();
4118        return result;
4119    }
4120
4121    public boolean removeTask(int taskId, int flags) throws RemoteException {
4122        Parcel data = Parcel.obtain();
4123        Parcel reply = Parcel.obtain();
4124        data.writeInterfaceToken(IActivityManager.descriptor);
4125        data.writeInt(taskId);
4126        data.writeInt(flags);
4127        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
4128        reply.readException();
4129        boolean result = reply.readInt() != 0;
4130        reply.recycle();
4131        data.recycle();
4132        return result;
4133    }
4134
4135    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
4136        Parcel data = Parcel.obtain();
4137        Parcel reply = Parcel.obtain();
4138        data.writeInterfaceToken(IActivityManager.descriptor);
4139        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4140        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
4141        reply.readException();
4142        data.recycle();
4143        reply.recycle();
4144    }
4145
4146    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
4147        Parcel data = Parcel.obtain();
4148        Parcel reply = Parcel.obtain();
4149        data.writeInterfaceToken(IActivityManager.descriptor);
4150        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4151        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
4152        reply.readException();
4153        data.recycle();
4154        reply.recycle();
4155    }
4156
4157    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
4158        Parcel data = Parcel.obtain();
4159        Parcel reply = Parcel.obtain();
4160        data.writeInterfaceToken(IActivityManager.descriptor);
4161        data.writeStrongBinder(sender.asBinder());
4162        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
4163        reply.readException();
4164        boolean res = reply.readInt() != 0;
4165        data.recycle();
4166        reply.recycle();
4167        return res;
4168    }
4169
4170    public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
4171        Parcel data = Parcel.obtain();
4172        Parcel reply = Parcel.obtain();
4173        data.writeInterfaceToken(IActivityManager.descriptor);
4174        data.writeStrongBinder(sender.asBinder());
4175        mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
4176        reply.readException();
4177        boolean res = reply.readInt() != 0;
4178        data.recycle();
4179        reply.recycle();
4180        return res;
4181    }
4182
4183    public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
4184        Parcel data = Parcel.obtain();
4185        Parcel reply = Parcel.obtain();
4186        data.writeInterfaceToken(IActivityManager.descriptor);
4187        data.writeStrongBinder(sender.asBinder());
4188        mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4189        reply.readException();
4190        Intent res = reply.readInt() != 0
4191                ? Intent.CREATOR.createFromParcel(reply) : null;
4192        data.recycle();
4193        reply.recycle();
4194        return res;
4195    }
4196
4197    public void updatePersistentConfiguration(Configuration values) throws RemoteException
4198    {
4199        Parcel data = Parcel.obtain();
4200        Parcel reply = Parcel.obtain();
4201        data.writeInterfaceToken(IActivityManager.descriptor);
4202        values.writeToParcel(data, 0);
4203        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
4204        reply.readException();
4205        data.recycle();
4206        reply.recycle();
4207    }
4208
4209    public long[] getProcessPss(int[] pids) throws RemoteException {
4210        Parcel data = Parcel.obtain();
4211        Parcel reply = Parcel.obtain();
4212        data.writeInterfaceToken(IActivityManager.descriptor);
4213        data.writeIntArray(pids);
4214        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
4215        reply.readException();
4216        long[] res = reply.createLongArray();
4217        data.recycle();
4218        reply.recycle();
4219        return res;
4220    }
4221
4222    public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
4223        Parcel data = Parcel.obtain();
4224        Parcel reply = Parcel.obtain();
4225        data.writeInterfaceToken(IActivityManager.descriptor);
4226        TextUtils.writeToParcel(msg, data, 0);
4227        data.writeInt(always ? 1 : 0);
4228        mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
4229        reply.readException();
4230        data.recycle();
4231        reply.recycle();
4232    }
4233
4234    public void dismissKeyguardOnNextActivity() throws RemoteException {
4235        Parcel data = Parcel.obtain();
4236        Parcel reply = Parcel.obtain();
4237        data.writeInterfaceToken(IActivityManager.descriptor);
4238        mRemote.transact(DISMISS_KEYGUARD_ON_NEXT_ACTIVITY_TRANSACTION, data, reply, 0);
4239        reply.readException();
4240        data.recycle();
4241        reply.recycle();
4242    }
4243
4244    public boolean targetTaskAffinityMatchesActivity(IBinder token, String destAffinity)
4245            throws RemoteException {
4246        Parcel data = Parcel.obtain();
4247        Parcel reply = Parcel.obtain();
4248        data.writeInterfaceToken(IActivityManager.descriptor);
4249        data.writeStrongBinder(token);
4250        data.writeString(destAffinity);
4251        mRemote.transact(TARGET_TASK_AFFINITY_MATCHES_ACTIVITY_TRANSACTION, data, reply, 0);
4252        reply.readException();
4253        boolean result = reply.readInt() != 0;
4254        data.recycle();
4255        reply.recycle();
4256        return result;
4257    }
4258
4259    public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
4260            throws RemoteException {
4261        Parcel data = Parcel.obtain();
4262        Parcel reply = Parcel.obtain();
4263        data.writeInterfaceToken(IActivityManager.descriptor);
4264        data.writeStrongBinder(token);
4265        target.writeToParcel(data, 0);
4266        data.writeInt(resultCode);
4267        if (resultData != null) {
4268            data.writeInt(1);
4269            resultData.writeToParcel(data, 0);
4270        } else {
4271            data.writeInt(0);
4272        }
4273        mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
4274        reply.readException();
4275        boolean result = reply.readInt() != 0;
4276        data.recycle();
4277        reply.recycle();
4278        return result;
4279    }
4280
4281    public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
4282        Parcel data = Parcel.obtain();
4283        Parcel reply = Parcel.obtain();
4284        data.writeInterfaceToken(IActivityManager.descriptor);
4285        data.writeStrongBinder(activityToken);
4286        mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
4287        reply.readException();
4288        int result = reply.readInt();
4289        data.recycle();
4290        reply.recycle();
4291        return result;
4292    }
4293
4294    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
4295        Parcel data = Parcel.obtain();
4296        Parcel reply = Parcel.obtain();
4297        data.writeInterfaceToken(IActivityManager.descriptor);
4298        data.writeStrongBinder(activityToken);
4299        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
4300        reply.readException();
4301        String result = reply.readString();
4302        data.recycle();
4303        reply.recycle();
4304        return result;
4305    }
4306
4307    public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
4308        Parcel data = Parcel.obtain();
4309        Parcel reply = Parcel.obtain();
4310        data.writeInterfaceToken(IActivityManager.descriptor);
4311        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4312        mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
4313        reply.readException();
4314        data.recycle();
4315        reply.recycle();
4316    }
4317
4318    public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
4319        Parcel data = Parcel.obtain();
4320        Parcel reply = Parcel.obtain();
4321        data.writeInterfaceToken(IActivityManager.descriptor);
4322        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4323        mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
4324        reply.readException();
4325        data.recycle();
4326        reply.recycle();
4327    }
4328
4329    public void requestBugReport() throws RemoteException {
4330        Parcel data = Parcel.obtain();
4331        Parcel reply = Parcel.obtain();
4332        data.writeInterfaceToken(IActivityManager.descriptor);
4333        mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
4334        reply.readException();
4335        data.recycle();
4336        reply.recycle();
4337    }
4338
4339    public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException {
4340        Parcel data = Parcel.obtain();
4341        Parcel reply = Parcel.obtain();
4342        data.writeInterfaceToken(IActivityManager.descriptor);
4343        data.writeInt(pid);
4344        data.writeInt(aboveSystem ? 1 : 0);
4345        mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
4346        reply.readException();
4347        long res = reply.readInt();
4348        data.recycle();
4349        reply.recycle();
4350        return res;
4351    }
4352
4353    public Bundle getTopActivityExtras(int requestType) throws RemoteException {
4354        Parcel data = Parcel.obtain();
4355        Parcel reply = Parcel.obtain();
4356        data.writeInterfaceToken(IActivityManager.descriptor);
4357        data.writeInt(requestType);
4358        mRemote.transact(GET_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
4359        reply.readException();
4360        Bundle res = reply.readBundle();
4361        data.recycle();
4362        reply.recycle();
4363        return res;
4364    }
4365
4366    public void reportTopActivityExtras(IBinder token, Bundle extras) throws RemoteException {
4367        Parcel data = Parcel.obtain();
4368        Parcel reply = Parcel.obtain();
4369        data.writeInterfaceToken(IActivityManager.descriptor);
4370        data.writeStrongBinder(token);
4371        data.writeBundle(extras);
4372        mRemote.transact(REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
4373        reply.readException();
4374        data.recycle();
4375        reply.recycle();
4376    }
4377
4378    public void killUid(int uid, String reason) throws RemoteException {
4379        Parcel data = Parcel.obtain();
4380        Parcel reply = Parcel.obtain();
4381        data.writeInterfaceToken(IActivityManager.descriptor);
4382        data.writeInt(uid);
4383        data.writeString(reason);
4384        mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
4385        reply.readException();
4386        data.recycle();
4387        reply.recycle();
4388    }
4389
4390    private IBinder mRemote;
4391}
4392