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