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