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