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