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