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