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            registerUserSwitchObserver(observer);
2375            reply.writeNoException();
2376            return true;
2377        }
2378
2379        case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2380            data.enforceInterface(IActivityManager.descriptor);
2381            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2382                    data.readStrongBinder());
2383            unregisterUserSwitchObserver(observer);
2384            reply.writeNoException();
2385            return true;
2386        }
2387
2388        case REQUEST_BUG_REPORT_TRANSACTION: {
2389            data.enforceInterface(IActivityManager.descriptor);
2390            int bugreportType = data.readInt();
2391            requestBugReport(bugreportType);
2392            reply.writeNoException();
2393            return true;
2394        }
2395
2396        case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
2397            data.enforceInterface(IActivityManager.descriptor);
2398            int pid = data.readInt();
2399            boolean aboveSystem = data.readInt() != 0;
2400            String reason = data.readString();
2401            long res = inputDispatchingTimedOut(pid, aboveSystem, reason);
2402            reply.writeNoException();
2403            reply.writeLong(res);
2404            return true;
2405        }
2406
2407        case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2408            data.enforceInterface(IActivityManager.descriptor);
2409            int requestType = data.readInt();
2410            Bundle res = getAssistContextExtras(requestType);
2411            reply.writeNoException();
2412            reply.writeBundle(res);
2413            return true;
2414        }
2415
2416        case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2417            data.enforceInterface(IActivityManager.descriptor);
2418            int requestType = data.readInt();
2419            IResultReceiver receiver = IResultReceiver.Stub.asInterface(data.readStrongBinder());
2420            Bundle receiverExtras = data.readBundle();
2421            IBinder activityToken = data.readStrongBinder();
2422            boolean focused = data.readInt() == 1;
2423            boolean newSessionId = data.readInt() == 1;
2424            boolean res = requestAssistContextExtras(requestType, receiver, receiverExtras,
2425                    activityToken, focused, newSessionId);
2426            reply.writeNoException();
2427            reply.writeInt(res ? 1 : 0);
2428            return true;
2429        }
2430
2431        case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2432            data.enforceInterface(IActivityManager.descriptor);
2433            IBinder token = data.readStrongBinder();
2434            Bundle extras = data.readBundle();
2435            AssistStructure structure = AssistStructure.CREATOR.createFromParcel(data);
2436            AssistContent content = AssistContent.CREATOR.createFromParcel(data);
2437            Uri referrer = data.readInt() != 0 ? Uri.CREATOR.createFromParcel(data) : null;
2438            reportAssistContextExtras(token, extras, structure, content, referrer);
2439            reply.writeNoException();
2440            return true;
2441        }
2442
2443        case LAUNCH_ASSIST_INTENT_TRANSACTION: {
2444            data.enforceInterface(IActivityManager.descriptor);
2445            Intent intent = Intent.CREATOR.createFromParcel(data);
2446            int requestType = data.readInt();
2447            String hint = data.readString();
2448            int userHandle = data.readInt();
2449            Bundle args = data.readBundle();
2450            boolean res = launchAssistIntent(intent, requestType, hint, userHandle, args);
2451            reply.writeNoException();
2452            reply.writeInt(res ? 1 : 0);
2453            return true;
2454        }
2455
2456        case IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION: {
2457            data.enforceInterface(IActivityManager.descriptor);
2458            boolean res = isAssistDataAllowedOnCurrentActivity();
2459            reply.writeNoException();
2460            reply.writeInt(res ? 1 : 0);
2461            return true;
2462        }
2463
2464        case SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION: {
2465            data.enforceInterface(IActivityManager.descriptor);
2466            IBinder token = data.readStrongBinder();
2467            Bundle args = data.readBundle();
2468            boolean res = showAssistFromActivity(token, args);
2469            reply.writeNoException();
2470            reply.writeInt(res ? 1 : 0);
2471            return true;
2472        }
2473
2474        case KILL_UID_TRANSACTION: {
2475            data.enforceInterface(IActivityManager.descriptor);
2476            int appId = data.readInt();
2477            int userId = data.readInt();
2478            String reason = data.readString();
2479            killUid(appId, userId, reason);
2480            reply.writeNoException();
2481            return true;
2482        }
2483
2484        case HANG_TRANSACTION: {
2485            data.enforceInterface(IActivityManager.descriptor);
2486            IBinder who = data.readStrongBinder();
2487            boolean allowRestart = data.readInt() != 0;
2488            hang(who, allowRestart);
2489            reply.writeNoException();
2490            return true;
2491        }
2492
2493        case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
2494            data.enforceInterface(IActivityManager.descriptor);
2495            IBinder token = data.readStrongBinder();
2496            reportActivityFullyDrawn(token);
2497            reply.writeNoException();
2498            return true;
2499        }
2500
2501        case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
2502            data.enforceInterface(IActivityManager.descriptor);
2503            IBinder token = data.readStrongBinder();
2504            notifyActivityDrawn(token);
2505            reply.writeNoException();
2506            return true;
2507        }
2508
2509        case RESTART_TRANSACTION: {
2510            data.enforceInterface(IActivityManager.descriptor);
2511            restart();
2512            reply.writeNoException();
2513            return true;
2514        }
2515
2516        case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
2517            data.enforceInterface(IActivityManager.descriptor);
2518            performIdleMaintenance();
2519            reply.writeNoException();
2520            return true;
2521        }
2522
2523        case CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION: {
2524            data.enforceInterface(IActivityManager.descriptor);
2525            IBinder parentActivityToken = data.readStrongBinder();
2526            IActivityContainerCallback callback =
2527                    IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
2528            IActivityContainer activityContainer =
2529                    createVirtualActivityContainer(parentActivityToken, callback);
2530            reply.writeNoException();
2531            if (activityContainer != null) {
2532                reply.writeInt(1);
2533                reply.writeStrongBinder(activityContainer.asBinder());
2534            } else {
2535                reply.writeInt(0);
2536            }
2537            return true;
2538        }
2539
2540        case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
2541            data.enforceInterface(IActivityManager.descriptor);
2542            IActivityContainer activityContainer =
2543                    IActivityContainer.Stub.asInterface(data.readStrongBinder());
2544            deleteActivityContainer(activityContainer);
2545            reply.writeNoException();
2546            return true;
2547        }
2548
2549        case CREATE_STACK_ON_DISPLAY: {
2550            data.enforceInterface(IActivityManager.descriptor);
2551            int displayId = data.readInt();
2552            IActivityContainer activityContainer = createStackOnDisplay(displayId);
2553            reply.writeNoException();
2554            if (activityContainer != null) {
2555                reply.writeInt(1);
2556                reply.writeStrongBinder(activityContainer.asBinder());
2557            } else {
2558                reply.writeInt(0);
2559            }
2560            return true;
2561        }
2562
2563        case GET_ACTIVITY_DISPLAY_ID_TRANSACTION: {
2564            data.enforceInterface(IActivityManager.descriptor);
2565            IBinder activityToken = data.readStrongBinder();
2566            int displayId = getActivityDisplayId(activityToken);
2567            reply.writeNoException();
2568            reply.writeInt(displayId);
2569            return true;
2570        }
2571
2572        case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
2573            data.enforceInterface(IActivityManager.descriptor);
2574            final int taskId = data.readInt();
2575            startLockTaskMode(taskId);
2576            reply.writeNoException();
2577            return true;
2578        }
2579
2580        case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
2581            data.enforceInterface(IActivityManager.descriptor);
2582            IBinder token = data.readStrongBinder();
2583            startLockTaskMode(token);
2584            reply.writeNoException();
2585            return true;
2586        }
2587
2588        case START_SYSTEM_LOCK_TASK_TRANSACTION: {
2589            data.enforceInterface(IActivityManager.descriptor);
2590            int taskId = data.readInt();
2591            startSystemLockTaskMode(taskId);
2592            reply.writeNoException();
2593            return true;
2594        }
2595
2596        case STOP_LOCK_TASK_MODE_TRANSACTION: {
2597            data.enforceInterface(IActivityManager.descriptor);
2598            stopLockTaskMode();
2599            reply.writeNoException();
2600            return true;
2601        }
2602
2603        case STOP_SYSTEM_LOCK_TASK_TRANSACTION: {
2604            data.enforceInterface(IActivityManager.descriptor);
2605            stopSystemLockTaskMode();
2606            reply.writeNoException();
2607            return true;
2608        }
2609
2610        case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
2611            data.enforceInterface(IActivityManager.descriptor);
2612            final boolean isInLockTaskMode = isInLockTaskMode();
2613            reply.writeNoException();
2614            reply.writeInt(isInLockTaskMode ? 1 : 0);
2615            return true;
2616        }
2617
2618        case GET_LOCK_TASK_MODE_STATE_TRANSACTION: {
2619            data.enforceInterface(IActivityManager.descriptor);
2620            final int lockTaskModeState = getLockTaskModeState();
2621            reply.writeNoException();
2622            reply.writeInt(lockTaskModeState);
2623            return true;
2624        }
2625
2626        case SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION: {
2627            data.enforceInterface(IActivityManager.descriptor);
2628            final IBinder token = data.readStrongBinder();
2629            showLockTaskEscapeMessage(token);
2630            reply.writeNoException();
2631            return true;
2632        }
2633
2634        case SET_TASK_DESCRIPTION_TRANSACTION: {
2635            data.enforceInterface(IActivityManager.descriptor);
2636            IBinder token = data.readStrongBinder();
2637            ActivityManager.TaskDescription values =
2638                    ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
2639            setTaskDescription(token, values);
2640            reply.writeNoException();
2641            return true;
2642        }
2643
2644        case SET_TASK_RESIZEABLE_TRANSACTION: {
2645            data.enforceInterface(IActivityManager.descriptor);
2646            final int taskId = data.readInt();
2647            final int resizeableMode = data.readInt();
2648            setTaskResizeable(taskId, resizeableMode);
2649            reply.writeNoException();
2650            return true;
2651        }
2652
2653        case RESIZE_TASK_TRANSACTION: {
2654            data.enforceInterface(IActivityManager.descriptor);
2655            int taskId = data.readInt();
2656            int resizeMode = data.readInt();
2657            Rect r = Rect.CREATOR.createFromParcel(data);
2658            resizeTask(taskId, r, resizeMode);
2659            reply.writeNoException();
2660            return true;
2661        }
2662
2663        case GET_TASK_BOUNDS_TRANSACTION: {
2664            data.enforceInterface(IActivityManager.descriptor);
2665            int taskId = data.readInt();
2666            Rect r = getTaskBounds(taskId);
2667            reply.writeNoException();
2668            r.writeToParcel(reply, 0);
2669            return true;
2670        }
2671
2672        case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
2673            data.enforceInterface(IActivityManager.descriptor);
2674            String filename = data.readString();
2675            int userId = data.readInt();
2676            Bitmap icon = getTaskDescriptionIcon(filename, userId);
2677            reply.writeNoException();
2678            if (icon == null) {
2679                reply.writeInt(0);
2680            } else {
2681                reply.writeInt(1);
2682                icon.writeToParcel(reply, 0);
2683            }
2684            return true;
2685        }
2686
2687        case START_IN_PLACE_ANIMATION_TRANSACTION: {
2688            data.enforceInterface(IActivityManager.descriptor);
2689            final Bundle bundle;
2690            if (data.readInt() == 0) {
2691                bundle = null;
2692            } else {
2693                bundle = data.readBundle();
2694            }
2695            final ActivityOptions options = ActivityOptions.fromBundle(bundle);
2696            startInPlaceAnimationOnFrontMostApplication(options);
2697            reply.writeNoException();
2698            return true;
2699        }
2700
2701        case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
2702            data.enforceInterface(IActivityManager.descriptor);
2703            IBinder token = data.readStrongBinder();
2704            boolean enable = data.readInt() > 0;
2705            boolean success = requestVisibleBehind(token, enable);
2706            reply.writeNoException();
2707            reply.writeInt(success ? 1 : 0);
2708            return true;
2709        }
2710
2711        case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
2712            data.enforceInterface(IActivityManager.descriptor);
2713            IBinder token = data.readStrongBinder();
2714            final boolean enabled = isBackgroundVisibleBehind(token);
2715            reply.writeNoException();
2716            reply.writeInt(enabled ? 1 : 0);
2717            return true;
2718        }
2719
2720        case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
2721            data.enforceInterface(IActivityManager.descriptor);
2722            IBinder token = data.readStrongBinder();
2723            backgroundResourcesReleased(token);
2724            reply.writeNoException();
2725            return true;
2726        }
2727
2728        case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
2729            data.enforceInterface(IActivityManager.descriptor);
2730            IBinder token = data.readStrongBinder();
2731            notifyLaunchTaskBehindComplete(token);
2732            reply.writeNoException();
2733            return true;
2734        }
2735
2736        case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
2737            data.enforceInterface(IActivityManager.descriptor);
2738            IBinder token = data.readStrongBinder();
2739            notifyEnterAnimationComplete(token);
2740            reply.writeNoException();
2741            return true;
2742        }
2743
2744        case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
2745            data.enforceInterface(IActivityManager.descriptor);
2746            bootAnimationComplete();
2747            reply.writeNoException();
2748            return true;
2749        }
2750
2751        case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: {
2752            data.enforceInterface(IActivityManager.descriptor);
2753            final int uid = data.readInt();
2754            final byte[] firstPacket = data.createByteArray();
2755            notifyCleartextNetwork(uid, firstPacket);
2756            reply.writeNoException();
2757            return true;
2758        }
2759
2760        case SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION: {
2761            data.enforceInterface(IActivityManager.descriptor);
2762            String procName = data.readString();
2763            int uid = data.readInt();
2764            long maxMemSize = data.readLong();
2765            String reportPackage = data.readString();
2766            setDumpHeapDebugLimit(procName, uid, maxMemSize, reportPackage);
2767            reply.writeNoException();
2768            return true;
2769        }
2770
2771        case DUMP_HEAP_FINISHED_TRANSACTION: {
2772            data.enforceInterface(IActivityManager.descriptor);
2773            String path = data.readString();
2774            dumpHeapFinished(path);
2775            reply.writeNoException();
2776            return true;
2777        }
2778
2779        case SET_VOICE_KEEP_AWAKE_TRANSACTION: {
2780            data.enforceInterface(IActivityManager.descriptor);
2781            IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
2782                    data.readStrongBinder());
2783            boolean keepAwake = data.readInt() != 0;
2784            setVoiceKeepAwake(session, keepAwake);
2785            reply.writeNoException();
2786            return true;
2787        }
2788
2789        case UPDATE_LOCK_TASK_PACKAGES_TRANSACTION: {
2790            data.enforceInterface(IActivityManager.descriptor);
2791            int userId = data.readInt();
2792            String[] packages = data.readStringArray();
2793            updateLockTaskPackages(userId, packages);
2794            reply.writeNoException();
2795            return true;
2796        }
2797
2798        case UPDATE_DEVICE_OWNER_TRANSACTION: {
2799            data.enforceInterface(IActivityManager.descriptor);
2800            String packageName = data.readString();
2801            updateDeviceOwner(packageName);
2802            reply.writeNoException();
2803            return true;
2804        }
2805
2806        case GET_PACKAGE_PROCESS_STATE_TRANSACTION: {
2807            data.enforceInterface(IActivityManager.descriptor);
2808            String pkg = data.readString();
2809            String callingPackage = data.readString();
2810            int res = getPackageProcessState(pkg, callingPackage);
2811            reply.writeNoException();
2812            reply.writeInt(res);
2813            return true;
2814        }
2815
2816        case SET_PROCESS_MEMORY_TRIM_TRANSACTION: {
2817            data.enforceInterface(IActivityManager.descriptor);
2818            String process = data.readString();
2819            int userId = data.readInt();
2820            int level = data.readInt();
2821            boolean res = setProcessMemoryTrimLevel(process, userId, level);
2822            reply.writeNoException();
2823            reply.writeInt(res ? 1 : 0);
2824            return true;
2825        }
2826
2827        case IS_ROOT_VOICE_INTERACTION_TRANSACTION: {
2828            data.enforceInterface(IActivityManager.descriptor);
2829            IBinder token = data.readStrongBinder();
2830            boolean res = isRootVoiceInteraction(token);
2831            reply.writeNoException();
2832            reply.writeInt(res ? 1 : 0);
2833            return true;
2834        }
2835
2836        case START_BINDER_TRACKING_TRANSACTION: {
2837            data.enforceInterface(IActivityManager.descriptor);
2838            boolean res = startBinderTracking();
2839            reply.writeNoException();
2840            reply.writeInt(res ? 1 : 0);
2841            return true;
2842        }
2843
2844        case STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION: {
2845            data.enforceInterface(IActivityManager.descriptor);
2846            ParcelFileDescriptor fd = data.readInt() != 0
2847                    ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
2848            boolean res = stopBinderTrackingAndDump(fd);
2849            reply.writeNoException();
2850            reply.writeInt(res ? 1 : 0);
2851            return true;
2852        }
2853        case GET_ACTIVITY_STACK_ID_TRANSACTION: {
2854            data.enforceInterface(IActivityManager.descriptor);
2855            IBinder token = data.readStrongBinder();
2856            int stackId = getActivityStackId(token);
2857            reply.writeNoException();
2858            reply.writeInt(stackId);
2859            return true;
2860        }
2861        case EXIT_FREEFORM_MODE_TRANSACTION: {
2862            data.enforceInterface(IActivityManager.descriptor);
2863            IBinder token = data.readStrongBinder();
2864            exitFreeformMode(token);
2865            reply.writeNoException();
2866            return true;
2867        }
2868        case REPORT_SIZE_CONFIGURATIONS: {
2869            data.enforceInterface(IActivityManager.descriptor);
2870            IBinder token = data.readStrongBinder();
2871            int[] horizontal = readIntArray(data);
2872            int[] vertical = readIntArray(data);
2873            int[] smallest = readIntArray(data);
2874            reportSizeConfigurations(token, horizontal, vertical, smallest);
2875            return true;
2876        }
2877        case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: {
2878            data.enforceInterface(IActivityManager.descriptor);
2879            final boolean suppress = data.readInt() == 1;
2880            suppressResizeConfigChanges(suppress);
2881            reply.writeNoException();
2882            return true;
2883        }
2884        case MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION: {
2885            data.enforceInterface(IActivityManager.descriptor);
2886            final int stackId = data.readInt();
2887            final boolean onTop = data.readInt() == 1;
2888            moveTasksToFullscreenStack(stackId, onTop);
2889            reply.writeNoException();
2890            return true;
2891        }
2892        case GET_APP_START_MODE_TRANSACTION: {
2893            data.enforceInterface(IActivityManager.descriptor);
2894            final int uid = data.readInt();
2895            final String pkg = data.readString();
2896            int res = getAppStartMode(uid, pkg);
2897            reply.writeNoException();
2898            reply.writeInt(res);
2899            return true;
2900        }
2901        case IN_MULTI_WINDOW_TRANSACTION: {
2902            data.enforceInterface(IActivityManager.descriptor);
2903            final IBinder token = data.readStrongBinder();
2904            final boolean inMultiWindow = isInMultiWindowMode(token);
2905            reply.writeNoException();
2906            reply.writeInt(inMultiWindow ? 1 : 0);
2907            return true;
2908        }
2909        case IN_PICTURE_IN_PICTURE_TRANSACTION: {
2910            data.enforceInterface(IActivityManager.descriptor);
2911            final IBinder token = data.readStrongBinder();
2912            final boolean inPip = isInPictureInPictureMode(token);
2913            reply.writeNoException();
2914            reply.writeInt(inPip ? 1 : 0);
2915            return true;
2916        }
2917        case ENTER_PICTURE_IN_PICTURE_TRANSACTION: {
2918            data.enforceInterface(IActivityManager.descriptor);
2919            final IBinder token = data.readStrongBinder();
2920            enterPictureInPictureMode(token);
2921            reply.writeNoException();
2922            return true;
2923        }
2924        case SET_VR_MODE_TRANSACTION: {
2925            data.enforceInterface(IActivityManager.descriptor);
2926            final IBinder token = data.readStrongBinder();
2927            final boolean enable = data.readInt() == 1;
2928            final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2929            int res = setVrMode(token, enable, packageName);
2930            reply.writeNoException();
2931            reply.writeInt(res);
2932            return true;
2933        }
2934        case IS_VR_PACKAGE_ENABLED_TRANSACTION: {
2935            data.enforceInterface(IActivityManager.descriptor);
2936            final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
2937            boolean res = isVrModePackageEnabled(packageName);
2938            reply.writeNoException();
2939            reply.writeInt(res ? 1 : 0);
2940            return true;
2941        }
2942        case IS_APP_FOREGROUND_TRANSACTION: {
2943            data.enforceInterface(IActivityManager.descriptor);
2944            final int userHandle = data.readInt();
2945            final boolean isForeground = isAppForeground(userHandle);
2946            reply.writeNoException();
2947            reply.writeInt(isForeground ? 1 : 0);
2948            return true;
2949        }
2950        case NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION: {
2951            data.enforceInterface(IActivityManager.descriptor);
2952            reply.writeNoException();
2953            return true;
2954        }
2955        case REMOVE_STACK: {
2956            data.enforceInterface(IActivityManager.descriptor);
2957            final int stackId = data.readInt();
2958            removeStack(stackId);
2959            reply.writeNoException();
2960            return true;
2961        }
2962        case NOTIFY_LOCKED_PROFILE: {
2963            data.enforceInterface(IActivityManager.descriptor);
2964            final int userId = data.readInt();
2965            notifyLockedProfile(userId);
2966            reply.writeNoException();
2967            return true;
2968        }
2969        case START_CONFIRM_DEVICE_CREDENTIAL_INTENT: {
2970            data.enforceInterface(IActivityManager.descriptor);
2971            final Intent intent = Intent.CREATOR.createFromParcel(data);
2972            startConfirmDeviceCredentialIntent(intent);
2973            reply.writeNoException();
2974            return true;
2975        }
2976        case SEND_IDLE_JOB_TRIGGER_TRANSACTION: {
2977            data.enforceInterface(IActivityManager.descriptor);
2978            sendIdleJobTrigger();
2979            reply.writeNoException();
2980            return true;
2981        }
2982        case SEND_INTENT_SENDER_TRANSACTION: {
2983            data.enforceInterface(IActivityManager.descriptor);
2984            IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
2985            int scode = data.readInt();
2986            Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
2987            String resolvedType = data.readString();
2988            IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
2989                    data.readStrongBinder());
2990            String requiredPermission = data.readString();
2991            Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
2992            int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
2993                    requiredPermission, options);
2994            reply.writeNoException();
2995            reply.writeInt(result);
2996            return true;
2997        }
2998        }
2999
3000        return super.onTransact(code, data, reply, flags);
3001    }
3002
3003    private int[] readIntArray(Parcel data) {
3004        int[] smallest = null;
3005        int smallestSize = data.readInt();
3006        if (smallestSize > 0) {
3007            smallest = new int[smallestSize];
3008            data.readIntArray(smallest);
3009        }
3010        return smallest;
3011    }
3012
3013    public IBinder asBinder() {
3014        return this;
3015    }
3016
3017    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
3018        protected IActivityManager create() {
3019            IBinder b = ServiceManager.getService("activity");
3020            if (false) {
3021                Log.v("ActivityManager", "default service binder = " + b);
3022            }
3023            IActivityManager am = asInterface(b);
3024            if (false) {
3025                Log.v("ActivityManager", "default service = " + am);
3026            }
3027            return am;
3028        }
3029    };
3030}
3031
3032class ActivityManagerProxy implements IActivityManager
3033{
3034    public ActivityManagerProxy(IBinder remote)
3035    {
3036        mRemote = remote;
3037    }
3038
3039    public IBinder asBinder()
3040    {
3041        return mRemote;
3042    }
3043
3044    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
3045            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3046            int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
3047        Parcel data = Parcel.obtain();
3048        Parcel reply = Parcel.obtain();
3049        data.writeInterfaceToken(IActivityManager.descriptor);
3050        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3051        data.writeString(callingPackage);
3052        intent.writeToParcel(data, 0);
3053        data.writeString(resolvedType);
3054        data.writeStrongBinder(resultTo);
3055        data.writeString(resultWho);
3056        data.writeInt(requestCode);
3057        data.writeInt(startFlags);
3058        if (profilerInfo != null) {
3059            data.writeInt(1);
3060            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3061        } else {
3062            data.writeInt(0);
3063        }
3064        if (options != null) {
3065            data.writeInt(1);
3066            options.writeToParcel(data, 0);
3067        } else {
3068            data.writeInt(0);
3069        }
3070        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
3071        reply.readException();
3072        int result = reply.readInt();
3073        reply.recycle();
3074        data.recycle();
3075        return result;
3076    }
3077
3078    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
3079            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3080            int startFlags, ProfilerInfo profilerInfo, Bundle options,
3081            int userId) throws RemoteException {
3082        Parcel data = Parcel.obtain();
3083        Parcel reply = Parcel.obtain();
3084        data.writeInterfaceToken(IActivityManager.descriptor);
3085        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3086        data.writeString(callingPackage);
3087        intent.writeToParcel(data, 0);
3088        data.writeString(resolvedType);
3089        data.writeStrongBinder(resultTo);
3090        data.writeString(resultWho);
3091        data.writeInt(requestCode);
3092        data.writeInt(startFlags);
3093        if (profilerInfo != null) {
3094            data.writeInt(1);
3095            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3096        } else {
3097            data.writeInt(0);
3098        }
3099        if (options != null) {
3100            data.writeInt(1);
3101            options.writeToParcel(data, 0);
3102        } else {
3103            data.writeInt(0);
3104        }
3105        data.writeInt(userId);
3106        mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
3107        reply.readException();
3108        int result = reply.readInt();
3109        reply.recycle();
3110        data.recycle();
3111        return result;
3112    }
3113    public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
3114            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
3115            int startFlags, ProfilerInfo profilerInfo, Bundle options, boolean ignoreTargetSecurity,
3116            int userId) throws RemoteException {
3117        Parcel data = Parcel.obtain();
3118        Parcel reply = Parcel.obtain();
3119        data.writeInterfaceToken(IActivityManager.descriptor);
3120        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3121        data.writeString(callingPackage);
3122        intent.writeToParcel(data, 0);
3123        data.writeString(resolvedType);
3124        data.writeStrongBinder(resultTo);
3125        data.writeString(resultWho);
3126        data.writeInt(requestCode);
3127        data.writeInt(startFlags);
3128        if (profilerInfo != null) {
3129            data.writeInt(1);
3130            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3131        } else {
3132            data.writeInt(0);
3133        }
3134        if (options != null) {
3135            data.writeInt(1);
3136            options.writeToParcel(data, 0);
3137        } else {
3138            data.writeInt(0);
3139        }
3140        data.writeInt(ignoreTargetSecurity ? 1 : 0);
3141        data.writeInt(userId);
3142        mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
3143        reply.readException();
3144        int result = reply.readInt();
3145        reply.recycle();
3146        data.recycle();
3147        return result;
3148    }
3149    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
3150            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3151            int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
3152            int userId) throws RemoteException {
3153        Parcel data = Parcel.obtain();
3154        Parcel reply = Parcel.obtain();
3155        data.writeInterfaceToken(IActivityManager.descriptor);
3156        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3157        data.writeString(callingPackage);
3158        intent.writeToParcel(data, 0);
3159        data.writeString(resolvedType);
3160        data.writeStrongBinder(resultTo);
3161        data.writeString(resultWho);
3162        data.writeInt(requestCode);
3163        data.writeInt(startFlags);
3164        if (profilerInfo != null) {
3165            data.writeInt(1);
3166            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3167        } else {
3168            data.writeInt(0);
3169        }
3170        if (options != null) {
3171            data.writeInt(1);
3172            options.writeToParcel(data, 0);
3173        } else {
3174            data.writeInt(0);
3175        }
3176        data.writeInt(userId);
3177        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
3178        reply.readException();
3179        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
3180        reply.recycle();
3181        data.recycle();
3182        return result;
3183    }
3184    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
3185            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
3186            int requestCode, int startFlags, Configuration config,
3187            Bundle options, int userId) throws RemoteException {
3188        Parcel data = Parcel.obtain();
3189        Parcel reply = Parcel.obtain();
3190        data.writeInterfaceToken(IActivityManager.descriptor);
3191        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3192        data.writeString(callingPackage);
3193        intent.writeToParcel(data, 0);
3194        data.writeString(resolvedType);
3195        data.writeStrongBinder(resultTo);
3196        data.writeString(resultWho);
3197        data.writeInt(requestCode);
3198        data.writeInt(startFlags);
3199        config.writeToParcel(data, 0);
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_TRANSACTION, data, reply, 0);
3208        reply.readException();
3209        int result = reply.readInt();
3210        reply.recycle();
3211        data.recycle();
3212        return result;
3213    }
3214    public int startActivityIntentSender(IApplicationThread caller,
3215            IntentSender intent, Intent fillInIntent, String resolvedType,
3216            IBinder resultTo, String resultWho, int requestCode,
3217            int flagsMask, int flagsValues, Bundle options) 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        intent.writeToParcel(data, 0);
3223        if (fillInIntent != null) {
3224            data.writeInt(1);
3225            fillInIntent.writeToParcel(data, 0);
3226        } else {
3227            data.writeInt(0);
3228        }
3229        data.writeString(resolvedType);
3230        data.writeStrongBinder(resultTo);
3231        data.writeString(resultWho);
3232        data.writeInt(requestCode);
3233        data.writeInt(flagsMask);
3234        data.writeInt(flagsValues);
3235        if (options != null) {
3236            data.writeInt(1);
3237            options.writeToParcel(data, 0);
3238        } else {
3239            data.writeInt(0);
3240        }
3241        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
3242        reply.readException();
3243        int result = reply.readInt();
3244        reply.recycle();
3245        data.recycle();
3246        return result;
3247    }
3248    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
3249            Intent intent, String resolvedType, IVoiceInteractionSession session,
3250            IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
3251            Bundle options, int userId) throws RemoteException {
3252        Parcel data = Parcel.obtain();
3253        Parcel reply = Parcel.obtain();
3254        data.writeInterfaceToken(IActivityManager.descriptor);
3255        data.writeString(callingPackage);
3256        data.writeInt(callingPid);
3257        data.writeInt(callingUid);
3258        intent.writeToParcel(data, 0);
3259        data.writeString(resolvedType);
3260        data.writeStrongBinder(session.asBinder());
3261        data.writeStrongBinder(interactor.asBinder());
3262        data.writeInt(startFlags);
3263        if (profilerInfo != null) {
3264            data.writeInt(1);
3265            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
3266        } else {
3267            data.writeInt(0);
3268        }
3269        if (options != null) {
3270            data.writeInt(1);
3271            options.writeToParcel(data, 0);
3272        } else {
3273            data.writeInt(0);
3274        }
3275        data.writeInt(userId);
3276        mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
3277        reply.readException();
3278        int result = reply.readInt();
3279        reply.recycle();
3280        data.recycle();
3281        return result;
3282    }
3283
3284    public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
3285            throws RemoteException {
3286        Parcel data = Parcel.obtain();
3287        Parcel reply = Parcel.obtain();
3288        data.writeInterfaceToken(IActivityManager.descriptor);
3289        data.writeStrongBinder(callingActivity);
3290        data.writeBundle(options);
3291        mRemote.transact(START_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3292        reply.readException();
3293        reply.recycle();
3294        data.recycle();
3295    }
3296
3297    public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
3298        Parcel data = Parcel.obtain();
3299        Parcel reply = Parcel.obtain();
3300        data.writeInterfaceToken(IActivityManager.descriptor);
3301        data.writeStrongBinder(callingActivity);
3302        mRemote.transact(STOP_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3303        reply.readException();
3304        reply.recycle();
3305        data.recycle();
3306    }
3307
3308    public boolean supportsLocalVoiceInteraction() throws RemoteException {
3309        Parcel data = Parcel.obtain();
3310        Parcel reply = Parcel.obtain();
3311        data.writeInterfaceToken(IActivityManager.descriptor);
3312        mRemote.transact(SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
3313        reply.readException();
3314        int result = reply.readInt();
3315        reply.recycle();
3316        data.recycle();
3317        return result != 0;
3318    }
3319
3320    public boolean startNextMatchingActivity(IBinder callingActivity,
3321            Intent intent, Bundle options) throws RemoteException {
3322        Parcel data = Parcel.obtain();
3323        Parcel reply = Parcel.obtain();
3324        data.writeInterfaceToken(IActivityManager.descriptor);
3325        data.writeStrongBinder(callingActivity);
3326        intent.writeToParcel(data, 0);
3327        if (options != null) {
3328            data.writeInt(1);
3329            options.writeToParcel(data, 0);
3330        } else {
3331            data.writeInt(0);
3332        }
3333        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
3334        reply.readException();
3335        int result = reply.readInt();
3336        reply.recycle();
3337        data.recycle();
3338        return result != 0;
3339    }
3340    public int startActivityFromRecents(int taskId, Bundle options)
3341            throws RemoteException {
3342        Parcel data = Parcel.obtain();
3343        Parcel reply = Parcel.obtain();
3344        data.writeInterfaceToken(IActivityManager.descriptor);
3345        data.writeInt(taskId);
3346        if (options == null) {
3347            data.writeInt(0);
3348        } else {
3349            data.writeInt(1);
3350            options.writeToParcel(data, 0);
3351        }
3352        mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
3353        reply.readException();
3354        int result = reply.readInt();
3355        reply.recycle();
3356        data.recycle();
3357        return result;
3358    }
3359    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, int finishTask)
3360            throws RemoteException {
3361        Parcel data = Parcel.obtain();
3362        Parcel reply = Parcel.obtain();
3363        data.writeInterfaceToken(IActivityManager.descriptor);
3364        data.writeStrongBinder(token);
3365        data.writeInt(resultCode);
3366        if (resultData != null) {
3367            data.writeInt(1);
3368            resultData.writeToParcel(data, 0);
3369        } else {
3370            data.writeInt(0);
3371        }
3372        data.writeInt(finishTask);
3373        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
3374        reply.readException();
3375        boolean res = reply.readInt() != 0;
3376        data.recycle();
3377        reply.recycle();
3378        return res;
3379    }
3380    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
3381    {
3382        Parcel data = Parcel.obtain();
3383        Parcel reply = Parcel.obtain();
3384        data.writeInterfaceToken(IActivityManager.descriptor);
3385        data.writeStrongBinder(token);
3386        data.writeString(resultWho);
3387        data.writeInt(requestCode);
3388        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
3389        reply.readException();
3390        data.recycle();
3391        reply.recycle();
3392    }
3393    public boolean finishActivityAffinity(IBinder token) throws RemoteException {
3394        Parcel data = Parcel.obtain();
3395        Parcel reply = Parcel.obtain();
3396        data.writeInterfaceToken(IActivityManager.descriptor);
3397        data.writeStrongBinder(token);
3398        mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
3399        reply.readException();
3400        boolean res = reply.readInt() != 0;
3401        data.recycle();
3402        reply.recycle();
3403        return res;
3404    }
3405    public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
3406        Parcel data = Parcel.obtain();
3407        Parcel reply = Parcel.obtain();
3408        data.writeInterfaceToken(IActivityManager.descriptor);
3409        data.writeStrongBinder(session.asBinder());
3410        mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
3411        reply.readException();
3412        data.recycle();
3413        reply.recycle();
3414    }
3415    public boolean releaseActivityInstance(IBinder token) throws RemoteException {
3416        Parcel data = Parcel.obtain();
3417        Parcel reply = Parcel.obtain();
3418        data.writeInterfaceToken(IActivityManager.descriptor);
3419        data.writeStrongBinder(token);
3420        mRemote.transact(RELEASE_ACTIVITY_INSTANCE_TRANSACTION, data, reply, 0);
3421        reply.readException();
3422        boolean res = reply.readInt() != 0;
3423        data.recycle();
3424        reply.recycle();
3425        return res;
3426    }
3427    public void releaseSomeActivities(IApplicationThread app) throws RemoteException {
3428        Parcel data = Parcel.obtain();
3429        Parcel reply = Parcel.obtain();
3430        data.writeInterfaceToken(IActivityManager.descriptor);
3431        data.writeStrongBinder(app.asBinder());
3432        mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
3433        reply.readException();
3434        data.recycle();
3435        reply.recycle();
3436    }
3437    public boolean willActivityBeVisible(IBinder token) throws RemoteException {
3438        Parcel data = Parcel.obtain();
3439        Parcel reply = Parcel.obtain();
3440        data.writeInterfaceToken(IActivityManager.descriptor);
3441        data.writeStrongBinder(token);
3442        mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
3443        reply.readException();
3444        boolean res = reply.readInt() != 0;
3445        data.recycle();
3446        reply.recycle();
3447        return res;
3448    }
3449    public Intent registerReceiver(IApplicationThread caller, String packageName,
3450            IIntentReceiver receiver,
3451            IntentFilter filter, String perm, int userId) throws RemoteException
3452    {
3453        Parcel data = Parcel.obtain();
3454        Parcel reply = Parcel.obtain();
3455        data.writeInterfaceToken(IActivityManager.descriptor);
3456        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3457        data.writeString(packageName);
3458        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
3459        filter.writeToParcel(data, 0);
3460        data.writeString(perm);
3461        data.writeInt(userId);
3462        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3463        reply.readException();
3464        Intent intent = null;
3465        int haveIntent = reply.readInt();
3466        if (haveIntent != 0) {
3467            intent = Intent.CREATOR.createFromParcel(reply);
3468        }
3469        reply.recycle();
3470        data.recycle();
3471        return intent;
3472    }
3473    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
3474    {
3475        Parcel data = Parcel.obtain();
3476        Parcel reply = Parcel.obtain();
3477        data.writeInterfaceToken(IActivityManager.descriptor);
3478        data.writeStrongBinder(receiver.asBinder());
3479        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
3480        reply.readException();
3481        data.recycle();
3482        reply.recycle();
3483    }
3484    public int broadcastIntent(IApplicationThread caller,
3485            Intent intent, String resolvedType, IIntentReceiver resultTo,
3486            int resultCode, String resultData, Bundle map,
3487            String[] requiredPermissions, int appOp, Bundle options, boolean serialized,
3488            boolean sticky, int userId) throws RemoteException
3489    {
3490        Parcel data = Parcel.obtain();
3491        Parcel reply = Parcel.obtain();
3492        data.writeInterfaceToken(IActivityManager.descriptor);
3493        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3494        intent.writeToParcel(data, 0);
3495        data.writeString(resolvedType);
3496        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
3497        data.writeInt(resultCode);
3498        data.writeString(resultData);
3499        data.writeBundle(map);
3500        data.writeStringArray(requiredPermissions);
3501        data.writeInt(appOp);
3502        data.writeBundle(options);
3503        data.writeInt(serialized ? 1 : 0);
3504        data.writeInt(sticky ? 1 : 0);
3505        data.writeInt(userId);
3506        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
3507        reply.readException();
3508        int res = reply.readInt();
3509        reply.recycle();
3510        data.recycle();
3511        return res;
3512    }
3513    public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
3514            throws RemoteException
3515    {
3516        Parcel data = Parcel.obtain();
3517        Parcel reply = Parcel.obtain();
3518        data.writeInterfaceToken(IActivityManager.descriptor);
3519        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3520        intent.writeToParcel(data, 0);
3521        data.writeInt(userId);
3522        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
3523        reply.readException();
3524        data.recycle();
3525        reply.recycle();
3526    }
3527    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
3528            boolean abortBroadcast, int flags) throws RemoteException
3529    {
3530        Parcel data = Parcel.obtain();
3531        Parcel reply = Parcel.obtain();
3532        data.writeInterfaceToken(IActivityManager.descriptor);
3533        data.writeStrongBinder(who);
3534        data.writeInt(resultCode);
3535        data.writeString(resultData);
3536        data.writeBundle(map);
3537        data.writeInt(abortBroadcast ? 1 : 0);
3538        data.writeInt(flags);
3539        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3540        reply.readException();
3541        data.recycle();
3542        reply.recycle();
3543    }
3544    public void attachApplication(IApplicationThread app) throws RemoteException
3545    {
3546        Parcel data = Parcel.obtain();
3547        Parcel reply = Parcel.obtain();
3548        data.writeInterfaceToken(IActivityManager.descriptor);
3549        data.writeStrongBinder(app.asBinder());
3550        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
3551        reply.readException();
3552        data.recycle();
3553        reply.recycle();
3554    }
3555    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
3556            throws RemoteException
3557    {
3558        Parcel data = Parcel.obtain();
3559        Parcel reply = Parcel.obtain();
3560        data.writeInterfaceToken(IActivityManager.descriptor);
3561        data.writeStrongBinder(token);
3562        if (config != null) {
3563            data.writeInt(1);
3564            config.writeToParcel(data, 0);
3565        } else {
3566            data.writeInt(0);
3567        }
3568        data.writeInt(stopProfiling ? 1 : 0);
3569        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3570        reply.readException();
3571        data.recycle();
3572        reply.recycle();
3573    }
3574    public void activityResumed(IBinder token) throws RemoteException
3575    {
3576        Parcel data = Parcel.obtain();
3577        Parcel reply = Parcel.obtain();
3578        data.writeInterfaceToken(IActivityManager.descriptor);
3579        data.writeStrongBinder(token);
3580        mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
3581        reply.readException();
3582        data.recycle();
3583        reply.recycle();
3584    }
3585    public void activityPaused(IBinder token) throws RemoteException
3586    {
3587        Parcel data = Parcel.obtain();
3588        Parcel reply = Parcel.obtain();
3589        data.writeInterfaceToken(IActivityManager.descriptor);
3590        data.writeStrongBinder(token);
3591        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
3592        reply.readException();
3593        data.recycle();
3594        reply.recycle();
3595    }
3596    public void activityStopped(IBinder token, Bundle state,
3597            PersistableBundle persistentState, CharSequence description) throws RemoteException
3598    {
3599        Parcel data = Parcel.obtain();
3600        Parcel reply = Parcel.obtain();
3601        data.writeInterfaceToken(IActivityManager.descriptor);
3602        data.writeStrongBinder(token);
3603        data.writeBundle(state);
3604        data.writePersistableBundle(persistentState);
3605        TextUtils.writeToParcel(description, data, 0);
3606        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3607        reply.readException();
3608        data.recycle();
3609        reply.recycle();
3610    }
3611    public void activitySlept(IBinder token) throws RemoteException
3612    {
3613        Parcel data = Parcel.obtain();
3614        Parcel reply = Parcel.obtain();
3615        data.writeInterfaceToken(IActivityManager.descriptor);
3616        data.writeStrongBinder(token);
3617        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3618        reply.readException();
3619        data.recycle();
3620        reply.recycle();
3621    }
3622    public void activityDestroyed(IBinder token) throws RemoteException
3623    {
3624        Parcel data = Parcel.obtain();
3625        Parcel reply = Parcel.obtain();
3626        data.writeInterfaceToken(IActivityManager.descriptor);
3627        data.writeStrongBinder(token);
3628        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3629        reply.readException();
3630        data.recycle();
3631        reply.recycle();
3632    }
3633    public void activityRelaunched(IBinder token) throws RemoteException
3634    {
3635        Parcel data = Parcel.obtain();
3636        Parcel reply = Parcel.obtain();
3637        data.writeInterfaceToken(IActivityManager.descriptor);
3638        data.writeStrongBinder(token);
3639        mRemote.transact(ACTIVITY_RELAUNCHED_TRANSACTION, data, reply, 0);
3640        reply.readException();
3641        data.recycle();
3642        reply.recycle();
3643    }
3644    public String getCallingPackage(IBinder token) throws RemoteException
3645    {
3646        Parcel data = Parcel.obtain();
3647        Parcel reply = Parcel.obtain();
3648        data.writeInterfaceToken(IActivityManager.descriptor);
3649        data.writeStrongBinder(token);
3650        mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
3651        reply.readException();
3652        String res = reply.readString();
3653        data.recycle();
3654        reply.recycle();
3655        return res;
3656    }
3657    public ComponentName getCallingActivity(IBinder token)
3658            throws RemoteException {
3659        Parcel data = Parcel.obtain();
3660        Parcel reply = Parcel.obtain();
3661        data.writeInterfaceToken(IActivityManager.descriptor);
3662        data.writeStrongBinder(token);
3663        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
3664        reply.readException();
3665        ComponentName res = ComponentName.readFromParcel(reply);
3666        data.recycle();
3667        reply.recycle();
3668        return res;
3669    }
3670    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
3671        Parcel data = Parcel.obtain();
3672        Parcel reply = Parcel.obtain();
3673        data.writeInterfaceToken(IActivityManager.descriptor);
3674        data.writeString(callingPackage);
3675        mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
3676        reply.readException();
3677        ArrayList<IAppTask> list = null;
3678        int N = reply.readInt();
3679        if (N >= 0) {
3680            list = new ArrayList<>();
3681            while (N > 0) {
3682                IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
3683                list.add(task);
3684                N--;
3685            }
3686        }
3687        data.recycle();
3688        reply.recycle();
3689        return list;
3690    }
3691    public int addAppTask(IBinder activityToken, Intent intent,
3692            ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
3693        Parcel data = Parcel.obtain();
3694        Parcel reply = Parcel.obtain();
3695        data.writeInterfaceToken(IActivityManager.descriptor);
3696        data.writeStrongBinder(activityToken);
3697        intent.writeToParcel(data, 0);
3698        description.writeToParcel(data, 0);
3699        thumbnail.writeToParcel(data, 0);
3700        mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
3701        reply.readException();
3702        int res = reply.readInt();
3703        data.recycle();
3704        reply.recycle();
3705        return res;
3706    }
3707    public Point getAppTaskThumbnailSize() throws RemoteException {
3708        Parcel data = Parcel.obtain();
3709        Parcel reply = Parcel.obtain();
3710        data.writeInterfaceToken(IActivityManager.descriptor);
3711        mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
3712        reply.readException();
3713        Point size = Point.CREATOR.createFromParcel(reply);
3714        data.recycle();
3715        reply.recycle();
3716        return size;
3717    }
3718    public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, int flags)
3719            throws RemoteException {
3720        Parcel data = Parcel.obtain();
3721        Parcel reply = Parcel.obtain();
3722        data.writeInterfaceToken(IActivityManager.descriptor);
3723        data.writeInt(maxNum);
3724        data.writeInt(flags);
3725        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
3726        reply.readException();
3727        ArrayList<ActivityManager.RunningTaskInfo> list = null;
3728        int N = reply.readInt();
3729        if (N >= 0) {
3730            list = new ArrayList<>();
3731            while (N > 0) {
3732                ActivityManager.RunningTaskInfo info =
3733                        ActivityManager.RunningTaskInfo.CREATOR
3734                                .createFromParcel(reply);
3735                list.add(info);
3736                N--;
3737            }
3738        }
3739        data.recycle();
3740        reply.recycle();
3741        return list;
3742    }
3743    public ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
3744            int flags, int userId) throws RemoteException {
3745        Parcel data = Parcel.obtain();
3746        Parcel reply = Parcel.obtain();
3747        data.writeInterfaceToken(IActivityManager.descriptor);
3748        data.writeInt(maxNum);
3749        data.writeInt(flags);
3750        data.writeInt(userId);
3751        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
3752        reply.readException();
3753        final ParceledListSlice<ActivityManager.RecentTaskInfo> list = ParceledListSlice.CREATOR
3754                .createFromParcel(reply);
3755        data.recycle();
3756        reply.recycle();
3757        return list;
3758    }
3759    public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
3760        Parcel data = Parcel.obtain();
3761        Parcel reply = Parcel.obtain();
3762        data.writeInterfaceToken(IActivityManager.descriptor);
3763        data.writeInt(id);
3764        mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
3765        reply.readException();
3766        ActivityManager.TaskThumbnail taskThumbnail = null;
3767        if (reply.readInt() != 0) {
3768            taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
3769        }
3770        data.recycle();
3771        reply.recycle();
3772        return taskThumbnail;
3773    }
3774    public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
3775            throws RemoteException {
3776        Parcel data = Parcel.obtain();
3777        Parcel reply = Parcel.obtain();
3778        data.writeInterfaceToken(IActivityManager.descriptor);
3779        data.writeInt(maxNum);
3780        data.writeInt(flags);
3781        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
3782        reply.readException();
3783        ArrayList<ActivityManager.RunningServiceInfo> list = null;
3784        int N = reply.readInt();
3785        if (N >= 0) {
3786            list = new ArrayList<>();
3787            while (N > 0) {
3788                ActivityManager.RunningServiceInfo info =
3789                        ActivityManager.RunningServiceInfo.CREATOR
3790                        .createFromParcel(reply);
3791                list.add(info);
3792                N--;
3793            }
3794        }
3795        data.recycle();
3796        reply.recycle();
3797        return list;
3798    }
3799    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
3800            throws RemoteException {
3801        Parcel data = Parcel.obtain();
3802        Parcel reply = Parcel.obtain();
3803        data.writeInterfaceToken(IActivityManager.descriptor);
3804        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
3805        reply.readException();
3806        ArrayList<ActivityManager.ProcessErrorStateInfo> list
3807            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
3808        data.recycle();
3809        reply.recycle();
3810        return list;
3811    }
3812    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
3813            throws RemoteException {
3814        Parcel data = Parcel.obtain();
3815        Parcel reply = Parcel.obtain();
3816        data.writeInterfaceToken(IActivityManager.descriptor);
3817        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
3818        reply.readException();
3819        ArrayList<ActivityManager.RunningAppProcessInfo> list
3820        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
3821        data.recycle();
3822        reply.recycle();
3823        return list;
3824    }
3825    public List<ApplicationInfo> getRunningExternalApplications()
3826            throws RemoteException {
3827        Parcel data = Parcel.obtain();
3828        Parcel reply = Parcel.obtain();
3829        data.writeInterfaceToken(IActivityManager.descriptor);
3830        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
3831        reply.readException();
3832        ArrayList<ApplicationInfo> list
3833        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
3834        data.recycle();
3835        reply.recycle();
3836        return list;
3837    }
3838    public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
3839    {
3840        Parcel data = Parcel.obtain();
3841        Parcel reply = Parcel.obtain();
3842        data.writeInterfaceToken(IActivityManager.descriptor);
3843        data.writeInt(task);
3844        data.writeInt(flags);
3845        if (options != null) {
3846            data.writeInt(1);
3847            options.writeToParcel(data, 0);
3848        } else {
3849            data.writeInt(0);
3850        }
3851        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
3852        reply.readException();
3853        data.recycle();
3854        reply.recycle();
3855    }
3856    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
3857            throws RemoteException {
3858        Parcel data = Parcel.obtain();
3859        Parcel reply = Parcel.obtain();
3860        data.writeInterfaceToken(IActivityManager.descriptor);
3861        data.writeStrongBinder(token);
3862        data.writeInt(nonRoot ? 1 : 0);
3863        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3864        reply.readException();
3865        boolean res = reply.readInt() != 0;
3866        data.recycle();
3867        reply.recycle();
3868        return res;
3869    }
3870    public void moveTaskBackwards(int task) throws RemoteException
3871    {
3872        Parcel data = Parcel.obtain();
3873        Parcel reply = Parcel.obtain();
3874        data.writeInterfaceToken(IActivityManager.descriptor);
3875        data.writeInt(task);
3876        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
3877        reply.readException();
3878        data.recycle();
3879        reply.recycle();
3880    }
3881    @Override
3882    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
3883    {
3884        Parcel data = Parcel.obtain();
3885        Parcel reply = Parcel.obtain();
3886        data.writeInterfaceToken(IActivityManager.descriptor);
3887        data.writeInt(taskId);
3888        data.writeInt(stackId);
3889        data.writeInt(toTop ? 1 : 0);
3890        mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
3891        reply.readException();
3892        data.recycle();
3893        reply.recycle();
3894    }
3895    @Override
3896    public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate,
3897            Rect initialBounds, boolean moveHomeStackFront) throws RemoteException
3898    {
3899        Parcel data = Parcel.obtain();
3900        Parcel reply = Parcel.obtain();
3901        data.writeInterfaceToken(IActivityManager.descriptor);
3902        data.writeInt(taskId);
3903        data.writeInt(createMode);
3904        data.writeInt(toTop ? 1 : 0);
3905        data.writeInt(animate ? 1 : 0);
3906        if (initialBounds != null) {
3907            data.writeInt(1);
3908            initialBounds.writeToParcel(data, 0);
3909        } else {
3910            data.writeInt(0);
3911        }
3912        data.writeInt(moveHomeStackFront ? 1 : 0);
3913        mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0);
3914        reply.readException();
3915        boolean res = reply.readInt() > 0;
3916        data.recycle();
3917        reply.recycle();
3918        return res;
3919    }
3920    @Override
3921    public boolean moveTopActivityToPinnedStack(int stackId, Rect r)
3922        throws RemoteException
3923    {
3924        Parcel data = Parcel.obtain();
3925        Parcel reply = Parcel.obtain();
3926        data.writeInterfaceToken(IActivityManager.descriptor);
3927        data.writeInt(stackId);
3928        r.writeToParcel(data, 0);
3929        mRemote.transact(MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION, data, reply, 0);
3930        reply.readException();
3931        final boolean res = reply.readInt() != 0;
3932        data.recycle();
3933        reply.recycle();
3934        return res;
3935    }
3936    @Override
3937    public void resizeStack(int stackId, Rect r, boolean allowResizeInDockedMode,
3938            boolean preserveWindows, boolean animate, int animationDuration)
3939            throws RemoteException {
3940        Parcel data = Parcel.obtain();
3941        Parcel reply = Parcel.obtain();
3942        data.writeInterfaceToken(IActivityManager.descriptor);
3943        data.writeInt(stackId);
3944        if (r != null) {
3945            data.writeInt(1);
3946            r.writeToParcel(data, 0);
3947        } else {
3948            data.writeInt(0);
3949        }
3950        data.writeInt(allowResizeInDockedMode ? 1 : 0);
3951        data.writeInt(preserveWindows ? 1 : 0);
3952        data.writeInt(animate ? 1 : 0);
3953        data.writeInt(animationDuration);
3954        mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0);
3955        reply.readException();
3956        data.recycle();
3957        reply.recycle();
3958    }
3959    @Override
3960    public void swapDockedAndFullscreenStack() throws RemoteException
3961    {
3962        Parcel data = Parcel.obtain();
3963        Parcel reply = Parcel.obtain();
3964        data.writeInterfaceToken(IActivityManager.descriptor);
3965        mRemote.transact(SWAP_DOCKED_AND_FULLSCREEN_STACK, data, reply, 0);
3966        reply.readException();
3967        data.recycle();
3968        reply.recycle();
3969    }
3970    @Override
3971    public void resizeDockedStack(Rect dockedBounds, Rect tempDockedTaskBounds,
3972            Rect tempDockedTaskInsetBounds,
3973            Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds)
3974            throws RemoteException
3975    {
3976        Parcel data = Parcel.obtain();
3977        Parcel reply = Parcel.obtain();
3978        data.writeInterfaceToken(IActivityManager.descriptor);
3979        if (dockedBounds != null) {
3980            data.writeInt(1);
3981            dockedBounds.writeToParcel(data, 0);
3982        } else {
3983            data.writeInt(0);
3984        }
3985        if (tempDockedTaskBounds != null) {
3986            data.writeInt(1);
3987            tempDockedTaskBounds.writeToParcel(data, 0);
3988        } else {
3989            data.writeInt(0);
3990        }
3991        if (tempDockedTaskInsetBounds != null) {
3992            data.writeInt(1);
3993            tempDockedTaskInsetBounds.writeToParcel(data, 0);
3994        } else {
3995            data.writeInt(0);
3996        }
3997        if (tempOtherTaskBounds != null) {
3998            data.writeInt(1);
3999            tempOtherTaskBounds.writeToParcel(data, 0);
4000        } else {
4001            data.writeInt(0);
4002        }
4003        if (tempOtherTaskInsetBounds != null) {
4004            data.writeInt(1);
4005            tempOtherTaskInsetBounds.writeToParcel(data, 0);
4006        } else {
4007            data.writeInt(0);
4008        }
4009        mRemote.transact(RESIZE_DOCKED_STACK_TRANSACTION, data, reply, 0);
4010        reply.readException();
4011        data.recycle();
4012        reply.recycle();
4013    }
4014
4015    @Override
4016    public void resizePinnedStack(Rect pinnedBounds, Rect tempPinnedTaskBounds) throws RemoteException
4017    {
4018        Parcel data = Parcel.obtain();
4019        Parcel reply = Parcel.obtain();
4020        data.writeInterfaceToken(IActivityManager.descriptor);
4021        if (pinnedBounds != null) {
4022            data.writeInt(1);
4023            pinnedBounds.writeToParcel(data, 0);
4024        } else {
4025            data.writeInt(0);
4026        }
4027        if (tempPinnedTaskBounds != null) {
4028            data.writeInt(1);
4029            tempPinnedTaskBounds.writeToParcel(data, 0);
4030        } else {
4031            data.writeInt(0);
4032        }
4033        mRemote.transact(RESIZE_PINNED_STACK_TRANSACTION, data, reply, 0);
4034        reply.readException();
4035        data.recycle();
4036        reply.recycle();
4037    }
4038
4039    @Override
4040    public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException
4041    {
4042        Parcel data = Parcel.obtain();
4043        Parcel reply = Parcel.obtain();
4044        data.writeInterfaceToken(IActivityManager.descriptor);
4045        data.writeInt(taskId);
4046        data.writeInt(stackId);
4047        data.writeInt(position);
4048        mRemote.transact(POSITION_TASK_IN_STACK_TRANSACTION, data, reply, 0);
4049        reply.readException();
4050        data.recycle();
4051        reply.recycle();
4052    }
4053    @Override
4054    public List<StackInfo> getAllStackInfos() throws RemoteException
4055    {
4056        Parcel data = Parcel.obtain();
4057        Parcel reply = Parcel.obtain();
4058        data.writeInterfaceToken(IActivityManager.descriptor);
4059        mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
4060        reply.readException();
4061        ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
4062        data.recycle();
4063        reply.recycle();
4064        return list;
4065    }
4066    @Override
4067    public StackInfo getStackInfo(int stackId) throws RemoteException
4068    {
4069        Parcel data = Parcel.obtain();
4070        Parcel reply = Parcel.obtain();
4071        data.writeInterfaceToken(IActivityManager.descriptor);
4072        data.writeInt(stackId);
4073        mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
4074        reply.readException();
4075        int res = reply.readInt();
4076        StackInfo info = null;
4077        if (res != 0) {
4078            info = StackInfo.CREATOR.createFromParcel(reply);
4079        }
4080        data.recycle();
4081        reply.recycle();
4082        return info;
4083    }
4084    @Override
4085    public boolean isInHomeStack(int taskId) throws RemoteException {
4086        Parcel data = Parcel.obtain();
4087        Parcel reply = Parcel.obtain();
4088        data.writeInterfaceToken(IActivityManager.descriptor);
4089        data.writeInt(taskId);
4090        mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
4091        reply.readException();
4092        boolean isInHomeStack = reply.readInt() > 0;
4093        data.recycle();
4094        reply.recycle();
4095        return isInHomeStack;
4096    }
4097    @Override
4098    public void setFocusedStack(int stackId) throws RemoteException
4099    {
4100        Parcel data = Parcel.obtain();
4101        Parcel reply = Parcel.obtain();
4102        data.writeInterfaceToken(IActivityManager.descriptor);
4103        data.writeInt(stackId);
4104        mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0);
4105        reply.readException();
4106        data.recycle();
4107        reply.recycle();
4108    }
4109    @Override
4110    public int getFocusedStackId() throws RemoteException {
4111        Parcel data = Parcel.obtain();
4112        Parcel reply = Parcel.obtain();
4113        data.writeInterfaceToken(IActivityManager.descriptor);
4114        mRemote.transact(GET_FOCUSED_STACK_ID_TRANSACTION, data, reply, 0);
4115        reply.readException();
4116        int focusedStackId = reply.readInt();
4117        data.recycle();
4118        reply.recycle();
4119        return focusedStackId;
4120    }
4121    @Override
4122    public void setFocusedTask(int taskId) throws RemoteException
4123    {
4124        Parcel data = Parcel.obtain();
4125        Parcel reply = Parcel.obtain();
4126        data.writeInterfaceToken(IActivityManager.descriptor);
4127        data.writeInt(taskId);
4128        mRemote.transact(SET_FOCUSED_TASK_TRANSACTION, data, reply, 0);
4129        reply.readException();
4130        data.recycle();
4131        reply.recycle();
4132    }
4133    @Override
4134    public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException
4135    {
4136        Parcel data = Parcel.obtain();
4137        Parcel reply = Parcel.obtain();
4138        data.writeInterfaceToken(IActivityManager.descriptor);
4139        data.writeStrongBinder(listener.asBinder());
4140        mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0);
4141        reply.readException();
4142        data.recycle();
4143        reply.recycle();
4144    }
4145    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
4146    {
4147        Parcel data = Parcel.obtain();
4148        Parcel reply = Parcel.obtain();
4149        data.writeInterfaceToken(IActivityManager.descriptor);
4150        data.writeStrongBinder(token);
4151        data.writeInt(onlyRoot ? 1 : 0);
4152        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
4153        reply.readException();
4154        int res = reply.readInt();
4155        data.recycle();
4156        reply.recycle();
4157        return res;
4158    }
4159    public ContentProviderHolder getContentProvider(IApplicationThread caller,
4160            String name, int userId, boolean stable) throws RemoteException {
4161        Parcel data = Parcel.obtain();
4162        Parcel reply = Parcel.obtain();
4163        data.writeInterfaceToken(IActivityManager.descriptor);
4164        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4165        data.writeString(name);
4166        data.writeInt(userId);
4167        data.writeInt(stable ? 1 : 0);
4168        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4169        reply.readException();
4170        int res = reply.readInt();
4171        ContentProviderHolder cph = null;
4172        if (res != 0) {
4173            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4174        }
4175        data.recycle();
4176        reply.recycle();
4177        return cph;
4178    }
4179    public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
4180            throws RemoteException {
4181        Parcel data = Parcel.obtain();
4182        Parcel reply = Parcel.obtain();
4183        data.writeInterfaceToken(IActivityManager.descriptor);
4184        data.writeString(name);
4185        data.writeInt(userId);
4186        data.writeStrongBinder(token);
4187        mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4188        reply.readException();
4189        int res = reply.readInt();
4190        ContentProviderHolder cph = null;
4191        if (res != 0) {
4192            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
4193        }
4194        data.recycle();
4195        reply.recycle();
4196        return cph;
4197    }
4198    public void publishContentProviders(IApplicationThread caller,
4199            List<ContentProviderHolder> providers) throws RemoteException
4200    {
4201        Parcel data = Parcel.obtain();
4202        Parcel reply = Parcel.obtain();
4203        data.writeInterfaceToken(IActivityManager.descriptor);
4204        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4205        data.writeTypedList(providers);
4206        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
4207        reply.readException();
4208        data.recycle();
4209        reply.recycle();
4210    }
4211    public boolean refContentProvider(IBinder connection, int stable, int unstable)
4212            throws RemoteException {
4213        Parcel data = Parcel.obtain();
4214        Parcel reply = Parcel.obtain();
4215        data.writeInterfaceToken(IActivityManager.descriptor);
4216        data.writeStrongBinder(connection);
4217        data.writeInt(stable);
4218        data.writeInt(unstable);
4219        mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4220        reply.readException();
4221        boolean res = reply.readInt() != 0;
4222        data.recycle();
4223        reply.recycle();
4224        return res;
4225    }
4226
4227    public void unstableProviderDied(IBinder connection) throws RemoteException {
4228        Parcel data = Parcel.obtain();
4229        Parcel reply = Parcel.obtain();
4230        data.writeInterfaceToken(IActivityManager.descriptor);
4231        data.writeStrongBinder(connection);
4232        mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
4233        reply.readException();
4234        data.recycle();
4235        reply.recycle();
4236    }
4237
4238    @Override
4239    public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
4240        Parcel data = Parcel.obtain();
4241        Parcel reply = Parcel.obtain();
4242        data.writeInterfaceToken(IActivityManager.descriptor);
4243        data.writeStrongBinder(connection);
4244        mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
4245        reply.readException();
4246        data.recycle();
4247        reply.recycle();
4248    }
4249
4250    public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
4251        Parcel data = Parcel.obtain();
4252        Parcel reply = Parcel.obtain();
4253        data.writeInterfaceToken(IActivityManager.descriptor);
4254        data.writeStrongBinder(connection);
4255        data.writeInt(stable ? 1 : 0);
4256        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
4257        reply.readException();
4258        data.recycle();
4259        reply.recycle();
4260    }
4261
4262    public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
4263        Parcel data = Parcel.obtain();
4264        Parcel reply = Parcel.obtain();
4265        data.writeInterfaceToken(IActivityManager.descriptor);
4266        data.writeString(name);
4267        data.writeStrongBinder(token);
4268        mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
4269        reply.readException();
4270        data.recycle();
4271        reply.recycle();
4272    }
4273
4274    public PendingIntent getRunningServiceControlPanel(ComponentName service)
4275            throws RemoteException
4276    {
4277        Parcel data = Parcel.obtain();
4278        Parcel reply = Parcel.obtain();
4279        data.writeInterfaceToken(IActivityManager.descriptor);
4280        service.writeToParcel(data, 0);
4281        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
4282        reply.readException();
4283        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
4284        data.recycle();
4285        reply.recycle();
4286        return res;
4287    }
4288
4289    public ComponentName startService(IApplicationThread caller, Intent service,
4290            String resolvedType, String callingPackage, int userId) throws RemoteException
4291    {
4292        Parcel data = Parcel.obtain();
4293        Parcel reply = Parcel.obtain();
4294        data.writeInterfaceToken(IActivityManager.descriptor);
4295        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4296        service.writeToParcel(data, 0);
4297        data.writeString(resolvedType);
4298        data.writeString(callingPackage);
4299        data.writeInt(userId);
4300        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
4301        reply.readException();
4302        ComponentName res = ComponentName.readFromParcel(reply);
4303        data.recycle();
4304        reply.recycle();
4305        return res;
4306    }
4307    public int stopService(IApplicationThread caller, Intent service,
4308            String resolvedType, int userId) throws RemoteException
4309    {
4310        Parcel data = Parcel.obtain();
4311        Parcel reply = Parcel.obtain();
4312        data.writeInterfaceToken(IActivityManager.descriptor);
4313        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4314        service.writeToParcel(data, 0);
4315        data.writeString(resolvedType);
4316        data.writeInt(userId);
4317        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
4318        reply.readException();
4319        int res = reply.readInt();
4320        reply.recycle();
4321        data.recycle();
4322        return res;
4323    }
4324    public boolean stopServiceToken(ComponentName className, IBinder token,
4325            int startId) throws RemoteException {
4326        Parcel data = Parcel.obtain();
4327        Parcel reply = Parcel.obtain();
4328        data.writeInterfaceToken(IActivityManager.descriptor);
4329        ComponentName.writeToParcel(className, data);
4330        data.writeStrongBinder(token);
4331        data.writeInt(startId);
4332        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
4333        reply.readException();
4334        boolean res = reply.readInt() != 0;
4335        data.recycle();
4336        reply.recycle();
4337        return res;
4338    }
4339    public void setServiceForeground(ComponentName className, IBinder token,
4340            int id, Notification notification, int flags) throws RemoteException {
4341        Parcel data = Parcel.obtain();
4342        Parcel reply = Parcel.obtain();
4343        data.writeInterfaceToken(IActivityManager.descriptor);
4344        ComponentName.writeToParcel(className, data);
4345        data.writeStrongBinder(token);
4346        data.writeInt(id);
4347        if (notification != null) {
4348            data.writeInt(1);
4349            notification.writeToParcel(data, 0);
4350        } else {
4351            data.writeInt(0);
4352        }
4353        data.writeInt(flags);
4354        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
4355        reply.readException();
4356        data.recycle();
4357        reply.recycle();
4358    }
4359    public int bindService(IApplicationThread caller, IBinder token,
4360            Intent service, String resolvedType, IServiceConnection connection,
4361            int flags,  String callingPackage, int userId) throws RemoteException {
4362        Parcel data = Parcel.obtain();
4363        Parcel reply = Parcel.obtain();
4364        data.writeInterfaceToken(IActivityManager.descriptor);
4365        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4366        data.writeStrongBinder(token);
4367        service.writeToParcel(data, 0);
4368        data.writeString(resolvedType);
4369        data.writeStrongBinder(connection.asBinder());
4370        data.writeInt(flags);
4371        data.writeString(callingPackage);
4372        data.writeInt(userId);
4373        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
4374        reply.readException();
4375        int res = reply.readInt();
4376        data.recycle();
4377        reply.recycle();
4378        return res;
4379    }
4380    public boolean unbindService(IServiceConnection connection) throws RemoteException
4381    {
4382        Parcel data = Parcel.obtain();
4383        Parcel reply = Parcel.obtain();
4384        data.writeInterfaceToken(IActivityManager.descriptor);
4385        data.writeStrongBinder(connection.asBinder());
4386        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
4387        reply.readException();
4388        boolean res = reply.readInt() != 0;
4389        data.recycle();
4390        reply.recycle();
4391        return res;
4392    }
4393
4394    public void publishService(IBinder token,
4395            Intent intent, IBinder service) throws RemoteException {
4396        Parcel data = Parcel.obtain();
4397        Parcel reply = Parcel.obtain();
4398        data.writeInterfaceToken(IActivityManager.descriptor);
4399        data.writeStrongBinder(token);
4400        intent.writeToParcel(data, 0);
4401        data.writeStrongBinder(service);
4402        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
4403        reply.readException();
4404        data.recycle();
4405        reply.recycle();
4406    }
4407
4408    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
4409            throws RemoteException {
4410        Parcel data = Parcel.obtain();
4411        Parcel reply = Parcel.obtain();
4412        data.writeInterfaceToken(IActivityManager.descriptor);
4413        data.writeStrongBinder(token);
4414        intent.writeToParcel(data, 0);
4415        data.writeInt(doRebind ? 1 : 0);
4416        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
4417        reply.readException();
4418        data.recycle();
4419        reply.recycle();
4420    }
4421
4422    public void serviceDoneExecuting(IBinder token, int type, int startId,
4423            int res) throws RemoteException {
4424        Parcel data = Parcel.obtain();
4425        Parcel reply = Parcel.obtain();
4426        data.writeInterfaceToken(IActivityManager.descriptor);
4427        data.writeStrongBinder(token);
4428        data.writeInt(type);
4429        data.writeInt(startId);
4430        data.writeInt(res);
4431        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
4432        reply.readException();
4433        data.recycle();
4434        reply.recycle();
4435    }
4436
4437    public IBinder peekService(Intent service, String resolvedType, String callingPackage)
4438            throws RemoteException {
4439        Parcel data = Parcel.obtain();
4440        Parcel reply = Parcel.obtain();
4441        data.writeInterfaceToken(IActivityManager.descriptor);
4442        service.writeToParcel(data, 0);
4443        data.writeString(resolvedType);
4444        data.writeString(callingPackage);
4445        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
4446        reply.readException();
4447        IBinder binder = reply.readStrongBinder();
4448        reply.recycle();
4449        data.recycle();
4450        return binder;
4451    }
4452
4453    public boolean bindBackupAgent(String packageName, int backupRestoreMode, int userId)
4454            throws RemoteException {
4455        Parcel data = Parcel.obtain();
4456        Parcel reply = Parcel.obtain();
4457        data.writeInterfaceToken(IActivityManager.descriptor);
4458        data.writeString(packageName);
4459        data.writeInt(backupRestoreMode);
4460        data.writeInt(userId);
4461        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4462        reply.readException();
4463        boolean success = reply.readInt() != 0;
4464        reply.recycle();
4465        data.recycle();
4466        return success;
4467    }
4468
4469    public void clearPendingBackup() throws RemoteException {
4470        Parcel data = Parcel.obtain();
4471        Parcel reply = Parcel.obtain();
4472        data.writeInterfaceToken(IActivityManager.descriptor);
4473        mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
4474        reply.recycle();
4475        data.recycle();
4476    }
4477
4478    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
4479        Parcel data = Parcel.obtain();
4480        Parcel reply = Parcel.obtain();
4481        data.writeInterfaceToken(IActivityManager.descriptor);
4482        data.writeString(packageName);
4483        data.writeStrongBinder(agent);
4484        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
4485        reply.recycle();
4486        data.recycle();
4487    }
4488
4489    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
4490        Parcel data = Parcel.obtain();
4491        Parcel reply = Parcel.obtain();
4492        data.writeInterfaceToken(IActivityManager.descriptor);
4493        app.writeToParcel(data, 0);
4494        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
4495        reply.readException();
4496        reply.recycle();
4497        data.recycle();
4498    }
4499
4500    public boolean startInstrumentation(ComponentName className, String profileFile,
4501            int flags, Bundle arguments, IInstrumentationWatcher watcher,
4502            IUiAutomationConnection connection, int userId, String instructionSet)
4503            throws RemoteException {
4504        Parcel data = Parcel.obtain();
4505        Parcel reply = Parcel.obtain();
4506        data.writeInterfaceToken(IActivityManager.descriptor);
4507        ComponentName.writeToParcel(className, data);
4508        data.writeString(profileFile);
4509        data.writeInt(flags);
4510        data.writeBundle(arguments);
4511        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4512        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
4513        data.writeInt(userId);
4514        data.writeString(instructionSet);
4515        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4516        reply.readException();
4517        boolean res = reply.readInt() != 0;
4518        reply.recycle();
4519        data.recycle();
4520        return res;
4521    }
4522
4523    public void finishInstrumentation(IApplicationThread target,
4524            int resultCode, Bundle results) throws RemoteException {
4525        Parcel data = Parcel.obtain();
4526        Parcel reply = Parcel.obtain();
4527        data.writeInterfaceToken(IActivityManager.descriptor);
4528        data.writeStrongBinder(target != null ? target.asBinder() : null);
4529        data.writeInt(resultCode);
4530        data.writeBundle(results);
4531        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
4532        reply.readException();
4533        data.recycle();
4534        reply.recycle();
4535    }
4536    public Configuration getConfiguration() throws RemoteException
4537    {
4538        Parcel data = Parcel.obtain();
4539        Parcel reply = Parcel.obtain();
4540        data.writeInterfaceToken(IActivityManager.descriptor);
4541        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
4542        reply.readException();
4543        Configuration res = Configuration.CREATOR.createFromParcel(reply);
4544        reply.recycle();
4545        data.recycle();
4546        return res;
4547    }
4548    public void updateConfiguration(Configuration values) throws RemoteException
4549    {
4550        Parcel data = Parcel.obtain();
4551        Parcel reply = Parcel.obtain();
4552        data.writeInterfaceToken(IActivityManager.descriptor);
4553        values.writeToParcel(data, 0);
4554        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
4555        reply.readException();
4556        data.recycle();
4557        reply.recycle();
4558    }
4559    public void setRequestedOrientation(IBinder token, int requestedOrientation)
4560            throws RemoteException {
4561        Parcel data = Parcel.obtain();
4562        Parcel reply = Parcel.obtain();
4563        data.writeInterfaceToken(IActivityManager.descriptor);
4564        data.writeStrongBinder(token);
4565        data.writeInt(requestedOrientation);
4566        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4567        reply.readException();
4568        data.recycle();
4569        reply.recycle();
4570    }
4571    public int getRequestedOrientation(IBinder token) throws RemoteException {
4572        Parcel data = Parcel.obtain();
4573        Parcel reply = Parcel.obtain();
4574        data.writeInterfaceToken(IActivityManager.descriptor);
4575        data.writeStrongBinder(token);
4576        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
4577        reply.readException();
4578        int res = reply.readInt();
4579        data.recycle();
4580        reply.recycle();
4581        return res;
4582    }
4583    public ComponentName getActivityClassForToken(IBinder token)
4584            throws RemoteException {
4585        Parcel data = Parcel.obtain();
4586        Parcel reply = Parcel.obtain();
4587        data.writeInterfaceToken(IActivityManager.descriptor);
4588        data.writeStrongBinder(token);
4589        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
4590        reply.readException();
4591        ComponentName res = ComponentName.readFromParcel(reply);
4592        data.recycle();
4593        reply.recycle();
4594        return res;
4595    }
4596    public String getPackageForToken(IBinder token) throws RemoteException
4597    {
4598        Parcel data = Parcel.obtain();
4599        Parcel reply = Parcel.obtain();
4600        data.writeInterfaceToken(IActivityManager.descriptor);
4601        data.writeStrongBinder(token);
4602        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
4603        reply.readException();
4604        String res = reply.readString();
4605        data.recycle();
4606        reply.recycle();
4607        return res;
4608    }
4609    public IIntentSender getIntentSender(int type,
4610            String packageName, IBinder token, String resultWho,
4611            int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
4612            Bundle options, int userId) throws RemoteException {
4613        Parcel data = Parcel.obtain();
4614        Parcel reply = Parcel.obtain();
4615        data.writeInterfaceToken(IActivityManager.descriptor);
4616        data.writeInt(type);
4617        data.writeString(packageName);
4618        data.writeStrongBinder(token);
4619        data.writeString(resultWho);
4620        data.writeInt(requestCode);
4621        if (intents != null) {
4622            data.writeInt(1);
4623            data.writeTypedArray(intents, 0);
4624            data.writeStringArray(resolvedTypes);
4625        } else {
4626            data.writeInt(0);
4627        }
4628        data.writeInt(flags);
4629        if (options != null) {
4630            data.writeInt(1);
4631            options.writeToParcel(data, 0);
4632        } else {
4633            data.writeInt(0);
4634        }
4635        data.writeInt(userId);
4636        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
4637        reply.readException();
4638        IIntentSender res = IIntentSender.Stub.asInterface(
4639                reply.readStrongBinder());
4640        data.recycle();
4641        reply.recycle();
4642        return res;
4643    }
4644    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
4645        Parcel data = Parcel.obtain();
4646        Parcel reply = Parcel.obtain();
4647        data.writeInterfaceToken(IActivityManager.descriptor);
4648        data.writeStrongBinder(sender.asBinder());
4649        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
4650        reply.readException();
4651        data.recycle();
4652        reply.recycle();
4653    }
4654    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
4655        Parcel data = Parcel.obtain();
4656        Parcel reply = Parcel.obtain();
4657        data.writeInterfaceToken(IActivityManager.descriptor);
4658        data.writeStrongBinder(sender.asBinder());
4659        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4660        reply.readException();
4661        String res = reply.readString();
4662        data.recycle();
4663        reply.recycle();
4664        return res;
4665    }
4666    public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
4667        Parcel data = Parcel.obtain();
4668        Parcel reply = Parcel.obtain();
4669        data.writeInterfaceToken(IActivityManager.descriptor);
4670        data.writeStrongBinder(sender.asBinder());
4671        mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4672        reply.readException();
4673        int res = reply.readInt();
4674        data.recycle();
4675        reply.recycle();
4676        return res;
4677    }
4678    public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
4679            boolean requireFull, String name, String callerPackage) throws RemoteException {
4680        Parcel data = Parcel.obtain();
4681        Parcel reply = Parcel.obtain();
4682        data.writeInterfaceToken(IActivityManager.descriptor);
4683        data.writeInt(callingPid);
4684        data.writeInt(callingUid);
4685        data.writeInt(userId);
4686        data.writeInt(allowAll ? 1 : 0);
4687        data.writeInt(requireFull ? 1 : 0);
4688        data.writeString(name);
4689        data.writeString(callerPackage);
4690        mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
4691        reply.readException();
4692        int res = reply.readInt();
4693        data.recycle();
4694        reply.recycle();
4695        return res;
4696    }
4697    public void setProcessLimit(int max) throws RemoteException
4698    {
4699        Parcel data = Parcel.obtain();
4700        Parcel reply = Parcel.obtain();
4701        data.writeInterfaceToken(IActivityManager.descriptor);
4702        data.writeInt(max);
4703        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4704        reply.readException();
4705        data.recycle();
4706        reply.recycle();
4707    }
4708    public int getProcessLimit() throws RemoteException
4709    {
4710        Parcel data = Parcel.obtain();
4711        Parcel reply = Parcel.obtain();
4712        data.writeInterfaceToken(IActivityManager.descriptor);
4713        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
4714        reply.readException();
4715        int res = reply.readInt();
4716        data.recycle();
4717        reply.recycle();
4718        return res;
4719    }
4720    public void setProcessForeground(IBinder token, int pid,
4721            boolean isForeground) throws RemoteException {
4722        Parcel data = Parcel.obtain();
4723        Parcel reply = Parcel.obtain();
4724        data.writeInterfaceToken(IActivityManager.descriptor);
4725        data.writeStrongBinder(token);
4726        data.writeInt(pid);
4727        data.writeInt(isForeground ? 1 : 0);
4728        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
4729        reply.readException();
4730        data.recycle();
4731        reply.recycle();
4732    }
4733    public int checkPermission(String permission, int pid, int uid)
4734            throws RemoteException {
4735        Parcel data = Parcel.obtain();
4736        Parcel reply = Parcel.obtain();
4737        data.writeInterfaceToken(IActivityManager.descriptor);
4738        data.writeString(permission);
4739        data.writeInt(pid);
4740        data.writeInt(uid);
4741        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
4742        reply.readException();
4743        int res = reply.readInt();
4744        data.recycle();
4745        reply.recycle();
4746        return res;
4747    }
4748    public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
4749            throws RemoteException {
4750        Parcel data = Parcel.obtain();
4751        Parcel reply = Parcel.obtain();
4752        data.writeInterfaceToken(IActivityManager.descriptor);
4753        data.writeString(permission);
4754        data.writeInt(pid);
4755        data.writeInt(uid);
4756        data.writeStrongBinder(callerToken);
4757        mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
4758        reply.readException();
4759        int res = reply.readInt();
4760        data.recycle();
4761        reply.recycle();
4762        return res;
4763    }
4764    public boolean clearApplicationUserData(final String packageName,
4765            final IPackageDataObserver observer, final int userId) throws RemoteException {
4766        Parcel data = Parcel.obtain();
4767        Parcel reply = Parcel.obtain();
4768        data.writeInterfaceToken(IActivityManager.descriptor);
4769        data.writeString(packageName);
4770        data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
4771        data.writeInt(userId);
4772        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
4773        reply.readException();
4774        boolean res = reply.readInt() != 0;
4775        data.recycle();
4776        reply.recycle();
4777        return res;
4778    }
4779    public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
4780            IBinder callerToken) throws RemoteException {
4781        Parcel data = Parcel.obtain();
4782        Parcel reply = Parcel.obtain();
4783        data.writeInterfaceToken(IActivityManager.descriptor);
4784        uri.writeToParcel(data, 0);
4785        data.writeInt(pid);
4786        data.writeInt(uid);
4787        data.writeInt(mode);
4788        data.writeInt(userId);
4789        data.writeStrongBinder(callerToken);
4790        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
4791        reply.readException();
4792        int res = reply.readInt();
4793        data.recycle();
4794        reply.recycle();
4795        return res;
4796    }
4797    public void grantUriPermission(IApplicationThread caller, String targetPkg,
4798            Uri uri, int mode, int userId) throws RemoteException {
4799        Parcel data = Parcel.obtain();
4800        Parcel reply = Parcel.obtain();
4801        data.writeInterfaceToken(IActivityManager.descriptor);
4802        data.writeStrongBinder(caller.asBinder());
4803        data.writeString(targetPkg);
4804        uri.writeToParcel(data, 0);
4805        data.writeInt(mode);
4806        data.writeInt(userId);
4807        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4808        reply.readException();
4809        data.recycle();
4810        reply.recycle();
4811    }
4812    public void revokeUriPermission(IApplicationThread caller, Uri uri,
4813            int mode, int userId) throws RemoteException {
4814        Parcel data = Parcel.obtain();
4815        Parcel reply = Parcel.obtain();
4816        data.writeInterfaceToken(IActivityManager.descriptor);
4817        data.writeStrongBinder(caller.asBinder());
4818        uri.writeToParcel(data, 0);
4819        data.writeInt(mode);
4820        data.writeInt(userId);
4821        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4822        reply.readException();
4823        data.recycle();
4824        reply.recycle();
4825    }
4826
4827    @Override
4828    public void takePersistableUriPermission(Uri uri, int mode, int userId)
4829            throws RemoteException {
4830        Parcel data = Parcel.obtain();
4831        Parcel reply = Parcel.obtain();
4832        data.writeInterfaceToken(IActivityManager.descriptor);
4833        uri.writeToParcel(data, 0);
4834        data.writeInt(mode);
4835        data.writeInt(userId);
4836        mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4837        reply.readException();
4838        data.recycle();
4839        reply.recycle();
4840    }
4841
4842    @Override
4843    public void releasePersistableUriPermission(Uri uri, int mode, int userId)
4844            throws RemoteException {
4845        Parcel data = Parcel.obtain();
4846        Parcel reply = Parcel.obtain();
4847        data.writeInterfaceToken(IActivityManager.descriptor);
4848        uri.writeToParcel(data, 0);
4849        data.writeInt(mode);
4850        data.writeInt(userId);
4851        mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4852        reply.readException();
4853        data.recycle();
4854        reply.recycle();
4855    }
4856
4857    @Override
4858    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
4859            String packageName, boolean incoming) throws RemoteException {
4860        Parcel data = Parcel.obtain();
4861        Parcel reply = Parcel.obtain();
4862        data.writeInterfaceToken(IActivityManager.descriptor);
4863        data.writeString(packageName);
4864        data.writeInt(incoming ? 1 : 0);
4865        mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4866        reply.readException();
4867        @SuppressWarnings("unchecked")
4868        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4869                reply);
4870        data.recycle();
4871        reply.recycle();
4872        return perms;
4873    }
4874
4875    @Override
4876    public ParceledListSlice<UriPermission> getGrantedUriPermissions(String packageName, int userId)
4877            throws RemoteException {
4878        Parcel data = Parcel.obtain();
4879        Parcel reply = Parcel.obtain();
4880        data.writeInterfaceToken(IActivityManager.descriptor);
4881        data.writeString(packageName);
4882        data.writeInt(userId);
4883        mRemote.transact(GET_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4884        reply.readException();
4885        @SuppressWarnings("unchecked")
4886        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
4887                reply);
4888        data.recycle();
4889        reply.recycle();
4890        return perms;
4891    }
4892
4893    @Override
4894    public void clearGrantedUriPermissions(String packageName, int userId) throws RemoteException {
4895        Parcel data = Parcel.obtain();
4896        Parcel reply = Parcel.obtain();
4897        data.writeInterfaceToken(IActivityManager.descriptor);
4898        data.writeString(packageName);
4899        data.writeInt(userId);
4900        mRemote.transact(CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
4901        reply.readException();
4902        data.recycle();
4903        reply.recycle();
4904    }
4905
4906    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
4907            throws RemoteException {
4908        Parcel data = Parcel.obtain();
4909        Parcel reply = Parcel.obtain();
4910        data.writeInterfaceToken(IActivityManager.descriptor);
4911        data.writeStrongBinder(who.asBinder());
4912        data.writeInt(waiting ? 1 : 0);
4913        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
4914        reply.readException();
4915        data.recycle();
4916        reply.recycle();
4917    }
4918    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
4919        Parcel data = Parcel.obtain();
4920        Parcel reply = Parcel.obtain();
4921        data.writeInterfaceToken(IActivityManager.descriptor);
4922        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
4923        reply.readException();
4924        outInfo.readFromParcel(reply);
4925        data.recycle();
4926        reply.recycle();
4927    }
4928    public void unhandledBack() throws RemoteException
4929    {
4930        Parcel data = Parcel.obtain();
4931        Parcel reply = Parcel.obtain();
4932        data.writeInterfaceToken(IActivityManager.descriptor);
4933        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
4934        reply.readException();
4935        data.recycle();
4936        reply.recycle();
4937    }
4938    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
4939    {
4940        Parcel data = Parcel.obtain();
4941        Parcel reply = Parcel.obtain();
4942        data.writeInterfaceToken(IActivityManager.descriptor);
4943        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
4944        reply.readException();
4945        ParcelFileDescriptor pfd = null;
4946        if (reply.readInt() != 0) {
4947            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
4948        }
4949        data.recycle();
4950        reply.recycle();
4951        return pfd;
4952    }
4953    public void setLockScreenShown(boolean showing, boolean occluded) throws RemoteException
4954    {
4955        Parcel data = Parcel.obtain();
4956        Parcel reply = Parcel.obtain();
4957        data.writeInterfaceToken(IActivityManager.descriptor);
4958        data.writeInt(showing ? 1 : 0);
4959        data.writeInt(occluded ? 1 : 0);
4960        mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
4961        reply.readException();
4962        data.recycle();
4963        reply.recycle();
4964    }
4965    public void setDebugApp(
4966        String packageName, boolean waitForDebugger, boolean persistent)
4967        throws RemoteException
4968    {
4969        Parcel data = Parcel.obtain();
4970        Parcel reply = Parcel.obtain();
4971        data.writeInterfaceToken(IActivityManager.descriptor);
4972        data.writeString(packageName);
4973        data.writeInt(waitForDebugger ? 1 : 0);
4974        data.writeInt(persistent ? 1 : 0);
4975        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
4976        reply.readException();
4977        data.recycle();
4978        reply.recycle();
4979    }
4980    public void setAlwaysFinish(boolean enabled) throws RemoteException
4981    {
4982        Parcel data = Parcel.obtain();
4983        Parcel reply = Parcel.obtain();
4984        data.writeInterfaceToken(IActivityManager.descriptor);
4985        data.writeInt(enabled ? 1 : 0);
4986        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
4987        reply.readException();
4988        data.recycle();
4989        reply.recycle();
4990    }
4991    public void setActivityController(IActivityController watcher, boolean imAMonkey)
4992            throws RemoteException
4993    {
4994        Parcel data = Parcel.obtain();
4995        Parcel reply = Parcel.obtain();
4996        data.writeInterfaceToken(IActivityManager.descriptor);
4997        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4998        data.writeInt(imAMonkey ? 1 : 0);
4999        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
5000        reply.readException();
5001        data.recycle();
5002        reply.recycle();
5003    }
5004    public void setLenientBackgroundCheck(boolean enabled) throws RemoteException
5005    {
5006        Parcel data = Parcel.obtain();
5007        Parcel reply = Parcel.obtain();
5008        data.writeInterfaceToken(IActivityManager.descriptor);
5009        data.writeInt(enabled ? 1 : 0);
5010        mRemote.transact(SET_LENIENT_BACKGROUND_CHECK_TRANSACTION, data, reply, 0);
5011        reply.readException();
5012        data.recycle();
5013        reply.recycle();
5014    }
5015    public int getMemoryTrimLevel() throws RemoteException
5016    {
5017        Parcel data = Parcel.obtain();
5018        Parcel reply = Parcel.obtain();
5019        data.writeInterfaceToken(IActivityManager.descriptor);
5020        mRemote.transact(GET_MEMORY_TRIM_LEVEL_TRANSACTION, data, reply, 0);
5021        reply.readException();
5022        int level = reply.readInt();
5023        data.recycle();
5024        reply.recycle();
5025        return level;
5026    }
5027    public void enterSafeMode() throws RemoteException {
5028        Parcel data = Parcel.obtain();
5029        data.writeInterfaceToken(IActivityManager.descriptor);
5030        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
5031        data.recycle();
5032    }
5033    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag)
5034            throws RemoteException {
5035        Parcel data = Parcel.obtain();
5036        data.writeInterfaceToken(IActivityManager.descriptor);
5037        data.writeStrongBinder(sender.asBinder());
5038        data.writeInt(sourceUid);
5039        data.writeString(sourcePkg);
5040        data.writeString(tag);
5041        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
5042        data.recycle();
5043    }
5044    public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag)
5045            throws RemoteException {
5046        Parcel data = Parcel.obtain();
5047        data.writeInterfaceToken(IActivityManager.descriptor);
5048        data.writeStrongBinder(sender.asBinder());
5049        data.writeInt(sourceUid);
5050        data.writeString(tag);
5051        mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0);
5052        data.recycle();
5053    }
5054    public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag)
5055            throws RemoteException {
5056        Parcel data = Parcel.obtain();
5057        data.writeInterfaceToken(IActivityManager.descriptor);
5058        data.writeStrongBinder(sender.asBinder());
5059        data.writeInt(sourceUid);
5060        data.writeString(tag);
5061        mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0);
5062        data.recycle();
5063    }
5064    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
5065        Parcel data = Parcel.obtain();
5066        Parcel reply = Parcel.obtain();
5067        data.writeInterfaceToken(IActivityManager.descriptor);
5068        data.writeIntArray(pids);
5069        data.writeString(reason);
5070        data.writeInt(secure ? 1 : 0);
5071        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
5072        reply.readException();
5073        boolean res = reply.readInt() != 0;
5074        data.recycle();
5075        reply.recycle();
5076        return res;
5077    }
5078    @Override
5079    public boolean killProcessesBelowForeground(String reason) throws RemoteException {
5080        Parcel data = Parcel.obtain();
5081        Parcel reply = Parcel.obtain();
5082        data.writeInterfaceToken(IActivityManager.descriptor);
5083        data.writeString(reason);
5084        mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
5085        boolean res = reply.readInt() != 0;
5086        data.recycle();
5087        reply.recycle();
5088        return res;
5089    }
5090    public boolean testIsSystemReady()
5091    {
5092        /* this base class version is never called */
5093        return true;
5094    }
5095    public void handleApplicationCrash(IBinder app,
5096            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5097    {
5098        Parcel data = Parcel.obtain();
5099        Parcel reply = Parcel.obtain();
5100        data.writeInterfaceToken(IActivityManager.descriptor);
5101        data.writeStrongBinder(app);
5102        crashInfo.writeToParcel(data, 0);
5103        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
5104        reply.readException();
5105        reply.recycle();
5106        data.recycle();
5107    }
5108
5109    public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
5110            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
5111    {
5112        Parcel data = Parcel.obtain();
5113        Parcel reply = Parcel.obtain();
5114        data.writeInterfaceToken(IActivityManager.descriptor);
5115        data.writeStrongBinder(app);
5116        data.writeString(tag);
5117        data.writeInt(system ? 1 : 0);
5118        crashInfo.writeToParcel(data, 0);
5119        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
5120        reply.readException();
5121        boolean res = reply.readInt() != 0;
5122        reply.recycle();
5123        data.recycle();
5124        return res;
5125    }
5126
5127    public void handleApplicationStrictModeViolation(IBinder app,
5128            int violationMask,
5129            StrictMode.ViolationInfo info) throws RemoteException
5130    {
5131        Parcel data = Parcel.obtain();
5132        Parcel reply = Parcel.obtain();
5133        data.writeInterfaceToken(IActivityManager.descriptor);
5134        data.writeStrongBinder(app);
5135        data.writeInt(violationMask);
5136        info.writeToParcel(data, 0);
5137        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
5138        reply.readException();
5139        reply.recycle();
5140        data.recycle();
5141    }
5142
5143    public void signalPersistentProcesses(int sig) throws RemoteException {
5144        Parcel data = Parcel.obtain();
5145        Parcel reply = Parcel.obtain();
5146        data.writeInterfaceToken(IActivityManager.descriptor);
5147        data.writeInt(sig);
5148        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
5149        reply.readException();
5150        data.recycle();
5151        reply.recycle();
5152    }
5153
5154    public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
5155        Parcel data = Parcel.obtain();
5156        Parcel reply = Parcel.obtain();
5157        data.writeInterfaceToken(IActivityManager.descriptor);
5158        data.writeString(packageName);
5159        data.writeInt(userId);
5160        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5161        reply.readException();
5162        data.recycle();
5163        reply.recycle();
5164    }
5165
5166    public void killAllBackgroundProcesses() throws RemoteException {
5167        Parcel data = Parcel.obtain();
5168        Parcel reply = Parcel.obtain();
5169        data.writeInterfaceToken(IActivityManager.descriptor);
5170        mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
5171        reply.readException();
5172        data.recycle();
5173        reply.recycle();
5174    }
5175
5176    public void killPackageDependents(String packageName, int userId) throws RemoteException {
5177        Parcel data = Parcel.obtain();
5178        Parcel reply = Parcel.obtain();
5179        data.writeInterfaceToken(IActivityManager.descriptor);
5180        data.writeString(packageName);
5181        data.writeInt(userId);
5182        mRemote.transact(KILL_PACKAGE_DEPENDENTS_TRANSACTION, data, reply, 0);
5183        reply.readException();
5184        data.recycle();
5185        reply.recycle();
5186    }
5187
5188    public void forceStopPackage(String packageName, int userId) throws RemoteException {
5189        Parcel data = Parcel.obtain();
5190        Parcel reply = Parcel.obtain();
5191        data.writeInterfaceToken(IActivityManager.descriptor);
5192        data.writeString(packageName);
5193        data.writeInt(userId);
5194        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
5195        reply.readException();
5196        data.recycle();
5197        reply.recycle();
5198    }
5199
5200    public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
5201            throws RemoteException
5202    {
5203        Parcel data = Parcel.obtain();
5204        Parcel reply = Parcel.obtain();
5205        data.writeInterfaceToken(IActivityManager.descriptor);
5206        mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
5207        reply.readException();
5208        outInfo.readFromParcel(reply);
5209        reply.recycle();
5210        data.recycle();
5211    }
5212
5213    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
5214    {
5215        Parcel data = Parcel.obtain();
5216        Parcel reply = Parcel.obtain();
5217        data.writeInterfaceToken(IActivityManager.descriptor);
5218        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
5219        reply.readException();
5220        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
5221        reply.recycle();
5222        data.recycle();
5223        return res;
5224    }
5225
5226    public boolean profileControl(String process, int userId, boolean start,
5227            ProfilerInfo profilerInfo, int profileType) throws RemoteException
5228    {
5229        Parcel data = Parcel.obtain();
5230        Parcel reply = Parcel.obtain();
5231        data.writeInterfaceToken(IActivityManager.descriptor);
5232        data.writeString(process);
5233        data.writeInt(userId);
5234        data.writeInt(start ? 1 : 0);
5235        data.writeInt(profileType);
5236        if (profilerInfo != null) {
5237            data.writeInt(1);
5238            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5239        } else {
5240            data.writeInt(0);
5241        }
5242        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
5243        reply.readException();
5244        boolean res = reply.readInt() != 0;
5245        reply.recycle();
5246        data.recycle();
5247        return res;
5248    }
5249
5250    public boolean shutdown(int timeout) throws RemoteException
5251    {
5252        Parcel data = Parcel.obtain();
5253        Parcel reply = Parcel.obtain();
5254        data.writeInterfaceToken(IActivityManager.descriptor);
5255        data.writeInt(timeout);
5256        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
5257        reply.readException();
5258        boolean res = reply.readInt() != 0;
5259        reply.recycle();
5260        data.recycle();
5261        return res;
5262    }
5263
5264    public void stopAppSwitches() throws RemoteException {
5265        Parcel data = Parcel.obtain();
5266        Parcel reply = Parcel.obtain();
5267        data.writeInterfaceToken(IActivityManager.descriptor);
5268        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
5269        reply.readException();
5270        reply.recycle();
5271        data.recycle();
5272    }
5273
5274    public void resumeAppSwitches() throws RemoteException {
5275        Parcel data = Parcel.obtain();
5276        Parcel reply = Parcel.obtain();
5277        data.writeInterfaceToken(IActivityManager.descriptor);
5278        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
5279        reply.readException();
5280        reply.recycle();
5281        data.recycle();
5282    }
5283
5284    public void addPackageDependency(String packageName) throws RemoteException {
5285        Parcel data = Parcel.obtain();
5286        Parcel reply = Parcel.obtain();
5287        data.writeInterfaceToken(IActivityManager.descriptor);
5288        data.writeString(packageName);
5289        mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
5290        reply.readException();
5291        data.recycle();
5292        reply.recycle();
5293    }
5294
5295    public void killApplication(String pkg, int appId, int userId, String reason)
5296            throws RemoteException {
5297        Parcel data = Parcel.obtain();
5298        Parcel reply = Parcel.obtain();
5299        data.writeInterfaceToken(IActivityManager.descriptor);
5300        data.writeString(pkg);
5301        data.writeInt(appId);
5302        data.writeInt(userId);
5303        data.writeString(reason);
5304        mRemote.transact(KILL_APPLICATION_TRANSACTION, data, reply, 0);
5305        reply.readException();
5306        data.recycle();
5307        reply.recycle();
5308    }
5309
5310    public void closeSystemDialogs(String reason) throws RemoteException {
5311        Parcel data = Parcel.obtain();
5312        Parcel reply = Parcel.obtain();
5313        data.writeInterfaceToken(IActivityManager.descriptor);
5314        data.writeString(reason);
5315        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
5316        reply.readException();
5317        data.recycle();
5318        reply.recycle();
5319    }
5320
5321    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
5322            throws RemoteException {
5323        Parcel data = Parcel.obtain();
5324        Parcel reply = Parcel.obtain();
5325        data.writeInterfaceToken(IActivityManager.descriptor);
5326        data.writeIntArray(pids);
5327        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
5328        reply.readException();
5329        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
5330        data.recycle();
5331        reply.recycle();
5332        return res;
5333    }
5334
5335    public void killApplicationProcess(String processName, int uid) throws RemoteException {
5336        Parcel data = Parcel.obtain();
5337        Parcel reply = Parcel.obtain();
5338        data.writeInterfaceToken(IActivityManager.descriptor);
5339        data.writeString(processName);
5340        data.writeInt(uid);
5341        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
5342        reply.readException();
5343        data.recycle();
5344        reply.recycle();
5345    }
5346
5347    public void overridePendingTransition(IBinder token, String packageName,
5348            int enterAnim, int exitAnim) throws RemoteException {
5349        Parcel data = Parcel.obtain();
5350        Parcel reply = Parcel.obtain();
5351        data.writeInterfaceToken(IActivityManager.descriptor);
5352        data.writeStrongBinder(token);
5353        data.writeString(packageName);
5354        data.writeInt(enterAnim);
5355        data.writeInt(exitAnim);
5356        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
5357        reply.readException();
5358        data.recycle();
5359        reply.recycle();
5360    }
5361
5362    public boolean isUserAMonkey() throws RemoteException {
5363        Parcel data = Parcel.obtain();
5364        Parcel reply = Parcel.obtain();
5365        data.writeInterfaceToken(IActivityManager.descriptor);
5366        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
5367        reply.readException();
5368        boolean res = reply.readInt() != 0;
5369        data.recycle();
5370        reply.recycle();
5371        return res;
5372    }
5373
5374    public void setUserIsMonkey(boolean monkey) throws RemoteException {
5375        Parcel data = Parcel.obtain();
5376        Parcel reply = Parcel.obtain();
5377        data.writeInterfaceToken(IActivityManager.descriptor);
5378        data.writeInt(monkey ? 1 : 0);
5379        mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
5380        reply.readException();
5381        data.recycle();
5382        reply.recycle();
5383    }
5384
5385    public void finishHeavyWeightApp() throws RemoteException {
5386        Parcel data = Parcel.obtain();
5387        Parcel reply = Parcel.obtain();
5388        data.writeInterfaceToken(IActivityManager.descriptor);
5389        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
5390        reply.readException();
5391        data.recycle();
5392        reply.recycle();
5393    }
5394
5395    public boolean convertFromTranslucent(IBinder token)
5396            throws RemoteException {
5397        Parcel data = Parcel.obtain();
5398        Parcel reply = Parcel.obtain();
5399        data.writeInterfaceToken(IActivityManager.descriptor);
5400        data.writeStrongBinder(token);
5401        mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
5402        reply.readException();
5403        boolean res = reply.readInt() != 0;
5404        data.recycle();
5405        reply.recycle();
5406        return res;
5407    }
5408
5409    public boolean convertToTranslucent(IBinder token, ActivityOptions options)
5410            throws RemoteException {
5411        Parcel data = Parcel.obtain();
5412        Parcel reply = Parcel.obtain();
5413        data.writeInterfaceToken(IActivityManager.descriptor);
5414        data.writeStrongBinder(token);
5415        if (options == null) {
5416            data.writeInt(0);
5417        } else {
5418            data.writeInt(1);
5419            data.writeBundle(options.toBundle());
5420        }
5421        mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
5422        reply.readException();
5423        boolean res = reply.readInt() != 0;
5424        data.recycle();
5425        reply.recycle();
5426        return res;
5427    }
5428
5429    public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
5430        Parcel data = Parcel.obtain();
5431        Parcel reply = Parcel.obtain();
5432        data.writeInterfaceToken(IActivityManager.descriptor);
5433        data.writeStrongBinder(token);
5434        mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
5435        reply.readException();
5436        ActivityOptions options = ActivityOptions.fromBundle(reply.readBundle());
5437        data.recycle();
5438        reply.recycle();
5439        return options;
5440    }
5441
5442    public void setImmersive(IBinder token, boolean immersive)
5443            throws RemoteException {
5444        Parcel data = Parcel.obtain();
5445        Parcel reply = Parcel.obtain();
5446        data.writeInterfaceToken(IActivityManager.descriptor);
5447        data.writeStrongBinder(token);
5448        data.writeInt(immersive ? 1 : 0);
5449        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
5450        reply.readException();
5451        data.recycle();
5452        reply.recycle();
5453    }
5454
5455    public boolean isImmersive(IBinder token)
5456            throws RemoteException {
5457        Parcel data = Parcel.obtain();
5458        Parcel reply = Parcel.obtain();
5459        data.writeInterfaceToken(IActivityManager.descriptor);
5460        data.writeStrongBinder(token);
5461        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
5462        reply.readException();
5463        boolean res = reply.readInt() == 1;
5464        data.recycle();
5465        reply.recycle();
5466        return res;
5467    }
5468
5469    public boolean isTopOfTask(IBinder token) throws RemoteException {
5470        Parcel data = Parcel.obtain();
5471        Parcel reply = Parcel.obtain();
5472        data.writeInterfaceToken(IActivityManager.descriptor);
5473        data.writeStrongBinder(token);
5474        mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
5475        reply.readException();
5476        boolean res = reply.readInt() == 1;
5477        data.recycle();
5478        reply.recycle();
5479        return res;
5480    }
5481
5482    public boolean isTopActivityImmersive()
5483            throws RemoteException {
5484        Parcel data = Parcel.obtain();
5485        Parcel reply = Parcel.obtain();
5486        data.writeInterfaceToken(IActivityManager.descriptor);
5487        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
5488        reply.readException();
5489        boolean res = reply.readInt() == 1;
5490        data.recycle();
5491        reply.recycle();
5492        return res;
5493    }
5494
5495    public void crashApplication(int uid, int initialPid, String packageName,
5496            String message) throws RemoteException {
5497        Parcel data = Parcel.obtain();
5498        Parcel reply = Parcel.obtain();
5499        data.writeInterfaceToken(IActivityManager.descriptor);
5500        data.writeInt(uid);
5501        data.writeInt(initialPid);
5502        data.writeString(packageName);
5503        data.writeString(message);
5504        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
5505        reply.readException();
5506        data.recycle();
5507        reply.recycle();
5508    }
5509
5510    public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
5511        Parcel data = Parcel.obtain();
5512        Parcel reply = Parcel.obtain();
5513        data.writeInterfaceToken(IActivityManager.descriptor);
5514        uri.writeToParcel(data, 0);
5515        data.writeInt(userId);
5516        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
5517        reply.readException();
5518        String res = reply.readString();
5519        data.recycle();
5520        reply.recycle();
5521        return res;
5522    }
5523
5524    public IBinder newUriPermissionOwner(String name)
5525            throws RemoteException {
5526        Parcel data = Parcel.obtain();
5527        Parcel reply = Parcel.obtain();
5528        data.writeInterfaceToken(IActivityManager.descriptor);
5529        data.writeString(name);
5530        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
5531        reply.readException();
5532        IBinder res = reply.readStrongBinder();
5533        data.recycle();
5534        reply.recycle();
5535        return res;
5536    }
5537
5538    public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
5539        Parcel data = Parcel.obtain();
5540        Parcel reply = Parcel.obtain();
5541        data.writeInterfaceToken(IActivityManager.descriptor);
5542        data.writeStrongBinder(activityToken);
5543        mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
5544        reply.readException();
5545        IBinder res = reply.readStrongBinder();
5546        data.recycle();
5547        reply.recycle();
5548        return res;
5549    }
5550
5551    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
5552            Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
5553        Parcel data = Parcel.obtain();
5554        Parcel reply = Parcel.obtain();
5555        data.writeInterfaceToken(IActivityManager.descriptor);
5556        data.writeStrongBinder(owner);
5557        data.writeInt(fromUid);
5558        data.writeString(targetPkg);
5559        uri.writeToParcel(data, 0);
5560        data.writeInt(mode);
5561        data.writeInt(sourceUserId);
5562        data.writeInt(targetUserId);
5563        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5564        reply.readException();
5565        data.recycle();
5566        reply.recycle();
5567    }
5568
5569    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
5570            int mode, int userId) throws RemoteException {
5571        Parcel data = Parcel.obtain();
5572        Parcel reply = Parcel.obtain();
5573        data.writeInterfaceToken(IActivityManager.descriptor);
5574        data.writeStrongBinder(owner);
5575        if (uri != null) {
5576            data.writeInt(1);
5577            uri.writeToParcel(data, 0);
5578        } else {
5579            data.writeInt(0);
5580        }
5581        data.writeInt(mode);
5582        data.writeInt(userId);
5583        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
5584        reply.readException();
5585        data.recycle();
5586        reply.recycle();
5587    }
5588
5589    public int checkGrantUriPermission(int callingUid, String targetPkg,
5590            Uri uri, int modeFlags, int userId) throws RemoteException {
5591        Parcel data = Parcel.obtain();
5592        Parcel reply = Parcel.obtain();
5593        data.writeInterfaceToken(IActivityManager.descriptor);
5594        data.writeInt(callingUid);
5595        data.writeString(targetPkg);
5596        uri.writeToParcel(data, 0);
5597        data.writeInt(modeFlags);
5598        data.writeInt(userId);
5599        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
5600        reply.readException();
5601        int res = reply.readInt();
5602        data.recycle();
5603        reply.recycle();
5604        return res;
5605    }
5606
5607    public boolean dumpHeap(String process, int userId, boolean managed,
5608            String path, ParcelFileDescriptor fd) throws RemoteException {
5609        Parcel data = Parcel.obtain();
5610        Parcel reply = Parcel.obtain();
5611        data.writeInterfaceToken(IActivityManager.descriptor);
5612        data.writeString(process);
5613        data.writeInt(userId);
5614        data.writeInt(managed ? 1 : 0);
5615        data.writeString(path);
5616        if (fd != null) {
5617            data.writeInt(1);
5618            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5619        } else {
5620            data.writeInt(0);
5621        }
5622        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
5623        reply.readException();
5624        boolean res = reply.readInt() != 0;
5625        reply.recycle();
5626        data.recycle();
5627        return res;
5628    }
5629
5630    public int startActivities(IApplicationThread caller, String callingPackage,
5631            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
5632            Bundle options, int userId) throws RemoteException {
5633        Parcel data = Parcel.obtain();
5634        Parcel reply = Parcel.obtain();
5635        data.writeInterfaceToken(IActivityManager.descriptor);
5636        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
5637        data.writeString(callingPackage);
5638        data.writeTypedArray(intents, 0);
5639        data.writeStringArray(resolvedTypes);
5640        data.writeStrongBinder(resultTo);
5641        if (options != null) {
5642            data.writeInt(1);
5643            options.writeToParcel(data, 0);
5644        } else {
5645            data.writeInt(0);
5646        }
5647        data.writeInt(userId);
5648        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
5649        reply.readException();
5650        int result = reply.readInt();
5651        reply.recycle();
5652        data.recycle();
5653        return result;
5654    }
5655
5656    public int getFrontActivityScreenCompatMode() throws RemoteException {
5657        Parcel data = Parcel.obtain();
5658        Parcel reply = Parcel.obtain();
5659        data.writeInterfaceToken(IActivityManager.descriptor);
5660        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5661        reply.readException();
5662        int mode = reply.readInt();
5663        reply.recycle();
5664        data.recycle();
5665        return mode;
5666    }
5667
5668    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
5669        Parcel data = Parcel.obtain();
5670        Parcel reply = Parcel.obtain();
5671        data.writeInterfaceToken(IActivityManager.descriptor);
5672        data.writeInt(mode);
5673        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5674        reply.readException();
5675        reply.recycle();
5676        data.recycle();
5677    }
5678
5679    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
5680        Parcel data = Parcel.obtain();
5681        Parcel reply = Parcel.obtain();
5682        data.writeInterfaceToken(IActivityManager.descriptor);
5683        data.writeString(packageName);
5684        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5685        reply.readException();
5686        int mode = reply.readInt();
5687        reply.recycle();
5688        data.recycle();
5689        return mode;
5690    }
5691
5692    public void setPackageScreenCompatMode(String packageName, int mode)
5693            throws RemoteException {
5694        Parcel data = Parcel.obtain();
5695        Parcel reply = Parcel.obtain();
5696        data.writeInterfaceToken(IActivityManager.descriptor);
5697        data.writeString(packageName);
5698        data.writeInt(mode);
5699        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
5700        reply.readException();
5701        reply.recycle();
5702        data.recycle();
5703    }
5704
5705    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
5706        Parcel data = Parcel.obtain();
5707        Parcel reply = Parcel.obtain();
5708        data.writeInterfaceToken(IActivityManager.descriptor);
5709        data.writeString(packageName);
5710        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5711        reply.readException();
5712        boolean ask = reply.readInt() != 0;
5713        reply.recycle();
5714        data.recycle();
5715        return ask;
5716    }
5717
5718    public void setPackageAskScreenCompat(String packageName, boolean ask)
5719            throws RemoteException {
5720        Parcel data = Parcel.obtain();
5721        Parcel reply = Parcel.obtain();
5722        data.writeInterfaceToken(IActivityManager.descriptor);
5723        data.writeString(packageName);
5724        data.writeInt(ask ? 1 : 0);
5725        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
5726        reply.readException();
5727        reply.recycle();
5728        data.recycle();
5729    }
5730
5731    public boolean switchUser(int userid) throws RemoteException {
5732        Parcel data = Parcel.obtain();
5733        Parcel reply = Parcel.obtain();
5734        data.writeInterfaceToken(IActivityManager.descriptor);
5735        data.writeInt(userid);
5736        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
5737        reply.readException();
5738        boolean result = reply.readInt() != 0;
5739        reply.recycle();
5740        data.recycle();
5741        return result;
5742    }
5743
5744    public boolean startUserInBackground(int userid) throws RemoteException {
5745        Parcel data = Parcel.obtain();
5746        Parcel reply = Parcel.obtain();
5747        data.writeInterfaceToken(IActivityManager.descriptor);
5748        data.writeInt(userid);
5749        mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
5750        reply.readException();
5751        boolean result = reply.readInt() != 0;
5752        reply.recycle();
5753        data.recycle();
5754        return result;
5755    }
5756
5757    public boolean unlockUser(int userId, byte[] token, byte[] secret, IProgressListener listener)
5758            throws RemoteException {
5759        Parcel data = Parcel.obtain();
5760        Parcel reply = Parcel.obtain();
5761        data.writeInterfaceToken(IActivityManager.descriptor);
5762        data.writeInt(userId);
5763        data.writeByteArray(token);
5764        data.writeByteArray(secret);
5765        data.writeStrongInterface(listener);
5766        mRemote.transact(IActivityManager.UNLOCK_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 int stopUser(int userid, boolean force, IStopUserCallback callback)
5775            throws RemoteException {
5776        Parcel data = Parcel.obtain();
5777        Parcel reply = Parcel.obtain();
5778        data.writeInterfaceToken(IActivityManager.descriptor);
5779        data.writeInt(userid);
5780        data.writeInt(force ? 1 : 0);
5781        data.writeStrongInterface(callback);
5782        mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
5783        reply.readException();
5784        int result = reply.readInt();
5785        reply.recycle();
5786        data.recycle();
5787        return result;
5788    }
5789
5790    public UserInfo getCurrentUser() throws RemoteException {
5791        Parcel data = Parcel.obtain();
5792        Parcel reply = Parcel.obtain();
5793        data.writeInterfaceToken(IActivityManager.descriptor);
5794        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
5795        reply.readException();
5796        UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
5797        reply.recycle();
5798        data.recycle();
5799        return userInfo;
5800    }
5801
5802    public boolean isUserRunning(int userid, int flags) throws RemoteException {
5803        Parcel data = Parcel.obtain();
5804        Parcel reply = Parcel.obtain();
5805        data.writeInterfaceToken(IActivityManager.descriptor);
5806        data.writeInt(userid);
5807        data.writeInt(flags);
5808        mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
5809        reply.readException();
5810        boolean result = reply.readInt() != 0;
5811        reply.recycle();
5812        data.recycle();
5813        return result;
5814    }
5815
5816    public int[] getRunningUserIds() throws RemoteException {
5817        Parcel data = Parcel.obtain();
5818        Parcel reply = Parcel.obtain();
5819        data.writeInterfaceToken(IActivityManager.descriptor);
5820        mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
5821        reply.readException();
5822        int[] result = reply.createIntArray();
5823        reply.recycle();
5824        data.recycle();
5825        return result;
5826    }
5827
5828    public boolean removeTask(int taskId) throws RemoteException {
5829        Parcel data = Parcel.obtain();
5830        Parcel reply = Parcel.obtain();
5831        data.writeInterfaceToken(IActivityManager.descriptor);
5832        data.writeInt(taskId);
5833        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
5834        reply.readException();
5835        boolean result = reply.readInt() != 0;
5836        reply.recycle();
5837        data.recycle();
5838        return result;
5839    }
5840
5841    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
5842        Parcel data = Parcel.obtain();
5843        Parcel reply = Parcel.obtain();
5844        data.writeInterfaceToken(IActivityManager.descriptor);
5845        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5846        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5847        reply.readException();
5848        data.recycle();
5849        reply.recycle();
5850    }
5851
5852    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
5853        Parcel data = Parcel.obtain();
5854        Parcel reply = Parcel.obtain();
5855        data.writeInterfaceToken(IActivityManager.descriptor);
5856        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5857        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
5858        reply.readException();
5859        data.recycle();
5860        reply.recycle();
5861    }
5862
5863    public void registerUidObserver(IUidObserver observer, int which) throws RemoteException {
5864        Parcel data = Parcel.obtain();
5865        Parcel reply = Parcel.obtain();
5866        data.writeInterfaceToken(IActivityManager.descriptor);
5867        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5868        data.writeInt(which);
5869        mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5870        reply.readException();
5871        data.recycle();
5872        reply.recycle();
5873    }
5874
5875    public void unregisterUidObserver(IUidObserver observer) throws RemoteException {
5876        Parcel data = Parcel.obtain();
5877        Parcel reply = Parcel.obtain();
5878        data.writeInterfaceToken(IActivityManager.descriptor);
5879        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5880        mRemote.transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
5881        reply.readException();
5882        data.recycle();
5883        reply.recycle();
5884    }
5885
5886    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
5887        Parcel data = Parcel.obtain();
5888        Parcel reply = Parcel.obtain();
5889        data.writeInterfaceToken(IActivityManager.descriptor);
5890        data.writeStrongBinder(sender.asBinder());
5891        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
5892        reply.readException();
5893        boolean res = reply.readInt() != 0;
5894        data.recycle();
5895        reply.recycle();
5896        return res;
5897    }
5898
5899    public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
5900        Parcel data = Parcel.obtain();
5901        Parcel reply = Parcel.obtain();
5902        data.writeInterfaceToken(IActivityManager.descriptor);
5903        data.writeStrongBinder(sender.asBinder());
5904        mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
5905        reply.readException();
5906        boolean res = reply.readInt() != 0;
5907        data.recycle();
5908        reply.recycle();
5909        return res;
5910    }
5911
5912    public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
5913        Parcel data = Parcel.obtain();
5914        Parcel reply = Parcel.obtain();
5915        data.writeInterfaceToken(IActivityManager.descriptor);
5916        data.writeStrongBinder(sender.asBinder());
5917        mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5918        reply.readException();
5919        Intent res = reply.readInt() != 0
5920                ? Intent.CREATOR.createFromParcel(reply) : null;
5921        data.recycle();
5922        reply.recycle();
5923        return res;
5924    }
5925
5926    public String getTagForIntentSender(IIntentSender sender, String prefix)
5927            throws RemoteException {
5928        Parcel data = Parcel.obtain();
5929        Parcel reply = Parcel.obtain();
5930        data.writeInterfaceToken(IActivityManager.descriptor);
5931        data.writeStrongBinder(sender.asBinder());
5932        data.writeString(prefix);
5933        mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
5934        reply.readException();
5935        String res = reply.readString();
5936        data.recycle();
5937        reply.recycle();
5938        return res;
5939    }
5940
5941    public void updatePersistentConfiguration(Configuration values) throws RemoteException
5942    {
5943        Parcel data = Parcel.obtain();
5944        Parcel reply = Parcel.obtain();
5945        data.writeInterfaceToken(IActivityManager.descriptor);
5946        values.writeToParcel(data, 0);
5947        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
5948        reply.readException();
5949        data.recycle();
5950        reply.recycle();
5951    }
5952
5953    public long[] getProcessPss(int[] pids) throws RemoteException {
5954        Parcel data = Parcel.obtain();
5955        Parcel reply = Parcel.obtain();
5956        data.writeInterfaceToken(IActivityManager.descriptor);
5957        data.writeIntArray(pids);
5958        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
5959        reply.readException();
5960        long[] res = reply.createLongArray();
5961        data.recycle();
5962        reply.recycle();
5963        return res;
5964    }
5965
5966    public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
5967        Parcel data = Parcel.obtain();
5968        Parcel reply = Parcel.obtain();
5969        data.writeInterfaceToken(IActivityManager.descriptor);
5970        TextUtils.writeToParcel(msg, data, 0);
5971        data.writeInt(always ? 1 : 0);
5972        mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
5973        reply.readException();
5974        data.recycle();
5975        reply.recycle();
5976    }
5977
5978    public void keyguardWaitingForActivityDrawn() throws RemoteException {
5979        Parcel data = Parcel.obtain();
5980        Parcel reply = Parcel.obtain();
5981        data.writeInterfaceToken(IActivityManager.descriptor);
5982        mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
5983        reply.readException();
5984        data.recycle();
5985        reply.recycle();
5986    }
5987
5988    public void keyguardGoingAway(int flags)
5989            throws RemoteException {
5990        Parcel data = Parcel.obtain();
5991        Parcel reply = Parcel.obtain();
5992        data.writeInterfaceToken(IActivityManager.descriptor);
5993        data.writeInt(flags);
5994        mRemote.transact(KEYGUARD_GOING_AWAY_TRANSACTION, data, reply, 0);
5995        reply.readException();
5996        data.recycle();
5997        reply.recycle();
5998    }
5999
6000    public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
6001            throws RemoteException {
6002        Parcel data = Parcel.obtain();
6003        Parcel reply = Parcel.obtain();
6004        data.writeInterfaceToken(IActivityManager.descriptor);
6005        data.writeStrongBinder(token);
6006        data.writeString(destAffinity);
6007        mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
6008        reply.readException();
6009        boolean result = reply.readInt() != 0;
6010        data.recycle();
6011        reply.recycle();
6012        return result;
6013    }
6014
6015    public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
6016            throws RemoteException {
6017        Parcel data = Parcel.obtain();
6018        Parcel reply = Parcel.obtain();
6019        data.writeInterfaceToken(IActivityManager.descriptor);
6020        data.writeStrongBinder(token);
6021        target.writeToParcel(data, 0);
6022        data.writeInt(resultCode);
6023        if (resultData != null) {
6024            data.writeInt(1);
6025            resultData.writeToParcel(data, 0);
6026        } else {
6027            data.writeInt(0);
6028        }
6029        mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
6030        reply.readException();
6031        boolean result = reply.readInt() != 0;
6032        data.recycle();
6033        reply.recycle();
6034        return result;
6035    }
6036
6037    public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
6038        Parcel data = Parcel.obtain();
6039        Parcel reply = Parcel.obtain();
6040        data.writeInterfaceToken(IActivityManager.descriptor);
6041        data.writeStrongBinder(activityToken);
6042        mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
6043        reply.readException();
6044        int result = reply.readInt();
6045        data.recycle();
6046        reply.recycle();
6047        return result;
6048    }
6049
6050    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
6051        Parcel data = Parcel.obtain();
6052        Parcel reply = Parcel.obtain();
6053        data.writeInterfaceToken(IActivityManager.descriptor);
6054        data.writeStrongBinder(activityToken);
6055        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
6056        reply.readException();
6057        String result = reply.readString();
6058        data.recycle();
6059        reply.recycle();
6060        return result;
6061    }
6062
6063    public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
6064        Parcel data = Parcel.obtain();
6065        Parcel reply = Parcel.obtain();
6066        data.writeInterfaceToken(IActivityManager.descriptor);
6067        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6068        mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6069        reply.readException();
6070        data.recycle();
6071        reply.recycle();
6072    }
6073
6074    public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
6075        Parcel data = Parcel.obtain();
6076        Parcel reply = Parcel.obtain();
6077        data.writeInterfaceToken(IActivityManager.descriptor);
6078        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
6079        mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
6080        reply.readException();
6081        data.recycle();
6082        reply.recycle();
6083    }
6084
6085    public void requestBugReport(@ActivityManager.BugreportMode int bugreportType)
6086            throws RemoteException {
6087        Parcel data = Parcel.obtain();
6088        Parcel reply = Parcel.obtain();
6089        data.writeInterfaceToken(IActivityManager.descriptor);
6090        data.writeInt(bugreportType);
6091        mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
6092        reply.readException();
6093        data.recycle();
6094        reply.recycle();
6095    }
6096
6097    public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
6098            throws RemoteException {
6099        Parcel data = Parcel.obtain();
6100        Parcel reply = Parcel.obtain();
6101        data.writeInterfaceToken(IActivityManager.descriptor);
6102        data.writeInt(pid);
6103        data.writeInt(aboveSystem ? 1 : 0);
6104        data.writeString(reason);
6105        mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
6106        reply.readException();
6107        long res = reply.readInt();
6108        data.recycle();
6109        reply.recycle();
6110        return res;
6111    }
6112
6113    public Bundle getAssistContextExtras(int requestType) throws RemoteException {
6114        Parcel data = Parcel.obtain();
6115        Parcel reply = Parcel.obtain();
6116        data.writeInterfaceToken(IActivityManager.descriptor);
6117        data.writeInt(requestType);
6118        mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6119        reply.readException();
6120        Bundle res = reply.readBundle();
6121        data.recycle();
6122        reply.recycle();
6123        return res;
6124    }
6125
6126    public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
6127            Bundle receiverExtras,
6128            IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException {
6129        Parcel data = Parcel.obtain();
6130        Parcel reply = Parcel.obtain();
6131        data.writeInterfaceToken(IActivityManager.descriptor);
6132        data.writeInt(requestType);
6133        data.writeStrongBinder(receiver.asBinder());
6134        data.writeBundle(receiverExtras);
6135        data.writeStrongBinder(activityToken);
6136        data.writeInt(focused ? 1 : 0);
6137        data.writeInt(newSessionId ? 1 : 0);
6138        mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6139        reply.readException();
6140        boolean res = reply.readInt() != 0;
6141        data.recycle();
6142        reply.recycle();
6143        return res;
6144    }
6145
6146    public void reportAssistContextExtras(IBinder token, Bundle extras, AssistStructure structure,
6147            AssistContent content, Uri referrer) throws RemoteException {
6148        Parcel data = Parcel.obtain();
6149        Parcel reply = Parcel.obtain();
6150        data.writeInterfaceToken(IActivityManager.descriptor);
6151        data.writeStrongBinder(token);
6152        data.writeBundle(extras);
6153        structure.writeToParcel(data, 0);
6154        content.writeToParcel(data, 0);
6155        if (referrer != null) {
6156            data.writeInt(1);
6157            referrer.writeToParcel(data, 0);
6158        } else {
6159            data.writeInt(0);
6160        }
6161        mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
6162        reply.readException();
6163        data.recycle();
6164        reply.recycle();
6165    }
6166
6167    public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle,
6168            Bundle args) throws RemoteException {
6169        Parcel data = Parcel.obtain();
6170        Parcel reply = Parcel.obtain();
6171        data.writeInterfaceToken(IActivityManager.descriptor);
6172        intent.writeToParcel(data, 0);
6173        data.writeInt(requestType);
6174        data.writeString(hint);
6175        data.writeInt(userHandle);
6176        data.writeBundle(args);
6177        mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
6178        reply.readException();
6179        boolean res = reply.readInt() != 0;
6180        data.recycle();
6181        reply.recycle();
6182        return res;
6183    }
6184
6185    public boolean isAssistDataAllowedOnCurrentActivity() throws RemoteException {
6186        Parcel data = Parcel.obtain();
6187        Parcel reply = Parcel.obtain();
6188        data.writeInterfaceToken(IActivityManager.descriptor);
6189        mRemote.transact(IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION, data, reply, 0);
6190        reply.readException();
6191        boolean res = reply.readInt() != 0;
6192        data.recycle();
6193        reply.recycle();
6194        return res;
6195    }
6196
6197    public boolean showAssistFromActivity(IBinder token, Bundle args) throws RemoteException {
6198        Parcel data = Parcel.obtain();
6199        Parcel reply = Parcel.obtain();
6200        data.writeInterfaceToken(IActivityManager.descriptor);
6201        data.writeStrongBinder(token);
6202        data.writeBundle(args);
6203        mRemote.transact(SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION, data, reply, 0);
6204        reply.readException();
6205        boolean res = reply.readInt() != 0;
6206        data.recycle();
6207        reply.recycle();
6208        return res;
6209    }
6210
6211    public void killUid(int appId, int userId, String reason) throws RemoteException {
6212        Parcel data = Parcel.obtain();
6213        Parcel reply = Parcel.obtain();
6214        data.writeInterfaceToken(IActivityManager.descriptor);
6215        data.writeInt(appId);
6216        data.writeInt(userId);
6217        data.writeString(reason);
6218        mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
6219        reply.readException();
6220        data.recycle();
6221        reply.recycle();
6222    }
6223
6224    public void hang(IBinder who, boolean allowRestart) throws RemoteException {
6225        Parcel data = Parcel.obtain();
6226        Parcel reply = Parcel.obtain();
6227        data.writeInterfaceToken(IActivityManager.descriptor);
6228        data.writeStrongBinder(who);
6229        data.writeInt(allowRestart ? 1 : 0);
6230        mRemote.transact(HANG_TRANSACTION, data, reply, 0);
6231        reply.readException();
6232        data.recycle();
6233        reply.recycle();
6234    }
6235
6236    public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
6237        Parcel data = Parcel.obtain();
6238        Parcel reply = Parcel.obtain();
6239        data.writeInterfaceToken(IActivityManager.descriptor);
6240        data.writeStrongBinder(token);
6241        mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
6242        reply.readException();
6243        data.recycle();
6244        reply.recycle();
6245    }
6246
6247    public void notifyActivityDrawn(IBinder token) throws RemoteException {
6248        Parcel data = Parcel.obtain();
6249        Parcel reply = Parcel.obtain();
6250        data.writeInterfaceToken(IActivityManager.descriptor);
6251        data.writeStrongBinder(token);
6252        mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
6253        reply.readException();
6254        data.recycle();
6255        reply.recycle();
6256    }
6257
6258    public void restart() throws RemoteException {
6259        Parcel data = Parcel.obtain();
6260        Parcel reply = Parcel.obtain();
6261        data.writeInterfaceToken(IActivityManager.descriptor);
6262        mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
6263        reply.readException();
6264        data.recycle();
6265        reply.recycle();
6266    }
6267
6268    public void performIdleMaintenance() throws RemoteException {
6269        Parcel data = Parcel.obtain();
6270        Parcel reply = Parcel.obtain();
6271        data.writeInterfaceToken(IActivityManager.descriptor);
6272        mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
6273        reply.readException();
6274        data.recycle();
6275        reply.recycle();
6276    }
6277
6278    public void sendIdleJobTrigger() throws RemoteException {
6279        Parcel data = Parcel.obtain();
6280        Parcel reply = Parcel.obtain();
6281        data.writeInterfaceToken(IActivityManager.descriptor);
6282        mRemote.transact(SEND_IDLE_JOB_TRIGGER_TRANSACTION, data, reply, 0);
6283        reply.readException();
6284        data.recycle();
6285        reply.recycle();
6286    }
6287
6288    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
6289            IActivityContainerCallback callback) throws RemoteException {
6290        Parcel data = Parcel.obtain();
6291        Parcel reply = Parcel.obtain();
6292        data.writeInterfaceToken(IActivityManager.descriptor);
6293        data.writeStrongBinder(parentActivityToken);
6294        data.writeStrongBinder(callback == null ? null : callback.asBinder());
6295        mRemote.transact(CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6296        reply.readException();
6297        final int result = reply.readInt();
6298        final IActivityContainer res;
6299        if (result == 1) {
6300            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6301        } else {
6302            res = null;
6303        }
6304        data.recycle();
6305        reply.recycle();
6306        return res;
6307    }
6308
6309    public void deleteActivityContainer(IActivityContainer activityContainer)
6310            throws RemoteException {
6311        Parcel data = Parcel.obtain();
6312        Parcel reply = Parcel.obtain();
6313        data.writeInterfaceToken(IActivityManager.descriptor);
6314        data.writeStrongBinder(activityContainer.asBinder());
6315        mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
6316        reply.readException();
6317        data.recycle();
6318        reply.recycle();
6319    }
6320
6321    public boolean startBinderTracking() throws RemoteException {
6322        Parcel data = Parcel.obtain();
6323        Parcel reply = Parcel.obtain();
6324        data.writeInterfaceToken(IActivityManager.descriptor);
6325        mRemote.transact(START_BINDER_TRACKING_TRANSACTION, data, reply, 0);
6326        reply.readException();
6327        boolean res = reply.readInt() != 0;
6328        reply.recycle();
6329        data.recycle();
6330        return res;
6331    }
6332
6333    public boolean stopBinderTrackingAndDump(ParcelFileDescriptor fd) throws RemoteException {
6334        Parcel data = Parcel.obtain();
6335        Parcel reply = Parcel.obtain();
6336        data.writeInterfaceToken(IActivityManager.descriptor);
6337        if (fd != null) {
6338            data.writeInt(1);
6339            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
6340        } else {
6341            data.writeInt(0);
6342        }
6343        mRemote.transact(STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION, data, reply, 0);
6344        reply.readException();
6345        boolean res = reply.readInt() != 0;
6346        reply.recycle();
6347        data.recycle();
6348        return res;
6349    }
6350
6351    public int setVrMode(IBinder token, boolean enabled, ComponentName packageName)
6352            throws RemoteException {
6353        Parcel data = Parcel.obtain();
6354        Parcel reply = Parcel.obtain();
6355        data.writeInterfaceToken(IActivityManager.descriptor);
6356        data.writeStrongBinder(token);
6357        data.writeInt(enabled ? 1 : 0);
6358        packageName.writeToParcel(data, 0);
6359        mRemote.transact(SET_VR_MODE_TRANSACTION, data, reply, 0);
6360        reply.readException();
6361        int res = reply.readInt();
6362        data.recycle();
6363        reply.recycle();
6364        return res;
6365    }
6366
6367    public boolean isVrModePackageEnabled(ComponentName packageName)
6368            throws RemoteException {
6369        Parcel data = Parcel.obtain();
6370        Parcel reply = Parcel.obtain();
6371        data.writeInterfaceToken(IActivityManager.descriptor);
6372        packageName.writeToParcel(data, 0);
6373        mRemote.transact(IS_VR_PACKAGE_ENABLED_TRANSACTION, data, reply, 0);
6374        reply.readException();
6375        int res = reply.readInt();
6376        data.recycle();
6377        reply.recycle();
6378        return res == 1;
6379    }
6380
6381    @Override
6382    public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
6383        Parcel data = Parcel.obtain();
6384        Parcel reply = Parcel.obtain();
6385        data.writeInterfaceToken(IActivityManager.descriptor);
6386        data.writeInt(displayId);
6387        mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0);
6388        reply.readException();
6389        final int result = reply.readInt();
6390        final IActivityContainer res;
6391        if (result == 1) {
6392            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
6393        } else {
6394            res = null;
6395        }
6396        data.recycle();
6397        reply.recycle();
6398        return res;
6399    }
6400
6401    @Override
6402    public int getActivityDisplayId(IBinder activityToken)
6403            throws RemoteException {
6404        Parcel data = Parcel.obtain();
6405        Parcel reply = Parcel.obtain();
6406        data.writeInterfaceToken(IActivityManager.descriptor);
6407        data.writeStrongBinder(activityToken);
6408        mRemote.transact(GET_ACTIVITY_DISPLAY_ID_TRANSACTION, data, reply, 0);
6409        reply.readException();
6410        final int displayId = reply.readInt();
6411        data.recycle();
6412        reply.recycle();
6413        return displayId;
6414    }
6415
6416    @Override
6417    public void startLockTaskMode(int taskId) throws RemoteException {
6418        Parcel data = Parcel.obtain();
6419        Parcel reply = Parcel.obtain();
6420        data.writeInterfaceToken(IActivityManager.descriptor);
6421        data.writeInt(taskId);
6422        mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
6423        reply.readException();
6424        data.recycle();
6425        reply.recycle();
6426    }
6427
6428    @Override
6429    public void startLockTaskMode(IBinder token) throws RemoteException {
6430        Parcel data = Parcel.obtain();
6431        Parcel reply = Parcel.obtain();
6432        data.writeInterfaceToken(IActivityManager.descriptor);
6433        data.writeStrongBinder(token);
6434        mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
6435        reply.readException();
6436        data.recycle();
6437        reply.recycle();
6438    }
6439
6440    @Override
6441    public void startSystemLockTaskMode(int taskId) throws RemoteException {
6442        Parcel data = Parcel.obtain();
6443        Parcel reply = Parcel.obtain();
6444        data.writeInterfaceToken(IActivityManager.descriptor);
6445        data.writeInt(taskId);
6446        mRemote.transact(START_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6447        reply.readException();
6448        data.recycle();
6449        reply.recycle();
6450    }
6451
6452    @Override
6453    public void stopLockTaskMode() throws RemoteException {
6454        Parcel data = Parcel.obtain();
6455        Parcel reply = Parcel.obtain();
6456        data.writeInterfaceToken(IActivityManager.descriptor);
6457        mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6458        reply.readException();
6459        data.recycle();
6460        reply.recycle();
6461    }
6462
6463    @Override
6464    public void stopSystemLockTaskMode() throws RemoteException {
6465        Parcel data = Parcel.obtain();
6466        Parcel reply = Parcel.obtain();
6467        data.writeInterfaceToken(IActivityManager.descriptor);
6468        mRemote.transact(STOP_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
6469        reply.readException();
6470        data.recycle();
6471        reply.recycle();
6472    }
6473
6474    @Override
6475    public boolean isInLockTaskMode() throws RemoteException {
6476        Parcel data = Parcel.obtain();
6477        Parcel reply = Parcel.obtain();
6478        data.writeInterfaceToken(IActivityManager.descriptor);
6479        mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
6480        reply.readException();
6481        boolean isInLockTaskMode = reply.readInt() == 1;
6482        data.recycle();
6483        reply.recycle();
6484        return isInLockTaskMode;
6485    }
6486
6487    @Override
6488    public int getLockTaskModeState() throws RemoteException {
6489        Parcel data = Parcel.obtain();
6490        Parcel reply = Parcel.obtain();
6491        data.writeInterfaceToken(IActivityManager.descriptor);
6492        mRemote.transact(GET_LOCK_TASK_MODE_STATE_TRANSACTION, data, reply, 0);
6493        reply.readException();
6494        int lockTaskModeState = reply.readInt();
6495        data.recycle();
6496        reply.recycle();
6497        return lockTaskModeState;
6498    }
6499
6500    @Override
6501    public void showLockTaskEscapeMessage(IBinder token) throws RemoteException {
6502        Parcel data = Parcel.obtain();
6503        Parcel reply = Parcel.obtain();
6504        data.writeInterfaceToken(IActivityManager.descriptor);
6505        data.writeStrongBinder(token);
6506        mRemote.transact(SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION, data, reply,
6507                IBinder.FLAG_ONEWAY);
6508        reply.readException();
6509        data.recycle();
6510        reply.recycle();
6511    }
6512
6513    @Override
6514    public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
6515            throws RemoteException {
6516        Parcel data = Parcel.obtain();
6517        Parcel reply = Parcel.obtain();
6518        data.writeInterfaceToken(IActivityManager.descriptor);
6519        data.writeStrongBinder(token);
6520        values.writeToParcel(data, 0);
6521        mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0);
6522        reply.readException();
6523        data.recycle();
6524        reply.recycle();
6525    }
6526
6527    @Override
6528    public void setTaskResizeable(int taskId, int resizeableMode) throws  RemoteException {
6529        Parcel data = Parcel.obtain();
6530        Parcel reply = Parcel.obtain();
6531        data.writeInterfaceToken(IActivityManager.descriptor);
6532        data.writeInt(taskId);
6533        data.writeInt(resizeableMode);
6534        mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0);
6535        reply.readException();
6536        data.recycle();
6537        reply.recycle();
6538    }
6539
6540    @Override
6541    public void resizeTask(int taskId, Rect r, int resizeMode) throws RemoteException
6542    {
6543        Parcel data = Parcel.obtain();
6544        Parcel reply = Parcel.obtain();
6545        data.writeInterfaceToken(IActivityManager.descriptor);
6546        data.writeInt(taskId);
6547        data.writeInt(resizeMode);
6548        r.writeToParcel(data, 0);
6549        mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0);
6550        reply.readException();
6551        data.recycle();
6552        reply.recycle();
6553    }
6554
6555    @Override
6556    public Rect getTaskBounds(int taskId) throws RemoteException
6557    {
6558        Parcel data = Parcel.obtain();
6559        Parcel reply = Parcel.obtain();
6560        data.writeInterfaceToken(IActivityManager.descriptor);
6561        data.writeInt(taskId);
6562        mRemote.transact(GET_TASK_BOUNDS_TRANSACTION, data, reply, 0);
6563        reply.readException();
6564        Rect rect = Rect.CREATOR.createFromParcel(reply);
6565        data.recycle();
6566        reply.recycle();
6567        return rect;
6568    }
6569
6570    @Override
6571    public Bitmap getTaskDescriptionIcon(String filename, int userId) throws RemoteException {
6572        Parcel data = Parcel.obtain();
6573        Parcel reply = Parcel.obtain();
6574        data.writeInterfaceToken(IActivityManager.descriptor);
6575        data.writeString(filename);
6576        data.writeInt(userId);
6577        mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
6578        reply.readException();
6579        final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
6580        data.recycle();
6581        reply.recycle();
6582        return icon;
6583    }
6584
6585    @Override
6586    public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
6587            throws RemoteException {
6588        Parcel data = Parcel.obtain();
6589        Parcel reply = Parcel.obtain();
6590        data.writeInterfaceToken(IActivityManager.descriptor);
6591        if (options == null) {
6592            data.writeInt(0);
6593        } else {
6594            data.writeInt(1);
6595            data.writeBundle(options.toBundle());
6596        }
6597        mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0);
6598        reply.readException();
6599        data.recycle();
6600        reply.recycle();
6601    }
6602
6603    @Override
6604    public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
6605        Parcel data = Parcel.obtain();
6606        Parcel reply = Parcel.obtain();
6607        data.writeInterfaceToken(IActivityManager.descriptor);
6608        data.writeStrongBinder(token);
6609        data.writeInt(visible ? 1 : 0);
6610        mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6611        reply.readException();
6612        boolean success = reply.readInt() > 0;
6613        data.recycle();
6614        reply.recycle();
6615        return success;
6616    }
6617
6618    @Override
6619    public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
6620        Parcel data = Parcel.obtain();
6621        Parcel reply = Parcel.obtain();
6622        data.writeInterfaceToken(IActivityManager.descriptor);
6623        data.writeStrongBinder(token);
6624        mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
6625        reply.readException();
6626        final boolean visible = reply.readInt() > 0;
6627        data.recycle();
6628        reply.recycle();
6629        return visible;
6630    }
6631
6632    @Override
6633    public void backgroundResourcesReleased(IBinder token) throws RemoteException {
6634        Parcel data = Parcel.obtain();
6635        Parcel reply = Parcel.obtain();
6636        data.writeInterfaceToken(IActivityManager.descriptor);
6637        data.writeStrongBinder(token);
6638        mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0);
6639        reply.readException();
6640        data.recycle();
6641        reply.recycle();
6642    }
6643
6644    @Override
6645    public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
6646        Parcel data = Parcel.obtain();
6647        Parcel reply = Parcel.obtain();
6648        data.writeInterfaceToken(IActivityManager.descriptor);
6649        data.writeStrongBinder(token);
6650        mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0);
6651        reply.readException();
6652        data.recycle();
6653        reply.recycle();
6654    }
6655
6656    @Override
6657    public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
6658        Parcel data = Parcel.obtain();
6659        Parcel reply = Parcel.obtain();
6660        data.writeInterfaceToken(IActivityManager.descriptor);
6661        data.writeStrongBinder(token);
6662        mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6663        reply.readException();
6664        data.recycle();
6665        reply.recycle();
6666    }
6667
6668    @Override
6669    public void bootAnimationComplete() throws RemoteException {
6670        Parcel data = Parcel.obtain();
6671        Parcel reply = Parcel.obtain();
6672        data.writeInterfaceToken(IActivityManager.descriptor);
6673        mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
6674        reply.readException();
6675        data.recycle();
6676        reply.recycle();
6677    }
6678
6679    @Override
6680    public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException {
6681        Parcel data = Parcel.obtain();
6682        Parcel reply = Parcel.obtain();
6683        data.writeInterfaceToken(IActivityManager.descriptor);
6684        data.writeInt(uid);
6685        data.writeByteArray(firstPacket);
6686        mRemote.transact(NOTIFY_CLEARTEXT_NETWORK_TRANSACTION, data, reply, 0);
6687        reply.readException();
6688        data.recycle();
6689        reply.recycle();
6690    }
6691
6692    @Override
6693    public void setDumpHeapDebugLimit(String processName, int uid, long maxMemSize,
6694            String reportPackage) throws RemoteException {
6695        Parcel data = Parcel.obtain();
6696        Parcel reply = Parcel.obtain();
6697        data.writeInterfaceToken(IActivityManager.descriptor);
6698        data.writeString(processName);
6699        data.writeInt(uid);
6700        data.writeLong(maxMemSize);
6701        data.writeString(reportPackage);
6702        mRemote.transact(SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION, data, reply, 0);
6703        reply.readException();
6704        data.recycle();
6705        reply.recycle();
6706    }
6707
6708    @Override
6709    public void dumpHeapFinished(String path) throws RemoteException {
6710        Parcel data = Parcel.obtain();
6711        Parcel reply = Parcel.obtain();
6712        data.writeInterfaceToken(IActivityManager.descriptor);
6713        data.writeString(path);
6714        mRemote.transact(DUMP_HEAP_FINISHED_TRANSACTION, data, reply, 0);
6715        reply.readException();
6716        data.recycle();
6717        reply.recycle();
6718    }
6719
6720    @Override
6721    public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake)
6722            throws RemoteException {
6723        Parcel data = Parcel.obtain();
6724        Parcel reply = Parcel.obtain();
6725        data.writeInterfaceToken(IActivityManager.descriptor);
6726        data.writeStrongBinder(session.asBinder());
6727        data.writeInt(keepAwake ? 1 : 0);
6728        mRemote.transact(SET_VOICE_KEEP_AWAKE_TRANSACTION, data, reply, 0);
6729        reply.readException();
6730        data.recycle();
6731        reply.recycle();
6732    }
6733
6734    @Override
6735    public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException {
6736        Parcel data = Parcel.obtain();
6737        Parcel reply = Parcel.obtain();
6738        data.writeInterfaceToken(IActivityManager.descriptor);
6739        data.writeInt(userId);
6740        data.writeStringArray(packages);
6741        mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0);
6742        reply.readException();
6743        data.recycle();
6744        reply.recycle();
6745    }
6746
6747    @Override
6748    public void updateDeviceOwner(String packageName) throws RemoteException {
6749        Parcel data = Parcel.obtain();
6750        Parcel reply = Parcel.obtain();
6751        data.writeInterfaceToken(IActivityManager.descriptor);
6752        data.writeString(packageName);
6753        mRemote.transact(UPDATE_DEVICE_OWNER_TRANSACTION, data, reply, 0);
6754        reply.readException();
6755        data.recycle();
6756        reply.recycle();
6757    }
6758
6759    @Override
6760    public int getPackageProcessState(String packageName, String callingPackage)
6761            throws RemoteException {
6762        Parcel data = Parcel.obtain();
6763        Parcel reply = Parcel.obtain();
6764        data.writeInterfaceToken(IActivityManager.descriptor);
6765        data.writeString(packageName);
6766        data.writeString(callingPackage);
6767        mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0);
6768        reply.readException();
6769        int res = reply.readInt();
6770        data.recycle();
6771        reply.recycle();
6772        return res;
6773    }
6774
6775    @Override
6776    public boolean setProcessMemoryTrimLevel(String process, int userId, int level)
6777            throws RemoteException {
6778        Parcel data = Parcel.obtain();
6779        Parcel reply = Parcel.obtain();
6780        data.writeInterfaceToken(IActivityManager.descriptor);
6781        data.writeString(process);
6782        data.writeInt(userId);
6783        data.writeInt(level);
6784        mRemote.transact(SET_PROCESS_MEMORY_TRIM_TRANSACTION, data, reply, 0);
6785        reply.readException();
6786        int res = reply.readInt();
6787        data.recycle();
6788        reply.recycle();
6789        return res != 0;
6790    }
6791
6792    @Override
6793    public boolean isRootVoiceInteraction(IBinder token) throws RemoteException {
6794        Parcel data = Parcel.obtain();
6795        Parcel reply = Parcel.obtain();
6796        data.writeInterfaceToken(IActivityManager.descriptor);
6797        data.writeStrongBinder(token);
6798        mRemote.transact(IS_ROOT_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
6799        reply.readException();
6800        int res = reply.readInt();
6801        data.recycle();
6802        reply.recycle();
6803        return res != 0;
6804    }
6805
6806    @Override
6807    public void exitFreeformMode(IBinder token) throws RemoteException {
6808        Parcel data = Parcel.obtain();
6809        Parcel reply = Parcel.obtain();
6810        data.writeInterfaceToken(IActivityManager.descriptor);
6811        data.writeStrongBinder(token);
6812        mRemote.transact(EXIT_FREEFORM_MODE_TRANSACTION, data, reply, 0);
6813        reply.readException();
6814        data.recycle();
6815        reply.recycle();
6816    }
6817
6818    @Override
6819    public int getActivityStackId(IBinder token) throws RemoteException {
6820        Parcel data = Parcel.obtain();
6821        Parcel reply = Parcel.obtain();
6822        data.writeInterfaceToken(IActivityManager.descriptor);
6823        data.writeStrongBinder(token);
6824        mRemote.transact(GET_ACTIVITY_STACK_ID_TRANSACTION, data, reply, 0);
6825        reply.readException();
6826        int stackId = reply.readInt();
6827        data.recycle();
6828        reply.recycle();
6829        return stackId;
6830    }
6831
6832    @Override
6833    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
6834            int[] verticalSizeConfigurations, int[] smallestSizeConfigurations)
6835            throws RemoteException {
6836        Parcel data = Parcel.obtain();
6837        Parcel reply = Parcel.obtain();
6838        data.writeInterfaceToken(IActivityManager.descriptor);
6839        data.writeStrongBinder(token);
6840        writeIntArray(horizontalSizeConfiguration, data);
6841        writeIntArray(verticalSizeConfigurations, data);
6842        writeIntArray(smallestSizeConfigurations, data);
6843        mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
6844        reply.readException();
6845        data.recycle();
6846        reply.recycle();
6847    }
6848
6849    private static void writeIntArray(int[] array, Parcel data) {
6850        if (array == null) {
6851            data.writeInt(0);
6852        } else {
6853            data.writeInt(array.length);
6854            data.writeIntArray(array);
6855        }
6856    }
6857
6858    @Override
6859    public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
6860        Parcel data = Parcel.obtain();
6861        Parcel reply = Parcel.obtain();
6862        data.writeInterfaceToken(IActivityManager.descriptor);
6863        data.writeInt(suppress ? 1 : 0);
6864        mRemote.transact(SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION, data, reply, 0);
6865        reply.readException();
6866        data.recycle();
6867        reply.recycle();
6868    }
6869
6870    @Override
6871    public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException {
6872        Parcel data = Parcel.obtain();
6873        Parcel reply = Parcel.obtain();
6874        data.writeInterfaceToken(IActivityManager.descriptor);
6875        data.writeInt(fromStackId);
6876        data.writeInt(onTop ? 1 : 0);
6877        mRemote.transact(MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION, data, reply, 0);
6878        reply.readException();
6879        data.recycle();
6880        reply.recycle();
6881    }
6882
6883    @Override
6884    public int getAppStartMode(int uid, String packageName) throws RemoteException {
6885        Parcel data = Parcel.obtain();
6886        Parcel reply = Parcel.obtain();
6887        data.writeInterfaceToken(IActivityManager.descriptor);
6888        data.writeInt(uid);
6889        data.writeString(packageName);
6890        mRemote.transact(GET_APP_START_MODE_TRANSACTION, data, reply, 0);
6891        reply.readException();
6892        int res = reply.readInt();
6893        data.recycle();
6894        reply.recycle();
6895        return res;
6896    }
6897
6898    @Override
6899    public boolean isInMultiWindowMode(IBinder token) throws RemoteException {
6900        Parcel data = Parcel.obtain();
6901        Parcel reply = Parcel.obtain();
6902        data.writeInterfaceToken(IActivityManager.descriptor);
6903        data.writeStrongBinder(token);
6904        mRemote.transact(IN_MULTI_WINDOW_TRANSACTION, data, reply, 0);
6905        reply.readException();
6906        final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
6907        data.recycle();
6908        reply.recycle();
6909        return multiWindowMode;
6910    }
6911
6912    @Override
6913    public boolean isInPictureInPictureMode(IBinder token) throws RemoteException {
6914        Parcel data = Parcel.obtain();
6915        Parcel reply = Parcel.obtain();
6916        data.writeInterfaceToken(IActivityManager.descriptor);
6917        data.writeStrongBinder(token);
6918        mRemote.transact(IN_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6919        reply.readException();
6920        final boolean pipMode = reply.readInt() == 1 ? true : false;
6921        data.recycle();
6922        reply.recycle();
6923        return pipMode;
6924    }
6925
6926    @Override
6927    public void enterPictureInPictureMode(IBinder token) throws RemoteException {
6928        Parcel data = Parcel.obtain();
6929        Parcel reply = Parcel.obtain();
6930        data.writeInterfaceToken(IActivityManager.descriptor);
6931        data.writeStrongBinder(token);
6932        mRemote.transact(ENTER_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
6933        reply.readException();
6934        data.recycle();
6935        reply.recycle();
6936    }
6937
6938    @Override
6939    public boolean isAppForeground(int uid) throws RemoteException {
6940        Parcel data = Parcel.obtain();
6941        Parcel reply = Parcel.obtain();
6942        data.writeInterfaceToken(IActivityManager.descriptor);
6943        data.writeInt(uid);
6944        mRemote.transact(IS_APP_FOREGROUND_TRANSACTION, data, reply, 0);
6945        final boolean isForeground = reply.readInt() == 1 ? true : false;
6946        data.recycle();
6947        reply.recycle();
6948        return isForeground;
6949    };
6950
6951    @Override
6952    public void notifyPinnedStackAnimationEnded() throws RemoteException {
6953        Parcel data = Parcel.obtain();
6954        Parcel reply = Parcel.obtain();
6955        data.writeInterfaceToken(IActivityManager.descriptor);
6956        mRemote.transact(NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION, data, reply, 0);
6957        data.recycle();
6958        reply.recycle();
6959    };
6960
6961    @Override
6962    public void removeStack(int stackId) throws RemoteException {
6963        Parcel data = Parcel.obtain();
6964        Parcel reply = Parcel.obtain();
6965        data.writeInterfaceToken(IActivityManager.descriptor);
6966        data.writeInt(stackId);
6967        mRemote.transact(REMOVE_STACK, data, reply, 0);
6968        reply.readException();
6969        data.recycle();
6970        reply.recycle();
6971    }
6972
6973    @Override
6974    public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException {
6975        Parcel data = Parcel.obtain();
6976        Parcel reply = Parcel.obtain();
6977        data.writeInterfaceToken(IActivityManager.descriptor);
6978        data.writeInt(userId);
6979        mRemote.transact(NOTIFY_LOCKED_PROFILE, data, reply, 0);
6980        reply.readException();
6981        data.recycle();
6982        reply.recycle();
6983    }
6984
6985    @Override
6986    public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException {
6987        Parcel data = Parcel.obtain();
6988        Parcel reply = Parcel.obtain();
6989        data.writeInterfaceToken(IActivityManager.descriptor);
6990        intent.writeToParcel(data, 0);
6991        mRemote.transact(START_CONFIRM_DEVICE_CREDENTIAL_INTENT, data, reply, 0);
6992        reply.readException();
6993        data.recycle();
6994        reply.recycle();
6995    }
6996
6997    @Override
6998    public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
6999            IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
7000            throws RemoteException {
7001        Parcel data = Parcel.obtain();
7002        Parcel reply = Parcel.obtain();
7003        data.writeInterfaceToken(IActivityManager.descriptor);
7004        data.writeStrongBinder(target.asBinder());
7005        data.writeInt(code);
7006        if ((intent!=null)) {
7007            data.writeInt(1);
7008            intent.writeToParcel(data, 0);
7009        }
7010        else {
7011            data.writeInt(0);
7012        }
7013        data.writeString(resolvedType);
7014        data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
7015        data.writeString(requiredPermission);
7016        if ((options!=null)) {
7017            data.writeInt(1);
7018            options.writeToParcel(data, 0);
7019        }
7020        else {
7021            data.writeInt(0);
7022        }
7023        mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
7024        reply.readException();
7025        final int res = reply.readInt();
7026        data.recycle();
7027        reply.recycle();
7028        return res;
7029    }
7030
7031    private IBinder mRemote;
7032}
7033