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