ActivityManagerNative.java revision 09d57fe9b357495b7bc62be39a8befa00d9d7ffb
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            AssistStructure structure = AssistStructure.CREATOR.createFromParcel(data);
2197            AssistContent content = AssistContent.CREATOR.createFromParcel(data);
2198            reportAssistContextExtras(token, extras, structure, content);
2199            reply.writeNoException();
2200            return true;
2201        }
2202
2203        case LAUNCH_ASSIST_INTENT_TRANSACTION: {
2204            data.enforceInterface(IActivityManager.descriptor);
2205            Intent intent = Intent.CREATOR.createFromParcel(data);
2206            int requestType = data.readInt();
2207            String hint = data.readString();
2208            int userHandle = data.readInt();
2209            boolean res = launchAssistIntent(intent, requestType, hint, userHandle);
2210            reply.writeNoException();
2211            reply.writeInt(res ? 1 : 0);
2212            return true;
2213        }
2214
2215        case KILL_UID_TRANSACTION: {
2216            data.enforceInterface(IActivityManager.descriptor);
2217            int uid = data.readInt();
2218            String reason = data.readString();
2219            killUid(uid, reason);
2220            reply.writeNoException();
2221            return true;
2222        }
2223
2224        case HANG_TRANSACTION: {
2225            data.enforceInterface(IActivityManager.descriptor);
2226            IBinder who = data.readStrongBinder();
2227            boolean allowRestart = data.readInt() != 0;
2228            hang(who, allowRestart);
2229            reply.writeNoException();
2230            return true;
2231        }
2232
2233        case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
2234            data.enforceInterface(IActivityManager.descriptor);
2235            IBinder token = data.readStrongBinder();
2236            reportActivityFullyDrawn(token);
2237            reply.writeNoException();
2238            return true;
2239        }
2240
2241        case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
2242            data.enforceInterface(IActivityManager.descriptor);
2243            IBinder token = data.readStrongBinder();
2244            notifyActivityDrawn(token);
2245            reply.writeNoException();
2246            return true;
2247        }
2248
2249        case RESTART_TRANSACTION: {
2250            data.enforceInterface(IActivityManager.descriptor);
2251            restart();
2252            reply.writeNoException();
2253            return true;
2254        }
2255
2256        case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
2257            data.enforceInterface(IActivityManager.descriptor);
2258            performIdleMaintenance();
2259            reply.writeNoException();
2260            return true;
2261        }
2262
2263        case CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION: {
2264            data.enforceInterface(IActivityManager.descriptor);
2265            IBinder parentActivityToken = data.readStrongBinder();
2266            IActivityContainerCallback callback =
2267                    IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
2268            IActivityContainer activityContainer =
2269                    createVirtualActivityContainer(parentActivityToken, callback);
2270            reply.writeNoException();
2271            if (activityContainer != null) {
2272                reply.writeInt(1);
2273                reply.writeStrongBinder(activityContainer.asBinder());
2274            } else {
2275                reply.writeInt(0);
2276            }
2277            return true;
2278        }
2279
2280        case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
2281            data.enforceInterface(IActivityManager.descriptor);
2282            IActivityContainer activityContainer =
2283                    IActivityContainer.Stub.asInterface(data.readStrongBinder());
2284            deleteActivityContainer(activityContainer);
2285            reply.writeNoException();
2286            return true;
2287        }
2288
2289        case CREATE_STACK_ON_DISPLAY: {
2290            data.enforceInterface(IActivityManager.descriptor);
2291            int displayId = data.readInt();
2292            IActivityContainer activityContainer = createStackOnDisplay(displayId);
2293            reply.writeNoException();
2294            if (activityContainer != null) {
2295                reply.writeInt(1);
2296                reply.writeStrongBinder(activityContainer.asBinder());
2297            } else {
2298                reply.writeInt(0);
2299            }
2300            return true;
2301        }
2302
2303        case GET_ACTIVITY_DISPLAY_ID_TRANSACTION: {
2304            data.enforceInterface(IActivityManager.descriptor);
2305            IBinder activityToken = data.readStrongBinder();
2306            int displayId = getActivityDisplayId(activityToken);
2307            reply.writeNoException();
2308            reply.writeInt(displayId);
2309            return true;
2310        }
2311
2312        case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
2313            data.enforceInterface(IActivityManager.descriptor);
2314            final int taskId = data.readInt();
2315            startLockTaskMode(taskId);
2316            reply.writeNoException();
2317            return true;
2318        }
2319
2320        case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
2321            data.enforceInterface(IActivityManager.descriptor);
2322            IBinder token = data.readStrongBinder();
2323            startLockTaskMode(token);
2324            reply.writeNoException();
2325            return true;
2326        }
2327
2328        case START_LOCK_TASK_BY_CURRENT_TRANSACTION: {
2329            data.enforceInterface(IActivityManager.descriptor);
2330            startLockTaskModeOnCurrent();
2331            reply.writeNoException();
2332            return true;
2333        }
2334
2335        case STOP_LOCK_TASK_MODE_TRANSACTION: {
2336            data.enforceInterface(IActivityManager.descriptor);
2337            stopLockTaskMode();
2338            reply.writeNoException();
2339            return true;
2340        }
2341
2342        case STOP_LOCK_TASK_BY_CURRENT_TRANSACTION: {
2343            data.enforceInterface(IActivityManager.descriptor);
2344            stopLockTaskModeOnCurrent();
2345            reply.writeNoException();
2346            return true;
2347        }
2348
2349        case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
2350            data.enforceInterface(IActivityManager.descriptor);
2351            final boolean isInLockTaskMode = isInLockTaskMode();
2352            reply.writeNoException();
2353            reply.writeInt(isInLockTaskMode ? 1 : 0);
2354            return true;
2355        }
2356
2357        case GET_LOCK_TASK_MODE_STATE_TRANSACTION: {
2358            data.enforceInterface(IActivityManager.descriptor);
2359            final int lockTaskModeState = getLockTaskModeState();
2360            reply.writeNoException();
2361            reply.writeInt(lockTaskModeState);
2362            return true;
2363        }
2364
2365        case SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION: {
2366            data.enforceInterface(IActivityManager.descriptor);
2367            final IBinder token = data.readStrongBinder();
2368            showLockTaskEscapeMessage(token);
2369            reply.writeNoException();
2370            return true;
2371        }
2372
2373        case SET_TASK_DESCRIPTION_TRANSACTION: {
2374            data.enforceInterface(IActivityManager.descriptor);
2375            IBinder token = data.readStrongBinder();
2376            ActivityManager.TaskDescription values =
2377                    ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
2378            setTaskDescription(token, values);
2379            reply.writeNoException();
2380            return true;
2381        }
2382
2383        case SET_TASK_RESIZEABLE_TRANSACTION: {
2384            data.enforceInterface(IActivityManager.descriptor);
2385            int taskId = data.readInt();
2386            boolean resizeable = (data.readInt() == 1) ? true : false;
2387            setTaskResizeable(taskId, resizeable);
2388            reply.writeNoException();
2389            return true;
2390        }
2391
2392        case RESIZE_TASK_TRANSACTION: {
2393            data.enforceInterface(IActivityManager.descriptor);
2394            int taskId = data.readInt();
2395            Rect r = Rect.CREATOR.createFromParcel(data);
2396            resizeTask(taskId, r);
2397            reply.writeNoException();
2398            return true;
2399        }
2400
2401        case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
2402            data.enforceInterface(IActivityManager.descriptor);
2403            String filename = data.readString();
2404            Bitmap icon = getTaskDescriptionIcon(filename);
2405            reply.writeNoException();
2406            if (icon == null) {
2407                reply.writeInt(0);
2408            } else {
2409                reply.writeInt(1);
2410                icon.writeToParcel(reply, 0);
2411            }
2412            return true;
2413        }
2414
2415        case START_IN_PLACE_ANIMATION_TRANSACTION: {
2416            data.enforceInterface(IActivityManager.descriptor);
2417            final Bundle bundle;
2418            if (data.readInt() == 0) {
2419                bundle = null;
2420            } else {
2421                bundle = data.readBundle();
2422            }
2423            final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle);
2424            startInPlaceAnimationOnFrontMostApplication(options);
2425            reply.writeNoException();
2426            return true;
2427        }
2428
2429        case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
2430            data.enforceInterface(IActivityManager.descriptor);
2431            IBinder token = data.readStrongBinder();
2432            boolean enable = data.readInt() > 0;
2433            boolean success = requestVisibleBehind(token, enable);
2434            reply.writeNoException();
2435            reply.writeInt(success ? 1 : 0);
2436            return true;
2437        }
2438
2439        case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
2440            data.enforceInterface(IActivityManager.descriptor);
2441            IBinder token = data.readStrongBinder();
2442            final boolean enabled = isBackgroundVisibleBehind(token);
2443            reply.writeNoException();
2444            reply.writeInt(enabled ? 1 : 0);
2445            return true;
2446        }
2447
2448        case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
2449            data.enforceInterface(IActivityManager.descriptor);
2450            IBinder token = data.readStrongBinder();
2451            backgroundResourcesReleased(token);
2452            reply.writeNoException();
2453            return true;
2454        }
2455
2456        case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
2457            data.enforceInterface(IActivityManager.descriptor);
2458            IBinder token = data.readStrongBinder();
2459            notifyLaunchTaskBehindComplete(token);
2460            reply.writeNoException();
2461            return true;
2462        }
2463
2464        case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
2465            data.enforceInterface(IActivityManager.descriptor);
2466            IBinder token = data.readStrongBinder();
2467            notifyEnterAnimationComplete(token);
2468            reply.writeNoException();
2469            return true;
2470        }
2471
2472        case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
2473            data.enforceInterface(IActivityManager.descriptor);
2474            bootAnimationComplete();
2475            reply.writeNoException();
2476            return true;
2477        }
2478
2479        case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: {
2480            data.enforceInterface(IActivityManager.descriptor);
2481            final int uid = data.readInt();
2482            final byte[] firstPacket = data.createByteArray();
2483            notifyCleartextNetwork(uid, firstPacket);
2484            reply.writeNoException();
2485            return true;
2486        }
2487
2488        case SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION: {
2489            data.enforceInterface(IActivityManager.descriptor);
2490            String procName = data.readString();
2491            int uid = data.readInt();
2492            long maxMemSize = data.readLong();
2493            String reportPackage = data.readString();
2494            setDumpHeapDebugLimit(procName, uid, maxMemSize, reportPackage);
2495            reply.writeNoException();
2496            return true;
2497        }
2498
2499        case DUMP_HEAP_FINISHED_TRANSACTION: {
2500            data.enforceInterface(IActivityManager.descriptor);
2501            String path = data.readString();
2502            dumpHeapFinished(path);
2503            reply.writeNoException();
2504            return true;
2505        }
2506
2507        case SET_VOICE_KEEP_AWAKE_TRANSACTION: {
2508            data.enforceInterface(IActivityManager.descriptor);
2509            IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
2510                    data.readStrongBinder());
2511            boolean keepAwake = data.readInt() != 0;
2512            setVoiceKeepAwake(session, keepAwake);
2513            reply.writeNoException();
2514            return true;
2515        }
2516
2517        case UPDATE_LOCK_TASK_PACKAGES_TRANSACTION: {
2518            data.enforceInterface(IActivityManager.descriptor);
2519            int userId = data.readInt();
2520            String[] packages = data.readStringArray();
2521            updateLockTaskPackages(userId, packages);
2522            reply.writeNoException();
2523            return true;
2524        }
2525
2526        case UPDATE_DEVICE_OWNER_TRANSACTION: {
2527            data.enforceInterface(IActivityManager.descriptor);
2528            String packageName = data.readString();
2529            updateDeviceOwner(packageName);
2530            reply.writeNoException();
2531            return true;
2532        }
2533
2534        case UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION: {
2535            data.enforceInterface(IActivityManager.descriptor);
2536            ComponentName preferredActivity = ComponentName.readFromParcel(data);
2537            int userId = data.readInt();
2538            updatePreferredSetupActivity(preferredActivity, userId);
2539            reply.writeNoException();
2540            return true;
2541        }
2542
2543        case GET_PACKAGE_PROCESS_STATE_TRANSACTION: {
2544            data.enforceInterface(IActivityManager.descriptor);
2545            String pkg = data.readString();
2546            int res = getPackageProcessState(pkg);
2547            reply.writeNoException();
2548            reply.writeInt(res);
2549            return true;
2550        }
2551        }
2552
2553        return super.onTransact(code, data, reply, flags);
2554    }
2555
2556    public IBinder asBinder() {
2557        return this;
2558    }
2559
2560    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
2561        protected IActivityManager create() {
2562            IBinder b = ServiceManager.getService("activity");
2563            if (false) {
2564                Log.v("ActivityManager", "default service binder = " + b);
2565            }
2566            IActivityManager am = asInterface(b);
2567            if (false) {
2568                Log.v("ActivityManager", "default service = " + am);
2569            }
2570            return am;
2571        }
2572    };
2573}
2574
2575class ActivityManagerProxy implements IActivityManager
2576{
2577    public ActivityManagerProxy(IBinder remote)
2578    {
2579        mRemote = remote;
2580    }
2581
2582    public IBinder asBinder()
2583    {
2584        return mRemote;
2585    }
2586
2587    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
2588            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2589            int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
2590        Parcel data = Parcel.obtain();
2591        Parcel reply = Parcel.obtain();
2592        data.writeInterfaceToken(IActivityManager.descriptor);
2593        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2594        data.writeString(callingPackage);
2595        intent.writeToParcel(data, 0);
2596        data.writeString(resolvedType);
2597        data.writeStrongBinder(resultTo);
2598        data.writeString(resultWho);
2599        data.writeInt(requestCode);
2600        data.writeInt(startFlags);
2601        if (profilerInfo != null) {
2602            data.writeInt(1);
2603            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2604        } else {
2605            data.writeInt(0);
2606        }
2607        if (options != null) {
2608            data.writeInt(1);
2609            options.writeToParcel(data, 0);
2610        } else {
2611            data.writeInt(0);
2612        }
2613        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
2614        reply.readException();
2615        int result = reply.readInt();
2616        reply.recycle();
2617        data.recycle();
2618        return result;
2619    }
2620
2621    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
2622            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2623            int startFlags, ProfilerInfo profilerInfo, Bundle options,
2624            int userId) throws RemoteException {
2625        Parcel data = Parcel.obtain();
2626        Parcel reply = Parcel.obtain();
2627        data.writeInterfaceToken(IActivityManager.descriptor);
2628        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2629        data.writeString(callingPackage);
2630        intent.writeToParcel(data, 0);
2631        data.writeString(resolvedType);
2632        data.writeStrongBinder(resultTo);
2633        data.writeString(resultWho);
2634        data.writeInt(requestCode);
2635        data.writeInt(startFlags);
2636        if (profilerInfo != null) {
2637            data.writeInt(1);
2638            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2639        } else {
2640            data.writeInt(0);
2641        }
2642        if (options != null) {
2643            data.writeInt(1);
2644            options.writeToParcel(data, 0);
2645        } else {
2646            data.writeInt(0);
2647        }
2648        data.writeInt(userId);
2649        mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
2650        reply.readException();
2651        int result = reply.readInt();
2652        reply.recycle();
2653        data.recycle();
2654        return result;
2655    }
2656    public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
2657            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2658            int startFlags, ProfilerInfo profilerInfo, Bundle options, int userId) throws RemoteException {
2659        Parcel data = Parcel.obtain();
2660        Parcel reply = Parcel.obtain();
2661        data.writeInterfaceToken(IActivityManager.descriptor);
2662        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2663        data.writeString(callingPackage);
2664        intent.writeToParcel(data, 0);
2665        data.writeString(resolvedType);
2666        data.writeStrongBinder(resultTo);
2667        data.writeString(resultWho);
2668        data.writeInt(requestCode);
2669        data.writeInt(startFlags);
2670        if (profilerInfo != null) {
2671            data.writeInt(1);
2672            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2673        } else {
2674            data.writeInt(0);
2675        }
2676        if (options != null) {
2677            data.writeInt(1);
2678            options.writeToParcel(data, 0);
2679        } else {
2680            data.writeInt(0);
2681        }
2682        data.writeInt(userId);
2683        mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
2684        reply.readException();
2685        int result = reply.readInt();
2686        reply.recycle();
2687        data.recycle();
2688        return result;
2689    }
2690    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
2691            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2692            int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
2693            int userId) throws RemoteException {
2694        Parcel data = Parcel.obtain();
2695        Parcel reply = Parcel.obtain();
2696        data.writeInterfaceToken(IActivityManager.descriptor);
2697        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2698        data.writeString(callingPackage);
2699        intent.writeToParcel(data, 0);
2700        data.writeString(resolvedType);
2701        data.writeStrongBinder(resultTo);
2702        data.writeString(resultWho);
2703        data.writeInt(requestCode);
2704        data.writeInt(startFlags);
2705        if (profilerInfo != null) {
2706            data.writeInt(1);
2707            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2708        } else {
2709            data.writeInt(0);
2710        }
2711        if (options != null) {
2712            data.writeInt(1);
2713            options.writeToParcel(data, 0);
2714        } else {
2715            data.writeInt(0);
2716        }
2717        data.writeInt(userId);
2718        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
2719        reply.readException();
2720        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
2721        reply.recycle();
2722        data.recycle();
2723        return result;
2724    }
2725    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
2726            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2727            int requestCode, int startFlags, Configuration config,
2728            Bundle options, int userId) throws RemoteException {
2729        Parcel data = Parcel.obtain();
2730        Parcel reply = Parcel.obtain();
2731        data.writeInterfaceToken(IActivityManager.descriptor);
2732        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2733        data.writeString(callingPackage);
2734        intent.writeToParcel(data, 0);
2735        data.writeString(resolvedType);
2736        data.writeStrongBinder(resultTo);
2737        data.writeString(resultWho);
2738        data.writeInt(requestCode);
2739        data.writeInt(startFlags);
2740        config.writeToParcel(data, 0);
2741        if (options != null) {
2742            data.writeInt(1);
2743            options.writeToParcel(data, 0);
2744        } else {
2745            data.writeInt(0);
2746        }
2747        data.writeInt(userId);
2748        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
2749        reply.readException();
2750        int result = reply.readInt();
2751        reply.recycle();
2752        data.recycle();
2753        return result;
2754    }
2755    public int startActivityIntentSender(IApplicationThread caller,
2756            IntentSender intent, Intent fillInIntent, String resolvedType,
2757            IBinder resultTo, String resultWho, int requestCode,
2758            int flagsMask, int flagsValues, Bundle options) throws RemoteException {
2759        Parcel data = Parcel.obtain();
2760        Parcel reply = Parcel.obtain();
2761        data.writeInterfaceToken(IActivityManager.descriptor);
2762        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2763        intent.writeToParcel(data, 0);
2764        if (fillInIntent != null) {
2765            data.writeInt(1);
2766            fillInIntent.writeToParcel(data, 0);
2767        } else {
2768            data.writeInt(0);
2769        }
2770        data.writeString(resolvedType);
2771        data.writeStrongBinder(resultTo);
2772        data.writeString(resultWho);
2773        data.writeInt(requestCode);
2774        data.writeInt(flagsMask);
2775        data.writeInt(flagsValues);
2776        if (options != null) {
2777            data.writeInt(1);
2778            options.writeToParcel(data, 0);
2779        } else {
2780            data.writeInt(0);
2781        }
2782        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
2783        reply.readException();
2784        int result = reply.readInt();
2785        reply.recycle();
2786        data.recycle();
2787        return result;
2788    }
2789    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
2790            Intent intent, String resolvedType, IVoiceInteractionSession session,
2791            IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
2792            Bundle options, int userId) throws RemoteException {
2793        Parcel data = Parcel.obtain();
2794        Parcel reply = Parcel.obtain();
2795        data.writeInterfaceToken(IActivityManager.descriptor);
2796        data.writeString(callingPackage);
2797        data.writeInt(callingPid);
2798        data.writeInt(callingUid);
2799        intent.writeToParcel(data, 0);
2800        data.writeString(resolvedType);
2801        data.writeStrongBinder(session.asBinder());
2802        data.writeStrongBinder(interactor.asBinder());
2803        data.writeInt(startFlags);
2804        if (profilerInfo != null) {
2805            data.writeInt(1);
2806            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2807        } else {
2808            data.writeInt(0);
2809        }
2810        if (options != null) {
2811            data.writeInt(1);
2812            options.writeToParcel(data, 0);
2813        } else {
2814            data.writeInt(0);
2815        }
2816        data.writeInt(userId);
2817        mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
2818        reply.readException();
2819        int result = reply.readInt();
2820        reply.recycle();
2821        data.recycle();
2822        return result;
2823    }
2824    public boolean startNextMatchingActivity(IBinder callingActivity,
2825            Intent intent, Bundle options) throws RemoteException {
2826        Parcel data = Parcel.obtain();
2827        Parcel reply = Parcel.obtain();
2828        data.writeInterfaceToken(IActivityManager.descriptor);
2829        data.writeStrongBinder(callingActivity);
2830        intent.writeToParcel(data, 0);
2831        if (options != null) {
2832            data.writeInt(1);
2833            options.writeToParcel(data, 0);
2834        } else {
2835            data.writeInt(0);
2836        }
2837        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
2838        reply.readException();
2839        int result = reply.readInt();
2840        reply.recycle();
2841        data.recycle();
2842        return result != 0;
2843    }
2844    public int startActivityFromRecents(int taskId, Bundle options) throws RemoteException {
2845        Parcel data = Parcel.obtain();
2846        Parcel reply = Parcel.obtain();
2847        data.writeInterfaceToken(IActivityManager.descriptor);
2848        data.writeInt(taskId);
2849        if (options == null) {
2850            data.writeInt(0);
2851        } else {
2852            data.writeInt(1);
2853            options.writeToParcel(data, 0);
2854        }
2855        mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
2856        reply.readException();
2857        int result = reply.readInt();
2858        reply.recycle();
2859        data.recycle();
2860        return result;
2861    }
2862    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, boolean finishTask)
2863            throws RemoteException {
2864        Parcel data = Parcel.obtain();
2865        Parcel reply = Parcel.obtain();
2866        data.writeInterfaceToken(IActivityManager.descriptor);
2867        data.writeStrongBinder(token);
2868        data.writeInt(resultCode);
2869        if (resultData != null) {
2870            data.writeInt(1);
2871            resultData.writeToParcel(data, 0);
2872        } else {
2873            data.writeInt(0);
2874        }
2875        data.writeInt(finishTask ? 1 : 0);
2876        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
2877        reply.readException();
2878        boolean res = reply.readInt() != 0;
2879        data.recycle();
2880        reply.recycle();
2881        return res;
2882    }
2883    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
2884    {
2885        Parcel data = Parcel.obtain();
2886        Parcel reply = Parcel.obtain();
2887        data.writeInterfaceToken(IActivityManager.descriptor);
2888        data.writeStrongBinder(token);
2889        data.writeString(resultWho);
2890        data.writeInt(requestCode);
2891        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
2892        reply.readException();
2893        data.recycle();
2894        reply.recycle();
2895    }
2896    public boolean finishActivityAffinity(IBinder token) throws RemoteException {
2897        Parcel data = Parcel.obtain();
2898        Parcel reply = Parcel.obtain();
2899        data.writeInterfaceToken(IActivityManager.descriptor);
2900        data.writeStrongBinder(token);
2901        mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
2902        reply.readException();
2903        boolean res = reply.readInt() != 0;
2904        data.recycle();
2905        reply.recycle();
2906        return res;
2907    }
2908    public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
2909        Parcel data = Parcel.obtain();
2910        Parcel reply = Parcel.obtain();
2911        data.writeInterfaceToken(IActivityManager.descriptor);
2912        data.writeStrongBinder(session.asBinder());
2913        mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
2914        reply.readException();
2915        data.recycle();
2916        reply.recycle();
2917    }
2918    public boolean releaseActivityInstance(IBinder token) throws RemoteException {
2919        Parcel data = Parcel.obtain();
2920        Parcel reply = Parcel.obtain();
2921        data.writeInterfaceToken(IActivityManager.descriptor);
2922        data.writeStrongBinder(token);
2923        mRemote.transact(RELEASE_ACTIVITY_INSTANCE_TRANSACTION, data, reply, 0);
2924        reply.readException();
2925        boolean res = reply.readInt() != 0;
2926        data.recycle();
2927        reply.recycle();
2928        return res;
2929    }
2930    public void releaseSomeActivities(IApplicationThread app) throws RemoteException {
2931        Parcel data = Parcel.obtain();
2932        Parcel reply = Parcel.obtain();
2933        data.writeInterfaceToken(IActivityManager.descriptor);
2934        data.writeStrongBinder(app.asBinder());
2935        mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
2936        reply.readException();
2937        data.recycle();
2938        reply.recycle();
2939    }
2940    public boolean willActivityBeVisible(IBinder token) throws RemoteException {
2941        Parcel data = Parcel.obtain();
2942        Parcel reply = Parcel.obtain();
2943        data.writeInterfaceToken(IActivityManager.descriptor);
2944        data.writeStrongBinder(token);
2945        mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
2946        reply.readException();
2947        boolean res = reply.readInt() != 0;
2948        data.recycle();
2949        reply.recycle();
2950        return res;
2951    }
2952    public Intent registerReceiver(IApplicationThread caller, String packageName,
2953            IIntentReceiver receiver,
2954            IntentFilter filter, String perm, int userId) throws RemoteException
2955    {
2956        Parcel data = Parcel.obtain();
2957        Parcel reply = Parcel.obtain();
2958        data.writeInterfaceToken(IActivityManager.descriptor);
2959        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2960        data.writeString(packageName);
2961        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
2962        filter.writeToParcel(data, 0);
2963        data.writeString(perm);
2964        data.writeInt(userId);
2965        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2966        reply.readException();
2967        Intent intent = null;
2968        int haveIntent = reply.readInt();
2969        if (haveIntent != 0) {
2970            intent = Intent.CREATOR.createFromParcel(reply);
2971        }
2972        reply.recycle();
2973        data.recycle();
2974        return intent;
2975    }
2976    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
2977    {
2978        Parcel data = Parcel.obtain();
2979        Parcel reply = Parcel.obtain();
2980        data.writeInterfaceToken(IActivityManager.descriptor);
2981        data.writeStrongBinder(receiver.asBinder());
2982        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2983        reply.readException();
2984        data.recycle();
2985        reply.recycle();
2986    }
2987    public int broadcastIntent(IApplicationThread caller,
2988            Intent intent, String resolvedType,  IIntentReceiver resultTo,
2989            int resultCode, String resultData, Bundle map,
2990            String requiredPermission, int appOp, boolean serialized,
2991            boolean sticky, int userId) throws RemoteException
2992    {
2993        Parcel data = Parcel.obtain();
2994        Parcel reply = Parcel.obtain();
2995        data.writeInterfaceToken(IActivityManager.descriptor);
2996        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2997        intent.writeToParcel(data, 0);
2998        data.writeString(resolvedType);
2999        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
3000        data.writeInt(resultCode);
3001        data.writeString(resultData);
3002        data.writeBundle(map);
3003        data.writeString(requiredPermission);
3004        data.writeInt(appOp);
3005        data.writeInt(serialized ? 1 : 0);
3006        data.writeInt(sticky ? 1 : 0);
3007        data.writeInt(userId);
3008        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
3009        reply.readException();
3010        int res = reply.readInt();
3011        reply.recycle();
3012        data.recycle();
3013        return res;
3014    }
3015    public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
3016            throws RemoteException
3017    {
3018        Parcel data = Parcel.obtain();
3019        Parcel reply = Parcel.obtain();
3020        data.writeInterfaceToken(IActivityManager.descriptor);
3021        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3022        intent.writeToParcel(data, 0);
3023        data.writeInt(userId);
3024        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
3025        reply.readException();
3026        data.recycle();
3027        reply.recycle();
3028    }
3029    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
3030            boolean abortBroadcast, int flags) throws RemoteException
3031    {
3032        Parcel data = Parcel.obtain();
3033        Parcel reply = Parcel.obtain();
3034        data.writeInterfaceToken(IActivityManager.descriptor);
3035        data.writeStrongBinder(who);
3036        data.writeInt(resultCode);
3037        data.writeString(resultData);
3038        data.writeBundle(map);
3039        data.writeInt(abortBroadcast ? 1 : 0);
3040        data.writeInt(flags);
3041        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3042        reply.readException();
3043        data.recycle();
3044        reply.recycle();
3045    }
3046    public void attachApplication(IApplicationThread app) throws RemoteException
3047    {
3048        Parcel data = Parcel.obtain();
3049        Parcel reply = Parcel.obtain();
3050        data.writeInterfaceToken(IActivityManager.descriptor);
3051        data.writeStrongBinder(app.asBinder());
3052        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
3053        reply.readException();
3054        data.recycle();
3055        reply.recycle();
3056    }
3057    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
3058            throws RemoteException
3059    {
3060        Parcel data = Parcel.obtain();
3061        Parcel reply = Parcel.obtain();
3062        data.writeInterfaceToken(IActivityManager.descriptor);
3063        data.writeStrongBinder(token);
3064        if (config != null) {
3065            data.writeInt(1);
3066            config.writeToParcel(data, 0);
3067        } else {
3068            data.writeInt(0);
3069        }
3070        data.writeInt(stopProfiling ? 1 : 0);
3071        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3072        reply.readException();
3073        data.recycle();
3074        reply.recycle();
3075    }
3076    public void activityResumed(IBinder token) throws RemoteException
3077    {
3078        Parcel data = Parcel.obtain();
3079        Parcel reply = Parcel.obtain();
3080        data.writeInterfaceToken(IActivityManager.descriptor);
3081        data.writeStrongBinder(token);
3082        mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
3083        reply.readException();
3084        data.recycle();
3085        reply.recycle();
3086    }
3087    public void activityPaused(IBinder token) throws RemoteException
3088    {
3089        Parcel data = Parcel.obtain();
3090        Parcel reply = Parcel.obtain();
3091        data.writeInterfaceToken(IActivityManager.descriptor);
3092        data.writeStrongBinder(token);
3093        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
3094        reply.readException();
3095        data.recycle();
3096        reply.recycle();
3097    }
3098    public void activityStopped(IBinder token, Bundle state,
3099            PersistableBundle persistentState, CharSequence description) throws RemoteException
3100    {
3101        Parcel data = Parcel.obtain();
3102        Parcel reply = Parcel.obtain();
3103        data.writeInterfaceToken(IActivityManager.descriptor);
3104        data.writeStrongBinder(token);
3105        data.writeBundle(state);
3106        data.writePersistableBundle(persistentState);
3107        TextUtils.writeToParcel(description, data, 0);
3108        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3109        reply.readException();
3110        data.recycle();
3111        reply.recycle();
3112    }
3113    public void activitySlept(IBinder token) throws RemoteException
3114    {
3115        Parcel data = Parcel.obtain();
3116        Parcel reply = Parcel.obtain();
3117        data.writeInterfaceToken(IActivityManager.descriptor);
3118        data.writeStrongBinder(token);
3119        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3120        reply.readException();
3121        data.recycle();
3122        reply.recycle();
3123    }
3124    public void activityDestroyed(IBinder token) throws RemoteException
3125    {
3126        Parcel data = Parcel.obtain();
3127        Parcel reply = Parcel.obtain();
3128        data.writeInterfaceToken(IActivityManager.descriptor);
3129        data.writeStrongBinder(token);
3130        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3131        reply.readException();
3132        data.recycle();
3133        reply.recycle();
3134    }
3135    public String getCallingPackage(IBinder token) throws RemoteException
3136    {
3137        Parcel data = Parcel.obtain();
3138        Parcel reply = Parcel.obtain();
3139        data.writeInterfaceToken(IActivityManager.descriptor);
3140        data.writeStrongBinder(token);
3141        mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
3142        reply.readException();
3143        String res = reply.readString();
3144        data.recycle();
3145        reply.recycle();
3146        return res;
3147    }
3148    public ComponentName getCallingActivity(IBinder token)
3149            throws RemoteException {
3150        Parcel data = Parcel.obtain();
3151        Parcel reply = Parcel.obtain();
3152        data.writeInterfaceToken(IActivityManager.descriptor);
3153        data.writeStrongBinder(token);
3154        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
3155        reply.readException();
3156        ComponentName res = ComponentName.readFromParcel(reply);
3157        data.recycle();
3158        reply.recycle();
3159        return res;
3160    }
3161    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
3162        Parcel data = Parcel.obtain();
3163        Parcel reply = Parcel.obtain();
3164        data.writeInterfaceToken(IActivityManager.descriptor);
3165        data.writeString(callingPackage);
3166        mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
3167        reply.readException();
3168        ArrayList<IAppTask> list = null;
3169        int N = reply.readInt();
3170        if (N >= 0) {
3171            list = new ArrayList<>();
3172            while (N > 0) {
3173                IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
3174                list.add(task);
3175                N--;
3176            }
3177        }
3178        data.recycle();
3179        reply.recycle();
3180        return list;
3181    }
3182    public int addAppTask(IBinder activityToken, Intent intent,
3183            ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
3184        Parcel data = Parcel.obtain();
3185        Parcel reply = Parcel.obtain();
3186        data.writeInterfaceToken(IActivityManager.descriptor);
3187        data.writeStrongBinder(activityToken);
3188        intent.writeToParcel(data, 0);
3189        description.writeToParcel(data, 0);
3190        thumbnail.writeToParcel(data, 0);
3191        mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
3192        reply.readException();
3193        int res = reply.readInt();
3194        data.recycle();
3195        reply.recycle();
3196        return res;
3197    }
3198    public Point getAppTaskThumbnailSize() throws RemoteException {
3199        Parcel data = Parcel.obtain();
3200        Parcel reply = Parcel.obtain();
3201        data.writeInterfaceToken(IActivityManager.descriptor);
3202        mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
3203        reply.readException();
3204        Point size = Point.CREATOR.createFromParcel(reply);
3205        data.recycle();
3206        reply.recycle();
3207        return size;
3208    }
3209    public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, int flags)
3210            throws RemoteException {
3211        Parcel data = Parcel.obtain();
3212        Parcel reply = Parcel.obtain();
3213        data.writeInterfaceToken(IActivityManager.descriptor);
3214        data.writeInt(maxNum);
3215        data.writeInt(flags);
3216        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
3217        reply.readException();
3218        ArrayList<ActivityManager.RunningTaskInfo> list = null;
3219        int N = reply.readInt();
3220        if (N >= 0) {
3221            list = new ArrayList<>();
3222            while (N > 0) {
3223                ActivityManager.RunningTaskInfo info =
3224                        ActivityManager.RunningTaskInfo.CREATOR
3225                                .createFromParcel(reply);
3226                list.add(info);
3227                N--;
3228            }
3229        }
3230        data.recycle();
3231        reply.recycle();
3232        return list;
3233    }
3234    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
3235            int flags, int userId) throws RemoteException {
3236        Parcel data = Parcel.obtain();
3237        Parcel reply = Parcel.obtain();
3238        data.writeInterfaceToken(IActivityManager.descriptor);
3239        data.writeInt(maxNum);
3240        data.writeInt(flags);
3241        data.writeInt(userId);
3242        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
3243        reply.readException();
3244        ArrayList<ActivityManager.RecentTaskInfo> list
3245            = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
3246        data.recycle();
3247        reply.recycle();
3248        return list;
3249    }
3250    public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
3251        Parcel data = Parcel.obtain();
3252        Parcel reply = Parcel.obtain();
3253        data.writeInterfaceToken(IActivityManager.descriptor);
3254        data.writeInt(id);
3255        mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
3256        reply.readException();
3257        ActivityManager.TaskThumbnail taskThumbnail = null;
3258        if (reply.readInt() != 0) {
3259            taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
3260        }
3261        data.recycle();
3262        reply.recycle();
3263        return taskThumbnail;
3264    }
3265    public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
3266            throws RemoteException {
3267        Parcel data = Parcel.obtain();
3268        Parcel reply = Parcel.obtain();
3269        data.writeInterfaceToken(IActivityManager.descriptor);
3270        data.writeInt(maxNum);
3271        data.writeInt(flags);
3272        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
3273        reply.readException();
3274        ArrayList<ActivityManager.RunningServiceInfo> list = null;
3275        int N = reply.readInt();
3276        if (N >= 0) {
3277            list = new ArrayList<>();
3278            while (N > 0) {
3279                ActivityManager.RunningServiceInfo info =
3280                        ActivityManager.RunningServiceInfo.CREATOR
3281                        .createFromParcel(reply);
3282                list.add(info);
3283                N--;
3284            }
3285        }
3286        data.recycle();
3287        reply.recycle();
3288        return list;
3289    }
3290    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
3291            throws RemoteException {
3292        Parcel data = Parcel.obtain();
3293        Parcel reply = Parcel.obtain();
3294        data.writeInterfaceToken(IActivityManager.descriptor);
3295        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
3296        reply.readException();
3297        ArrayList<ActivityManager.ProcessErrorStateInfo> list
3298            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
3299        data.recycle();
3300        reply.recycle();
3301        return list;
3302    }
3303    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
3304            throws RemoteException {
3305        Parcel data = Parcel.obtain();
3306        Parcel reply = Parcel.obtain();
3307        data.writeInterfaceToken(IActivityManager.descriptor);
3308        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
3309        reply.readException();
3310        ArrayList<ActivityManager.RunningAppProcessInfo> list
3311        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
3312        data.recycle();
3313        reply.recycle();
3314        return list;
3315    }
3316    public List<ApplicationInfo> getRunningExternalApplications()
3317            throws RemoteException {
3318        Parcel data = Parcel.obtain();
3319        Parcel reply = Parcel.obtain();
3320        data.writeInterfaceToken(IActivityManager.descriptor);
3321        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
3322        reply.readException();
3323        ArrayList<ApplicationInfo> list
3324        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
3325        data.recycle();
3326        reply.recycle();
3327        return list;
3328    }
3329    public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
3330    {
3331        Parcel data = Parcel.obtain();
3332        Parcel reply = Parcel.obtain();
3333        data.writeInterfaceToken(IActivityManager.descriptor);
3334        data.writeInt(task);
3335        data.writeInt(flags);
3336        if (options != null) {
3337            data.writeInt(1);
3338            options.writeToParcel(data, 0);
3339        } else {
3340            data.writeInt(0);
3341        }
3342        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
3343        reply.readException();
3344        data.recycle();
3345        reply.recycle();
3346    }
3347    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
3348            throws RemoteException {
3349        Parcel data = Parcel.obtain();
3350        Parcel reply = Parcel.obtain();
3351        data.writeInterfaceToken(IActivityManager.descriptor);
3352        data.writeStrongBinder(token);
3353        data.writeInt(nonRoot ? 1 : 0);
3354        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3355        reply.readException();
3356        boolean res = reply.readInt() != 0;
3357        data.recycle();
3358        reply.recycle();
3359        return res;
3360    }
3361    public void moveTaskBackwards(int task) throws RemoteException
3362    {
3363        Parcel data = Parcel.obtain();
3364        Parcel reply = Parcel.obtain();
3365        data.writeInterfaceToken(IActivityManager.descriptor);
3366        data.writeInt(task);
3367        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
3368        reply.readException();
3369        data.recycle();
3370        reply.recycle();
3371    }
3372    @Override
3373    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
3374    {
3375        Parcel data = Parcel.obtain();
3376        Parcel reply = Parcel.obtain();
3377        data.writeInterfaceToken(IActivityManager.descriptor);
3378        data.writeInt(taskId);
3379        data.writeInt(stackId);
3380        data.writeInt(toTop ? 1 : 0);
3381        mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
3382        reply.readException();
3383        data.recycle();
3384        reply.recycle();
3385    }
3386    @Override
3387    public void resizeStack(int stackBoxId, Rect r) throws RemoteException
3388    {
3389        Parcel data = Parcel.obtain();
3390        Parcel reply = Parcel.obtain();
3391        data.writeInterfaceToken(IActivityManager.descriptor);
3392        data.writeInt(stackBoxId);
3393        r.writeToParcel(data, 0);
3394        mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0);
3395        reply.readException();
3396        data.recycle();
3397        reply.recycle();
3398    }
3399    @Override
3400    public List<StackInfo> getAllStackInfos() throws RemoteException
3401    {
3402        Parcel data = Parcel.obtain();
3403        Parcel reply = Parcel.obtain();
3404        data.writeInterfaceToken(IActivityManager.descriptor);
3405        mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
3406        reply.readException();
3407        ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
3408        data.recycle();
3409        reply.recycle();
3410        return list;
3411    }
3412    @Override
3413    public StackInfo getStackInfo(int stackId) throws RemoteException
3414    {
3415        Parcel data = Parcel.obtain();
3416        Parcel reply = Parcel.obtain();
3417        data.writeInterfaceToken(IActivityManager.descriptor);
3418        data.writeInt(stackId);
3419        mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
3420        reply.readException();
3421        int res = reply.readInt();
3422        StackInfo info = null;
3423        if (res != 0) {
3424            info = StackInfo.CREATOR.createFromParcel(reply);
3425        }
3426        data.recycle();
3427        reply.recycle();
3428        return info;
3429    }
3430    @Override
3431    public boolean isInHomeStack(int taskId) throws RemoteException {
3432        Parcel data = Parcel.obtain();
3433        Parcel reply = Parcel.obtain();
3434        data.writeInterfaceToken(IActivityManager.descriptor);
3435        data.writeInt(taskId);
3436        mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
3437        reply.readException();
3438        boolean isInHomeStack = reply.readInt() > 0;
3439        data.recycle();
3440        reply.recycle();
3441        return isInHomeStack;
3442    }
3443    @Override
3444    public void setFocusedStack(int stackId) throws RemoteException
3445    {
3446        Parcel data = Parcel.obtain();
3447        Parcel reply = Parcel.obtain();
3448        data.writeInterfaceToken(IActivityManager.descriptor);
3449        data.writeInt(stackId);
3450        mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0);
3451        reply.readException();
3452        data.recycle();
3453        reply.recycle();
3454    }
3455    @Override
3456    public int getFocusedStackId() throws RemoteException {
3457        Parcel data = Parcel.obtain();
3458        Parcel reply = Parcel.obtain();
3459        data.writeInterfaceToken(IActivityManager.descriptor);
3460        mRemote.transact(GET_FOCUSED_STACK_ID_TRANSACTION, data, reply, 0);
3461        reply.readException();
3462        int focusedStackId = reply.readInt();
3463        data.recycle();
3464        reply.recycle();
3465        return focusedStackId;
3466    }
3467    @Override
3468    public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException
3469    {
3470        Parcel data = Parcel.obtain();
3471        Parcel reply = Parcel.obtain();
3472        data.writeInterfaceToken(IActivityManager.descriptor);
3473        data.writeStrongBinder(listener.asBinder());
3474        mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0);
3475        reply.readException();
3476        data.recycle();
3477        reply.recycle();
3478    }
3479    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
3480    {
3481        Parcel data = Parcel.obtain();
3482        Parcel reply = Parcel.obtain();
3483        data.writeInterfaceToken(IActivityManager.descriptor);
3484        data.writeStrongBinder(token);
3485        data.writeInt(onlyRoot ? 1 : 0);
3486        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
3487        reply.readException();
3488        int res = reply.readInt();
3489        data.recycle();
3490        reply.recycle();
3491        return res;
3492    }
3493    public ContentProviderHolder getContentProvider(IApplicationThread caller,
3494            String name, int userId, boolean stable) throws RemoteException {
3495        Parcel data = Parcel.obtain();
3496        Parcel reply = Parcel.obtain();
3497        data.writeInterfaceToken(IActivityManager.descriptor);
3498        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3499        data.writeString(name);
3500        data.writeInt(userId);
3501        data.writeInt(stable ? 1 : 0);
3502        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3503        reply.readException();
3504        int res = reply.readInt();
3505        ContentProviderHolder cph = null;
3506        if (res != 0) {
3507            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
3508        }
3509        data.recycle();
3510        reply.recycle();
3511        return cph;
3512    }
3513    public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
3514            throws RemoteException {
3515        Parcel data = Parcel.obtain();
3516        Parcel reply = Parcel.obtain();
3517        data.writeInterfaceToken(IActivityManager.descriptor);
3518        data.writeString(name);
3519        data.writeInt(userId);
3520        data.writeStrongBinder(token);
3521        mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
3522        reply.readException();
3523        int res = reply.readInt();
3524        ContentProviderHolder cph = null;
3525        if (res != 0) {
3526            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
3527        }
3528        data.recycle();
3529        reply.recycle();
3530        return cph;
3531    }
3532    public void publishContentProviders(IApplicationThread caller,
3533            List<ContentProviderHolder> providers) throws RemoteException
3534    {
3535        Parcel data = Parcel.obtain();
3536        Parcel reply = Parcel.obtain();
3537        data.writeInterfaceToken(IActivityManager.descriptor);
3538        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3539        data.writeTypedList(providers);
3540        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
3541        reply.readException();
3542        data.recycle();
3543        reply.recycle();
3544    }
3545    public boolean refContentProvider(IBinder connection, int stable, int unstable)
3546            throws RemoteException {
3547        Parcel data = Parcel.obtain();
3548        Parcel reply = Parcel.obtain();
3549        data.writeInterfaceToken(IActivityManager.descriptor);
3550        data.writeStrongBinder(connection);
3551        data.writeInt(stable);
3552        data.writeInt(unstable);
3553        mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3554        reply.readException();
3555        boolean res = reply.readInt() != 0;
3556        data.recycle();
3557        reply.recycle();
3558        return res;
3559    }
3560
3561    public void unstableProviderDied(IBinder connection) throws RemoteException {
3562        Parcel data = Parcel.obtain();
3563        Parcel reply = Parcel.obtain();
3564        data.writeInterfaceToken(IActivityManager.descriptor);
3565        data.writeStrongBinder(connection);
3566        mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
3567        reply.readException();
3568        data.recycle();
3569        reply.recycle();
3570    }
3571
3572    @Override
3573    public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
3574        Parcel data = Parcel.obtain();
3575        Parcel reply = Parcel.obtain();
3576        data.writeInterfaceToken(IActivityManager.descriptor);
3577        data.writeStrongBinder(connection);
3578        mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
3579        reply.readException();
3580        data.recycle();
3581        reply.recycle();
3582    }
3583
3584    public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
3585        Parcel data = Parcel.obtain();
3586        Parcel reply = Parcel.obtain();
3587        data.writeInterfaceToken(IActivityManager.descriptor);
3588        data.writeStrongBinder(connection);
3589        data.writeInt(stable ? 1 : 0);
3590        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3591        reply.readException();
3592        data.recycle();
3593        reply.recycle();
3594    }
3595
3596    public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
3597        Parcel data = Parcel.obtain();
3598        Parcel reply = Parcel.obtain();
3599        data.writeInterfaceToken(IActivityManager.descriptor);
3600        data.writeString(name);
3601        data.writeStrongBinder(token);
3602        mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
3603        reply.readException();
3604        data.recycle();
3605        reply.recycle();
3606    }
3607
3608    public PendingIntent getRunningServiceControlPanel(ComponentName service)
3609            throws RemoteException
3610    {
3611        Parcel data = Parcel.obtain();
3612        Parcel reply = Parcel.obtain();
3613        data.writeInterfaceToken(IActivityManager.descriptor);
3614        service.writeToParcel(data, 0);
3615        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
3616        reply.readException();
3617        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
3618        data.recycle();
3619        reply.recycle();
3620        return res;
3621    }
3622
3623    public ComponentName startService(IApplicationThread caller, Intent service,
3624            String resolvedType, int userId) throws RemoteException
3625    {
3626        Parcel data = Parcel.obtain();
3627        Parcel reply = Parcel.obtain();
3628        data.writeInterfaceToken(IActivityManager.descriptor);
3629        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3630        service.writeToParcel(data, 0);
3631        data.writeString(resolvedType);
3632        data.writeInt(userId);
3633        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
3634        reply.readException();
3635        ComponentName res = ComponentName.readFromParcel(reply);
3636        data.recycle();
3637        reply.recycle();
3638        return res;
3639    }
3640    public int stopService(IApplicationThread caller, Intent service,
3641            String resolvedType, int userId) throws RemoteException
3642    {
3643        Parcel data = Parcel.obtain();
3644        Parcel reply = Parcel.obtain();
3645        data.writeInterfaceToken(IActivityManager.descriptor);
3646        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3647        service.writeToParcel(data, 0);
3648        data.writeString(resolvedType);
3649        data.writeInt(userId);
3650        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
3651        reply.readException();
3652        int res = reply.readInt();
3653        reply.recycle();
3654        data.recycle();
3655        return res;
3656    }
3657    public boolean stopServiceToken(ComponentName className, IBinder token,
3658            int startId) throws RemoteException {
3659        Parcel data = Parcel.obtain();
3660        Parcel reply = Parcel.obtain();
3661        data.writeInterfaceToken(IActivityManager.descriptor);
3662        ComponentName.writeToParcel(className, data);
3663        data.writeStrongBinder(token);
3664        data.writeInt(startId);
3665        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
3666        reply.readException();
3667        boolean res = reply.readInt() != 0;
3668        data.recycle();
3669        reply.recycle();
3670        return res;
3671    }
3672    public void setServiceForeground(ComponentName className, IBinder token,
3673            int id, Notification notification, boolean removeNotification) throws RemoteException {
3674        Parcel data = Parcel.obtain();
3675        Parcel reply = Parcel.obtain();
3676        data.writeInterfaceToken(IActivityManager.descriptor);
3677        ComponentName.writeToParcel(className, data);
3678        data.writeStrongBinder(token);
3679        data.writeInt(id);
3680        if (notification != null) {
3681            data.writeInt(1);
3682            notification.writeToParcel(data, 0);
3683        } else {
3684            data.writeInt(0);
3685        }
3686        data.writeInt(removeNotification ? 1 : 0);
3687        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
3688        reply.readException();
3689        data.recycle();
3690        reply.recycle();
3691    }
3692    public int bindService(IApplicationThread caller, IBinder token,
3693            Intent service, String resolvedType, IServiceConnection connection,
3694            int flags, int userId) throws RemoteException {
3695        Parcel data = Parcel.obtain();
3696        Parcel reply = Parcel.obtain();
3697        data.writeInterfaceToken(IActivityManager.descriptor);
3698        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3699        data.writeStrongBinder(token);
3700        service.writeToParcel(data, 0);
3701        data.writeString(resolvedType);
3702        data.writeStrongBinder(connection.asBinder());
3703        data.writeInt(flags);
3704        data.writeInt(userId);
3705        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
3706        reply.readException();
3707        int res = reply.readInt();
3708        data.recycle();
3709        reply.recycle();
3710        return res;
3711    }
3712    public boolean unbindService(IServiceConnection connection) throws RemoteException
3713    {
3714        Parcel data = Parcel.obtain();
3715        Parcel reply = Parcel.obtain();
3716        data.writeInterfaceToken(IActivityManager.descriptor);
3717        data.writeStrongBinder(connection.asBinder());
3718        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
3719        reply.readException();
3720        boolean res = reply.readInt() != 0;
3721        data.recycle();
3722        reply.recycle();
3723        return res;
3724    }
3725
3726    public void publishService(IBinder token,
3727            Intent intent, IBinder service) throws RemoteException {
3728        Parcel data = Parcel.obtain();
3729        Parcel reply = Parcel.obtain();
3730        data.writeInterfaceToken(IActivityManager.descriptor);
3731        data.writeStrongBinder(token);
3732        intent.writeToParcel(data, 0);
3733        data.writeStrongBinder(service);
3734        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
3735        reply.readException();
3736        data.recycle();
3737        reply.recycle();
3738    }
3739
3740    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
3741            throws RemoteException {
3742        Parcel data = Parcel.obtain();
3743        Parcel reply = Parcel.obtain();
3744        data.writeInterfaceToken(IActivityManager.descriptor);
3745        data.writeStrongBinder(token);
3746        intent.writeToParcel(data, 0);
3747        data.writeInt(doRebind ? 1 : 0);
3748        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
3749        reply.readException();
3750        data.recycle();
3751        reply.recycle();
3752    }
3753
3754    public void serviceDoneExecuting(IBinder token, int type, int startId,
3755            int res) throws RemoteException {
3756        Parcel data = Parcel.obtain();
3757        Parcel reply = Parcel.obtain();
3758        data.writeInterfaceToken(IActivityManager.descriptor);
3759        data.writeStrongBinder(token);
3760        data.writeInt(type);
3761        data.writeInt(startId);
3762        data.writeInt(res);
3763        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3764        reply.readException();
3765        data.recycle();
3766        reply.recycle();
3767    }
3768
3769    public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
3770        Parcel data = Parcel.obtain();
3771        Parcel reply = Parcel.obtain();
3772        data.writeInterfaceToken(IActivityManager.descriptor);
3773        service.writeToParcel(data, 0);
3774        data.writeString(resolvedType);
3775        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
3776        reply.readException();
3777        IBinder binder = reply.readStrongBinder();
3778        reply.recycle();
3779        data.recycle();
3780        return binder;
3781    }
3782
3783    public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
3784            throws RemoteException {
3785        Parcel data = Parcel.obtain();
3786        Parcel reply = Parcel.obtain();
3787        data.writeInterfaceToken(IActivityManager.descriptor);
3788        app.writeToParcel(data, 0);
3789        data.writeInt(backupRestoreMode);
3790        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
3791        reply.readException();
3792        boolean success = reply.readInt() != 0;
3793        reply.recycle();
3794        data.recycle();
3795        return success;
3796    }
3797
3798    public void clearPendingBackup() throws RemoteException {
3799        Parcel data = Parcel.obtain();
3800        Parcel reply = Parcel.obtain();
3801        data.writeInterfaceToken(IActivityManager.descriptor);
3802        mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
3803        reply.recycle();
3804        data.recycle();
3805    }
3806
3807    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
3808        Parcel data = Parcel.obtain();
3809        Parcel reply = Parcel.obtain();
3810        data.writeInterfaceToken(IActivityManager.descriptor);
3811        data.writeString(packageName);
3812        data.writeStrongBinder(agent);
3813        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
3814        reply.recycle();
3815        data.recycle();
3816    }
3817
3818    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
3819        Parcel data = Parcel.obtain();
3820        Parcel reply = Parcel.obtain();
3821        data.writeInterfaceToken(IActivityManager.descriptor);
3822        app.writeToParcel(data, 0);
3823        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
3824        reply.readException();
3825        reply.recycle();
3826        data.recycle();
3827    }
3828
3829    public boolean startInstrumentation(ComponentName className, String profileFile,
3830            int flags, Bundle arguments, IInstrumentationWatcher watcher,
3831            IUiAutomationConnection connection, int userId, String instructionSet)
3832            throws RemoteException {
3833        Parcel data = Parcel.obtain();
3834        Parcel reply = Parcel.obtain();
3835        data.writeInterfaceToken(IActivityManager.descriptor);
3836        ComponentName.writeToParcel(className, data);
3837        data.writeString(profileFile);
3838        data.writeInt(flags);
3839        data.writeBundle(arguments);
3840        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
3841        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
3842        data.writeInt(userId);
3843        data.writeString(instructionSet);
3844        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3845        reply.readException();
3846        boolean res = reply.readInt() != 0;
3847        reply.recycle();
3848        data.recycle();
3849        return res;
3850    }
3851
3852    public void finishInstrumentation(IApplicationThread target,
3853            int resultCode, Bundle results) throws RemoteException {
3854        Parcel data = Parcel.obtain();
3855        Parcel reply = Parcel.obtain();
3856        data.writeInterfaceToken(IActivityManager.descriptor);
3857        data.writeStrongBinder(target != null ? target.asBinder() : null);
3858        data.writeInt(resultCode);
3859        data.writeBundle(results);
3860        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3861        reply.readException();
3862        data.recycle();
3863        reply.recycle();
3864    }
3865    public Configuration getConfiguration() throws RemoteException
3866    {
3867        Parcel data = Parcel.obtain();
3868        Parcel reply = Parcel.obtain();
3869        data.writeInterfaceToken(IActivityManager.descriptor);
3870        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
3871        reply.readException();
3872        Configuration res = Configuration.CREATOR.createFromParcel(reply);
3873        reply.recycle();
3874        data.recycle();
3875        return res;
3876    }
3877    public void updateConfiguration(Configuration values) throws RemoteException
3878    {
3879        Parcel data = Parcel.obtain();
3880        Parcel reply = Parcel.obtain();
3881        data.writeInterfaceToken(IActivityManager.descriptor);
3882        values.writeToParcel(data, 0);
3883        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
3884        reply.readException();
3885        data.recycle();
3886        reply.recycle();
3887    }
3888    public void setRequestedOrientation(IBinder token, int requestedOrientation)
3889            throws RemoteException {
3890        Parcel data = Parcel.obtain();
3891        Parcel reply = Parcel.obtain();
3892        data.writeInterfaceToken(IActivityManager.descriptor);
3893        data.writeStrongBinder(token);
3894        data.writeInt(requestedOrientation);
3895        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3896        reply.readException();
3897        data.recycle();
3898        reply.recycle();
3899    }
3900    public int getRequestedOrientation(IBinder token) throws RemoteException {
3901        Parcel data = Parcel.obtain();
3902        Parcel reply = Parcel.obtain();
3903        data.writeInterfaceToken(IActivityManager.descriptor);
3904        data.writeStrongBinder(token);
3905        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3906        reply.readException();
3907        int res = reply.readInt();
3908        data.recycle();
3909        reply.recycle();
3910        return res;
3911    }
3912    public ComponentName getActivityClassForToken(IBinder token)
3913            throws RemoteException {
3914        Parcel data = Parcel.obtain();
3915        Parcel reply = Parcel.obtain();
3916        data.writeInterfaceToken(IActivityManager.descriptor);
3917        data.writeStrongBinder(token);
3918        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
3919        reply.readException();
3920        ComponentName res = ComponentName.readFromParcel(reply);
3921        data.recycle();
3922        reply.recycle();
3923        return res;
3924    }
3925    public String getPackageForToken(IBinder token) throws RemoteException
3926    {
3927        Parcel data = Parcel.obtain();
3928        Parcel reply = Parcel.obtain();
3929        data.writeInterfaceToken(IActivityManager.descriptor);
3930        data.writeStrongBinder(token);
3931        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
3932        reply.readException();
3933        String res = reply.readString();
3934        data.recycle();
3935        reply.recycle();
3936        return res;
3937    }
3938    public IIntentSender getIntentSender(int type,
3939            String packageName, IBinder token, String resultWho,
3940            int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
3941            Bundle options, int userId) throws RemoteException {
3942        Parcel data = Parcel.obtain();
3943        Parcel reply = Parcel.obtain();
3944        data.writeInterfaceToken(IActivityManager.descriptor);
3945        data.writeInt(type);
3946        data.writeString(packageName);
3947        data.writeStrongBinder(token);
3948        data.writeString(resultWho);
3949        data.writeInt(requestCode);
3950        if (intents != null) {
3951            data.writeInt(1);
3952            data.writeTypedArray(intents, 0);
3953            data.writeStringArray(resolvedTypes);
3954        } else {
3955            data.writeInt(0);
3956        }
3957        data.writeInt(flags);
3958        if (options != null) {
3959            data.writeInt(1);
3960            options.writeToParcel(data, 0);
3961        } else {
3962            data.writeInt(0);
3963        }
3964        data.writeInt(userId);
3965        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
3966        reply.readException();
3967        IIntentSender res = IIntentSender.Stub.asInterface(
3968                reply.readStrongBinder());
3969        data.recycle();
3970        reply.recycle();
3971        return res;
3972    }
3973    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
3974        Parcel data = Parcel.obtain();
3975        Parcel reply = Parcel.obtain();
3976        data.writeInterfaceToken(IActivityManager.descriptor);
3977        data.writeStrongBinder(sender.asBinder());
3978        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
3979        reply.readException();
3980        data.recycle();
3981        reply.recycle();
3982    }
3983    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
3984        Parcel data = Parcel.obtain();
3985        Parcel reply = Parcel.obtain();
3986        data.writeInterfaceToken(IActivityManager.descriptor);
3987        data.writeStrongBinder(sender.asBinder());
3988        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
3989        reply.readException();
3990        String res = reply.readString();
3991        data.recycle();
3992        reply.recycle();
3993        return res;
3994    }
3995    public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
3996        Parcel data = Parcel.obtain();
3997        Parcel reply = Parcel.obtain();
3998        data.writeInterfaceToken(IActivityManager.descriptor);
3999        data.writeStrongBinder(sender.asBinder());
4000        mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4001        reply.readException();
4002        int res = reply.readInt();
4003        data.recycle();
4004        reply.recycle();
4005        return res;
4006    }
4007    public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
4008            boolean requireFull, String name, String callerPackage) throws RemoteException {
4009        Parcel data = Parcel.obtain();
4010        Parcel reply = Parcel.obtain();
4011        data.writeInterfaceToken(IActivityManager.descriptor);
4012        data.writeInt(callingPid);
4013        data.writeInt(callingUid);
4014        data.writeInt(userId);
4015        data.writeInt(allowAll ? 1 : 0);
4016        data.writeInt(requireFull ? 1 : 0);
4017        data.writeString(name);
4018        data.writeString(callerPackage);
4019        mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
4020        reply.readException();
4021        int res = reply.readInt();
4022        data.recycle();
4023        reply.recycle();
4024        return res;
4025    }
4026    public void setProcessLimit(int max) throws RemoteException
4027    {
4028        Parcel data = Parcel.obtain();
4029        Parcel reply = Parcel.obtain();
4030        data.writeInterfaceToken(IActivityManager.descriptor);
4031        data.writeInt(max);
4032        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4033        reply.readException();
4034        data.recycle();
4035        reply.recycle();
4036    }
4037    public int getProcessLimit() throws RemoteException
4038    {
4039        Parcel data = Parcel.obtain();
4040        Parcel reply = Parcel.obtain();
4041        data.writeInterfaceToken(IActivityManager.descriptor);
4042        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4043        reply.readException();
4044        int res = reply.readInt();
4045        data.recycle();
4046        reply.recycle();
4047        return res;
4048    }
4049    public void setProcessForeground(IBinder token, int pid,
4050            boolean isForeground) throws RemoteException {
4051        Parcel data = Parcel.obtain();
4052        Parcel reply = Parcel.obtain();
4053        data.writeInterfaceToken(IActivityManager.descriptor);
4054        data.writeStrongBinder(token);
4055        data.writeInt(pid);
4056        data.writeInt(isForeground ? 1 : 0);
4057        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
4058        reply.readException();
4059        data.recycle();
4060        reply.recycle();
4061    }
4062    public int checkPermission(String permission, int pid, int uid)
4063            throws RemoteException {
4064        Parcel data = Parcel.obtain();
4065        Parcel reply = Parcel.obtain();
4066        data.writeInterfaceToken(IActivityManager.descriptor);
4067        data.writeString(permission);
4068        data.writeInt(pid);
4069        data.writeInt(uid);
4070        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
4071        reply.readException();
4072        int res = reply.readInt();
4073        data.recycle();
4074        reply.recycle();
4075        return res;
4076    }
4077    public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
4078            throws RemoteException {
4079        Parcel data = Parcel.obtain();
4080        Parcel reply = Parcel.obtain();
4081        data.writeInterfaceToken(IActivityManager.descriptor);
4082        data.writeString(permission);
4083        data.writeInt(pid);
4084        data.writeInt(uid);
4085        data.writeStrongBinder(callerToken);
4086        mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
4087        reply.readException();
4088        int res = reply.readInt();
4089        data.recycle();
4090        reply.recycle();
4091        return res;
4092    }
4093    public boolean clearApplicationUserData(final String packageName,
4094            final IPackageDataObserver observer, final int userId) throws RemoteException {
4095        Parcel data = Parcel.obtain();
4096        Parcel reply = Parcel.obtain();
4097        data.writeInterfaceToken(IActivityManager.descriptor);
4098        data.writeString(packageName);
4099        data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
4100        data.writeInt(userId);
4101        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
4102        reply.readException();
4103        boolean res = reply.readInt() != 0;
4104        data.recycle();
4105        reply.recycle();
4106        return res;
4107    }
4108    public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
4109            IBinder callerToken) throws RemoteException {
4110        Parcel data = Parcel.obtain();
4111        Parcel reply = Parcel.obtain();
4112        data.writeInterfaceToken(IActivityManager.descriptor);
4113        uri.writeToParcel(data, 0);
4114        data.writeInt(pid);
4115        data.writeInt(uid);
4116        data.writeInt(mode);
4117        data.writeInt(userId);
4118        data.writeStrongBinder(callerToken);
4119        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
4120        reply.readException();
4121        int res = reply.readInt();
4122        data.recycle();
4123        reply.recycle();
4124        return res;
4125    }
4126    public void grantUriPermission(IApplicationThread caller, String targetPkg,
4127            Uri uri, int mode, int userId) throws RemoteException {
4128        Parcel data = Parcel.obtain();
4129        Parcel reply = Parcel.obtain();
4130        data.writeInterfaceToken(IActivityManager.descriptor);
4131        data.writeStrongBinder(caller.asBinder());
4132        data.writeString(targetPkg);
4133        uri.writeToParcel(data, 0);
4134        data.writeInt(mode);
4135        data.writeInt(userId);
4136        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4137        reply.readException();
4138        data.recycle();
4139        reply.recycle();
4140    }
4141    public void revokeUriPermission(IApplicationThread caller, Uri uri,
4142            int mode, int userId) throws RemoteException {
4143        Parcel data = Parcel.obtain();
4144        Parcel reply = Parcel.obtain();
4145        data.writeInterfaceToken(IActivityManager.descriptor);
4146        data.writeStrongBinder(caller.asBinder());
4147        uri.writeToParcel(data, 0);
4148        data.writeInt(mode);
4149        data.writeInt(userId);
4150        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4151        reply.readException();
4152        data.recycle();
4153        reply.recycle();
4154    }
4155
4156    @Override
4157    public void takePersistableUriPermission(Uri uri, int mode, int userId)
4158            throws RemoteException {
4159        Parcel data = Parcel.obtain();
4160        Parcel reply = Parcel.obtain();
4161        data.writeInterfaceToken(IActivityManager.descriptor);
4162        uri.writeToParcel(data, 0);
4163        data.writeInt(mode);
4164        data.writeInt(userId);
4165        mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4166        reply.readException();
4167        data.recycle();
4168        reply.recycle();
4169    }
4170
4171    @Override
4172    public void releasePersistableUriPermission(Uri uri, int mode, int userId)
4173            throws RemoteException {
4174        Parcel data = Parcel.obtain();
4175        Parcel reply = Parcel.obtain();
4176        data.writeInterfaceToken(IActivityManager.descriptor);
4177        uri.writeToParcel(data, 0);
4178        data.writeInt(mode);
4179        data.writeInt(userId);
4180        mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4181        reply.readException();
4182        data.recycle();
4183        reply.recycle();
4184    }
4185
4186    @Override
4187    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
4188            String packageName, boolean incoming) throws RemoteException {
4189        Parcel data = Parcel.obtain();
4190        Parcel reply = Parcel.obtain();
4191        data.writeInterfaceToken(IActivityManager.descriptor);
4192        data.writeString(packageName);
4193        data.writeInt(incoming ? 1 : 0);
4194        mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4195        reply.readException();
4196        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4197                reply);
4198        data.recycle();
4199        reply.recycle();
4200        return perms;
4201    }
4202
4203    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
4204            throws RemoteException {
4205        Parcel data = Parcel.obtain();
4206        Parcel reply = Parcel.obtain();
4207        data.writeInterfaceToken(IActivityManager.descriptor);
4208        data.writeStrongBinder(who.asBinder());
4209        data.writeInt(waiting ? 1 : 0);
4210        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
4211        reply.readException();
4212        data.recycle();
4213        reply.recycle();
4214    }
4215    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
4216        Parcel data = Parcel.obtain();
4217        Parcel reply = Parcel.obtain();
4218        data.writeInterfaceToken(IActivityManager.descriptor);
4219        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
4220        reply.readException();
4221        outInfo.readFromParcel(reply);
4222        data.recycle();
4223        reply.recycle();
4224    }
4225    public void unhandledBack() throws RemoteException
4226    {
4227        Parcel data = Parcel.obtain();
4228        Parcel reply = Parcel.obtain();
4229        data.writeInterfaceToken(IActivityManager.descriptor);
4230        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
4231        reply.readException();
4232        data.recycle();
4233        reply.recycle();
4234    }
4235    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
4236    {
4237        Parcel data = Parcel.obtain();
4238        Parcel reply = Parcel.obtain();
4239        data.writeInterfaceToken(IActivityManager.descriptor);
4240        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
4241        reply.readException();
4242        ParcelFileDescriptor pfd = null;
4243        if (reply.readInt() != 0) {
4244            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
4245        }
4246        data.recycle();
4247        reply.recycle();
4248        return pfd;
4249    }
4250    public void setLockScreenShown(boolean shown) throws RemoteException
4251    {
4252        Parcel data = Parcel.obtain();
4253        Parcel reply = Parcel.obtain();
4254        data.writeInterfaceToken(IActivityManager.descriptor);
4255        data.writeInt(shown ? 1 : 0);
4256        mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
4257        reply.readException();
4258        data.recycle();
4259        reply.recycle();
4260    }
4261    public void setDebugApp(
4262        String packageName, boolean waitForDebugger, boolean persistent)
4263        throws RemoteException
4264    {
4265        Parcel data = Parcel.obtain();
4266        Parcel reply = Parcel.obtain();
4267        data.writeInterfaceToken(IActivityManager.descriptor);
4268        data.writeString(packageName);
4269        data.writeInt(waitForDebugger ? 1 : 0);
4270        data.writeInt(persistent ? 1 : 0);
4271        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
4272        reply.readException();
4273        data.recycle();
4274        reply.recycle();
4275    }
4276    public void setAlwaysFinish(boolean enabled) throws RemoteException
4277    {
4278        Parcel data = Parcel.obtain();
4279        Parcel reply = Parcel.obtain();
4280        data.writeInterfaceToken(IActivityManager.descriptor);
4281        data.writeInt(enabled ? 1 : 0);
4282        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
4283        reply.readException();
4284        data.recycle();
4285        reply.recycle();
4286    }
4287    public void setActivityController(IActivityController watcher) throws RemoteException
4288    {
4289        Parcel data = Parcel.obtain();
4290        Parcel reply = Parcel.obtain();
4291        data.writeInterfaceToken(IActivityManager.descriptor);
4292        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4293        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
4294        reply.readException();
4295        data.recycle();
4296        reply.recycle();
4297    }
4298    public void enterSafeMode() throws RemoteException {
4299        Parcel data = Parcel.obtain();
4300        data.writeInterfaceToken(IActivityManager.descriptor);
4301        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
4302        data.recycle();
4303    }
4304    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag)
4305            throws RemoteException {
4306        Parcel data = Parcel.obtain();
4307        data.writeInterfaceToken(IActivityManager.descriptor);
4308        data.writeStrongBinder(sender.asBinder());
4309        data.writeInt(sourceUid);
4310        data.writeString(sourcePkg);
4311        data.writeString(tag);
4312        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
4313        data.recycle();
4314    }
4315    public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag)
4316            throws RemoteException {
4317        Parcel data = Parcel.obtain();
4318        data.writeInterfaceToken(IActivityManager.descriptor);
4319        data.writeStrongBinder(sender.asBinder());
4320        data.writeInt(sourceUid);
4321        data.writeString(tag);
4322        mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0);
4323        data.recycle();
4324    }
4325    public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag)
4326            throws RemoteException {
4327        Parcel data = Parcel.obtain();
4328        data.writeInterfaceToken(IActivityManager.descriptor);
4329        data.writeStrongBinder(sender.asBinder());
4330        data.writeInt(sourceUid);
4331        data.writeString(tag);
4332        mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0);
4333        data.recycle();
4334    }
4335    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
4336        Parcel data = Parcel.obtain();
4337        Parcel reply = Parcel.obtain();
4338        data.writeInterfaceToken(IActivityManager.descriptor);
4339        data.writeIntArray(pids);
4340        data.writeString(reason);
4341        data.writeInt(secure ? 1 : 0);
4342        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
4343        reply.readException();
4344        boolean res = reply.readInt() != 0;
4345        data.recycle();
4346        reply.recycle();
4347        return res;
4348    }
4349    @Override
4350    public boolean killProcessesBelowForeground(String reason) throws RemoteException {
4351        Parcel data = Parcel.obtain();
4352        Parcel reply = Parcel.obtain();
4353        data.writeInterfaceToken(IActivityManager.descriptor);
4354        data.writeString(reason);
4355        mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
4356        boolean res = reply.readInt() != 0;
4357        data.recycle();
4358        reply.recycle();
4359        return res;
4360    }
4361    public boolean testIsSystemReady()
4362    {
4363        /* this base class version is never called */
4364        return true;
4365    }
4366    public void handleApplicationCrash(IBinder app,
4367            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
4368    {
4369        Parcel data = Parcel.obtain();
4370        Parcel reply = Parcel.obtain();
4371        data.writeInterfaceToken(IActivityManager.descriptor);
4372        data.writeStrongBinder(app);
4373        crashInfo.writeToParcel(data, 0);
4374        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
4375        reply.readException();
4376        reply.recycle();
4377        data.recycle();
4378    }
4379
4380    public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
4381            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
4382    {
4383        Parcel data = Parcel.obtain();
4384        Parcel reply = Parcel.obtain();
4385        data.writeInterfaceToken(IActivityManager.descriptor);
4386        data.writeStrongBinder(app);
4387        data.writeString(tag);
4388        data.writeInt(system ? 1 : 0);
4389        crashInfo.writeToParcel(data, 0);
4390        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
4391        reply.readException();
4392        boolean res = reply.readInt() != 0;
4393        reply.recycle();
4394        data.recycle();
4395        return res;
4396    }
4397
4398    public void handleApplicationStrictModeViolation(IBinder app,
4399            int violationMask,
4400            StrictMode.ViolationInfo info) throws RemoteException
4401    {
4402        Parcel data = Parcel.obtain();
4403        Parcel reply = Parcel.obtain();
4404        data.writeInterfaceToken(IActivityManager.descriptor);
4405        data.writeStrongBinder(app);
4406        data.writeInt(violationMask);
4407        info.writeToParcel(data, 0);
4408        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
4409        reply.readException();
4410        reply.recycle();
4411        data.recycle();
4412    }
4413
4414    public void signalPersistentProcesses(int sig) throws RemoteException {
4415        Parcel data = Parcel.obtain();
4416        Parcel reply = Parcel.obtain();
4417        data.writeInterfaceToken(IActivityManager.descriptor);
4418        data.writeInt(sig);
4419        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
4420        reply.readException();
4421        data.recycle();
4422        reply.recycle();
4423    }
4424
4425    public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
4426        Parcel data = Parcel.obtain();
4427        Parcel reply = Parcel.obtain();
4428        data.writeInterfaceToken(IActivityManager.descriptor);
4429        data.writeString(packageName);
4430        data.writeInt(userId);
4431        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
4432        reply.readException();
4433        data.recycle();
4434        reply.recycle();
4435    }
4436
4437    public void killAllBackgroundProcesses() throws RemoteException {
4438        Parcel data = Parcel.obtain();
4439        Parcel reply = Parcel.obtain();
4440        data.writeInterfaceToken(IActivityManager.descriptor);
4441        mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
4442        reply.readException();
4443        data.recycle();
4444        reply.recycle();
4445    }
4446
4447    public void forceStopPackage(String packageName, int userId) throws RemoteException {
4448        Parcel data = Parcel.obtain();
4449        Parcel reply = Parcel.obtain();
4450        data.writeInterfaceToken(IActivityManager.descriptor);
4451        data.writeString(packageName);
4452        data.writeInt(userId);
4453        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
4454        reply.readException();
4455        data.recycle();
4456        reply.recycle();
4457    }
4458
4459    public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
4460            throws RemoteException
4461    {
4462        Parcel data = Parcel.obtain();
4463        Parcel reply = Parcel.obtain();
4464        data.writeInterfaceToken(IActivityManager.descriptor);
4465        mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
4466        reply.readException();
4467        outInfo.readFromParcel(reply);
4468        reply.recycle();
4469        data.recycle();
4470    }
4471
4472    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
4473    {
4474        Parcel data = Parcel.obtain();
4475        Parcel reply = Parcel.obtain();
4476        data.writeInterfaceToken(IActivityManager.descriptor);
4477        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
4478        reply.readException();
4479        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
4480        reply.recycle();
4481        data.recycle();
4482        return res;
4483    }
4484
4485    public boolean profileControl(String process, int userId, boolean start,
4486            ProfilerInfo profilerInfo, int profileType) throws RemoteException
4487    {
4488        Parcel data = Parcel.obtain();
4489        Parcel reply = Parcel.obtain();
4490        data.writeInterfaceToken(IActivityManager.descriptor);
4491        data.writeString(process);
4492        data.writeInt(userId);
4493        data.writeInt(start ? 1 : 0);
4494        data.writeInt(profileType);
4495        if (profilerInfo != null) {
4496            data.writeInt(1);
4497            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
4498        } else {
4499            data.writeInt(0);
4500        }
4501        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
4502        reply.readException();
4503        boolean res = reply.readInt() != 0;
4504        reply.recycle();
4505        data.recycle();
4506        return res;
4507    }
4508
4509    public boolean shutdown(int timeout) throws RemoteException
4510    {
4511        Parcel data = Parcel.obtain();
4512        Parcel reply = Parcel.obtain();
4513        data.writeInterfaceToken(IActivityManager.descriptor);
4514        data.writeInt(timeout);
4515        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
4516        reply.readException();
4517        boolean res = reply.readInt() != 0;
4518        reply.recycle();
4519        data.recycle();
4520        return res;
4521    }
4522
4523    public void stopAppSwitches() throws RemoteException {
4524        Parcel data = Parcel.obtain();
4525        Parcel reply = Parcel.obtain();
4526        data.writeInterfaceToken(IActivityManager.descriptor);
4527        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
4528        reply.readException();
4529        reply.recycle();
4530        data.recycle();
4531    }
4532
4533    public void resumeAppSwitches() throws RemoteException {
4534        Parcel data = Parcel.obtain();
4535        Parcel reply = Parcel.obtain();
4536        data.writeInterfaceToken(IActivityManager.descriptor);
4537        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
4538        reply.readException();
4539        reply.recycle();
4540        data.recycle();
4541    }
4542
4543    public void addPackageDependency(String packageName) throws RemoteException {
4544        Parcel data = Parcel.obtain();
4545        Parcel reply = Parcel.obtain();
4546        data.writeInterfaceToken(IActivityManager.descriptor);
4547        data.writeString(packageName);
4548        mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
4549        reply.readException();
4550        data.recycle();
4551        reply.recycle();
4552    }
4553
4554    public void killApplicationWithAppId(String pkg, int appid, String reason)
4555            throws RemoteException {
4556        Parcel data = Parcel.obtain();
4557        Parcel reply = Parcel.obtain();
4558        data.writeInterfaceToken(IActivityManager.descriptor);
4559        data.writeString(pkg);
4560        data.writeInt(appid);
4561        data.writeString(reason);
4562        mRemote.transact(KILL_APPLICATION_WITH_APPID_TRANSACTION, data, reply, 0);
4563        reply.readException();
4564        data.recycle();
4565        reply.recycle();
4566    }
4567
4568    public void closeSystemDialogs(String reason) throws RemoteException {
4569        Parcel data = Parcel.obtain();
4570        Parcel reply = Parcel.obtain();
4571        data.writeInterfaceToken(IActivityManager.descriptor);
4572        data.writeString(reason);
4573        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
4574        reply.readException();
4575        data.recycle();
4576        reply.recycle();
4577    }
4578
4579    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
4580            throws RemoteException {
4581        Parcel data = Parcel.obtain();
4582        Parcel reply = Parcel.obtain();
4583        data.writeInterfaceToken(IActivityManager.descriptor);
4584        data.writeIntArray(pids);
4585        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
4586        reply.readException();
4587        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
4588        data.recycle();
4589        reply.recycle();
4590        return res;
4591    }
4592
4593    public void killApplicationProcess(String processName, int uid) throws RemoteException {
4594        Parcel data = Parcel.obtain();
4595        Parcel reply = Parcel.obtain();
4596        data.writeInterfaceToken(IActivityManager.descriptor);
4597        data.writeString(processName);
4598        data.writeInt(uid);
4599        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
4600        reply.readException();
4601        data.recycle();
4602        reply.recycle();
4603    }
4604
4605    public void overridePendingTransition(IBinder token, String packageName,
4606            int enterAnim, int exitAnim) throws RemoteException {
4607        Parcel data = Parcel.obtain();
4608        Parcel reply = Parcel.obtain();
4609        data.writeInterfaceToken(IActivityManager.descriptor);
4610        data.writeStrongBinder(token);
4611        data.writeString(packageName);
4612        data.writeInt(enterAnim);
4613        data.writeInt(exitAnim);
4614        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
4615        reply.readException();
4616        data.recycle();
4617        reply.recycle();
4618    }
4619
4620    public boolean isUserAMonkey() throws RemoteException {
4621        Parcel data = Parcel.obtain();
4622        Parcel reply = Parcel.obtain();
4623        data.writeInterfaceToken(IActivityManager.descriptor);
4624        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
4625        reply.readException();
4626        boolean res = reply.readInt() != 0;
4627        data.recycle();
4628        reply.recycle();
4629        return res;
4630    }
4631
4632    public void setUserIsMonkey(boolean monkey) throws RemoteException {
4633        Parcel data = Parcel.obtain();
4634        Parcel reply = Parcel.obtain();
4635        data.writeInterfaceToken(IActivityManager.descriptor);
4636        data.writeInt(monkey ? 1 : 0);
4637        mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
4638        reply.readException();
4639        data.recycle();
4640        reply.recycle();
4641    }
4642
4643    public void finishHeavyWeightApp() throws RemoteException {
4644        Parcel data = Parcel.obtain();
4645        Parcel reply = Parcel.obtain();
4646        data.writeInterfaceToken(IActivityManager.descriptor);
4647        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
4648        reply.readException();
4649        data.recycle();
4650        reply.recycle();
4651    }
4652
4653    public boolean convertFromTranslucent(IBinder token)
4654            throws RemoteException {
4655        Parcel data = Parcel.obtain();
4656        Parcel reply = Parcel.obtain();
4657        data.writeInterfaceToken(IActivityManager.descriptor);
4658        data.writeStrongBinder(token);
4659        mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
4660        reply.readException();
4661        boolean res = reply.readInt() != 0;
4662        data.recycle();
4663        reply.recycle();
4664        return res;
4665    }
4666
4667    public boolean convertToTranslucent(IBinder token, ActivityOptions options)
4668            throws RemoteException {
4669        Parcel data = Parcel.obtain();
4670        Parcel reply = Parcel.obtain();
4671        data.writeInterfaceToken(IActivityManager.descriptor);
4672        data.writeStrongBinder(token);
4673        if (options == null) {
4674            data.writeInt(0);
4675        } else {
4676            data.writeInt(1);
4677            data.writeBundle(options.toBundle());
4678        }
4679        mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
4680        reply.readException();
4681        boolean res = reply.readInt() != 0;
4682        data.recycle();
4683        reply.recycle();
4684        return res;
4685    }
4686
4687    public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
4688        Parcel data = Parcel.obtain();
4689        Parcel reply = Parcel.obtain();
4690        data.writeInterfaceToken(IActivityManager.descriptor);
4691        data.writeStrongBinder(token);
4692        mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
4693        reply.readException();
4694        Bundle bundle = reply.readBundle();
4695        ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle);
4696        data.recycle();
4697        reply.recycle();
4698        return options;
4699    }
4700
4701    public void setImmersive(IBinder token, boolean immersive)
4702            throws RemoteException {
4703        Parcel data = Parcel.obtain();
4704        Parcel reply = Parcel.obtain();
4705        data.writeInterfaceToken(IActivityManager.descriptor);
4706        data.writeStrongBinder(token);
4707        data.writeInt(immersive ? 1 : 0);
4708        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
4709        reply.readException();
4710        data.recycle();
4711        reply.recycle();
4712    }
4713
4714    public boolean isImmersive(IBinder token)
4715            throws RemoteException {
4716        Parcel data = Parcel.obtain();
4717        Parcel reply = Parcel.obtain();
4718        data.writeInterfaceToken(IActivityManager.descriptor);
4719        data.writeStrongBinder(token);
4720        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
4721        reply.readException();
4722        boolean res = reply.readInt() == 1;
4723        data.recycle();
4724        reply.recycle();
4725        return res;
4726    }
4727
4728    public boolean isTopOfTask(IBinder token) throws RemoteException {
4729        Parcel data = Parcel.obtain();
4730        Parcel reply = Parcel.obtain();
4731        data.writeInterfaceToken(IActivityManager.descriptor);
4732        data.writeStrongBinder(token);
4733        mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
4734        reply.readException();
4735        boolean res = reply.readInt() == 1;
4736        data.recycle();
4737        reply.recycle();
4738        return res;
4739    }
4740
4741    public boolean isTopActivityImmersive()
4742            throws RemoteException {
4743        Parcel data = Parcel.obtain();
4744        Parcel reply = Parcel.obtain();
4745        data.writeInterfaceToken(IActivityManager.descriptor);
4746        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
4747        reply.readException();
4748        boolean res = reply.readInt() == 1;
4749        data.recycle();
4750        reply.recycle();
4751        return res;
4752    }
4753
4754    public void crashApplication(int uid, int initialPid, String packageName,
4755            String message) throws RemoteException {
4756        Parcel data = Parcel.obtain();
4757        Parcel reply = Parcel.obtain();
4758        data.writeInterfaceToken(IActivityManager.descriptor);
4759        data.writeInt(uid);
4760        data.writeInt(initialPid);
4761        data.writeString(packageName);
4762        data.writeString(message);
4763        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
4764        reply.readException();
4765        data.recycle();
4766        reply.recycle();
4767    }
4768
4769    public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
4770        Parcel data = Parcel.obtain();
4771        Parcel reply = Parcel.obtain();
4772        data.writeInterfaceToken(IActivityManager.descriptor);
4773        uri.writeToParcel(data, 0);
4774        data.writeInt(userId);
4775        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
4776        reply.readException();
4777        String res = reply.readString();
4778        data.recycle();
4779        reply.recycle();
4780        return res;
4781    }
4782
4783    public IBinder newUriPermissionOwner(String name)
4784            throws RemoteException {
4785        Parcel data = Parcel.obtain();
4786        Parcel reply = Parcel.obtain();
4787        data.writeInterfaceToken(IActivityManager.descriptor);
4788        data.writeString(name);
4789        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
4790        reply.readException();
4791        IBinder res = reply.readStrongBinder();
4792        data.recycle();
4793        reply.recycle();
4794        return res;
4795    }
4796
4797    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
4798            Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
4799        Parcel data = Parcel.obtain();
4800        Parcel reply = Parcel.obtain();
4801        data.writeInterfaceToken(IActivityManager.descriptor);
4802        data.writeStrongBinder(owner);
4803        data.writeInt(fromUid);
4804        data.writeString(targetPkg);
4805        uri.writeToParcel(data, 0);
4806        data.writeInt(mode);
4807        data.writeInt(sourceUserId);
4808        data.writeInt(targetUserId);
4809        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4810        reply.readException();
4811        data.recycle();
4812        reply.recycle();
4813    }
4814
4815    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
4816            int mode, int userId) throws RemoteException {
4817        Parcel data = Parcel.obtain();
4818        Parcel reply = Parcel.obtain();
4819        data.writeInterfaceToken(IActivityManager.descriptor);
4820        data.writeStrongBinder(owner);
4821        if (uri != null) {
4822            data.writeInt(1);
4823            uri.writeToParcel(data, 0);
4824        } else {
4825            data.writeInt(0);
4826        }
4827        data.writeInt(mode);
4828        data.writeInt(userId);
4829        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4830        reply.readException();
4831        data.recycle();
4832        reply.recycle();
4833    }
4834
4835    public int checkGrantUriPermission(int callingUid, String targetPkg,
4836            Uri uri, int modeFlags, int userId) throws RemoteException {
4837        Parcel data = Parcel.obtain();
4838        Parcel reply = Parcel.obtain();
4839        data.writeInterfaceToken(IActivityManager.descriptor);
4840        data.writeInt(callingUid);
4841        data.writeString(targetPkg);
4842        uri.writeToParcel(data, 0);
4843        data.writeInt(modeFlags);
4844        data.writeInt(userId);
4845        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4846        reply.readException();
4847        int res = reply.readInt();
4848        data.recycle();
4849        reply.recycle();
4850        return res;
4851    }
4852
4853    public boolean dumpHeap(String process, int userId, boolean managed,
4854            String path, ParcelFileDescriptor fd) throws RemoteException {
4855        Parcel data = Parcel.obtain();
4856        Parcel reply = Parcel.obtain();
4857        data.writeInterfaceToken(IActivityManager.descriptor);
4858        data.writeString(process);
4859        data.writeInt(userId);
4860        data.writeInt(managed ? 1 : 0);
4861        data.writeString(path);
4862        if (fd != null) {
4863            data.writeInt(1);
4864            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
4865        } else {
4866            data.writeInt(0);
4867        }
4868        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
4869        reply.readException();
4870        boolean res = reply.readInt() != 0;
4871        reply.recycle();
4872        data.recycle();
4873        return res;
4874    }
4875
4876    public int startActivities(IApplicationThread caller, String callingPackage,
4877            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
4878            Bundle options, int userId) throws RemoteException {
4879        Parcel data = Parcel.obtain();
4880        Parcel reply = Parcel.obtain();
4881        data.writeInterfaceToken(IActivityManager.descriptor);
4882        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4883        data.writeString(callingPackage);
4884        data.writeTypedArray(intents, 0);
4885        data.writeStringArray(resolvedTypes);
4886        data.writeStrongBinder(resultTo);
4887        if (options != null) {
4888            data.writeInt(1);
4889            options.writeToParcel(data, 0);
4890        } else {
4891            data.writeInt(0);
4892        }
4893        data.writeInt(userId);
4894        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
4895        reply.readException();
4896        int result = reply.readInt();
4897        reply.recycle();
4898        data.recycle();
4899        return result;
4900    }
4901
4902    public int getFrontActivityScreenCompatMode() throws RemoteException {
4903        Parcel data = Parcel.obtain();
4904        Parcel reply = Parcel.obtain();
4905        data.writeInterfaceToken(IActivityManager.descriptor);
4906        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4907        reply.readException();
4908        int mode = reply.readInt();
4909        reply.recycle();
4910        data.recycle();
4911        return mode;
4912    }
4913
4914    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
4915        Parcel data = Parcel.obtain();
4916        Parcel reply = Parcel.obtain();
4917        data.writeInterfaceToken(IActivityManager.descriptor);
4918        data.writeInt(mode);
4919        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4920        reply.readException();
4921        reply.recycle();
4922        data.recycle();
4923    }
4924
4925    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
4926        Parcel data = Parcel.obtain();
4927        Parcel reply = Parcel.obtain();
4928        data.writeInterfaceToken(IActivityManager.descriptor);
4929        data.writeString(packageName);
4930        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4931        reply.readException();
4932        int mode = reply.readInt();
4933        reply.recycle();
4934        data.recycle();
4935        return mode;
4936    }
4937
4938    public void setPackageScreenCompatMode(String packageName, int mode)
4939            throws RemoteException {
4940        Parcel data = Parcel.obtain();
4941        Parcel reply = Parcel.obtain();
4942        data.writeInterfaceToken(IActivityManager.descriptor);
4943        data.writeString(packageName);
4944        data.writeInt(mode);
4945        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4946        reply.readException();
4947        reply.recycle();
4948        data.recycle();
4949    }
4950
4951    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
4952        Parcel data = Parcel.obtain();
4953        Parcel reply = Parcel.obtain();
4954        data.writeInterfaceToken(IActivityManager.descriptor);
4955        data.writeString(packageName);
4956        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4957        reply.readException();
4958        boolean ask = reply.readInt() != 0;
4959        reply.recycle();
4960        data.recycle();
4961        return ask;
4962    }
4963
4964    public void setPackageAskScreenCompat(String packageName, boolean ask)
4965            throws RemoteException {
4966        Parcel data = Parcel.obtain();
4967        Parcel reply = Parcel.obtain();
4968        data.writeInterfaceToken(IActivityManager.descriptor);
4969        data.writeString(packageName);
4970        data.writeInt(ask ? 1 : 0);
4971        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4972        reply.readException();
4973        reply.recycle();
4974        data.recycle();
4975    }
4976
4977    public boolean switchUser(int userid) throws RemoteException {
4978        Parcel data = Parcel.obtain();
4979        Parcel reply = Parcel.obtain();
4980        data.writeInterfaceToken(IActivityManager.descriptor);
4981        data.writeInt(userid);
4982        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
4983        reply.readException();
4984        boolean result = reply.readInt() != 0;
4985        reply.recycle();
4986        data.recycle();
4987        return result;
4988    }
4989
4990    public boolean startUserInBackground(int userid) throws RemoteException {
4991        Parcel data = Parcel.obtain();
4992        Parcel reply = Parcel.obtain();
4993        data.writeInterfaceToken(IActivityManager.descriptor);
4994        data.writeInt(userid);
4995        mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
4996        reply.readException();
4997        boolean result = reply.readInt() != 0;
4998        reply.recycle();
4999        data.recycle();
5000        return result;
5001    }
5002
5003    public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
5004        Parcel data = Parcel.obtain();
5005        Parcel reply = Parcel.obtain();
5006        data.writeInterfaceToken(IActivityManager.descriptor);
5007        data.writeInt(userid);
5008        data.writeStrongInterface(callback);
5009        mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
5010        reply.readException();
5011        int result = reply.readInt();
5012        reply.recycle();
5013        data.recycle();
5014        return result;
5015    }
5016
5017    public UserInfo getCurrentUser() throws RemoteException {
5018        Parcel data = Parcel.obtain();
5019        Parcel reply = Parcel.obtain();
5020        data.writeInterfaceToken(IActivityManager.descriptor);
5021        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
5022        reply.readException();
5023        UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
5024        reply.recycle();
5025        data.recycle();
5026        return userInfo;
5027    }
5028
5029    public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException {
5030        Parcel data = Parcel.obtain();
5031        Parcel reply = Parcel.obtain();
5032        data.writeInterfaceToken(IActivityManager.descriptor);
5033        data.writeInt(userid);
5034        data.writeInt(orStopping ? 1 : 0);
5035        mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
5036        reply.readException();
5037        boolean result = reply.readInt() != 0;
5038        reply.recycle();
5039        data.recycle();
5040        return result;
5041    }
5042
5043    public int[] getRunningUserIds() throws RemoteException {
5044        Parcel data = Parcel.obtain();
5045        Parcel reply = Parcel.obtain();
5046        data.writeInterfaceToken(IActivityManager.descriptor);
5047        mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
5048        reply.readException();
5049        int[] result = reply.createIntArray();
5050        reply.recycle();
5051        data.recycle();
5052        return result;
5053    }
5054
5055    public boolean removeTask(int taskId) throws RemoteException {
5056        Parcel data = Parcel.obtain();
5057        Parcel reply = Parcel.obtain();
5058        data.writeInterfaceToken(IActivityManager.descriptor);
5059        data.writeInt(taskId);
5060        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
5061        reply.readException();
5062        boolean result = reply.readInt() != 0;
5063        reply.recycle();
5064        data.recycle();
5065        return result;
5066    }
5067
5068    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
5069        Parcel data = Parcel.obtain();
5070        Parcel reply = Parcel.obtain();
5071        data.writeInterfaceToken(IActivityManager.descriptor);
5072        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5073        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5074        reply.readException();
5075        data.recycle();
5076        reply.recycle();
5077    }
5078
5079    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
5080        Parcel data = Parcel.obtain();
5081        Parcel reply = Parcel.obtain();
5082        data.writeInterfaceToken(IActivityManager.descriptor);
5083        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5084        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5085        reply.readException();
5086        data.recycle();
5087        reply.recycle();
5088    }
5089
5090    public void registerUidObserver(IUidObserver observer) throws RemoteException {
5091        Parcel data = Parcel.obtain();
5092        Parcel reply = Parcel.obtain();
5093        data.writeInterfaceToken(IActivityManager.descriptor);
5094        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5095        mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5096        reply.readException();
5097        data.recycle();
5098        reply.recycle();
5099    }
5100
5101    public void unregisterUidObserver(IUidObserver observer) throws RemoteException {
5102        Parcel data = Parcel.obtain();
5103        Parcel reply = Parcel.obtain();
5104        data.writeInterfaceToken(IActivityManager.descriptor);
5105        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5106        mRemote.transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5107        reply.readException();
5108        data.recycle();
5109        reply.recycle();
5110    }
5111
5112    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
5113        Parcel data = Parcel.obtain();
5114        Parcel reply = Parcel.obtain();
5115        data.writeInterfaceToken(IActivityManager.descriptor);
5116        data.writeStrongBinder(sender.asBinder());
5117        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
5118        reply.readException();
5119        boolean res = reply.readInt() != 0;
5120        data.recycle();
5121        reply.recycle();
5122        return res;
5123    }
5124
5125    public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
5126        Parcel data = Parcel.obtain();
5127        Parcel reply = Parcel.obtain();
5128        data.writeInterfaceToken(IActivityManager.descriptor);
5129        data.writeStrongBinder(sender.asBinder());
5130        mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
5131        reply.readException();
5132        boolean res = reply.readInt() != 0;
5133        data.recycle();
5134        reply.recycle();
5135        return res;
5136    }
5137
5138    public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
5139        Parcel data = Parcel.obtain();
5140        Parcel reply = Parcel.obtain();
5141        data.writeInterfaceToken(IActivityManager.descriptor);
5142        data.writeStrongBinder(sender.asBinder());
5143        mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5144        reply.readException();
5145        Intent res = reply.readInt() != 0
5146                ? Intent.CREATOR.createFromParcel(reply) : null;
5147        data.recycle();
5148        reply.recycle();
5149        return res;
5150    }
5151
5152    public String getTagForIntentSender(IIntentSender sender, String prefix)
5153            throws RemoteException {
5154        Parcel data = Parcel.obtain();
5155        Parcel reply = Parcel.obtain();
5156        data.writeInterfaceToken(IActivityManager.descriptor);
5157        data.writeStrongBinder(sender.asBinder());
5158        data.writeString(prefix);
5159        mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5160        reply.readException();
5161        String res = reply.readString();
5162        data.recycle();
5163        reply.recycle();
5164        return res;
5165    }
5166
5167    public void updatePersistentConfiguration(Configuration values) throws RemoteException
5168    {
5169        Parcel data = Parcel.obtain();
5170        Parcel reply = Parcel.obtain();
5171        data.writeInterfaceToken(IActivityManager.descriptor);
5172        values.writeToParcel(data, 0);
5173        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
5174        reply.readException();
5175        data.recycle();
5176        reply.recycle();
5177    }
5178
5179    public long[] getProcessPss(int[] pids) throws RemoteException {
5180        Parcel data = Parcel.obtain();
5181        Parcel reply = Parcel.obtain();
5182        data.writeInterfaceToken(IActivityManager.descriptor);
5183        data.writeIntArray(pids);
5184        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
5185        reply.readException();
5186        long[] res = reply.createLongArray();
5187        data.recycle();
5188        reply.recycle();
5189        return res;
5190    }
5191
5192    public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
5193        Parcel data = Parcel.obtain();
5194        Parcel reply = Parcel.obtain();
5195        data.writeInterfaceToken(IActivityManager.descriptor);
5196        TextUtils.writeToParcel(msg, data, 0);
5197        data.writeInt(always ? 1 : 0);
5198        mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
5199        reply.readException();
5200        data.recycle();
5201        reply.recycle();
5202    }
5203
5204    public void keyguardWaitingForActivityDrawn() throws RemoteException {
5205        Parcel data = Parcel.obtain();
5206        Parcel reply = Parcel.obtain();
5207        data.writeInterfaceToken(IActivityManager.descriptor);
5208        mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
5209        reply.readException();
5210        data.recycle();
5211        reply.recycle();
5212    }
5213
5214    public void keyguardGoingAway(boolean disableWindowAnimations,
5215            boolean keyguardGoingToNotificationShade) throws RemoteException {
5216        Parcel data = Parcel.obtain();
5217        Parcel reply = Parcel.obtain();
5218        data.writeInterfaceToken(IActivityManager.descriptor);
5219        data.writeInt(disableWindowAnimations ? 1 : 0);
5220        data.writeInt(keyguardGoingToNotificationShade ? 1 : 0);
5221        mRemote.transact(KEYGUARD_GOING_AWAY_TRANSACTION, data, reply, 0);
5222        reply.readException();
5223        data.recycle();
5224        reply.recycle();
5225    }
5226
5227    public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
5228            throws RemoteException {
5229        Parcel data = Parcel.obtain();
5230        Parcel reply = Parcel.obtain();
5231        data.writeInterfaceToken(IActivityManager.descriptor);
5232        data.writeStrongBinder(token);
5233        data.writeString(destAffinity);
5234        mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
5235        reply.readException();
5236        boolean result = reply.readInt() != 0;
5237        data.recycle();
5238        reply.recycle();
5239        return result;
5240    }
5241
5242    public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
5243            throws RemoteException {
5244        Parcel data = Parcel.obtain();
5245        Parcel reply = Parcel.obtain();
5246        data.writeInterfaceToken(IActivityManager.descriptor);
5247        data.writeStrongBinder(token);
5248        target.writeToParcel(data, 0);
5249        data.writeInt(resultCode);
5250        if (resultData != null) {
5251            data.writeInt(1);
5252            resultData.writeToParcel(data, 0);
5253        } else {
5254            data.writeInt(0);
5255        }
5256        mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
5257        reply.readException();
5258        boolean result = reply.readInt() != 0;
5259        data.recycle();
5260        reply.recycle();
5261        return result;
5262    }
5263
5264    public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
5265        Parcel data = Parcel.obtain();
5266        Parcel reply = Parcel.obtain();
5267        data.writeInterfaceToken(IActivityManager.descriptor);
5268        data.writeStrongBinder(activityToken);
5269        mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
5270        reply.readException();
5271        int result = reply.readInt();
5272        data.recycle();
5273        reply.recycle();
5274        return result;
5275    }
5276
5277    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
5278        Parcel data = Parcel.obtain();
5279        Parcel reply = Parcel.obtain();
5280        data.writeInterfaceToken(IActivityManager.descriptor);
5281        data.writeStrongBinder(activityToken);
5282        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
5283        reply.readException();
5284        String result = reply.readString();
5285        data.recycle();
5286        reply.recycle();
5287        return result;
5288    }
5289
5290    public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
5291        Parcel data = Parcel.obtain();
5292        Parcel reply = Parcel.obtain();
5293        data.writeInterfaceToken(IActivityManager.descriptor);
5294        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5295        mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
5296        reply.readException();
5297        data.recycle();
5298        reply.recycle();
5299    }
5300
5301    public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
5302        Parcel data = Parcel.obtain();
5303        Parcel reply = Parcel.obtain();
5304        data.writeInterfaceToken(IActivityManager.descriptor);
5305        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5306        mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
5307        reply.readException();
5308        data.recycle();
5309        reply.recycle();
5310    }
5311
5312    public void requestBugReport() throws RemoteException {
5313        Parcel data = Parcel.obtain();
5314        Parcel reply = Parcel.obtain();
5315        data.writeInterfaceToken(IActivityManager.descriptor);
5316        mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
5317        reply.readException();
5318        data.recycle();
5319        reply.recycle();
5320    }
5321
5322    public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
5323            throws RemoteException {
5324        Parcel data = Parcel.obtain();
5325        Parcel reply = Parcel.obtain();
5326        data.writeInterfaceToken(IActivityManager.descriptor);
5327        data.writeInt(pid);
5328        data.writeInt(aboveSystem ? 1 : 0);
5329        data.writeString(reason);
5330        mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
5331        reply.readException();
5332        long res = reply.readInt();
5333        data.recycle();
5334        reply.recycle();
5335        return res;
5336    }
5337
5338    public Bundle getAssistContextExtras(int requestType) throws RemoteException {
5339        Parcel data = Parcel.obtain();
5340        Parcel reply = Parcel.obtain();
5341        data.writeInterfaceToken(IActivityManager.descriptor);
5342        data.writeInt(requestType);
5343        mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
5344        reply.readException();
5345        Bundle res = reply.readBundle();
5346        data.recycle();
5347        reply.recycle();
5348        return res;
5349    }
5350
5351    public void requestAssistContextExtras(int requestType, IResultReceiver receiver)
5352            throws RemoteException {
5353        Parcel data = Parcel.obtain();
5354        Parcel reply = Parcel.obtain();
5355        data.writeInterfaceToken(IActivityManager.descriptor);
5356        data.writeInt(requestType);
5357        data.writeStrongBinder(receiver.asBinder());
5358        mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
5359        reply.readException();
5360        data.recycle();
5361        reply.recycle();
5362    }
5363
5364    public void reportAssistContextExtras(IBinder token, Bundle extras, AssistStructure structure,
5365            AssistContent content) throws RemoteException {
5366        Parcel data = Parcel.obtain();
5367        Parcel reply = Parcel.obtain();
5368        data.writeInterfaceToken(IActivityManager.descriptor);
5369        data.writeStrongBinder(token);
5370        data.writeBundle(extras);
5371        structure.writeToParcel(data, 0);
5372        content.writeToParcel(data, 0);
5373        mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
5374        reply.readException();
5375        data.recycle();
5376        reply.recycle();
5377    }
5378
5379    public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle)
5380            throws RemoteException {
5381        Parcel data = Parcel.obtain();
5382        Parcel reply = Parcel.obtain();
5383        data.writeInterfaceToken(IActivityManager.descriptor);
5384        intent.writeToParcel(data, 0);
5385        data.writeInt(requestType);
5386        data.writeString(hint);
5387        data.writeInt(userHandle);
5388        mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
5389        reply.readException();
5390        boolean res = reply.readInt() != 0;
5391        data.recycle();
5392        reply.recycle();
5393        return res;
5394    }
5395
5396    public void killUid(int uid, String reason) throws RemoteException {
5397        Parcel data = Parcel.obtain();
5398        Parcel reply = Parcel.obtain();
5399        data.writeInterfaceToken(IActivityManager.descriptor);
5400        data.writeInt(uid);
5401        data.writeString(reason);
5402        mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
5403        reply.readException();
5404        data.recycle();
5405        reply.recycle();
5406    }
5407
5408    public void hang(IBinder who, boolean allowRestart) throws RemoteException {
5409        Parcel data = Parcel.obtain();
5410        Parcel reply = Parcel.obtain();
5411        data.writeInterfaceToken(IActivityManager.descriptor);
5412        data.writeStrongBinder(who);
5413        data.writeInt(allowRestart ? 1 : 0);
5414        mRemote.transact(HANG_TRANSACTION, data, reply, 0);
5415        reply.readException();
5416        data.recycle();
5417        reply.recycle();
5418    }
5419
5420    public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
5421        Parcel data = Parcel.obtain();
5422        Parcel reply = Parcel.obtain();
5423        data.writeInterfaceToken(IActivityManager.descriptor);
5424        data.writeStrongBinder(token);
5425        mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
5426        reply.readException();
5427        data.recycle();
5428        reply.recycle();
5429    }
5430
5431    public void notifyActivityDrawn(IBinder token) throws RemoteException {
5432        Parcel data = Parcel.obtain();
5433        Parcel reply = Parcel.obtain();
5434        data.writeInterfaceToken(IActivityManager.descriptor);
5435        data.writeStrongBinder(token);
5436        mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
5437        reply.readException();
5438        data.recycle();
5439        reply.recycle();
5440    }
5441
5442    public void restart() throws RemoteException {
5443        Parcel data = Parcel.obtain();
5444        Parcel reply = Parcel.obtain();
5445        data.writeInterfaceToken(IActivityManager.descriptor);
5446        mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
5447        reply.readException();
5448        data.recycle();
5449        reply.recycle();
5450    }
5451
5452    public void performIdleMaintenance() throws RemoteException {
5453        Parcel data = Parcel.obtain();
5454        Parcel reply = Parcel.obtain();
5455        data.writeInterfaceToken(IActivityManager.descriptor);
5456        mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
5457        reply.readException();
5458        data.recycle();
5459        reply.recycle();
5460    }
5461
5462    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
5463            IActivityContainerCallback callback) throws RemoteException {
5464        Parcel data = Parcel.obtain();
5465        Parcel reply = Parcel.obtain();
5466        data.writeInterfaceToken(IActivityManager.descriptor);
5467        data.writeStrongBinder(parentActivityToken);
5468        data.writeStrongBinder(callback == null ? null : callback.asBinder());
5469        mRemote.transact(CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
5470        reply.readException();
5471        final int result = reply.readInt();
5472        final IActivityContainer res;
5473        if (result == 1) {
5474            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
5475        } else {
5476            res = null;
5477        }
5478        data.recycle();
5479        reply.recycle();
5480        return res;
5481    }
5482
5483    public void deleteActivityContainer(IActivityContainer activityContainer)
5484            throws RemoteException {
5485        Parcel data = Parcel.obtain();
5486        Parcel reply = Parcel.obtain();
5487        data.writeInterfaceToken(IActivityManager.descriptor);
5488        data.writeStrongBinder(activityContainer.asBinder());
5489        mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
5490        reply.readException();
5491        data.recycle();
5492        reply.recycle();
5493    }
5494
5495    @Override
5496    public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
5497        Parcel data = Parcel.obtain();
5498        Parcel reply = Parcel.obtain();
5499        data.writeInterfaceToken(IActivityManager.descriptor);
5500        data.writeInt(displayId);
5501        mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0);
5502        reply.readException();
5503        final int result = reply.readInt();
5504        final IActivityContainer res;
5505        if (result == 1) {
5506            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
5507        } else {
5508            res = null;
5509        }
5510        data.recycle();
5511        reply.recycle();
5512        return res;
5513    }
5514
5515    @Override
5516    public int getActivityDisplayId(IBinder activityToken)
5517            throws RemoteException {
5518        Parcel data = Parcel.obtain();
5519        Parcel reply = Parcel.obtain();
5520        data.writeInterfaceToken(IActivityManager.descriptor);
5521        data.writeStrongBinder(activityToken);
5522        mRemote.transact(GET_ACTIVITY_DISPLAY_ID_TRANSACTION, data, reply, 0);
5523        reply.readException();
5524        final int displayId = reply.readInt();
5525        data.recycle();
5526        reply.recycle();
5527        return displayId;
5528    }
5529
5530    @Override
5531    public void startLockTaskMode(int taskId) throws RemoteException {
5532        Parcel data = Parcel.obtain();
5533        Parcel reply = Parcel.obtain();
5534        data.writeInterfaceToken(IActivityManager.descriptor);
5535        data.writeInt(taskId);
5536        mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
5537        reply.readException();
5538        data.recycle();
5539        reply.recycle();
5540    }
5541
5542    @Override
5543    public void startLockTaskMode(IBinder token) throws RemoteException {
5544        Parcel data = Parcel.obtain();
5545        Parcel reply = Parcel.obtain();
5546        data.writeInterfaceToken(IActivityManager.descriptor);
5547        data.writeStrongBinder(token);
5548        mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
5549        reply.readException();
5550        data.recycle();
5551        reply.recycle();
5552    }
5553
5554    @Override
5555    public void startLockTaskModeOnCurrent() throws RemoteException {
5556        Parcel data = Parcel.obtain();
5557        Parcel reply = Parcel.obtain();
5558        data.writeInterfaceToken(IActivityManager.descriptor);
5559        mRemote.transact(START_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
5560        reply.readException();
5561        data.recycle();
5562        reply.recycle();
5563    }
5564
5565    @Override
5566    public void stopLockTaskMode() throws RemoteException {
5567        Parcel data = Parcel.obtain();
5568        Parcel reply = Parcel.obtain();
5569        data.writeInterfaceToken(IActivityManager.descriptor);
5570        mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
5571        reply.readException();
5572        data.recycle();
5573        reply.recycle();
5574    }
5575
5576    @Override
5577    public void stopLockTaskModeOnCurrent() throws RemoteException {
5578        Parcel data = Parcel.obtain();
5579        Parcel reply = Parcel.obtain();
5580        data.writeInterfaceToken(IActivityManager.descriptor);
5581        mRemote.transact(STOP_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
5582        reply.readException();
5583        data.recycle();
5584        reply.recycle();
5585    }
5586
5587    @Override
5588    public boolean isInLockTaskMode() throws RemoteException {
5589        Parcel data = Parcel.obtain();
5590        Parcel reply = Parcel.obtain();
5591        data.writeInterfaceToken(IActivityManager.descriptor);
5592        mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
5593        reply.readException();
5594        boolean isInLockTaskMode = reply.readInt() == 1;
5595        data.recycle();
5596        reply.recycle();
5597        return isInLockTaskMode;
5598    }
5599
5600    @Override
5601    public int getLockTaskModeState() throws RemoteException {
5602        Parcel data = Parcel.obtain();
5603        Parcel reply = Parcel.obtain();
5604        data.writeInterfaceToken(IActivityManager.descriptor);
5605        mRemote.transact(GET_LOCK_TASK_MODE_STATE_TRANSACTION, data, reply, 0);
5606        reply.readException();
5607        int lockTaskModeState = reply.readInt();
5608        data.recycle();
5609        reply.recycle();
5610        return lockTaskModeState;
5611    }
5612
5613    @Override
5614    public void showLockTaskEscapeMessage(IBinder token) throws RemoteException {
5615        Parcel data = Parcel.obtain();
5616        Parcel reply = Parcel.obtain();
5617        data.writeInterfaceToken(IActivityManager.descriptor);
5618        data.writeStrongBinder(token);
5619        mRemote.transact(SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION, data, reply,
5620                IBinder.FLAG_ONEWAY);
5621        reply.readException();
5622        data.recycle();
5623        reply.recycle();
5624    }
5625
5626    @Override
5627    public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
5628            throws RemoteException {
5629        Parcel data = Parcel.obtain();
5630        Parcel reply = Parcel.obtain();
5631        data.writeInterfaceToken(IActivityManager.descriptor);
5632        data.writeStrongBinder(token);
5633        values.writeToParcel(data, 0);
5634        mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0);
5635        reply.readException();
5636        data.recycle();
5637        reply.recycle();
5638    }
5639
5640    @Override
5641    public void setTaskResizeable(int taskId, boolean resizeable) throws  RemoteException {
5642        Parcel data = Parcel.obtain();
5643        Parcel reply = Parcel.obtain();
5644        data.writeInterfaceToken(IActivityManager.descriptor);
5645        data.writeInt(taskId);
5646        data.writeInt(resizeable ? 1 : 0);
5647        mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0);
5648        reply.readException();
5649        data.recycle();
5650        reply.recycle();
5651    }
5652
5653    @Override
5654    public void resizeTask(int taskId, Rect r) throws RemoteException
5655    {
5656        Parcel data = Parcel.obtain();
5657        Parcel reply = Parcel.obtain();
5658        data.writeInterfaceToken(IActivityManager.descriptor);
5659        data.writeInt(taskId);
5660        r.writeToParcel(data, 0);
5661        mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0);
5662        reply.readException();
5663        data.recycle();
5664        reply.recycle();
5665    }
5666
5667    @Override
5668    public Bitmap getTaskDescriptionIcon(String filename) throws RemoteException {
5669        Parcel data = Parcel.obtain();
5670        Parcel reply = Parcel.obtain();
5671        data.writeInterfaceToken(IActivityManager.descriptor);
5672        data.writeString(filename);
5673        mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
5674        reply.readException();
5675        final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
5676        data.recycle();
5677        reply.recycle();
5678        return icon;
5679    }
5680
5681    @Override
5682    public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
5683            throws RemoteException {
5684        Parcel data = Parcel.obtain();
5685        Parcel reply = Parcel.obtain();
5686        data.writeInterfaceToken(IActivityManager.descriptor);
5687        if (options == null) {
5688            data.writeInt(0);
5689        } else {
5690            data.writeInt(1);
5691            data.writeBundle(options.toBundle());
5692        }
5693        mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0);
5694        reply.readException();
5695        data.recycle();
5696        reply.recycle();
5697    }
5698
5699    @Override
5700    public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
5701        Parcel data = Parcel.obtain();
5702        Parcel reply = Parcel.obtain();
5703        data.writeInterfaceToken(IActivityManager.descriptor);
5704        data.writeStrongBinder(token);
5705        data.writeInt(visible ? 1 : 0);
5706        mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
5707        reply.readException();
5708        boolean success = reply.readInt() > 0;
5709        data.recycle();
5710        reply.recycle();
5711        return success;
5712    }
5713
5714    @Override
5715    public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
5716        Parcel data = Parcel.obtain();
5717        Parcel reply = Parcel.obtain();
5718        data.writeInterfaceToken(IActivityManager.descriptor);
5719        data.writeStrongBinder(token);
5720        mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
5721        reply.readException();
5722        final boolean visible = reply.readInt() > 0;
5723        data.recycle();
5724        reply.recycle();
5725        return visible;
5726    }
5727
5728    @Override
5729    public void backgroundResourcesReleased(IBinder token) throws RemoteException {
5730        Parcel data = Parcel.obtain();
5731        Parcel reply = Parcel.obtain();
5732        data.writeInterfaceToken(IActivityManager.descriptor);
5733        data.writeStrongBinder(token);
5734        mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0);
5735        reply.readException();
5736        data.recycle();
5737        reply.recycle();
5738    }
5739
5740    @Override
5741    public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
5742        Parcel data = Parcel.obtain();
5743        Parcel reply = Parcel.obtain();
5744        data.writeInterfaceToken(IActivityManager.descriptor);
5745        data.writeStrongBinder(token);
5746        mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0);
5747        reply.readException();
5748        data.recycle();
5749        reply.recycle();
5750    }
5751
5752    @Override
5753    public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
5754        Parcel data = Parcel.obtain();
5755        Parcel reply = Parcel.obtain();
5756        data.writeInterfaceToken(IActivityManager.descriptor);
5757        data.writeStrongBinder(token);
5758        mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
5759        reply.readException();
5760        data.recycle();
5761        reply.recycle();
5762    }
5763
5764    @Override
5765    public void bootAnimationComplete() throws RemoteException {
5766        Parcel data = Parcel.obtain();
5767        Parcel reply = Parcel.obtain();
5768        data.writeInterfaceToken(IActivityManager.descriptor);
5769        mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
5770        reply.readException();
5771        data.recycle();
5772        reply.recycle();
5773    }
5774
5775    @Override
5776    public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException {
5777        Parcel data = Parcel.obtain();
5778        Parcel reply = Parcel.obtain();
5779        data.writeInterfaceToken(IActivityManager.descriptor);
5780        data.writeInt(uid);
5781        data.writeByteArray(firstPacket);
5782        mRemote.transact(NOTIFY_CLEARTEXT_NETWORK_TRANSACTION, data, reply, 0);
5783        reply.readException();
5784        data.recycle();
5785        reply.recycle();
5786    }
5787
5788    @Override
5789    public void setDumpHeapDebugLimit(String processName, int uid, long maxMemSize,
5790            String reportPackage) throws RemoteException {
5791        Parcel data = Parcel.obtain();
5792        Parcel reply = Parcel.obtain();
5793        data.writeInterfaceToken(IActivityManager.descriptor);
5794        data.writeString(processName);
5795        data.writeInt(uid);
5796        data.writeLong(maxMemSize);
5797        data.writeString(reportPackage);
5798        mRemote.transact(SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION, data, reply, 0);
5799        reply.readException();
5800        data.recycle();
5801        reply.recycle();
5802    }
5803
5804    @Override
5805    public void dumpHeapFinished(String path) throws RemoteException {
5806        Parcel data = Parcel.obtain();
5807        Parcel reply = Parcel.obtain();
5808        data.writeInterfaceToken(IActivityManager.descriptor);
5809        data.writeString(path);
5810        mRemote.transact(DUMP_HEAP_FINISHED_TRANSACTION, data, reply, 0);
5811        reply.readException();
5812        data.recycle();
5813        reply.recycle();
5814    }
5815
5816    @Override
5817    public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake)
5818            throws RemoteException {
5819        Parcel data = Parcel.obtain();
5820        Parcel reply = Parcel.obtain();
5821        data.writeInterfaceToken(IActivityManager.descriptor);
5822        data.writeStrongBinder(session.asBinder());
5823        data.writeInt(keepAwake ? 1 : 0);
5824        mRemote.transact(SET_VOICE_KEEP_AWAKE_TRANSACTION, data, reply, 0);
5825        reply.readException();
5826        data.recycle();
5827        reply.recycle();
5828    }
5829
5830    @Override
5831    public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException {
5832        Parcel data = Parcel.obtain();
5833        Parcel reply = Parcel.obtain();
5834        data.writeInterfaceToken(IActivityManager.descriptor);
5835        data.writeInt(userId);
5836        data.writeStringArray(packages);
5837        mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0);
5838        reply.readException();
5839        data.recycle();
5840        reply.recycle();
5841    }
5842
5843    @Override
5844    public void updateDeviceOwner(String packageName) throws RemoteException {
5845        Parcel data = Parcel.obtain();
5846        Parcel reply = Parcel.obtain();
5847        data.writeInterfaceToken(IActivityManager.descriptor);
5848        data.writeString(packageName);
5849        mRemote.transact(UPDATE_DEVICE_OWNER_TRANSACTION, data, reply, 0);
5850        reply.readException();
5851        data.recycle();
5852        reply.recycle();
5853    }
5854
5855    @Override
5856    public void updatePreferredSetupActivity(ComponentName preferredActivity, int userId)
5857            throws RemoteException {
5858        Parcel data = Parcel.obtain();
5859        Parcel reply = Parcel.obtain();
5860        data.writeInterfaceToken(IActivityManager.descriptor);
5861        ComponentName.writeToParcel(preferredActivity, data);
5862        data.writeInt(userId);
5863        mRemote.transact(UPDATE_PREFERRED_SETUP_ACTIVITY_TRANSACTION, data, reply, 0);
5864        reply.readException();
5865        data.recycle();
5866        reply.recycle();
5867    }
5868
5869    @Override
5870    public int getPackageProcessState(String packageName) throws RemoteException {
5871        Parcel data = Parcel.obtain();
5872        Parcel reply = Parcel.obtain();
5873        data.writeInterfaceToken(IActivityManager.descriptor);
5874        data.writeString(packageName);
5875        mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0);
5876        reply.readException();
5877        int res = reply.readInt();
5878        data.recycle();
5879        reply.recycle();
5880        return res;
5881    }
5882
5883    private IBinder mRemote;
5884}
5885