ActivityManagerNative.java revision ff17024e583b170312d82089fd358d278ce16c9a
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_PERMISSION_WITH_TOKEN_TRANSACTION: {
1190            data.enforceInterface(IActivityManager.descriptor);
1191            String perm = data.readString();
1192            int pid = data.readInt();
1193            int uid = data.readInt();
1194            IBinder token = data.readStrongBinder();
1195            int res = checkPermissionWithToken(perm, pid, uid, token);
1196            reply.writeNoException();
1197            reply.writeInt(res);
1198            return true;
1199        }
1200
1201        case CHECK_URI_PERMISSION_TRANSACTION: {
1202            data.enforceInterface(IActivityManager.descriptor);
1203            Uri uri = Uri.CREATOR.createFromParcel(data);
1204            int pid = data.readInt();
1205            int uid = data.readInt();
1206            int mode = data.readInt();
1207            int userId = data.readInt();
1208            IBinder callerToken = data.readStrongBinder();
1209            int res = checkUriPermission(uri, pid, uid, mode, userId, callerToken);
1210            reply.writeNoException();
1211            reply.writeInt(res);
1212            return true;
1213        }
1214
1215        case CLEAR_APP_DATA_TRANSACTION: {
1216            data.enforceInterface(IActivityManager.descriptor);
1217            String packageName = data.readString();
1218            IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
1219                    data.readStrongBinder());
1220            int userId = data.readInt();
1221            boolean res = clearApplicationUserData(packageName, observer, userId);
1222            reply.writeNoException();
1223            reply.writeInt(res ? 1 : 0);
1224            return true;
1225        }
1226
1227        case GRANT_URI_PERMISSION_TRANSACTION: {
1228            data.enforceInterface(IActivityManager.descriptor);
1229            IBinder b = data.readStrongBinder();
1230            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1231            String targetPkg = data.readString();
1232            Uri uri = Uri.CREATOR.createFromParcel(data);
1233            int mode = data.readInt();
1234            int userId = data.readInt();
1235            grantUriPermission(app, targetPkg, uri, mode, userId);
1236            reply.writeNoException();
1237            return true;
1238        }
1239
1240        case REVOKE_URI_PERMISSION_TRANSACTION: {
1241            data.enforceInterface(IActivityManager.descriptor);
1242            IBinder b = data.readStrongBinder();
1243            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1244            Uri uri = Uri.CREATOR.createFromParcel(data);
1245            int mode = data.readInt();
1246            int userId = data.readInt();
1247            revokeUriPermission(app, uri, mode, userId);
1248            reply.writeNoException();
1249            return true;
1250        }
1251
1252        case TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
1253            data.enforceInterface(IActivityManager.descriptor);
1254            Uri uri = Uri.CREATOR.createFromParcel(data);
1255            int mode = data.readInt();
1256            int userId = data.readInt();
1257            takePersistableUriPermission(uri, mode, userId);
1258            reply.writeNoException();
1259            return true;
1260        }
1261
1262        case RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
1263            data.enforceInterface(IActivityManager.descriptor);
1264            Uri uri = Uri.CREATOR.createFromParcel(data);
1265            int mode = data.readInt();
1266            int userId = data.readInt();
1267            releasePersistableUriPermission(uri, mode, userId);
1268            reply.writeNoException();
1269            return true;
1270        }
1271
1272        case GET_PERSISTED_URI_PERMISSIONS_TRANSACTION: {
1273            data.enforceInterface(IActivityManager.descriptor);
1274            final String packageName = data.readString();
1275            final boolean incoming = data.readInt() != 0;
1276            final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions(
1277                    packageName, incoming);
1278            reply.writeNoException();
1279            perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1280            return true;
1281        }
1282
1283        case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
1284            data.enforceInterface(IActivityManager.descriptor);
1285            IBinder b = data.readStrongBinder();
1286            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1287            boolean waiting = data.readInt() != 0;
1288            showWaitingForDebugger(app, waiting);
1289            reply.writeNoException();
1290            return true;
1291        }
1292
1293        case GET_MEMORY_INFO_TRANSACTION: {
1294            data.enforceInterface(IActivityManager.descriptor);
1295            ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
1296            getMemoryInfo(mi);
1297            reply.writeNoException();
1298            mi.writeToParcel(reply, 0);
1299            return true;
1300        }
1301
1302        case UNHANDLED_BACK_TRANSACTION: {
1303            data.enforceInterface(IActivityManager.descriptor);
1304            unhandledBack();
1305            reply.writeNoException();
1306            return true;
1307        }
1308
1309        case OPEN_CONTENT_URI_TRANSACTION: {
1310            data.enforceInterface(IActivityManager.descriptor);
1311            Uri uri = Uri.parse(data.readString());
1312            ParcelFileDescriptor pfd = openContentUri(uri);
1313            reply.writeNoException();
1314            if (pfd != null) {
1315                reply.writeInt(1);
1316                pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1317            } else {
1318                reply.writeInt(0);
1319            }
1320            return true;
1321        }
1322
1323        case SET_LOCK_SCREEN_SHOWN_TRANSACTION: {
1324            data.enforceInterface(IActivityManager.descriptor);
1325            setLockScreenShown(data.readInt() != 0);
1326            reply.writeNoException();
1327            return true;
1328        }
1329
1330        case SET_DEBUG_APP_TRANSACTION: {
1331            data.enforceInterface(IActivityManager.descriptor);
1332            String pn = data.readString();
1333            boolean wfd = data.readInt() != 0;
1334            boolean per = data.readInt() != 0;
1335            setDebugApp(pn, wfd, per);
1336            reply.writeNoException();
1337            return true;
1338        }
1339
1340        case SET_ALWAYS_FINISH_TRANSACTION: {
1341            data.enforceInterface(IActivityManager.descriptor);
1342            boolean enabled = data.readInt() != 0;
1343            setAlwaysFinish(enabled);
1344            reply.writeNoException();
1345            return true;
1346        }
1347
1348        case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
1349            data.enforceInterface(IActivityManager.descriptor);
1350            IActivityController watcher = IActivityController.Stub.asInterface(
1351                    data.readStrongBinder());
1352            setActivityController(watcher);
1353            reply.writeNoException();
1354            return true;
1355        }
1356
1357        case ENTER_SAFE_MODE_TRANSACTION: {
1358            data.enforceInterface(IActivityManager.descriptor);
1359            enterSafeMode();
1360            reply.writeNoException();
1361            return true;
1362        }
1363
1364        case NOTE_WAKEUP_ALARM_TRANSACTION: {
1365            data.enforceInterface(IActivityManager.descriptor);
1366            IIntentSender is = IIntentSender.Stub.asInterface(
1367                    data.readStrongBinder());
1368            int sourceUid = data.readInt();
1369            String sourcePkg = data.readString();
1370            noteWakeupAlarm(is, sourceUid, sourcePkg);
1371            reply.writeNoException();
1372            return true;
1373        }
1374
1375        case KILL_PIDS_TRANSACTION: {
1376            data.enforceInterface(IActivityManager.descriptor);
1377            int[] pids = data.createIntArray();
1378            String reason = data.readString();
1379            boolean secure = data.readInt() != 0;
1380            boolean res = killPids(pids, reason, secure);
1381            reply.writeNoException();
1382            reply.writeInt(res ? 1 : 0);
1383            return true;
1384        }
1385
1386        case KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION: {
1387            data.enforceInterface(IActivityManager.descriptor);
1388            String reason = data.readString();
1389            boolean res = killProcessesBelowForeground(reason);
1390            reply.writeNoException();
1391            reply.writeInt(res ? 1 : 0);
1392            return true;
1393        }
1394
1395        case HANDLE_APPLICATION_CRASH_TRANSACTION: {
1396            data.enforceInterface(IActivityManager.descriptor);
1397            IBinder app = data.readStrongBinder();
1398            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1399            handleApplicationCrash(app, ci);
1400            reply.writeNoException();
1401            return true;
1402        }
1403
1404        case HANDLE_APPLICATION_WTF_TRANSACTION: {
1405            data.enforceInterface(IActivityManager.descriptor);
1406            IBinder app = data.readStrongBinder();
1407            String tag = data.readString();
1408            boolean system = data.readInt() != 0;
1409            ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
1410            boolean res = handleApplicationWtf(app, tag, system, ci);
1411            reply.writeNoException();
1412            reply.writeInt(res ? 1 : 0);
1413            return true;
1414        }
1415
1416        case HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION: {
1417            data.enforceInterface(IActivityManager.descriptor);
1418            IBinder app = data.readStrongBinder();
1419            int violationMask = data.readInt();
1420            StrictMode.ViolationInfo info = new StrictMode.ViolationInfo(data);
1421            handleApplicationStrictModeViolation(app, violationMask, info);
1422            reply.writeNoException();
1423            return true;
1424        }
1425
1426        case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
1427            data.enforceInterface(IActivityManager.descriptor);
1428            int sig = data.readInt();
1429            signalPersistentProcesses(sig);
1430            reply.writeNoException();
1431            return true;
1432        }
1433
1434        case KILL_BACKGROUND_PROCESSES_TRANSACTION: {
1435            data.enforceInterface(IActivityManager.descriptor);
1436            String packageName = data.readString();
1437            int userId = data.readInt();
1438            killBackgroundProcesses(packageName, userId);
1439            reply.writeNoException();
1440            return true;
1441        }
1442
1443        case KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION: {
1444            data.enforceInterface(IActivityManager.descriptor);
1445            killAllBackgroundProcesses();
1446            reply.writeNoException();
1447            return true;
1448        }
1449
1450        case FORCE_STOP_PACKAGE_TRANSACTION: {
1451            data.enforceInterface(IActivityManager.descriptor);
1452            String packageName = data.readString();
1453            int userId = data.readInt();
1454            forceStopPackage(packageName, userId);
1455            reply.writeNoException();
1456            return true;
1457        }
1458
1459        case GET_MY_MEMORY_STATE_TRANSACTION: {
1460            data.enforceInterface(IActivityManager.descriptor);
1461            ActivityManager.RunningAppProcessInfo info =
1462                    new ActivityManager.RunningAppProcessInfo();
1463            getMyMemoryState(info);
1464            reply.writeNoException();
1465            info.writeToParcel(reply, 0);
1466            return true;
1467        }
1468
1469        case GET_DEVICE_CONFIGURATION_TRANSACTION: {
1470            data.enforceInterface(IActivityManager.descriptor);
1471            ConfigurationInfo config = getDeviceConfigurationInfo();
1472            reply.writeNoException();
1473            config.writeToParcel(reply, 0);
1474            return true;
1475        }
1476
1477        case PROFILE_CONTROL_TRANSACTION: {
1478            data.enforceInterface(IActivityManager.descriptor);
1479            String process = data.readString();
1480            int userId = data.readInt();
1481            boolean start = data.readInt() != 0;
1482            int profileType = data.readInt();
1483            ProfilerInfo profilerInfo = data.readInt() != 0
1484                    ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
1485            boolean res = profileControl(process, userId, start, profilerInfo, profileType);
1486            reply.writeNoException();
1487            reply.writeInt(res ? 1 : 0);
1488            return true;
1489        }
1490
1491        case SHUTDOWN_TRANSACTION: {
1492            data.enforceInterface(IActivityManager.descriptor);
1493            boolean res = shutdown(data.readInt());
1494            reply.writeNoException();
1495            reply.writeInt(res ? 1 : 0);
1496            return true;
1497        }
1498
1499        case STOP_APP_SWITCHES_TRANSACTION: {
1500            data.enforceInterface(IActivityManager.descriptor);
1501            stopAppSwitches();
1502            reply.writeNoException();
1503            return true;
1504        }
1505
1506        case RESUME_APP_SWITCHES_TRANSACTION: {
1507            data.enforceInterface(IActivityManager.descriptor);
1508            resumeAppSwitches();
1509            reply.writeNoException();
1510            return true;
1511        }
1512
1513        case PEEK_SERVICE_TRANSACTION: {
1514            data.enforceInterface(IActivityManager.descriptor);
1515            Intent service = Intent.CREATOR.createFromParcel(data);
1516            String resolvedType = data.readString();
1517            IBinder binder = peekService(service, resolvedType);
1518            reply.writeNoException();
1519            reply.writeStrongBinder(binder);
1520            return true;
1521        }
1522
1523        case START_BACKUP_AGENT_TRANSACTION: {
1524            data.enforceInterface(IActivityManager.descriptor);
1525            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1526            int backupRestoreMode = data.readInt();
1527            boolean success = bindBackupAgent(info, backupRestoreMode);
1528            reply.writeNoException();
1529            reply.writeInt(success ? 1 : 0);
1530            return true;
1531        }
1532
1533        case BACKUP_AGENT_CREATED_TRANSACTION: {
1534            data.enforceInterface(IActivityManager.descriptor);
1535            String packageName = data.readString();
1536            IBinder agent = data.readStrongBinder();
1537            backupAgentCreated(packageName, agent);
1538            reply.writeNoException();
1539            return true;
1540        }
1541
1542        case UNBIND_BACKUP_AGENT_TRANSACTION: {
1543            data.enforceInterface(IActivityManager.descriptor);
1544            ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1545            unbindBackupAgent(info);
1546            reply.writeNoException();
1547            return true;
1548        }
1549
1550        case ADD_PACKAGE_DEPENDENCY_TRANSACTION: {
1551            data.enforceInterface(IActivityManager.descriptor);
1552            String packageName = data.readString();
1553            addPackageDependency(packageName);
1554            reply.writeNoException();
1555            return true;
1556        }
1557
1558        case KILL_APPLICATION_WITH_APPID_TRANSACTION: {
1559            data.enforceInterface(IActivityManager.descriptor);
1560            String pkg = data.readString();
1561            int appid = data.readInt();
1562            String reason = data.readString();
1563            killApplicationWithAppId(pkg, appid, reason);
1564            reply.writeNoException();
1565            return true;
1566        }
1567
1568        case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1569            data.enforceInterface(IActivityManager.descriptor);
1570            String reason = data.readString();
1571            closeSystemDialogs(reason);
1572            reply.writeNoException();
1573            return true;
1574        }
1575
1576        case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1577            data.enforceInterface(IActivityManager.descriptor);
1578            int[] pids = data.createIntArray();
1579            Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
1580            reply.writeNoException();
1581            reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1582            return true;
1583        }
1584
1585        case KILL_APPLICATION_PROCESS_TRANSACTION: {
1586            data.enforceInterface(IActivityManager.descriptor);
1587            String processName = data.readString();
1588            int uid = data.readInt();
1589            killApplicationProcess(processName, uid);
1590            reply.writeNoException();
1591            return true;
1592        }
1593
1594        case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
1595            data.enforceInterface(IActivityManager.descriptor);
1596            IBinder token = data.readStrongBinder();
1597            String packageName = data.readString();
1598            int enterAnim = data.readInt();
1599            int exitAnim = data.readInt();
1600            overridePendingTransition(token, packageName, enterAnim, exitAnim);
1601            reply.writeNoException();
1602            return true;
1603        }
1604
1605        case IS_USER_A_MONKEY_TRANSACTION: {
1606            data.enforceInterface(IActivityManager.descriptor);
1607            boolean areThey = isUserAMonkey();
1608            reply.writeNoException();
1609            reply.writeInt(areThey ? 1 : 0);
1610            return true;
1611        }
1612
1613        case SET_USER_IS_MONKEY_TRANSACTION: {
1614            data.enforceInterface(IActivityManager.descriptor);
1615            final boolean monkey = (data.readInt() == 1);
1616            setUserIsMonkey(monkey);
1617            reply.writeNoException();
1618            return true;
1619        }
1620
1621        case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
1622            data.enforceInterface(IActivityManager.descriptor);
1623            finishHeavyWeightApp();
1624            reply.writeNoException();
1625            return true;
1626        }
1627
1628        case IS_IMMERSIVE_TRANSACTION: {
1629            data.enforceInterface(IActivityManager.descriptor);
1630            IBinder token = data.readStrongBinder();
1631            boolean isit = isImmersive(token);
1632            reply.writeNoException();
1633            reply.writeInt(isit ? 1 : 0);
1634            return true;
1635        }
1636
1637        case IS_TOP_OF_TASK_TRANSACTION: {
1638            data.enforceInterface(IActivityManager.descriptor);
1639            IBinder token = data.readStrongBinder();
1640            final boolean isTopOfTask = isTopOfTask(token);
1641            reply.writeNoException();
1642            reply.writeInt(isTopOfTask ? 1 : 0);
1643            return true;
1644        }
1645
1646        case CONVERT_FROM_TRANSLUCENT_TRANSACTION: {
1647            data.enforceInterface(IActivityManager.descriptor);
1648            IBinder token = data.readStrongBinder();
1649            boolean converted = convertFromTranslucent(token);
1650            reply.writeNoException();
1651            reply.writeInt(converted ? 1 : 0);
1652            return true;
1653        }
1654
1655        case CONVERT_TO_TRANSLUCENT_TRANSACTION: {
1656            data.enforceInterface(IActivityManager.descriptor);
1657            IBinder token = data.readStrongBinder();
1658            final Bundle bundle;
1659            if (data.readInt() == 0) {
1660                bundle = null;
1661            } else {
1662                bundle = data.readBundle();
1663            }
1664            final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle);
1665            boolean converted = convertToTranslucent(token, options);
1666            reply.writeNoException();
1667            reply.writeInt(converted ? 1 : 0);
1668            return true;
1669        }
1670
1671        case GET_ACTIVITY_OPTIONS_TRANSACTION: {
1672            data.enforceInterface(IActivityManager.descriptor);
1673            IBinder token = data.readStrongBinder();
1674            final ActivityOptions options = getActivityOptions(token);
1675            reply.writeNoException();
1676            reply.writeBundle(options == null ? null : options.toBundle());
1677            return true;
1678        }
1679
1680        case SET_IMMERSIVE_TRANSACTION: {
1681            data.enforceInterface(IActivityManager.descriptor);
1682            IBinder token = data.readStrongBinder();
1683            boolean imm = data.readInt() == 1;
1684            setImmersive(token, imm);
1685            reply.writeNoException();
1686            return true;
1687        }
1688
1689        case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
1690            data.enforceInterface(IActivityManager.descriptor);
1691            boolean isit = isTopActivityImmersive();
1692            reply.writeNoException();
1693            reply.writeInt(isit ? 1 : 0);
1694            return true;
1695        }
1696
1697        case CRASH_APPLICATION_TRANSACTION: {
1698            data.enforceInterface(IActivityManager.descriptor);
1699            int uid = data.readInt();
1700            int initialPid = data.readInt();
1701            String packageName = data.readString();
1702            String message = data.readString();
1703            crashApplication(uid, initialPid, packageName, message);
1704            reply.writeNoException();
1705            return true;
1706        }
1707
1708        case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
1709            data.enforceInterface(IActivityManager.descriptor);
1710            Uri uri = Uri.CREATOR.createFromParcel(data);
1711            int userId = data.readInt();
1712            String type = getProviderMimeType(uri, userId);
1713            reply.writeNoException();
1714            reply.writeString(type);
1715            return true;
1716        }
1717
1718        case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
1719            data.enforceInterface(IActivityManager.descriptor);
1720            String name = data.readString();
1721            IBinder perm = newUriPermissionOwner(name);
1722            reply.writeNoException();
1723            reply.writeStrongBinder(perm);
1724            return true;
1725        }
1726
1727        case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1728            data.enforceInterface(IActivityManager.descriptor);
1729            IBinder owner = data.readStrongBinder();
1730            int fromUid = data.readInt();
1731            String targetPkg = data.readString();
1732            Uri uri = Uri.CREATOR.createFromParcel(data);
1733            int mode = data.readInt();
1734            int sourceUserId = data.readInt();
1735            int targetUserId = data.readInt();
1736            grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode, sourceUserId,
1737                    targetUserId);
1738            reply.writeNoException();
1739            return true;
1740        }
1741
1742        case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
1743            data.enforceInterface(IActivityManager.descriptor);
1744            IBinder owner = data.readStrongBinder();
1745            Uri uri = null;
1746            if (data.readInt() != 0) {
1747                uri = Uri.CREATOR.createFromParcel(data);
1748            }
1749            int mode = data.readInt();
1750            int userId = data.readInt();
1751            revokeUriPermissionFromOwner(owner, uri, mode, userId);
1752            reply.writeNoException();
1753            return true;
1754        }
1755
1756        case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
1757            data.enforceInterface(IActivityManager.descriptor);
1758            int callingUid = data.readInt();
1759            String targetPkg = data.readString();
1760            Uri uri = Uri.CREATOR.createFromParcel(data);
1761            int modeFlags = data.readInt();
1762            int userId = data.readInt();
1763            int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags, userId);
1764            reply.writeNoException();
1765            reply.writeInt(res);
1766            return true;
1767        }
1768
1769        case DUMP_HEAP_TRANSACTION: {
1770            data.enforceInterface(IActivityManager.descriptor);
1771            String process = data.readString();
1772            int userId = data.readInt();
1773            boolean managed = data.readInt() != 0;
1774            String path = data.readString();
1775            ParcelFileDescriptor fd = data.readInt() != 0
1776                    ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
1777            boolean res = dumpHeap(process, userId, managed, path, fd);
1778            reply.writeNoException();
1779            reply.writeInt(res ? 1 : 0);
1780            return true;
1781        }
1782
1783        case START_ACTIVITIES_TRANSACTION:
1784        {
1785            data.enforceInterface(IActivityManager.descriptor);
1786            IBinder b = data.readStrongBinder();
1787            IApplicationThread app = ApplicationThreadNative.asInterface(b);
1788            String callingPackage = data.readString();
1789            Intent[] intents = data.createTypedArray(Intent.CREATOR);
1790            String[] resolvedTypes = data.createStringArray();
1791            IBinder resultTo = data.readStrongBinder();
1792            Bundle options = data.readInt() != 0
1793                    ? Bundle.CREATOR.createFromParcel(data) : null;
1794            int userId = data.readInt();
1795            int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
1796                    options, userId);
1797            reply.writeNoException();
1798            reply.writeInt(result);
1799            return true;
1800        }
1801
1802        case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1803        {
1804            data.enforceInterface(IActivityManager.descriptor);
1805            int mode = getFrontActivityScreenCompatMode();
1806            reply.writeNoException();
1807            reply.writeInt(mode);
1808            return true;
1809        }
1810
1811        case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
1812        {
1813            data.enforceInterface(IActivityManager.descriptor);
1814            int mode = data.readInt();
1815            setFrontActivityScreenCompatMode(mode);
1816            reply.writeNoException();
1817            reply.writeInt(mode);
1818            return true;
1819        }
1820
1821        case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1822        {
1823            data.enforceInterface(IActivityManager.descriptor);
1824            String pkg = data.readString();
1825            int mode = getPackageScreenCompatMode(pkg);
1826            reply.writeNoException();
1827            reply.writeInt(mode);
1828            return true;
1829        }
1830
1831        case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
1832        {
1833            data.enforceInterface(IActivityManager.descriptor);
1834            String pkg = data.readString();
1835            int mode = data.readInt();
1836            setPackageScreenCompatMode(pkg, mode);
1837            reply.writeNoException();
1838            return true;
1839        }
1840
1841        case SWITCH_USER_TRANSACTION: {
1842            data.enforceInterface(IActivityManager.descriptor);
1843            int userid = data.readInt();
1844            boolean result = switchUser(userid);
1845            reply.writeNoException();
1846            reply.writeInt(result ? 1 : 0);
1847            return true;
1848        }
1849
1850        case START_USER_IN_BACKGROUND_TRANSACTION: {
1851            data.enforceInterface(IActivityManager.descriptor);
1852            int userid = data.readInt();
1853            boolean result = startUserInBackground(userid);
1854            reply.writeNoException();
1855            reply.writeInt(result ? 1 : 0);
1856            return true;
1857        }
1858
1859        case STOP_USER_TRANSACTION: {
1860            data.enforceInterface(IActivityManager.descriptor);
1861            int userid = data.readInt();
1862            IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
1863                    data.readStrongBinder());
1864            int result = stopUser(userid, callback);
1865            reply.writeNoException();
1866            reply.writeInt(result);
1867            return true;
1868        }
1869
1870        case GET_CURRENT_USER_TRANSACTION: {
1871            data.enforceInterface(IActivityManager.descriptor);
1872            UserInfo userInfo = getCurrentUser();
1873            reply.writeNoException();
1874            userInfo.writeToParcel(reply, 0);
1875            return true;
1876        }
1877
1878        case IS_USER_RUNNING_TRANSACTION: {
1879            data.enforceInterface(IActivityManager.descriptor);
1880            int userid = data.readInt();
1881            boolean orStopping = data.readInt() != 0;
1882            boolean result = isUserRunning(userid, orStopping);
1883            reply.writeNoException();
1884            reply.writeInt(result ? 1 : 0);
1885            return true;
1886        }
1887
1888        case GET_RUNNING_USER_IDS_TRANSACTION: {
1889            data.enforceInterface(IActivityManager.descriptor);
1890            int[] result = getRunningUserIds();
1891            reply.writeNoException();
1892            reply.writeIntArray(result);
1893            return true;
1894        }
1895
1896        case REMOVE_TASK_TRANSACTION:
1897        {
1898            data.enforceInterface(IActivityManager.descriptor);
1899            int taskId = data.readInt();
1900            boolean result = removeTask(taskId);
1901            reply.writeNoException();
1902            reply.writeInt(result ? 1 : 0);
1903            return true;
1904        }
1905
1906        case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
1907            data.enforceInterface(IActivityManager.descriptor);
1908            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1909                    data.readStrongBinder());
1910            registerProcessObserver(observer);
1911            return true;
1912        }
1913
1914        case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
1915            data.enforceInterface(IActivityManager.descriptor);
1916            IProcessObserver observer = IProcessObserver.Stub.asInterface(
1917                    data.readStrongBinder());
1918            unregisterProcessObserver(observer);
1919            return true;
1920        }
1921
1922        case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1923        {
1924            data.enforceInterface(IActivityManager.descriptor);
1925            String pkg = data.readString();
1926            boolean ask = getPackageAskScreenCompat(pkg);
1927            reply.writeNoException();
1928            reply.writeInt(ask ? 1 : 0);
1929            return true;
1930        }
1931
1932        case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
1933        {
1934            data.enforceInterface(IActivityManager.descriptor);
1935            String pkg = data.readString();
1936            boolean ask = data.readInt() != 0;
1937            setPackageAskScreenCompat(pkg, ask);
1938            reply.writeNoException();
1939            return true;
1940        }
1941
1942        case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
1943            data.enforceInterface(IActivityManager.descriptor);
1944            IIntentSender r = IIntentSender.Stub.asInterface(
1945                    data.readStrongBinder());
1946            boolean res = isIntentSenderTargetedToPackage(r);
1947            reply.writeNoException();
1948            reply.writeInt(res ? 1 : 0);
1949            return true;
1950        }
1951
1952        case IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION: {
1953            data.enforceInterface(IActivityManager.descriptor);
1954            IIntentSender r = IIntentSender.Stub.asInterface(
1955                data.readStrongBinder());
1956            boolean res = isIntentSenderAnActivity(r);
1957            reply.writeNoException();
1958            reply.writeInt(res ? 1 : 0);
1959            return true;
1960        }
1961
1962        case GET_INTENT_FOR_INTENT_SENDER_TRANSACTION: {
1963            data.enforceInterface(IActivityManager.descriptor);
1964            IIntentSender r = IIntentSender.Stub.asInterface(
1965                data.readStrongBinder());
1966            Intent intent = getIntentForIntentSender(r);
1967            reply.writeNoException();
1968            if (intent != null) {
1969                reply.writeInt(1);
1970                intent.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1971            } else {
1972                reply.writeInt(0);
1973            }
1974            return true;
1975        }
1976
1977        case GET_TAG_FOR_INTENT_SENDER_TRANSACTION: {
1978            data.enforceInterface(IActivityManager.descriptor);
1979            IIntentSender r = IIntentSender.Stub.asInterface(
1980                data.readStrongBinder());
1981            String prefix = data.readString();
1982            String tag = getTagForIntentSender(r, prefix);
1983            reply.writeNoException();
1984            reply.writeString(tag);
1985            return true;
1986        }
1987
1988        case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
1989            data.enforceInterface(IActivityManager.descriptor);
1990            Configuration config = Configuration.CREATOR.createFromParcel(data);
1991            updatePersistentConfiguration(config);
1992            reply.writeNoException();
1993            return true;
1994        }
1995
1996        case GET_PROCESS_PSS_TRANSACTION: {
1997            data.enforceInterface(IActivityManager.descriptor);
1998            int[] pids = data.createIntArray();
1999            long[] pss = getProcessPss(pids);
2000            reply.writeNoException();
2001            reply.writeLongArray(pss);
2002            return true;
2003        }
2004
2005        case SHOW_BOOT_MESSAGE_TRANSACTION: {
2006            data.enforceInterface(IActivityManager.descriptor);
2007            CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
2008            boolean always = data.readInt() != 0;
2009            showBootMessage(msg, always);
2010            reply.writeNoException();
2011            return true;
2012        }
2013
2014        case KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION: {
2015            data.enforceInterface(IActivityManager.descriptor);
2016            keyguardWaitingForActivityDrawn();
2017            reply.writeNoException();
2018            return true;
2019        }
2020
2021        case SHOULD_UP_RECREATE_TASK_TRANSACTION: {
2022            data.enforceInterface(IActivityManager.descriptor);
2023            IBinder token = data.readStrongBinder();
2024            String destAffinity = data.readString();
2025            boolean res = shouldUpRecreateTask(token, destAffinity);
2026            reply.writeNoException();
2027            reply.writeInt(res ? 1 : 0);
2028            return true;
2029        }
2030
2031        case NAVIGATE_UP_TO_TRANSACTION: {
2032            data.enforceInterface(IActivityManager.descriptor);
2033            IBinder token = data.readStrongBinder();
2034            Intent target = Intent.CREATOR.createFromParcel(data);
2035            int resultCode = data.readInt();
2036            Intent resultData = null;
2037            if (data.readInt() != 0) {
2038                resultData = Intent.CREATOR.createFromParcel(data);
2039            }
2040            boolean res = navigateUpTo(token, target, resultCode, resultData);
2041            reply.writeNoException();
2042            reply.writeInt(res ? 1 : 0);
2043            return true;
2044        }
2045
2046        case GET_LAUNCHED_FROM_UID_TRANSACTION: {
2047            data.enforceInterface(IActivityManager.descriptor);
2048            IBinder token = data.readStrongBinder();
2049            int res = getLaunchedFromUid(token);
2050            reply.writeNoException();
2051            reply.writeInt(res);
2052            return true;
2053        }
2054
2055        case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
2056            data.enforceInterface(IActivityManager.descriptor);
2057            IBinder token = data.readStrongBinder();
2058            String res = getLaunchedFromPackage(token);
2059            reply.writeNoException();
2060            reply.writeString(res);
2061            return true;
2062        }
2063
2064        case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2065            data.enforceInterface(IActivityManager.descriptor);
2066            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2067                    data.readStrongBinder());
2068            registerUserSwitchObserver(observer);
2069            reply.writeNoException();
2070            return true;
2071        }
2072
2073        case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
2074            data.enforceInterface(IActivityManager.descriptor);
2075            IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
2076                    data.readStrongBinder());
2077            unregisterUserSwitchObserver(observer);
2078            reply.writeNoException();
2079            return true;
2080        }
2081
2082        case REQUEST_BUG_REPORT_TRANSACTION: {
2083            data.enforceInterface(IActivityManager.descriptor);
2084            requestBugReport();
2085            reply.writeNoException();
2086            return true;
2087        }
2088
2089        case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
2090            data.enforceInterface(IActivityManager.descriptor);
2091            int pid = data.readInt();
2092            boolean aboveSystem = data.readInt() != 0;
2093            String reason = data.readString();
2094            long res = inputDispatchingTimedOut(pid, aboveSystem, reason);
2095            reply.writeNoException();
2096            reply.writeLong(res);
2097            return true;
2098        }
2099
2100        case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2101            data.enforceInterface(IActivityManager.descriptor);
2102            int requestType = data.readInt();
2103            Bundle res = getAssistContextExtras(requestType);
2104            reply.writeNoException();
2105            reply.writeBundle(res);
2106            return true;
2107        }
2108
2109        case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
2110            data.enforceInterface(IActivityManager.descriptor);
2111            IBinder token = data.readStrongBinder();
2112            Bundle extras = data.readBundle();
2113            reportAssistContextExtras(token, extras);
2114            reply.writeNoException();
2115            return true;
2116        }
2117
2118        case LAUNCH_ASSIST_INTENT_TRANSACTION: {
2119            data.enforceInterface(IActivityManager.descriptor);
2120            Intent intent = Intent.CREATOR.createFromParcel(data);
2121            int requestType = data.readInt();
2122            String hint = data.readString();
2123            int userHandle = data.readInt();
2124            boolean res = launchAssistIntent(intent, requestType, hint, userHandle);
2125            reply.writeNoException();
2126            reply.writeInt(res ? 1 : 0);
2127            return true;
2128        }
2129
2130        case KILL_UID_TRANSACTION: {
2131            data.enforceInterface(IActivityManager.descriptor);
2132            int uid = data.readInt();
2133            String reason = data.readString();
2134            killUid(uid, reason);
2135            reply.writeNoException();
2136            return true;
2137        }
2138
2139        case HANG_TRANSACTION: {
2140            data.enforceInterface(IActivityManager.descriptor);
2141            IBinder who = data.readStrongBinder();
2142            boolean allowRestart = data.readInt() != 0;
2143            hang(who, allowRestart);
2144            reply.writeNoException();
2145            return true;
2146        }
2147
2148        case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
2149            data.enforceInterface(IActivityManager.descriptor);
2150            IBinder token = data.readStrongBinder();
2151            reportActivityFullyDrawn(token);
2152            reply.writeNoException();
2153            return true;
2154        }
2155
2156        case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
2157            data.enforceInterface(IActivityManager.descriptor);
2158            IBinder token = data.readStrongBinder();
2159            notifyActivityDrawn(token);
2160            reply.writeNoException();
2161            return true;
2162        }
2163
2164        case RESTART_TRANSACTION: {
2165            data.enforceInterface(IActivityManager.descriptor);
2166            restart();
2167            reply.writeNoException();
2168            return true;
2169        }
2170
2171        case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
2172            data.enforceInterface(IActivityManager.descriptor);
2173            performIdleMaintenance();
2174            reply.writeNoException();
2175            return true;
2176        }
2177
2178        case CREATE_ACTIVITY_CONTAINER_TRANSACTION: {
2179            data.enforceInterface(IActivityManager.descriptor);
2180            IBinder parentActivityToken = data.readStrongBinder();
2181            IActivityContainerCallback callback =
2182                    IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
2183            IActivityContainer activityContainer =
2184                    createActivityContainer(parentActivityToken, callback);
2185            reply.writeNoException();
2186            if (activityContainer != null) {
2187                reply.writeInt(1);
2188                reply.writeStrongBinder(activityContainer.asBinder());
2189            } else {
2190                reply.writeInt(0);
2191            }
2192            return true;
2193        }
2194
2195        case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
2196            data.enforceInterface(IActivityManager.descriptor);
2197            IActivityContainer activityContainer =
2198                    IActivityContainer.Stub.asInterface(data.readStrongBinder());
2199            deleteActivityContainer(activityContainer);
2200            reply.writeNoException();
2201            return true;
2202        }
2203
2204        case GET_ACTIVITY_CONTAINER_TRANSACTION: {
2205            data.enforceInterface(IActivityManager.descriptor);
2206            IBinder activityToken = data.readStrongBinder();
2207            IActivityContainer activityContainer = getEnclosingActivityContainer(activityToken);
2208            reply.writeNoException();
2209            if (activityContainer != null) {
2210                reply.writeInt(1);
2211                reply.writeStrongBinder(activityContainer.asBinder());
2212            } else {
2213                reply.writeInt(0);
2214            }
2215            return true;
2216        }
2217
2218        case GET_HOME_ACTIVITY_TOKEN_TRANSACTION: {
2219            data.enforceInterface(IActivityManager.descriptor);
2220            IBinder homeActivityToken = getHomeActivityToken();
2221            reply.writeNoException();
2222            reply.writeStrongBinder(homeActivityToken);
2223            return true;
2224        }
2225
2226        case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
2227            data.enforceInterface(IActivityManager.descriptor);
2228            final int taskId = data.readInt();
2229            startLockTaskMode(taskId);
2230            reply.writeNoException();
2231            return true;
2232        }
2233
2234        case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
2235            data.enforceInterface(IActivityManager.descriptor);
2236            IBinder token = data.readStrongBinder();
2237            startLockTaskMode(token);
2238            reply.writeNoException();
2239            return true;
2240        }
2241
2242        case START_LOCK_TASK_BY_CURRENT_TRANSACTION: {
2243            data.enforceInterface(IActivityManager.descriptor);
2244            startLockTaskModeOnCurrent();
2245            reply.writeNoException();
2246            return true;
2247        }
2248
2249        case STOP_LOCK_TASK_MODE_TRANSACTION: {
2250            data.enforceInterface(IActivityManager.descriptor);
2251            stopLockTaskMode();
2252            reply.writeNoException();
2253            return true;
2254        }
2255
2256        case STOP_LOCK_TASK_BY_CURRENT_TRANSACTION: {
2257            data.enforceInterface(IActivityManager.descriptor);
2258            stopLockTaskModeOnCurrent();
2259            reply.writeNoException();
2260            return true;
2261        }
2262
2263        case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
2264            data.enforceInterface(IActivityManager.descriptor);
2265            final boolean isInLockTaskMode = isInLockTaskMode();
2266            reply.writeNoException();
2267            reply.writeInt(isInLockTaskMode ? 1 : 0);
2268            return true;
2269        }
2270
2271        case SET_TASK_DESCRIPTION_TRANSACTION: {
2272            data.enforceInterface(IActivityManager.descriptor);
2273            IBinder token = data.readStrongBinder();
2274            ActivityManager.TaskDescription values =
2275                    ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
2276            setTaskDescription(token, values);
2277            reply.writeNoException();
2278            return true;
2279        }
2280
2281        case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
2282            data.enforceInterface(IActivityManager.descriptor);
2283            String filename = data.readString();
2284            Bitmap icon = getTaskDescriptionIcon(filename);
2285            reply.writeNoException();
2286            if (icon == null) {
2287                reply.writeInt(0);
2288            } else {
2289                reply.writeInt(1);
2290                icon.writeToParcel(reply, 0);
2291            }
2292            return true;
2293        }
2294
2295        case START_IN_PLACE_ANIMATION_TRANSACTION: {
2296            data.enforceInterface(IActivityManager.descriptor);
2297            final Bundle bundle;
2298            if (data.readInt() == 0) {
2299                bundle = null;
2300            } else {
2301                bundle = data.readBundle();
2302            }
2303            final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle);
2304            startInPlaceAnimationOnFrontMostApplication(options);
2305            reply.writeNoException();
2306            return true;
2307        }
2308
2309        case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
2310            data.enforceInterface(IActivityManager.descriptor);
2311            IBinder token = data.readStrongBinder();
2312            boolean enable = data.readInt() > 0;
2313            boolean success = requestVisibleBehind(token, enable);
2314            reply.writeNoException();
2315            reply.writeInt(success ? 1 : 0);
2316            return true;
2317        }
2318
2319        case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
2320            data.enforceInterface(IActivityManager.descriptor);
2321            IBinder token = data.readStrongBinder();
2322            final boolean enabled = isBackgroundVisibleBehind(token);
2323            reply.writeNoException();
2324            reply.writeInt(enabled ? 1 : 0);
2325            return true;
2326        }
2327
2328        case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
2329            data.enforceInterface(IActivityManager.descriptor);
2330            IBinder token = data.readStrongBinder();
2331            backgroundResourcesReleased(token);
2332            reply.writeNoException();
2333            return true;
2334        }
2335
2336        case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
2337            data.enforceInterface(IActivityManager.descriptor);
2338            IBinder token = data.readStrongBinder();
2339            notifyLaunchTaskBehindComplete(token);
2340            reply.writeNoException();
2341            return true;
2342        }
2343
2344        case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
2345            data.enforceInterface(IActivityManager.descriptor);
2346            IBinder token = data.readStrongBinder();
2347            notifyEnterAnimationComplete(token);
2348            reply.writeNoException();
2349            return true;
2350        }
2351
2352        case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
2353            data.enforceInterface(IActivityManager.descriptor);
2354            bootAnimationComplete();
2355            reply.writeNoException();
2356            return true;
2357        }
2358        }
2359
2360        return super.onTransact(code, data, reply, flags);
2361    }
2362
2363    public IBinder asBinder() {
2364        return this;
2365    }
2366
2367    private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
2368        protected IActivityManager create() {
2369            IBinder b = ServiceManager.getService("activity");
2370            if (false) {
2371                Log.v("ActivityManager", "default service binder = " + b);
2372            }
2373            IActivityManager am = asInterface(b);
2374            if (false) {
2375                Log.v("ActivityManager", "default service = " + am);
2376            }
2377            return am;
2378        }
2379    };
2380}
2381
2382class ActivityManagerProxy implements IActivityManager
2383{
2384    public ActivityManagerProxy(IBinder remote)
2385    {
2386        mRemote = remote;
2387    }
2388
2389    public IBinder asBinder()
2390    {
2391        return mRemote;
2392    }
2393
2394    public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
2395            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2396            int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
2397        Parcel data = Parcel.obtain();
2398        Parcel reply = Parcel.obtain();
2399        data.writeInterfaceToken(IActivityManager.descriptor);
2400        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2401        data.writeString(callingPackage);
2402        intent.writeToParcel(data, 0);
2403        data.writeString(resolvedType);
2404        data.writeStrongBinder(resultTo);
2405        data.writeString(resultWho);
2406        data.writeInt(requestCode);
2407        data.writeInt(startFlags);
2408        if (profilerInfo != null) {
2409            data.writeInt(1);
2410            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2411        } else {
2412            data.writeInt(0);
2413        }
2414        if (options != null) {
2415            data.writeInt(1);
2416            options.writeToParcel(data, 0);
2417        } else {
2418            data.writeInt(0);
2419        }
2420        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
2421        reply.readException();
2422        int result = reply.readInt();
2423        reply.recycle();
2424        data.recycle();
2425        return result;
2426    }
2427
2428    public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
2429            String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2430            int startFlags, ProfilerInfo profilerInfo, Bundle options,
2431            int userId) throws RemoteException {
2432        Parcel data = Parcel.obtain();
2433        Parcel reply = Parcel.obtain();
2434        data.writeInterfaceToken(IActivityManager.descriptor);
2435        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2436        data.writeString(callingPackage);
2437        intent.writeToParcel(data, 0);
2438        data.writeString(resolvedType);
2439        data.writeStrongBinder(resultTo);
2440        data.writeString(resultWho);
2441        data.writeInt(requestCode);
2442        data.writeInt(startFlags);
2443        if (profilerInfo != null) {
2444            data.writeInt(1);
2445            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2446        } else {
2447            data.writeInt(0);
2448        }
2449        if (options != null) {
2450            data.writeInt(1);
2451            options.writeToParcel(data, 0);
2452        } else {
2453            data.writeInt(0);
2454        }
2455        data.writeInt(userId);
2456        mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
2457        reply.readException();
2458        int result = reply.readInt();
2459        reply.recycle();
2460        data.recycle();
2461        return result;
2462    }
2463    public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
2464            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
2465            int startFlags, ProfilerInfo profilerInfo, Bundle options, int userId) throws RemoteException {
2466        Parcel data = Parcel.obtain();
2467        Parcel reply = Parcel.obtain();
2468        data.writeInterfaceToken(IActivityManager.descriptor);
2469        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2470        data.writeString(callingPackage);
2471        intent.writeToParcel(data, 0);
2472        data.writeString(resolvedType);
2473        data.writeStrongBinder(resultTo);
2474        data.writeString(resultWho);
2475        data.writeInt(requestCode);
2476        data.writeInt(startFlags);
2477        if (profilerInfo != null) {
2478            data.writeInt(1);
2479            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2480        } else {
2481            data.writeInt(0);
2482        }
2483        if (options != null) {
2484            data.writeInt(1);
2485            options.writeToParcel(data, 0);
2486        } else {
2487            data.writeInt(0);
2488        }
2489        data.writeInt(userId);
2490        mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
2491        reply.readException();
2492        int result = reply.readInt();
2493        reply.recycle();
2494        data.recycle();
2495        return result;
2496    }
2497    public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
2498            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2499            int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
2500            int userId) throws RemoteException {
2501        Parcel data = Parcel.obtain();
2502        Parcel reply = Parcel.obtain();
2503        data.writeInterfaceToken(IActivityManager.descriptor);
2504        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2505        data.writeString(callingPackage);
2506        intent.writeToParcel(data, 0);
2507        data.writeString(resolvedType);
2508        data.writeStrongBinder(resultTo);
2509        data.writeString(resultWho);
2510        data.writeInt(requestCode);
2511        data.writeInt(startFlags);
2512        if (profilerInfo != null) {
2513            data.writeInt(1);
2514            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2515        } else {
2516            data.writeInt(0);
2517        }
2518        if (options != null) {
2519            data.writeInt(1);
2520            options.writeToParcel(data, 0);
2521        } else {
2522            data.writeInt(0);
2523        }
2524        data.writeInt(userId);
2525        mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
2526        reply.readException();
2527        WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
2528        reply.recycle();
2529        data.recycle();
2530        return result;
2531    }
2532    public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
2533            Intent intent, String resolvedType, IBinder resultTo, String resultWho,
2534            int requestCode, int startFlags, Configuration config,
2535            Bundle options, int userId) throws RemoteException {
2536        Parcel data = Parcel.obtain();
2537        Parcel reply = Parcel.obtain();
2538        data.writeInterfaceToken(IActivityManager.descriptor);
2539        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2540        data.writeString(callingPackage);
2541        intent.writeToParcel(data, 0);
2542        data.writeString(resolvedType);
2543        data.writeStrongBinder(resultTo);
2544        data.writeString(resultWho);
2545        data.writeInt(requestCode);
2546        data.writeInt(startFlags);
2547        config.writeToParcel(data, 0);
2548        if (options != null) {
2549            data.writeInt(1);
2550            options.writeToParcel(data, 0);
2551        } else {
2552            data.writeInt(0);
2553        }
2554        data.writeInt(userId);
2555        mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
2556        reply.readException();
2557        int result = reply.readInt();
2558        reply.recycle();
2559        data.recycle();
2560        return result;
2561    }
2562    public int startActivityIntentSender(IApplicationThread caller,
2563            IntentSender intent, Intent fillInIntent, String resolvedType,
2564            IBinder resultTo, String resultWho, int requestCode,
2565            int flagsMask, int flagsValues, Bundle options) throws RemoteException {
2566        Parcel data = Parcel.obtain();
2567        Parcel reply = Parcel.obtain();
2568        data.writeInterfaceToken(IActivityManager.descriptor);
2569        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2570        intent.writeToParcel(data, 0);
2571        if (fillInIntent != null) {
2572            data.writeInt(1);
2573            fillInIntent.writeToParcel(data, 0);
2574        } else {
2575            data.writeInt(0);
2576        }
2577        data.writeString(resolvedType);
2578        data.writeStrongBinder(resultTo);
2579        data.writeString(resultWho);
2580        data.writeInt(requestCode);
2581        data.writeInt(flagsMask);
2582        data.writeInt(flagsValues);
2583        if (options != null) {
2584            data.writeInt(1);
2585            options.writeToParcel(data, 0);
2586        } else {
2587            data.writeInt(0);
2588        }
2589        mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
2590        reply.readException();
2591        int result = reply.readInt();
2592        reply.recycle();
2593        data.recycle();
2594        return result;
2595    }
2596    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
2597            Intent intent, String resolvedType, IVoiceInteractionSession session,
2598            IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
2599            Bundle options, int userId) throws RemoteException {
2600        Parcel data = Parcel.obtain();
2601        Parcel reply = Parcel.obtain();
2602        data.writeInterfaceToken(IActivityManager.descriptor);
2603        data.writeString(callingPackage);
2604        data.writeInt(callingPid);
2605        data.writeInt(callingUid);
2606        intent.writeToParcel(data, 0);
2607        data.writeString(resolvedType);
2608        data.writeStrongBinder(session.asBinder());
2609        data.writeStrongBinder(interactor.asBinder());
2610        data.writeInt(startFlags);
2611        if (profilerInfo != null) {
2612            data.writeInt(1);
2613            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2614        } else {
2615            data.writeInt(0);
2616        }
2617        if (options != null) {
2618            data.writeInt(1);
2619            options.writeToParcel(data, 0);
2620        } else {
2621            data.writeInt(0);
2622        }
2623        data.writeInt(userId);
2624        mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
2625        reply.readException();
2626        int result = reply.readInt();
2627        reply.recycle();
2628        data.recycle();
2629        return result;
2630    }
2631    public boolean startNextMatchingActivity(IBinder callingActivity,
2632            Intent intent, Bundle options) throws RemoteException {
2633        Parcel data = Parcel.obtain();
2634        Parcel reply = Parcel.obtain();
2635        data.writeInterfaceToken(IActivityManager.descriptor);
2636        data.writeStrongBinder(callingActivity);
2637        intent.writeToParcel(data, 0);
2638        if (options != null) {
2639            data.writeInt(1);
2640            options.writeToParcel(data, 0);
2641        } else {
2642            data.writeInt(0);
2643        }
2644        mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
2645        reply.readException();
2646        int result = reply.readInt();
2647        reply.recycle();
2648        data.recycle();
2649        return result != 0;
2650    }
2651    public int startActivityFromRecents(int taskId, Bundle options) throws RemoteException {
2652        Parcel data = Parcel.obtain();
2653        Parcel reply = Parcel.obtain();
2654        data.writeInterfaceToken(IActivityManager.descriptor);
2655        data.writeInt(taskId);
2656        if (options == null) {
2657            data.writeInt(0);
2658        } else {
2659            data.writeInt(1);
2660            options.writeToParcel(data, 0);
2661        }
2662        mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
2663        reply.readException();
2664        int result = reply.readInt();
2665        reply.recycle();
2666        data.recycle();
2667        return result;
2668    }
2669    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, boolean finishTask)
2670            throws RemoteException {
2671        Parcel data = Parcel.obtain();
2672        Parcel reply = Parcel.obtain();
2673        data.writeInterfaceToken(IActivityManager.descriptor);
2674        data.writeStrongBinder(token);
2675        data.writeInt(resultCode);
2676        if (resultData != null) {
2677            data.writeInt(1);
2678            resultData.writeToParcel(data, 0);
2679        } else {
2680            data.writeInt(0);
2681        }
2682        data.writeInt(finishTask ? 1 : 0);
2683        mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
2684        reply.readException();
2685        boolean res = reply.readInt() != 0;
2686        data.recycle();
2687        reply.recycle();
2688        return res;
2689    }
2690    public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
2691    {
2692        Parcel data = Parcel.obtain();
2693        Parcel reply = Parcel.obtain();
2694        data.writeInterfaceToken(IActivityManager.descriptor);
2695        data.writeStrongBinder(token);
2696        data.writeString(resultWho);
2697        data.writeInt(requestCode);
2698        mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
2699        reply.readException();
2700        data.recycle();
2701        reply.recycle();
2702    }
2703    public boolean finishActivityAffinity(IBinder token) throws RemoteException {
2704        Parcel data = Parcel.obtain();
2705        Parcel reply = Parcel.obtain();
2706        data.writeInterfaceToken(IActivityManager.descriptor);
2707        data.writeStrongBinder(token);
2708        mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
2709        reply.readException();
2710        boolean res = reply.readInt() != 0;
2711        data.recycle();
2712        reply.recycle();
2713        return res;
2714    }
2715    public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
2716        Parcel data = Parcel.obtain();
2717        Parcel reply = Parcel.obtain();
2718        data.writeInterfaceToken(IActivityManager.descriptor);
2719        data.writeStrongBinder(session.asBinder());
2720        mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
2721        reply.readException();
2722        data.recycle();
2723        reply.recycle();
2724    }
2725    public boolean releaseActivityInstance(IBinder token) throws RemoteException {
2726        Parcel data = Parcel.obtain();
2727        Parcel reply = Parcel.obtain();
2728        data.writeInterfaceToken(IActivityManager.descriptor);
2729        data.writeStrongBinder(token);
2730        mRemote.transact(RELEASE_ACTIVITY_INSTANCE_TRANSACTION, data, reply, 0);
2731        reply.readException();
2732        boolean res = reply.readInt() != 0;
2733        data.recycle();
2734        reply.recycle();
2735        return res;
2736    }
2737    public void releaseSomeActivities(IApplicationThread app) throws RemoteException {
2738        Parcel data = Parcel.obtain();
2739        Parcel reply = Parcel.obtain();
2740        data.writeInterfaceToken(IActivityManager.descriptor);
2741        data.writeStrongBinder(app.asBinder());
2742        mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
2743        reply.readException();
2744        data.recycle();
2745        reply.recycle();
2746    }
2747    public boolean willActivityBeVisible(IBinder token) throws RemoteException {
2748        Parcel data = Parcel.obtain();
2749        Parcel reply = Parcel.obtain();
2750        data.writeInterfaceToken(IActivityManager.descriptor);
2751        data.writeStrongBinder(token);
2752        mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
2753        reply.readException();
2754        boolean res = reply.readInt() != 0;
2755        data.recycle();
2756        reply.recycle();
2757        return res;
2758    }
2759    public Intent registerReceiver(IApplicationThread caller, String packageName,
2760            IIntentReceiver receiver,
2761            IntentFilter filter, String perm, int userId) throws RemoteException
2762    {
2763        Parcel data = Parcel.obtain();
2764        Parcel reply = Parcel.obtain();
2765        data.writeInterfaceToken(IActivityManager.descriptor);
2766        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2767        data.writeString(packageName);
2768        data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
2769        filter.writeToParcel(data, 0);
2770        data.writeString(perm);
2771        data.writeInt(userId);
2772        mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2773        reply.readException();
2774        Intent intent = null;
2775        int haveIntent = reply.readInt();
2776        if (haveIntent != 0) {
2777            intent = Intent.CREATOR.createFromParcel(reply);
2778        }
2779        reply.recycle();
2780        data.recycle();
2781        return intent;
2782    }
2783    public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
2784    {
2785        Parcel data = Parcel.obtain();
2786        Parcel reply = Parcel.obtain();
2787        data.writeInterfaceToken(IActivityManager.descriptor);
2788        data.writeStrongBinder(receiver.asBinder());
2789        mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
2790        reply.readException();
2791        data.recycle();
2792        reply.recycle();
2793    }
2794    public int broadcastIntent(IApplicationThread caller,
2795            Intent intent, String resolvedType,  IIntentReceiver resultTo,
2796            int resultCode, String resultData, Bundle map,
2797            String requiredPermission, int appOp, boolean serialized,
2798            boolean sticky, int userId) throws RemoteException
2799    {
2800        Parcel data = Parcel.obtain();
2801        Parcel reply = Parcel.obtain();
2802        data.writeInterfaceToken(IActivityManager.descriptor);
2803        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2804        intent.writeToParcel(data, 0);
2805        data.writeString(resolvedType);
2806        data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
2807        data.writeInt(resultCode);
2808        data.writeString(resultData);
2809        data.writeBundle(map);
2810        data.writeString(requiredPermission);
2811        data.writeInt(appOp);
2812        data.writeInt(serialized ? 1 : 0);
2813        data.writeInt(sticky ? 1 : 0);
2814        data.writeInt(userId);
2815        mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
2816        reply.readException();
2817        int res = reply.readInt();
2818        reply.recycle();
2819        data.recycle();
2820        return res;
2821    }
2822    public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
2823            throws RemoteException
2824    {
2825        Parcel data = Parcel.obtain();
2826        Parcel reply = Parcel.obtain();
2827        data.writeInterfaceToken(IActivityManager.descriptor);
2828        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
2829        intent.writeToParcel(data, 0);
2830        data.writeInt(userId);
2831        mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
2832        reply.readException();
2833        data.recycle();
2834        reply.recycle();
2835    }
2836    public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
2837    {
2838        Parcel data = Parcel.obtain();
2839        Parcel reply = Parcel.obtain();
2840        data.writeInterfaceToken(IActivityManager.descriptor);
2841        data.writeStrongBinder(who);
2842        data.writeInt(resultCode);
2843        data.writeString(resultData);
2844        data.writeBundle(map);
2845        data.writeInt(abortBroadcast ? 1 : 0);
2846        mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2847        reply.readException();
2848        data.recycle();
2849        reply.recycle();
2850    }
2851    public void attachApplication(IApplicationThread app) throws RemoteException
2852    {
2853        Parcel data = Parcel.obtain();
2854        Parcel reply = Parcel.obtain();
2855        data.writeInterfaceToken(IActivityManager.descriptor);
2856        data.writeStrongBinder(app.asBinder());
2857        mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
2858        reply.readException();
2859        data.recycle();
2860        reply.recycle();
2861    }
2862    public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
2863            throws RemoteException
2864    {
2865        Parcel data = Parcel.obtain();
2866        Parcel reply = Parcel.obtain();
2867        data.writeInterfaceToken(IActivityManager.descriptor);
2868        data.writeStrongBinder(token);
2869        if (config != null) {
2870            data.writeInt(1);
2871            config.writeToParcel(data, 0);
2872        } else {
2873            data.writeInt(0);
2874        }
2875        data.writeInt(stopProfiling ? 1 : 0);
2876        mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2877        reply.readException();
2878        data.recycle();
2879        reply.recycle();
2880    }
2881    public void activityResumed(IBinder token) throws RemoteException
2882    {
2883        Parcel data = Parcel.obtain();
2884        Parcel reply = Parcel.obtain();
2885        data.writeInterfaceToken(IActivityManager.descriptor);
2886        data.writeStrongBinder(token);
2887        mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
2888        reply.readException();
2889        data.recycle();
2890        reply.recycle();
2891    }
2892    public void activityPaused(IBinder token) throws RemoteException
2893    {
2894        Parcel data = Parcel.obtain();
2895        Parcel reply = Parcel.obtain();
2896        data.writeInterfaceToken(IActivityManager.descriptor);
2897        data.writeStrongBinder(token);
2898        mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
2899        reply.readException();
2900        data.recycle();
2901        reply.recycle();
2902    }
2903    public void activityStopped(IBinder token, Bundle state,
2904            PersistableBundle persistentState, CharSequence description) throws RemoteException
2905    {
2906        Parcel data = Parcel.obtain();
2907        Parcel reply = Parcel.obtain();
2908        data.writeInterfaceToken(IActivityManager.descriptor);
2909        data.writeStrongBinder(token);
2910        data.writeBundle(state);
2911        data.writePersistableBundle(persistentState);
2912        TextUtils.writeToParcel(description, data, 0);
2913        mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2914        reply.readException();
2915        data.recycle();
2916        reply.recycle();
2917    }
2918    public void activitySlept(IBinder token) throws RemoteException
2919    {
2920        Parcel data = Parcel.obtain();
2921        Parcel reply = Parcel.obtain();
2922        data.writeInterfaceToken(IActivityManager.descriptor);
2923        data.writeStrongBinder(token);
2924        mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2925        reply.readException();
2926        data.recycle();
2927        reply.recycle();
2928    }
2929    public void activityDestroyed(IBinder token) throws RemoteException
2930    {
2931        Parcel data = Parcel.obtain();
2932        Parcel reply = Parcel.obtain();
2933        data.writeInterfaceToken(IActivityManager.descriptor);
2934        data.writeStrongBinder(token);
2935        mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
2936        reply.readException();
2937        data.recycle();
2938        reply.recycle();
2939    }
2940    public String getCallingPackage(IBinder token) throws RemoteException
2941    {
2942        Parcel data = Parcel.obtain();
2943        Parcel reply = Parcel.obtain();
2944        data.writeInterfaceToken(IActivityManager.descriptor);
2945        data.writeStrongBinder(token);
2946        mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
2947        reply.readException();
2948        String res = reply.readString();
2949        data.recycle();
2950        reply.recycle();
2951        return res;
2952    }
2953    public ComponentName getCallingActivity(IBinder token)
2954            throws RemoteException {
2955        Parcel data = Parcel.obtain();
2956        Parcel reply = Parcel.obtain();
2957        data.writeInterfaceToken(IActivityManager.descriptor);
2958        data.writeStrongBinder(token);
2959        mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
2960        reply.readException();
2961        ComponentName res = ComponentName.readFromParcel(reply);
2962        data.recycle();
2963        reply.recycle();
2964        return res;
2965    }
2966    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
2967        Parcel data = Parcel.obtain();
2968        Parcel reply = Parcel.obtain();
2969        data.writeInterfaceToken(IActivityManager.descriptor);
2970        data.writeString(callingPackage);
2971        mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
2972        reply.readException();
2973        ArrayList<IAppTask> list = null;
2974        int N = reply.readInt();
2975        if (N >= 0) {
2976            list = new ArrayList<IAppTask>();
2977            while (N > 0) {
2978                IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
2979                list.add(task);
2980                N--;
2981            }
2982        }
2983        data.recycle();
2984        reply.recycle();
2985        return list;
2986    }
2987    public int addAppTask(IBinder activityToken, Intent intent,
2988            ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
2989        Parcel data = Parcel.obtain();
2990        Parcel reply = Parcel.obtain();
2991        data.writeInterfaceToken(IActivityManager.descriptor);
2992        data.writeStrongBinder(activityToken);
2993        intent.writeToParcel(data, 0);
2994        description.writeToParcel(data, 0);
2995        thumbnail.writeToParcel(data, 0);
2996        mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
2997        reply.readException();
2998        int res = reply.readInt();
2999        data.recycle();
3000        reply.recycle();
3001        return res;
3002    }
3003    public Point getAppTaskThumbnailSize() throws RemoteException {
3004        Parcel data = Parcel.obtain();
3005        Parcel reply = Parcel.obtain();
3006        data.writeInterfaceToken(IActivityManager.descriptor);
3007        mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
3008        reply.readException();
3009        Point size = Point.CREATOR.createFromParcel(reply);
3010        data.recycle();
3011        reply.recycle();
3012        return size;
3013    }
3014    public List getTasks(int maxNum, int flags) throws RemoteException {
3015        Parcel data = Parcel.obtain();
3016        Parcel reply = Parcel.obtain();
3017        data.writeInterfaceToken(IActivityManager.descriptor);
3018        data.writeInt(maxNum);
3019        data.writeInt(flags);
3020        mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
3021        reply.readException();
3022        ArrayList list = null;
3023        int N = reply.readInt();
3024        if (N >= 0) {
3025            list = new ArrayList();
3026            while (N > 0) {
3027                ActivityManager.RunningTaskInfo info =
3028                        ActivityManager.RunningTaskInfo.CREATOR
3029                                .createFromParcel(reply);
3030                list.add(info);
3031                N--;
3032            }
3033        }
3034        data.recycle();
3035        reply.recycle();
3036        return list;
3037    }
3038    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
3039            int flags, int userId) throws RemoteException {
3040        Parcel data = Parcel.obtain();
3041        Parcel reply = Parcel.obtain();
3042        data.writeInterfaceToken(IActivityManager.descriptor);
3043        data.writeInt(maxNum);
3044        data.writeInt(flags);
3045        data.writeInt(userId);
3046        mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
3047        reply.readException();
3048        ArrayList<ActivityManager.RecentTaskInfo> list
3049            = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
3050        data.recycle();
3051        reply.recycle();
3052        return list;
3053    }
3054    public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
3055        Parcel data = Parcel.obtain();
3056        Parcel reply = Parcel.obtain();
3057        data.writeInterfaceToken(IActivityManager.descriptor);
3058        data.writeInt(id);
3059        mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
3060        reply.readException();
3061        ActivityManager.TaskThumbnail taskThumbnail = null;
3062        if (reply.readInt() != 0) {
3063            taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
3064        }
3065        data.recycle();
3066        reply.recycle();
3067        return taskThumbnail;
3068    }
3069    public List getServices(int maxNum, int flags) throws RemoteException {
3070        Parcel data = Parcel.obtain();
3071        Parcel reply = Parcel.obtain();
3072        data.writeInterfaceToken(IActivityManager.descriptor);
3073        data.writeInt(maxNum);
3074        data.writeInt(flags);
3075        mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
3076        reply.readException();
3077        ArrayList list = null;
3078        int N = reply.readInt();
3079        if (N >= 0) {
3080            list = new ArrayList();
3081            while (N > 0) {
3082                ActivityManager.RunningServiceInfo info =
3083                        ActivityManager.RunningServiceInfo.CREATOR
3084                        .createFromParcel(reply);
3085                list.add(info);
3086                N--;
3087            }
3088        }
3089        data.recycle();
3090        reply.recycle();
3091        return list;
3092    }
3093    public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
3094            throws RemoteException {
3095        Parcel data = Parcel.obtain();
3096        Parcel reply = Parcel.obtain();
3097        data.writeInterfaceToken(IActivityManager.descriptor);
3098        mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
3099        reply.readException();
3100        ArrayList<ActivityManager.ProcessErrorStateInfo> list
3101            = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
3102        data.recycle();
3103        reply.recycle();
3104        return list;
3105    }
3106    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
3107            throws RemoteException {
3108        Parcel data = Parcel.obtain();
3109        Parcel reply = Parcel.obtain();
3110        data.writeInterfaceToken(IActivityManager.descriptor);
3111        mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
3112        reply.readException();
3113        ArrayList<ActivityManager.RunningAppProcessInfo> list
3114        = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
3115        data.recycle();
3116        reply.recycle();
3117        return list;
3118    }
3119    public List<ApplicationInfo> getRunningExternalApplications()
3120            throws RemoteException {
3121        Parcel data = Parcel.obtain();
3122        Parcel reply = Parcel.obtain();
3123        data.writeInterfaceToken(IActivityManager.descriptor);
3124        mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
3125        reply.readException();
3126        ArrayList<ApplicationInfo> list
3127        = reply.createTypedArrayList(ApplicationInfo.CREATOR);
3128        data.recycle();
3129        reply.recycle();
3130        return list;
3131    }
3132    public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
3133    {
3134        Parcel data = Parcel.obtain();
3135        Parcel reply = Parcel.obtain();
3136        data.writeInterfaceToken(IActivityManager.descriptor);
3137        data.writeInt(task);
3138        data.writeInt(flags);
3139        if (options != null) {
3140            data.writeInt(1);
3141            options.writeToParcel(data, 0);
3142        } else {
3143            data.writeInt(0);
3144        }
3145        mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
3146        reply.readException();
3147        data.recycle();
3148        reply.recycle();
3149    }
3150    public void moveTaskToBack(int task) throws RemoteException
3151    {
3152        Parcel data = Parcel.obtain();
3153        Parcel reply = Parcel.obtain();
3154        data.writeInterfaceToken(IActivityManager.descriptor);
3155        data.writeInt(task);
3156        mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3157        reply.readException();
3158        data.recycle();
3159        reply.recycle();
3160    }
3161    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
3162            throws RemoteException {
3163        Parcel data = Parcel.obtain();
3164        Parcel reply = Parcel.obtain();
3165        data.writeInterfaceToken(IActivityManager.descriptor);
3166        data.writeStrongBinder(token);
3167        data.writeInt(nonRoot ? 1 : 0);
3168        mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
3169        reply.readException();
3170        boolean res = reply.readInt() != 0;
3171        data.recycle();
3172        reply.recycle();
3173        return res;
3174    }
3175    public void moveTaskBackwards(int task) throws RemoteException
3176    {
3177        Parcel data = Parcel.obtain();
3178        Parcel reply = Parcel.obtain();
3179        data.writeInterfaceToken(IActivityManager.descriptor);
3180        data.writeInt(task);
3181        mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
3182        reply.readException();
3183        data.recycle();
3184        reply.recycle();
3185    }
3186    @Override
3187    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
3188    {
3189        Parcel data = Parcel.obtain();
3190        Parcel reply = Parcel.obtain();
3191        data.writeInterfaceToken(IActivityManager.descriptor);
3192        data.writeInt(taskId);
3193        data.writeInt(stackId);
3194        data.writeInt(toTop ? 1 : 0);
3195        mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
3196        reply.readException();
3197        data.recycle();
3198        reply.recycle();
3199    }
3200    @Override
3201    public void resizeStack(int stackBoxId, Rect r) throws RemoteException
3202    {
3203        Parcel data = Parcel.obtain();
3204        Parcel reply = Parcel.obtain();
3205        data.writeInterfaceToken(IActivityManager.descriptor);
3206        data.writeInt(stackBoxId);
3207        r.writeToParcel(data, 0);
3208        mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3209        reply.readException();
3210        data.recycle();
3211        reply.recycle();
3212    }
3213    @Override
3214    public List<StackInfo> getAllStackInfos() throws RemoteException
3215    {
3216        Parcel data = Parcel.obtain();
3217        Parcel reply = Parcel.obtain();
3218        data.writeInterfaceToken(IActivityManager.descriptor);
3219        mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
3220        reply.readException();
3221        ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
3222        data.recycle();
3223        reply.recycle();
3224        return list;
3225    }
3226    @Override
3227    public StackInfo getStackInfo(int stackId) throws RemoteException
3228    {
3229        Parcel data = Parcel.obtain();
3230        Parcel reply = Parcel.obtain();
3231        data.writeInterfaceToken(IActivityManager.descriptor);
3232        data.writeInt(stackId);
3233        mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
3234        reply.readException();
3235        int res = reply.readInt();
3236        StackInfo info = null;
3237        if (res != 0) {
3238            info = StackInfo.CREATOR.createFromParcel(reply);
3239        }
3240        data.recycle();
3241        reply.recycle();
3242        return info;
3243    }
3244    @Override
3245    public boolean isInHomeStack(int taskId) throws RemoteException {
3246        Parcel data = Parcel.obtain();
3247        Parcel reply = Parcel.obtain();
3248        data.writeInterfaceToken(IActivityManager.descriptor);
3249        data.writeInt(taskId);
3250        mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
3251        reply.readException();
3252        boolean isInHomeStack = reply.readInt() > 0;
3253        data.recycle();
3254        reply.recycle();
3255        return isInHomeStack;
3256    }
3257    @Override
3258    public void setFocusedStack(int stackId) throws RemoteException
3259    {
3260        Parcel data = Parcel.obtain();
3261        Parcel reply = Parcel.obtain();
3262        data.writeInterfaceToken(IActivityManager.descriptor);
3263        data.writeInt(stackId);
3264        mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3265        reply.readException();
3266        data.recycle();
3267        reply.recycle();
3268    }
3269    public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
3270    {
3271        Parcel data = Parcel.obtain();
3272        Parcel reply = Parcel.obtain();
3273        data.writeInterfaceToken(IActivityManager.descriptor);
3274        data.writeStrongBinder(token);
3275        data.writeInt(onlyRoot ? 1 : 0);
3276        mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
3277        reply.readException();
3278        int res = reply.readInt();
3279        data.recycle();
3280        reply.recycle();
3281        return res;
3282    }
3283    public ContentProviderHolder getContentProvider(IApplicationThread caller,
3284            String name, int userId, boolean stable) throws RemoteException {
3285        Parcel data = Parcel.obtain();
3286        Parcel reply = Parcel.obtain();
3287        data.writeInterfaceToken(IActivityManager.descriptor);
3288        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3289        data.writeString(name);
3290        data.writeInt(userId);
3291        data.writeInt(stable ? 1 : 0);
3292        mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3293        reply.readException();
3294        int res = reply.readInt();
3295        ContentProviderHolder cph = null;
3296        if (res != 0) {
3297            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
3298        }
3299        data.recycle();
3300        reply.recycle();
3301        return cph;
3302    }
3303    public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
3304            throws RemoteException {
3305        Parcel data = Parcel.obtain();
3306        Parcel reply = Parcel.obtain();
3307        data.writeInterfaceToken(IActivityManager.descriptor);
3308        data.writeString(name);
3309        data.writeInt(userId);
3310        data.writeStrongBinder(token);
3311        mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
3312        reply.readException();
3313        int res = reply.readInt();
3314        ContentProviderHolder cph = null;
3315        if (res != 0) {
3316            cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
3317        }
3318        data.recycle();
3319        reply.recycle();
3320        return cph;
3321    }
3322    public void publishContentProviders(IApplicationThread caller,
3323            List<ContentProviderHolder> providers) throws RemoteException
3324    {
3325        Parcel data = Parcel.obtain();
3326        Parcel reply = Parcel.obtain();
3327        data.writeInterfaceToken(IActivityManager.descriptor);
3328        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3329        data.writeTypedList(providers);
3330        mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
3331        reply.readException();
3332        data.recycle();
3333        reply.recycle();
3334    }
3335    public boolean refContentProvider(IBinder connection, int stable, int unstable)
3336            throws RemoteException {
3337        Parcel data = Parcel.obtain();
3338        Parcel reply = Parcel.obtain();
3339        data.writeInterfaceToken(IActivityManager.descriptor);
3340        data.writeStrongBinder(connection);
3341        data.writeInt(stable);
3342        data.writeInt(unstable);
3343        mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3344        reply.readException();
3345        boolean res = reply.readInt() != 0;
3346        data.recycle();
3347        reply.recycle();
3348        return res;
3349    }
3350
3351    public void unstableProviderDied(IBinder connection) throws RemoteException {
3352        Parcel data = Parcel.obtain();
3353        Parcel reply = Parcel.obtain();
3354        data.writeInterfaceToken(IActivityManager.descriptor);
3355        data.writeStrongBinder(connection);
3356        mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
3357        reply.readException();
3358        data.recycle();
3359        reply.recycle();
3360    }
3361
3362    @Override
3363    public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
3364        Parcel data = Parcel.obtain();
3365        Parcel reply = Parcel.obtain();
3366        data.writeInterfaceToken(IActivityManager.descriptor);
3367        data.writeStrongBinder(connection);
3368        mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
3369        reply.readException();
3370        data.recycle();
3371        reply.recycle();
3372    }
3373
3374    public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
3375        Parcel data = Parcel.obtain();
3376        Parcel reply = Parcel.obtain();
3377        data.writeInterfaceToken(IActivityManager.descriptor);
3378        data.writeStrongBinder(connection);
3379        data.writeInt(stable ? 1 : 0);
3380        mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
3381        reply.readException();
3382        data.recycle();
3383        reply.recycle();
3384    }
3385
3386    public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
3387        Parcel data = Parcel.obtain();
3388        Parcel reply = Parcel.obtain();
3389        data.writeInterfaceToken(IActivityManager.descriptor);
3390        data.writeString(name);
3391        data.writeStrongBinder(token);
3392        mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
3393        reply.readException();
3394        data.recycle();
3395        reply.recycle();
3396    }
3397
3398    public PendingIntent getRunningServiceControlPanel(ComponentName service)
3399            throws RemoteException
3400    {
3401        Parcel data = Parcel.obtain();
3402        Parcel reply = Parcel.obtain();
3403        data.writeInterfaceToken(IActivityManager.descriptor);
3404        service.writeToParcel(data, 0);
3405        mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
3406        reply.readException();
3407        PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
3408        data.recycle();
3409        reply.recycle();
3410        return res;
3411    }
3412
3413    public ComponentName startService(IApplicationThread caller, Intent service,
3414            String resolvedType, int userId) throws RemoteException
3415    {
3416        Parcel data = Parcel.obtain();
3417        Parcel reply = Parcel.obtain();
3418        data.writeInterfaceToken(IActivityManager.descriptor);
3419        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3420        service.writeToParcel(data, 0);
3421        data.writeString(resolvedType);
3422        data.writeInt(userId);
3423        mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
3424        reply.readException();
3425        ComponentName res = ComponentName.readFromParcel(reply);
3426        data.recycle();
3427        reply.recycle();
3428        return res;
3429    }
3430    public int stopService(IApplicationThread caller, Intent service,
3431            String resolvedType, int userId) throws RemoteException
3432    {
3433        Parcel data = Parcel.obtain();
3434        Parcel reply = Parcel.obtain();
3435        data.writeInterfaceToken(IActivityManager.descriptor);
3436        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3437        service.writeToParcel(data, 0);
3438        data.writeString(resolvedType);
3439        data.writeInt(userId);
3440        mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
3441        reply.readException();
3442        int res = reply.readInt();
3443        reply.recycle();
3444        data.recycle();
3445        return res;
3446    }
3447    public boolean stopServiceToken(ComponentName className, IBinder token,
3448            int startId) throws RemoteException {
3449        Parcel data = Parcel.obtain();
3450        Parcel reply = Parcel.obtain();
3451        data.writeInterfaceToken(IActivityManager.descriptor);
3452        ComponentName.writeToParcel(className, data);
3453        data.writeStrongBinder(token);
3454        data.writeInt(startId);
3455        mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
3456        reply.readException();
3457        boolean res = reply.readInt() != 0;
3458        data.recycle();
3459        reply.recycle();
3460        return res;
3461    }
3462    public void setServiceForeground(ComponentName className, IBinder token,
3463            int id, Notification notification, boolean removeNotification) throws RemoteException {
3464        Parcel data = Parcel.obtain();
3465        Parcel reply = Parcel.obtain();
3466        data.writeInterfaceToken(IActivityManager.descriptor);
3467        ComponentName.writeToParcel(className, data);
3468        data.writeStrongBinder(token);
3469        data.writeInt(id);
3470        if (notification != null) {
3471            data.writeInt(1);
3472            notification.writeToParcel(data, 0);
3473        } else {
3474            data.writeInt(0);
3475        }
3476        data.writeInt(removeNotification ? 1 : 0);
3477        mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
3478        reply.readException();
3479        data.recycle();
3480        reply.recycle();
3481    }
3482    public int bindService(IApplicationThread caller, IBinder token,
3483            Intent service, String resolvedType, IServiceConnection connection,
3484            int flags, int userId) throws RemoteException {
3485        Parcel data = Parcel.obtain();
3486        Parcel reply = Parcel.obtain();
3487        data.writeInterfaceToken(IActivityManager.descriptor);
3488        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
3489        data.writeStrongBinder(token);
3490        service.writeToParcel(data, 0);
3491        data.writeString(resolvedType);
3492        data.writeStrongBinder(connection.asBinder());
3493        data.writeInt(flags);
3494        data.writeInt(userId);
3495        mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
3496        reply.readException();
3497        int res = reply.readInt();
3498        data.recycle();
3499        reply.recycle();
3500        return res;
3501    }
3502    public boolean unbindService(IServiceConnection connection) throws RemoteException
3503    {
3504        Parcel data = Parcel.obtain();
3505        Parcel reply = Parcel.obtain();
3506        data.writeInterfaceToken(IActivityManager.descriptor);
3507        data.writeStrongBinder(connection.asBinder());
3508        mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
3509        reply.readException();
3510        boolean res = reply.readInt() != 0;
3511        data.recycle();
3512        reply.recycle();
3513        return res;
3514    }
3515
3516    public void publishService(IBinder token,
3517            Intent intent, IBinder service) throws RemoteException {
3518        Parcel data = Parcel.obtain();
3519        Parcel reply = Parcel.obtain();
3520        data.writeInterfaceToken(IActivityManager.descriptor);
3521        data.writeStrongBinder(token);
3522        intent.writeToParcel(data, 0);
3523        data.writeStrongBinder(service);
3524        mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
3525        reply.readException();
3526        data.recycle();
3527        reply.recycle();
3528    }
3529
3530    public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
3531            throws RemoteException {
3532        Parcel data = Parcel.obtain();
3533        Parcel reply = Parcel.obtain();
3534        data.writeInterfaceToken(IActivityManager.descriptor);
3535        data.writeStrongBinder(token);
3536        intent.writeToParcel(data, 0);
3537        data.writeInt(doRebind ? 1 : 0);
3538        mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
3539        reply.readException();
3540        data.recycle();
3541        reply.recycle();
3542    }
3543
3544    public void serviceDoneExecuting(IBinder token, int type, int startId,
3545            int res) throws RemoteException {
3546        Parcel data = Parcel.obtain();
3547        Parcel reply = Parcel.obtain();
3548        data.writeInterfaceToken(IActivityManager.descriptor);
3549        data.writeStrongBinder(token);
3550        data.writeInt(type);
3551        data.writeInt(startId);
3552        data.writeInt(res);
3553        mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
3554        reply.readException();
3555        data.recycle();
3556        reply.recycle();
3557    }
3558
3559    public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
3560        Parcel data = Parcel.obtain();
3561        Parcel reply = Parcel.obtain();
3562        data.writeInterfaceToken(IActivityManager.descriptor);
3563        service.writeToParcel(data, 0);
3564        data.writeString(resolvedType);
3565        mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
3566        reply.readException();
3567        IBinder binder = reply.readStrongBinder();
3568        reply.recycle();
3569        data.recycle();
3570        return binder;
3571    }
3572
3573    public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
3574            throws RemoteException {
3575        Parcel data = Parcel.obtain();
3576        Parcel reply = Parcel.obtain();
3577        data.writeInterfaceToken(IActivityManager.descriptor);
3578        app.writeToParcel(data, 0);
3579        data.writeInt(backupRestoreMode);
3580        mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
3581        reply.readException();
3582        boolean success = reply.readInt() != 0;
3583        reply.recycle();
3584        data.recycle();
3585        return success;
3586    }
3587
3588    public void clearPendingBackup() throws RemoteException {
3589        Parcel data = Parcel.obtain();
3590        Parcel reply = Parcel.obtain();
3591        data.writeInterfaceToken(IActivityManager.descriptor);
3592        mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
3593        reply.recycle();
3594        data.recycle();
3595    }
3596
3597    public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
3598        Parcel data = Parcel.obtain();
3599        Parcel reply = Parcel.obtain();
3600        data.writeInterfaceToken(IActivityManager.descriptor);
3601        data.writeString(packageName);
3602        data.writeStrongBinder(agent);
3603        mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
3604        reply.recycle();
3605        data.recycle();
3606    }
3607
3608    public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
3609        Parcel data = Parcel.obtain();
3610        Parcel reply = Parcel.obtain();
3611        data.writeInterfaceToken(IActivityManager.descriptor);
3612        app.writeToParcel(data, 0);
3613        mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
3614        reply.readException();
3615        reply.recycle();
3616        data.recycle();
3617    }
3618
3619    public boolean startInstrumentation(ComponentName className, String profileFile,
3620            int flags, Bundle arguments, IInstrumentationWatcher watcher,
3621            IUiAutomationConnection connection, int userId, String instructionSet)
3622            throws RemoteException {
3623        Parcel data = Parcel.obtain();
3624        Parcel reply = Parcel.obtain();
3625        data.writeInterfaceToken(IActivityManager.descriptor);
3626        ComponentName.writeToParcel(className, data);
3627        data.writeString(profileFile);
3628        data.writeInt(flags);
3629        data.writeBundle(arguments);
3630        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
3631        data.writeStrongBinder(connection != null ? connection.asBinder() : null);
3632        data.writeInt(userId);
3633        data.writeString(instructionSet);
3634        mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3635        reply.readException();
3636        boolean res = reply.readInt() != 0;
3637        reply.recycle();
3638        data.recycle();
3639        return res;
3640    }
3641
3642    public void finishInstrumentation(IApplicationThread target,
3643            int resultCode, Bundle results) throws RemoteException {
3644        Parcel data = Parcel.obtain();
3645        Parcel reply = Parcel.obtain();
3646        data.writeInterfaceToken(IActivityManager.descriptor);
3647        data.writeStrongBinder(target != null ? target.asBinder() : null);
3648        data.writeInt(resultCode);
3649        data.writeBundle(results);
3650        mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
3651        reply.readException();
3652        data.recycle();
3653        reply.recycle();
3654    }
3655    public Configuration getConfiguration() throws RemoteException
3656    {
3657        Parcel data = Parcel.obtain();
3658        Parcel reply = Parcel.obtain();
3659        data.writeInterfaceToken(IActivityManager.descriptor);
3660        mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
3661        reply.readException();
3662        Configuration res = Configuration.CREATOR.createFromParcel(reply);
3663        reply.recycle();
3664        data.recycle();
3665        return res;
3666    }
3667    public void updateConfiguration(Configuration values) throws RemoteException
3668    {
3669        Parcel data = Parcel.obtain();
3670        Parcel reply = Parcel.obtain();
3671        data.writeInterfaceToken(IActivityManager.descriptor);
3672        values.writeToParcel(data, 0);
3673        mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
3674        reply.readException();
3675        data.recycle();
3676        reply.recycle();
3677    }
3678    public void setRequestedOrientation(IBinder token, int requestedOrientation)
3679            throws RemoteException {
3680        Parcel data = Parcel.obtain();
3681        Parcel reply = Parcel.obtain();
3682        data.writeInterfaceToken(IActivityManager.descriptor);
3683        data.writeStrongBinder(token);
3684        data.writeInt(requestedOrientation);
3685        mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3686        reply.readException();
3687        data.recycle();
3688        reply.recycle();
3689    }
3690    public int getRequestedOrientation(IBinder token) throws RemoteException {
3691        Parcel data = Parcel.obtain();
3692        Parcel reply = Parcel.obtain();
3693        data.writeInterfaceToken(IActivityManager.descriptor);
3694        data.writeStrongBinder(token);
3695        mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
3696        reply.readException();
3697        int res = reply.readInt();
3698        data.recycle();
3699        reply.recycle();
3700        return res;
3701    }
3702    public ComponentName getActivityClassForToken(IBinder token)
3703            throws RemoteException {
3704        Parcel data = Parcel.obtain();
3705        Parcel reply = Parcel.obtain();
3706        data.writeInterfaceToken(IActivityManager.descriptor);
3707        data.writeStrongBinder(token);
3708        mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
3709        reply.readException();
3710        ComponentName res = ComponentName.readFromParcel(reply);
3711        data.recycle();
3712        reply.recycle();
3713        return res;
3714    }
3715    public String getPackageForToken(IBinder token) throws RemoteException
3716    {
3717        Parcel data = Parcel.obtain();
3718        Parcel reply = Parcel.obtain();
3719        data.writeInterfaceToken(IActivityManager.descriptor);
3720        data.writeStrongBinder(token);
3721        mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
3722        reply.readException();
3723        String res = reply.readString();
3724        data.recycle();
3725        reply.recycle();
3726        return res;
3727    }
3728    public IIntentSender getIntentSender(int type,
3729            String packageName, IBinder token, String resultWho,
3730            int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
3731            Bundle options, int userId) throws RemoteException {
3732        Parcel data = Parcel.obtain();
3733        Parcel reply = Parcel.obtain();
3734        data.writeInterfaceToken(IActivityManager.descriptor);
3735        data.writeInt(type);
3736        data.writeString(packageName);
3737        data.writeStrongBinder(token);
3738        data.writeString(resultWho);
3739        data.writeInt(requestCode);
3740        if (intents != null) {
3741            data.writeInt(1);
3742            data.writeTypedArray(intents, 0);
3743            data.writeStringArray(resolvedTypes);
3744        } else {
3745            data.writeInt(0);
3746        }
3747        data.writeInt(flags);
3748        if (options != null) {
3749            data.writeInt(1);
3750            options.writeToParcel(data, 0);
3751        } else {
3752            data.writeInt(0);
3753        }
3754        data.writeInt(userId);
3755        mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
3756        reply.readException();
3757        IIntentSender res = IIntentSender.Stub.asInterface(
3758                reply.readStrongBinder());
3759        data.recycle();
3760        reply.recycle();
3761        return res;
3762    }
3763    public void cancelIntentSender(IIntentSender sender) throws RemoteException {
3764        Parcel data = Parcel.obtain();
3765        Parcel reply = Parcel.obtain();
3766        data.writeInterfaceToken(IActivityManager.descriptor);
3767        data.writeStrongBinder(sender.asBinder());
3768        mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
3769        reply.readException();
3770        data.recycle();
3771        reply.recycle();
3772    }
3773    public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
3774        Parcel data = Parcel.obtain();
3775        Parcel reply = Parcel.obtain();
3776        data.writeInterfaceToken(IActivityManager.descriptor);
3777        data.writeStrongBinder(sender.asBinder());
3778        mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
3779        reply.readException();
3780        String res = reply.readString();
3781        data.recycle();
3782        reply.recycle();
3783        return res;
3784    }
3785    public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
3786        Parcel data = Parcel.obtain();
3787        Parcel reply = Parcel.obtain();
3788        data.writeInterfaceToken(IActivityManager.descriptor);
3789        data.writeStrongBinder(sender.asBinder());
3790        mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
3791        reply.readException();
3792        int res = reply.readInt();
3793        data.recycle();
3794        reply.recycle();
3795        return res;
3796    }
3797    public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
3798            boolean requireFull, String name, String callerPackage) throws RemoteException {
3799        Parcel data = Parcel.obtain();
3800        Parcel reply = Parcel.obtain();
3801        data.writeInterfaceToken(IActivityManager.descriptor);
3802        data.writeInt(callingPid);
3803        data.writeInt(callingUid);
3804        data.writeInt(userId);
3805        data.writeInt(allowAll ? 1 : 0);
3806        data.writeInt(requireFull ? 1 : 0);
3807        data.writeString(name);
3808        data.writeString(callerPackage);
3809        mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
3810        reply.readException();
3811        int res = reply.readInt();
3812        data.recycle();
3813        reply.recycle();
3814        return res;
3815    }
3816    public void setProcessLimit(int max) throws RemoteException
3817    {
3818        Parcel data = Parcel.obtain();
3819        Parcel reply = Parcel.obtain();
3820        data.writeInterfaceToken(IActivityManager.descriptor);
3821        data.writeInt(max);
3822        mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
3823        reply.readException();
3824        data.recycle();
3825        reply.recycle();
3826    }
3827    public int getProcessLimit() throws RemoteException
3828    {
3829        Parcel data = Parcel.obtain();
3830        Parcel reply = Parcel.obtain();
3831        data.writeInterfaceToken(IActivityManager.descriptor);
3832        mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
3833        reply.readException();
3834        int res = reply.readInt();
3835        data.recycle();
3836        reply.recycle();
3837        return res;
3838    }
3839    public void setProcessForeground(IBinder token, int pid,
3840            boolean isForeground) throws RemoteException {
3841        Parcel data = Parcel.obtain();
3842        Parcel reply = Parcel.obtain();
3843        data.writeInterfaceToken(IActivityManager.descriptor);
3844        data.writeStrongBinder(token);
3845        data.writeInt(pid);
3846        data.writeInt(isForeground ? 1 : 0);
3847        mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
3848        reply.readException();
3849        data.recycle();
3850        reply.recycle();
3851    }
3852    public int checkPermission(String permission, int pid, int uid)
3853            throws RemoteException {
3854        Parcel data = Parcel.obtain();
3855        Parcel reply = Parcel.obtain();
3856        data.writeInterfaceToken(IActivityManager.descriptor);
3857        data.writeString(permission);
3858        data.writeInt(pid);
3859        data.writeInt(uid);
3860        mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
3861        reply.readException();
3862        int res = reply.readInt();
3863        data.recycle();
3864        reply.recycle();
3865        return res;
3866    }
3867    public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
3868            throws RemoteException {
3869        Parcel data = Parcel.obtain();
3870        Parcel reply = Parcel.obtain();
3871        data.writeInterfaceToken(IActivityManager.descriptor);
3872        data.writeString(permission);
3873        data.writeInt(pid);
3874        data.writeInt(uid);
3875        data.writeStrongBinder(callerToken);
3876        mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
3877        reply.readException();
3878        int res = reply.readInt();
3879        data.recycle();
3880        reply.recycle();
3881        return res;
3882    }
3883    public boolean clearApplicationUserData(final String packageName,
3884            final IPackageDataObserver observer, final int userId) throws RemoteException {
3885        Parcel data = Parcel.obtain();
3886        Parcel reply = Parcel.obtain();
3887        data.writeInterfaceToken(IActivityManager.descriptor);
3888        data.writeString(packageName);
3889        data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
3890        data.writeInt(userId);
3891        mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
3892        reply.readException();
3893        boolean res = reply.readInt() != 0;
3894        data.recycle();
3895        reply.recycle();
3896        return res;
3897    }
3898    public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
3899            IBinder callerToken) throws RemoteException {
3900        Parcel data = Parcel.obtain();
3901        Parcel reply = Parcel.obtain();
3902        data.writeInterfaceToken(IActivityManager.descriptor);
3903        uri.writeToParcel(data, 0);
3904        data.writeInt(pid);
3905        data.writeInt(uid);
3906        data.writeInt(mode);
3907        data.writeInt(userId);
3908        data.writeStrongBinder(callerToken);
3909        mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
3910        reply.readException();
3911        int res = reply.readInt();
3912        data.recycle();
3913        reply.recycle();
3914        return res;
3915    }
3916    public void grantUriPermission(IApplicationThread caller, String targetPkg,
3917            Uri uri, int mode, int userId) throws RemoteException {
3918        Parcel data = Parcel.obtain();
3919        Parcel reply = Parcel.obtain();
3920        data.writeInterfaceToken(IActivityManager.descriptor);
3921        data.writeStrongBinder(caller.asBinder());
3922        data.writeString(targetPkg);
3923        uri.writeToParcel(data, 0);
3924        data.writeInt(mode);
3925        data.writeInt(userId);
3926        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
3927        reply.readException();
3928        data.recycle();
3929        reply.recycle();
3930    }
3931    public void revokeUriPermission(IApplicationThread caller, Uri uri,
3932            int mode, int userId) throws RemoteException {
3933        Parcel data = Parcel.obtain();
3934        Parcel reply = Parcel.obtain();
3935        data.writeInterfaceToken(IActivityManager.descriptor);
3936        data.writeStrongBinder(caller.asBinder());
3937        uri.writeToParcel(data, 0);
3938        data.writeInt(mode);
3939        data.writeInt(userId);
3940        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3941        reply.readException();
3942        data.recycle();
3943        reply.recycle();
3944    }
3945
3946    @Override
3947    public void takePersistableUriPermission(Uri uri, int mode, int userId)
3948            throws RemoteException {
3949        Parcel data = Parcel.obtain();
3950        Parcel reply = Parcel.obtain();
3951        data.writeInterfaceToken(IActivityManager.descriptor);
3952        uri.writeToParcel(data, 0);
3953        data.writeInt(mode);
3954        data.writeInt(userId);
3955        mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3956        reply.readException();
3957        data.recycle();
3958        reply.recycle();
3959    }
3960
3961    @Override
3962    public void releasePersistableUriPermission(Uri uri, int mode, int userId)
3963            throws RemoteException {
3964        Parcel data = Parcel.obtain();
3965        Parcel reply = Parcel.obtain();
3966        data.writeInterfaceToken(IActivityManager.descriptor);
3967        uri.writeToParcel(data, 0);
3968        data.writeInt(mode);
3969        data.writeInt(userId);
3970        mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
3971        reply.readException();
3972        data.recycle();
3973        reply.recycle();
3974    }
3975
3976    @Override
3977    public ParceledListSlice<UriPermission> getPersistedUriPermissions(
3978            String packageName, boolean incoming) throws RemoteException {
3979        Parcel data = Parcel.obtain();
3980        Parcel reply = Parcel.obtain();
3981        data.writeInterfaceToken(IActivityManager.descriptor);
3982        data.writeString(packageName);
3983        data.writeInt(incoming ? 1 : 0);
3984        mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
3985        reply.readException();
3986        final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
3987                reply);
3988        data.recycle();
3989        reply.recycle();
3990        return perms;
3991    }
3992
3993    public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
3994            throws RemoteException {
3995        Parcel data = Parcel.obtain();
3996        Parcel reply = Parcel.obtain();
3997        data.writeInterfaceToken(IActivityManager.descriptor);
3998        data.writeStrongBinder(who.asBinder());
3999        data.writeInt(waiting ? 1 : 0);
4000        mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
4001        reply.readException();
4002        data.recycle();
4003        reply.recycle();
4004    }
4005    public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
4006        Parcel data = Parcel.obtain();
4007        Parcel reply = Parcel.obtain();
4008        data.writeInterfaceToken(IActivityManager.descriptor);
4009        mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
4010        reply.readException();
4011        outInfo.readFromParcel(reply);
4012        data.recycle();
4013        reply.recycle();
4014    }
4015    public void unhandledBack() throws RemoteException
4016    {
4017        Parcel data = Parcel.obtain();
4018        Parcel reply = Parcel.obtain();
4019        data.writeInterfaceToken(IActivityManager.descriptor);
4020        mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
4021        reply.readException();
4022        data.recycle();
4023        reply.recycle();
4024    }
4025    public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
4026    {
4027        Parcel data = Parcel.obtain();
4028        Parcel reply = Parcel.obtain();
4029        data.writeInterfaceToken(IActivityManager.descriptor);
4030        mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
4031        reply.readException();
4032        ParcelFileDescriptor pfd = null;
4033        if (reply.readInt() != 0) {
4034            pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
4035        }
4036        data.recycle();
4037        reply.recycle();
4038        return pfd;
4039    }
4040    public void setLockScreenShown(boolean shown) throws RemoteException
4041    {
4042        Parcel data = Parcel.obtain();
4043        Parcel reply = Parcel.obtain();
4044        data.writeInterfaceToken(IActivityManager.descriptor);
4045        data.writeInt(shown ? 1 : 0);
4046        mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
4047        reply.readException();
4048        data.recycle();
4049        reply.recycle();
4050    }
4051    public void setDebugApp(
4052        String packageName, boolean waitForDebugger, boolean persistent)
4053        throws RemoteException
4054    {
4055        Parcel data = Parcel.obtain();
4056        Parcel reply = Parcel.obtain();
4057        data.writeInterfaceToken(IActivityManager.descriptor);
4058        data.writeString(packageName);
4059        data.writeInt(waitForDebugger ? 1 : 0);
4060        data.writeInt(persistent ? 1 : 0);
4061        mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
4062        reply.readException();
4063        data.recycle();
4064        reply.recycle();
4065    }
4066    public void setAlwaysFinish(boolean enabled) throws RemoteException
4067    {
4068        Parcel data = Parcel.obtain();
4069        Parcel reply = Parcel.obtain();
4070        data.writeInterfaceToken(IActivityManager.descriptor);
4071        data.writeInt(enabled ? 1 : 0);
4072        mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
4073        reply.readException();
4074        data.recycle();
4075        reply.recycle();
4076    }
4077    public void setActivityController(IActivityController watcher) throws RemoteException
4078    {
4079        Parcel data = Parcel.obtain();
4080        Parcel reply = Parcel.obtain();
4081        data.writeInterfaceToken(IActivityManager.descriptor);
4082        data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
4083        mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
4084        reply.readException();
4085        data.recycle();
4086        reply.recycle();
4087    }
4088    public void enterSafeMode() throws RemoteException {
4089        Parcel data = Parcel.obtain();
4090        data.writeInterfaceToken(IActivityManager.descriptor);
4091        mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
4092        data.recycle();
4093    }
4094    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg)
4095            throws RemoteException {
4096        Parcel data = Parcel.obtain();
4097        data.writeInterfaceToken(IActivityManager.descriptor);
4098        data.writeStrongBinder(sender.asBinder());
4099        data.writeInt(sourceUid);
4100        data.writeString(sourcePkg);
4101        mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
4102        data.recycle();
4103    }
4104    public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
4105        Parcel data = Parcel.obtain();
4106        Parcel reply = Parcel.obtain();
4107        data.writeInterfaceToken(IActivityManager.descriptor);
4108        data.writeIntArray(pids);
4109        data.writeString(reason);
4110        data.writeInt(secure ? 1 : 0);
4111        mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
4112        reply.readException();
4113        boolean res = reply.readInt() != 0;
4114        data.recycle();
4115        reply.recycle();
4116        return res;
4117    }
4118    @Override
4119    public boolean killProcessesBelowForeground(String reason) throws RemoteException {
4120        Parcel data = Parcel.obtain();
4121        Parcel reply = Parcel.obtain();
4122        data.writeInterfaceToken(IActivityManager.descriptor);
4123        data.writeString(reason);
4124        mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
4125        boolean res = reply.readInt() != 0;
4126        data.recycle();
4127        reply.recycle();
4128        return res;
4129    }
4130    public boolean testIsSystemReady()
4131    {
4132        /* this base class version is never called */
4133        return true;
4134    }
4135    public void handleApplicationCrash(IBinder app,
4136            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
4137    {
4138        Parcel data = Parcel.obtain();
4139        Parcel reply = Parcel.obtain();
4140        data.writeInterfaceToken(IActivityManager.descriptor);
4141        data.writeStrongBinder(app);
4142        crashInfo.writeToParcel(data, 0);
4143        mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
4144        reply.readException();
4145        reply.recycle();
4146        data.recycle();
4147    }
4148
4149    public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
4150            ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
4151    {
4152        Parcel data = Parcel.obtain();
4153        Parcel reply = Parcel.obtain();
4154        data.writeInterfaceToken(IActivityManager.descriptor);
4155        data.writeStrongBinder(app);
4156        data.writeString(tag);
4157        data.writeInt(system ? 1 : 0);
4158        crashInfo.writeToParcel(data, 0);
4159        mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
4160        reply.readException();
4161        boolean res = reply.readInt() != 0;
4162        reply.recycle();
4163        data.recycle();
4164        return res;
4165    }
4166
4167    public void handleApplicationStrictModeViolation(IBinder app,
4168            int violationMask,
4169            StrictMode.ViolationInfo info) throws RemoteException
4170    {
4171        Parcel data = Parcel.obtain();
4172        Parcel reply = Parcel.obtain();
4173        data.writeInterfaceToken(IActivityManager.descriptor);
4174        data.writeStrongBinder(app);
4175        data.writeInt(violationMask);
4176        info.writeToParcel(data, 0);
4177        mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
4178        reply.readException();
4179        reply.recycle();
4180        data.recycle();
4181    }
4182
4183    public void signalPersistentProcesses(int sig) throws RemoteException {
4184        Parcel data = Parcel.obtain();
4185        Parcel reply = Parcel.obtain();
4186        data.writeInterfaceToken(IActivityManager.descriptor);
4187        data.writeInt(sig);
4188        mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
4189        reply.readException();
4190        data.recycle();
4191        reply.recycle();
4192    }
4193
4194    public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
4195        Parcel data = Parcel.obtain();
4196        Parcel reply = Parcel.obtain();
4197        data.writeInterfaceToken(IActivityManager.descriptor);
4198        data.writeString(packageName);
4199        data.writeInt(userId);
4200        mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
4201        reply.readException();
4202        data.recycle();
4203        reply.recycle();
4204    }
4205
4206    public void killAllBackgroundProcesses() throws RemoteException {
4207        Parcel data = Parcel.obtain();
4208        Parcel reply = Parcel.obtain();
4209        data.writeInterfaceToken(IActivityManager.descriptor);
4210        mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
4211        reply.readException();
4212        data.recycle();
4213        reply.recycle();
4214    }
4215
4216    public void forceStopPackage(String packageName, int userId) throws RemoteException {
4217        Parcel data = Parcel.obtain();
4218        Parcel reply = Parcel.obtain();
4219        data.writeInterfaceToken(IActivityManager.descriptor);
4220        data.writeString(packageName);
4221        data.writeInt(userId);
4222        mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
4223        reply.readException();
4224        data.recycle();
4225        reply.recycle();
4226    }
4227
4228    public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
4229            throws RemoteException
4230    {
4231        Parcel data = Parcel.obtain();
4232        Parcel reply = Parcel.obtain();
4233        data.writeInterfaceToken(IActivityManager.descriptor);
4234        mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
4235        reply.readException();
4236        outInfo.readFromParcel(reply);
4237        reply.recycle();
4238        data.recycle();
4239    }
4240
4241    public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
4242    {
4243        Parcel data = Parcel.obtain();
4244        Parcel reply = Parcel.obtain();
4245        data.writeInterfaceToken(IActivityManager.descriptor);
4246        mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
4247        reply.readException();
4248        ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
4249        reply.recycle();
4250        data.recycle();
4251        return res;
4252    }
4253
4254    public boolean profileControl(String process, int userId, boolean start,
4255            ProfilerInfo profilerInfo, int profileType) throws RemoteException
4256    {
4257        Parcel data = Parcel.obtain();
4258        Parcel reply = Parcel.obtain();
4259        data.writeInterfaceToken(IActivityManager.descriptor);
4260        data.writeString(process);
4261        data.writeInt(userId);
4262        data.writeInt(start ? 1 : 0);
4263        data.writeInt(profileType);
4264        if (profilerInfo != null) {
4265            data.writeInt(1);
4266            profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
4267        } else {
4268            data.writeInt(0);
4269        }
4270        mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
4271        reply.readException();
4272        boolean res = reply.readInt() != 0;
4273        reply.recycle();
4274        data.recycle();
4275        return res;
4276    }
4277
4278    public boolean shutdown(int timeout) throws RemoteException
4279    {
4280        Parcel data = Parcel.obtain();
4281        Parcel reply = Parcel.obtain();
4282        data.writeInterfaceToken(IActivityManager.descriptor);
4283        data.writeInt(timeout);
4284        mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
4285        reply.readException();
4286        boolean res = reply.readInt() != 0;
4287        reply.recycle();
4288        data.recycle();
4289        return res;
4290    }
4291
4292    public void stopAppSwitches() throws RemoteException {
4293        Parcel data = Parcel.obtain();
4294        Parcel reply = Parcel.obtain();
4295        data.writeInterfaceToken(IActivityManager.descriptor);
4296        mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
4297        reply.readException();
4298        reply.recycle();
4299        data.recycle();
4300    }
4301
4302    public void resumeAppSwitches() throws RemoteException {
4303        Parcel data = Parcel.obtain();
4304        Parcel reply = Parcel.obtain();
4305        data.writeInterfaceToken(IActivityManager.descriptor);
4306        mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
4307        reply.readException();
4308        reply.recycle();
4309        data.recycle();
4310    }
4311
4312    public void addPackageDependency(String packageName) throws RemoteException {
4313        Parcel data = Parcel.obtain();
4314        Parcel reply = Parcel.obtain();
4315        data.writeInterfaceToken(IActivityManager.descriptor);
4316        data.writeString(packageName);
4317        mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
4318        reply.readException();
4319        data.recycle();
4320        reply.recycle();
4321    }
4322
4323    public void killApplicationWithAppId(String pkg, int appid, String reason)
4324            throws RemoteException {
4325        Parcel data = Parcel.obtain();
4326        Parcel reply = Parcel.obtain();
4327        data.writeInterfaceToken(IActivityManager.descriptor);
4328        data.writeString(pkg);
4329        data.writeInt(appid);
4330        data.writeString(reason);
4331        mRemote.transact(KILL_APPLICATION_WITH_APPID_TRANSACTION, data, reply, 0);
4332        reply.readException();
4333        data.recycle();
4334        reply.recycle();
4335    }
4336
4337    public void closeSystemDialogs(String reason) throws RemoteException {
4338        Parcel data = Parcel.obtain();
4339        Parcel reply = Parcel.obtain();
4340        data.writeInterfaceToken(IActivityManager.descriptor);
4341        data.writeString(reason);
4342        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
4343        reply.readException();
4344        data.recycle();
4345        reply.recycle();
4346    }
4347
4348    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
4349            throws RemoteException {
4350        Parcel data = Parcel.obtain();
4351        Parcel reply = Parcel.obtain();
4352        data.writeInterfaceToken(IActivityManager.descriptor);
4353        data.writeIntArray(pids);
4354        mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
4355        reply.readException();
4356        Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
4357        data.recycle();
4358        reply.recycle();
4359        return res;
4360    }
4361
4362    public void killApplicationProcess(String processName, int uid) throws RemoteException {
4363        Parcel data = Parcel.obtain();
4364        Parcel reply = Parcel.obtain();
4365        data.writeInterfaceToken(IActivityManager.descriptor);
4366        data.writeString(processName);
4367        data.writeInt(uid);
4368        mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
4369        reply.readException();
4370        data.recycle();
4371        reply.recycle();
4372    }
4373
4374    public void overridePendingTransition(IBinder token, String packageName,
4375            int enterAnim, int exitAnim) throws RemoteException {
4376        Parcel data = Parcel.obtain();
4377        Parcel reply = Parcel.obtain();
4378        data.writeInterfaceToken(IActivityManager.descriptor);
4379        data.writeStrongBinder(token);
4380        data.writeString(packageName);
4381        data.writeInt(enterAnim);
4382        data.writeInt(exitAnim);
4383        mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
4384        reply.readException();
4385        data.recycle();
4386        reply.recycle();
4387    }
4388
4389    public boolean isUserAMonkey() throws RemoteException {
4390        Parcel data = Parcel.obtain();
4391        Parcel reply = Parcel.obtain();
4392        data.writeInterfaceToken(IActivityManager.descriptor);
4393        mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
4394        reply.readException();
4395        boolean res = reply.readInt() != 0;
4396        data.recycle();
4397        reply.recycle();
4398        return res;
4399    }
4400
4401    public void setUserIsMonkey(boolean monkey) throws RemoteException {
4402        Parcel data = Parcel.obtain();
4403        Parcel reply = Parcel.obtain();
4404        data.writeInterfaceToken(IActivityManager.descriptor);
4405        data.writeInt(monkey ? 1 : 0);
4406        mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
4407        reply.readException();
4408        data.recycle();
4409        reply.recycle();
4410    }
4411
4412    public void finishHeavyWeightApp() throws RemoteException {
4413        Parcel data = Parcel.obtain();
4414        Parcel reply = Parcel.obtain();
4415        data.writeInterfaceToken(IActivityManager.descriptor);
4416        mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
4417        reply.readException();
4418        data.recycle();
4419        reply.recycle();
4420    }
4421
4422    public boolean convertFromTranslucent(IBinder token)
4423            throws RemoteException {
4424        Parcel data = Parcel.obtain();
4425        Parcel reply = Parcel.obtain();
4426        data.writeInterfaceToken(IActivityManager.descriptor);
4427        data.writeStrongBinder(token);
4428        mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
4429        reply.readException();
4430        boolean res = reply.readInt() != 0;
4431        data.recycle();
4432        reply.recycle();
4433        return res;
4434    }
4435
4436    public boolean convertToTranslucent(IBinder token, ActivityOptions options)
4437            throws RemoteException {
4438        Parcel data = Parcel.obtain();
4439        Parcel reply = Parcel.obtain();
4440        data.writeInterfaceToken(IActivityManager.descriptor);
4441        data.writeStrongBinder(token);
4442        if (options == null) {
4443            data.writeInt(0);
4444        } else {
4445            data.writeInt(1);
4446            data.writeBundle(options.toBundle());
4447        }
4448        mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
4449        reply.readException();
4450        boolean res = reply.readInt() != 0;
4451        data.recycle();
4452        reply.recycle();
4453        return res;
4454    }
4455
4456    public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
4457        Parcel data = Parcel.obtain();
4458        Parcel reply = Parcel.obtain();
4459        data.writeInterfaceToken(IActivityManager.descriptor);
4460        data.writeStrongBinder(token);
4461        mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
4462        reply.readException();
4463        Bundle bundle = reply.readBundle();
4464        ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle);
4465        data.recycle();
4466        reply.recycle();
4467        return options;
4468    }
4469
4470    public void setImmersive(IBinder token, boolean immersive)
4471            throws RemoteException {
4472        Parcel data = Parcel.obtain();
4473        Parcel reply = Parcel.obtain();
4474        data.writeInterfaceToken(IActivityManager.descriptor);
4475        data.writeStrongBinder(token);
4476        data.writeInt(immersive ? 1 : 0);
4477        mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
4478        reply.readException();
4479        data.recycle();
4480        reply.recycle();
4481    }
4482
4483    public boolean isImmersive(IBinder token)
4484            throws RemoteException {
4485        Parcel data = Parcel.obtain();
4486        Parcel reply = Parcel.obtain();
4487        data.writeInterfaceToken(IActivityManager.descriptor);
4488        data.writeStrongBinder(token);
4489        mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
4490        reply.readException();
4491        boolean res = reply.readInt() == 1;
4492        data.recycle();
4493        reply.recycle();
4494        return res;
4495    }
4496
4497    public boolean isTopOfTask(IBinder token) throws RemoteException {
4498        Parcel data = Parcel.obtain();
4499        Parcel reply = Parcel.obtain();
4500        data.writeInterfaceToken(IActivityManager.descriptor);
4501        data.writeStrongBinder(token);
4502        mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
4503        reply.readException();
4504        boolean res = reply.readInt() == 1;
4505        data.recycle();
4506        reply.recycle();
4507        return res;
4508    }
4509
4510    public boolean isTopActivityImmersive()
4511            throws RemoteException {
4512        Parcel data = Parcel.obtain();
4513        Parcel reply = Parcel.obtain();
4514        data.writeInterfaceToken(IActivityManager.descriptor);
4515        mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
4516        reply.readException();
4517        boolean res = reply.readInt() == 1;
4518        data.recycle();
4519        reply.recycle();
4520        return res;
4521    }
4522
4523    public void crashApplication(int uid, int initialPid, String packageName,
4524            String message) throws RemoteException {
4525        Parcel data = Parcel.obtain();
4526        Parcel reply = Parcel.obtain();
4527        data.writeInterfaceToken(IActivityManager.descriptor);
4528        data.writeInt(uid);
4529        data.writeInt(initialPid);
4530        data.writeString(packageName);
4531        data.writeString(message);
4532        mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
4533        reply.readException();
4534        data.recycle();
4535        reply.recycle();
4536    }
4537
4538    public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
4539        Parcel data = Parcel.obtain();
4540        Parcel reply = Parcel.obtain();
4541        data.writeInterfaceToken(IActivityManager.descriptor);
4542        uri.writeToParcel(data, 0);
4543        data.writeInt(userId);
4544        mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
4545        reply.readException();
4546        String res = reply.readString();
4547        data.recycle();
4548        reply.recycle();
4549        return res;
4550    }
4551
4552    public IBinder newUriPermissionOwner(String name)
4553            throws RemoteException {
4554        Parcel data = Parcel.obtain();
4555        Parcel reply = Parcel.obtain();
4556        data.writeInterfaceToken(IActivityManager.descriptor);
4557        data.writeString(name);
4558        mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
4559        reply.readException();
4560        IBinder res = reply.readStrongBinder();
4561        data.recycle();
4562        reply.recycle();
4563        return res;
4564    }
4565
4566    public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
4567            Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
4568        Parcel data = Parcel.obtain();
4569        Parcel reply = Parcel.obtain();
4570        data.writeInterfaceToken(IActivityManager.descriptor);
4571        data.writeStrongBinder(owner);
4572        data.writeInt(fromUid);
4573        data.writeString(targetPkg);
4574        uri.writeToParcel(data, 0);
4575        data.writeInt(mode);
4576        data.writeInt(sourceUserId);
4577        data.writeInt(targetUserId);
4578        mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4579        reply.readException();
4580        data.recycle();
4581        reply.recycle();
4582    }
4583
4584    public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
4585            int mode, int userId) throws RemoteException {
4586        Parcel data = Parcel.obtain();
4587        Parcel reply = Parcel.obtain();
4588        data.writeInterfaceToken(IActivityManager.descriptor);
4589        data.writeStrongBinder(owner);
4590        if (uri != null) {
4591            data.writeInt(1);
4592            uri.writeToParcel(data, 0);
4593        } else {
4594            data.writeInt(0);
4595        }
4596        data.writeInt(mode);
4597        data.writeInt(userId);
4598        mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
4599        reply.readException();
4600        data.recycle();
4601        reply.recycle();
4602    }
4603
4604    public int checkGrantUriPermission(int callingUid, String targetPkg,
4605            Uri uri, int modeFlags, int userId) throws RemoteException {
4606        Parcel data = Parcel.obtain();
4607        Parcel reply = Parcel.obtain();
4608        data.writeInterfaceToken(IActivityManager.descriptor);
4609        data.writeInt(callingUid);
4610        data.writeString(targetPkg);
4611        uri.writeToParcel(data, 0);
4612        data.writeInt(modeFlags);
4613        data.writeInt(userId);
4614        mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
4615        reply.readException();
4616        int res = reply.readInt();
4617        data.recycle();
4618        reply.recycle();
4619        return res;
4620    }
4621
4622    public boolean dumpHeap(String process, int userId, boolean managed,
4623            String path, ParcelFileDescriptor fd) throws RemoteException {
4624        Parcel data = Parcel.obtain();
4625        Parcel reply = Parcel.obtain();
4626        data.writeInterfaceToken(IActivityManager.descriptor);
4627        data.writeString(process);
4628        data.writeInt(userId);
4629        data.writeInt(managed ? 1 : 0);
4630        data.writeString(path);
4631        if (fd != null) {
4632            data.writeInt(1);
4633            fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
4634        } else {
4635            data.writeInt(0);
4636        }
4637        mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
4638        reply.readException();
4639        boolean res = reply.readInt() != 0;
4640        reply.recycle();
4641        data.recycle();
4642        return res;
4643    }
4644
4645    public int startActivities(IApplicationThread caller, String callingPackage,
4646            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
4647            Bundle options, int userId) throws RemoteException {
4648        Parcel data = Parcel.obtain();
4649        Parcel reply = Parcel.obtain();
4650        data.writeInterfaceToken(IActivityManager.descriptor);
4651        data.writeStrongBinder(caller != null ? caller.asBinder() : null);
4652        data.writeString(callingPackage);
4653        data.writeTypedArray(intents, 0);
4654        data.writeStringArray(resolvedTypes);
4655        data.writeStrongBinder(resultTo);
4656        if (options != null) {
4657            data.writeInt(1);
4658            options.writeToParcel(data, 0);
4659        } else {
4660            data.writeInt(0);
4661        }
4662        data.writeInt(userId);
4663        mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
4664        reply.readException();
4665        int result = reply.readInt();
4666        reply.recycle();
4667        data.recycle();
4668        return result;
4669    }
4670
4671    public int getFrontActivityScreenCompatMode() throws RemoteException {
4672        Parcel data = Parcel.obtain();
4673        Parcel reply = Parcel.obtain();
4674        data.writeInterfaceToken(IActivityManager.descriptor);
4675        mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4676        reply.readException();
4677        int mode = reply.readInt();
4678        reply.recycle();
4679        data.recycle();
4680        return mode;
4681    }
4682
4683    public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
4684        Parcel data = Parcel.obtain();
4685        Parcel reply = Parcel.obtain();
4686        data.writeInterfaceToken(IActivityManager.descriptor);
4687        data.writeInt(mode);
4688        mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4689        reply.readException();
4690        reply.recycle();
4691        data.recycle();
4692    }
4693
4694    public int getPackageScreenCompatMode(String packageName) throws RemoteException {
4695        Parcel data = Parcel.obtain();
4696        Parcel reply = Parcel.obtain();
4697        data.writeInterfaceToken(IActivityManager.descriptor);
4698        data.writeString(packageName);
4699        mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4700        reply.readException();
4701        int mode = reply.readInt();
4702        reply.recycle();
4703        data.recycle();
4704        return mode;
4705    }
4706
4707    public void setPackageScreenCompatMode(String packageName, int mode)
4708            throws RemoteException {
4709        Parcel data = Parcel.obtain();
4710        Parcel reply = Parcel.obtain();
4711        data.writeInterfaceToken(IActivityManager.descriptor);
4712        data.writeString(packageName);
4713        data.writeInt(mode);
4714        mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
4715        reply.readException();
4716        reply.recycle();
4717        data.recycle();
4718    }
4719
4720    public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
4721        Parcel data = Parcel.obtain();
4722        Parcel reply = Parcel.obtain();
4723        data.writeInterfaceToken(IActivityManager.descriptor);
4724        data.writeString(packageName);
4725        mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4726        reply.readException();
4727        boolean ask = reply.readInt() != 0;
4728        reply.recycle();
4729        data.recycle();
4730        return ask;
4731    }
4732
4733    public void setPackageAskScreenCompat(String packageName, boolean ask)
4734            throws RemoteException {
4735        Parcel data = Parcel.obtain();
4736        Parcel reply = Parcel.obtain();
4737        data.writeInterfaceToken(IActivityManager.descriptor);
4738        data.writeString(packageName);
4739        data.writeInt(ask ? 1 : 0);
4740        mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
4741        reply.readException();
4742        reply.recycle();
4743        data.recycle();
4744    }
4745
4746    public boolean switchUser(int userid) throws RemoteException {
4747        Parcel data = Parcel.obtain();
4748        Parcel reply = Parcel.obtain();
4749        data.writeInterfaceToken(IActivityManager.descriptor);
4750        data.writeInt(userid);
4751        mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
4752        reply.readException();
4753        boolean result = reply.readInt() != 0;
4754        reply.recycle();
4755        data.recycle();
4756        return result;
4757    }
4758
4759    public boolean startUserInBackground(int userid) throws RemoteException {
4760        Parcel data = Parcel.obtain();
4761        Parcel reply = Parcel.obtain();
4762        data.writeInterfaceToken(IActivityManager.descriptor);
4763        data.writeInt(userid);
4764        mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
4765        reply.readException();
4766        boolean result = reply.readInt() != 0;
4767        reply.recycle();
4768        data.recycle();
4769        return result;
4770    }
4771
4772    public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
4773        Parcel data = Parcel.obtain();
4774        Parcel reply = Parcel.obtain();
4775        data.writeInterfaceToken(IActivityManager.descriptor);
4776        data.writeInt(userid);
4777        data.writeStrongInterface(callback);
4778        mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
4779        reply.readException();
4780        int result = reply.readInt();
4781        reply.recycle();
4782        data.recycle();
4783        return result;
4784    }
4785
4786    public UserInfo getCurrentUser() throws RemoteException {
4787        Parcel data = Parcel.obtain();
4788        Parcel reply = Parcel.obtain();
4789        data.writeInterfaceToken(IActivityManager.descriptor);
4790        mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
4791        reply.readException();
4792        UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
4793        reply.recycle();
4794        data.recycle();
4795        return userInfo;
4796    }
4797
4798    public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException {
4799        Parcel data = Parcel.obtain();
4800        Parcel reply = Parcel.obtain();
4801        data.writeInterfaceToken(IActivityManager.descriptor);
4802        data.writeInt(userid);
4803        data.writeInt(orStopping ? 1 : 0);
4804        mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
4805        reply.readException();
4806        boolean result = reply.readInt() != 0;
4807        reply.recycle();
4808        data.recycle();
4809        return result;
4810    }
4811
4812    public int[] getRunningUserIds() throws RemoteException {
4813        Parcel data = Parcel.obtain();
4814        Parcel reply = Parcel.obtain();
4815        data.writeInterfaceToken(IActivityManager.descriptor);
4816        mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
4817        reply.readException();
4818        int[] result = reply.createIntArray();
4819        reply.recycle();
4820        data.recycle();
4821        return result;
4822    }
4823
4824    public boolean removeTask(int taskId) throws RemoteException {
4825        Parcel data = Parcel.obtain();
4826        Parcel reply = Parcel.obtain();
4827        data.writeInterfaceToken(IActivityManager.descriptor);
4828        data.writeInt(taskId);
4829        mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
4830        reply.readException();
4831        boolean result = reply.readInt() != 0;
4832        reply.recycle();
4833        data.recycle();
4834        return result;
4835    }
4836
4837    public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
4838        Parcel data = Parcel.obtain();
4839        Parcel reply = Parcel.obtain();
4840        data.writeInterfaceToken(IActivityManager.descriptor);
4841        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4842        mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
4843        reply.readException();
4844        data.recycle();
4845        reply.recycle();
4846    }
4847
4848    public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
4849        Parcel data = Parcel.obtain();
4850        Parcel reply = Parcel.obtain();
4851        data.writeInterfaceToken(IActivityManager.descriptor);
4852        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
4853        mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
4854        reply.readException();
4855        data.recycle();
4856        reply.recycle();
4857    }
4858
4859    public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
4860        Parcel data = Parcel.obtain();
4861        Parcel reply = Parcel.obtain();
4862        data.writeInterfaceToken(IActivityManager.descriptor);
4863        data.writeStrongBinder(sender.asBinder());
4864        mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
4865        reply.readException();
4866        boolean res = reply.readInt() != 0;
4867        data.recycle();
4868        reply.recycle();
4869        return res;
4870    }
4871
4872    public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
4873        Parcel data = Parcel.obtain();
4874        Parcel reply = Parcel.obtain();
4875        data.writeInterfaceToken(IActivityManager.descriptor);
4876        data.writeStrongBinder(sender.asBinder());
4877        mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
4878        reply.readException();
4879        boolean res = reply.readInt() != 0;
4880        data.recycle();
4881        reply.recycle();
4882        return res;
4883    }
4884
4885    public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
4886        Parcel data = Parcel.obtain();
4887        Parcel reply = Parcel.obtain();
4888        data.writeInterfaceToken(IActivityManager.descriptor);
4889        data.writeStrongBinder(sender.asBinder());
4890        mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4891        reply.readException();
4892        Intent res = reply.readInt() != 0
4893                ? Intent.CREATOR.createFromParcel(reply) : null;
4894        data.recycle();
4895        reply.recycle();
4896        return res;
4897    }
4898
4899    public String getTagForIntentSender(IIntentSender sender, String prefix)
4900            throws RemoteException {
4901        Parcel data = Parcel.obtain();
4902        Parcel reply = Parcel.obtain();
4903        data.writeInterfaceToken(IActivityManager.descriptor);
4904        data.writeStrongBinder(sender.asBinder());
4905        data.writeString(prefix);
4906        mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
4907        reply.readException();
4908        String res = reply.readString();
4909        data.recycle();
4910        reply.recycle();
4911        return res;
4912    }
4913
4914    public void updatePersistentConfiguration(Configuration values) throws RemoteException
4915    {
4916        Parcel data = Parcel.obtain();
4917        Parcel reply = Parcel.obtain();
4918        data.writeInterfaceToken(IActivityManager.descriptor);
4919        values.writeToParcel(data, 0);
4920        mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
4921        reply.readException();
4922        data.recycle();
4923        reply.recycle();
4924    }
4925
4926    public long[] getProcessPss(int[] pids) throws RemoteException {
4927        Parcel data = Parcel.obtain();
4928        Parcel reply = Parcel.obtain();
4929        data.writeInterfaceToken(IActivityManager.descriptor);
4930        data.writeIntArray(pids);
4931        mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
4932        reply.readException();
4933        long[] res = reply.createLongArray();
4934        data.recycle();
4935        reply.recycle();
4936        return res;
4937    }
4938
4939    public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
4940        Parcel data = Parcel.obtain();
4941        Parcel reply = Parcel.obtain();
4942        data.writeInterfaceToken(IActivityManager.descriptor);
4943        TextUtils.writeToParcel(msg, data, 0);
4944        data.writeInt(always ? 1 : 0);
4945        mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
4946        reply.readException();
4947        data.recycle();
4948        reply.recycle();
4949    }
4950
4951    public void keyguardWaitingForActivityDrawn() throws RemoteException {
4952        Parcel data = Parcel.obtain();
4953        Parcel reply = Parcel.obtain();
4954        data.writeInterfaceToken(IActivityManager.descriptor);
4955        mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
4956        reply.readException();
4957        data.recycle();
4958        reply.recycle();
4959    }
4960
4961    public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
4962            throws RemoteException {
4963        Parcel data = Parcel.obtain();
4964        Parcel reply = Parcel.obtain();
4965        data.writeInterfaceToken(IActivityManager.descriptor);
4966        data.writeStrongBinder(token);
4967        data.writeString(destAffinity);
4968        mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
4969        reply.readException();
4970        boolean result = reply.readInt() != 0;
4971        data.recycle();
4972        reply.recycle();
4973        return result;
4974    }
4975
4976    public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
4977            throws RemoteException {
4978        Parcel data = Parcel.obtain();
4979        Parcel reply = Parcel.obtain();
4980        data.writeInterfaceToken(IActivityManager.descriptor);
4981        data.writeStrongBinder(token);
4982        target.writeToParcel(data, 0);
4983        data.writeInt(resultCode);
4984        if (resultData != null) {
4985            data.writeInt(1);
4986            resultData.writeToParcel(data, 0);
4987        } else {
4988            data.writeInt(0);
4989        }
4990        mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
4991        reply.readException();
4992        boolean result = reply.readInt() != 0;
4993        data.recycle();
4994        reply.recycle();
4995        return result;
4996    }
4997
4998    public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
4999        Parcel data = Parcel.obtain();
5000        Parcel reply = Parcel.obtain();
5001        data.writeInterfaceToken(IActivityManager.descriptor);
5002        data.writeStrongBinder(activityToken);
5003        mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
5004        reply.readException();
5005        int result = reply.readInt();
5006        data.recycle();
5007        reply.recycle();
5008        return result;
5009    }
5010
5011    public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
5012        Parcel data = Parcel.obtain();
5013        Parcel reply = Parcel.obtain();
5014        data.writeInterfaceToken(IActivityManager.descriptor);
5015        data.writeStrongBinder(activityToken);
5016        mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
5017        reply.readException();
5018        String result = reply.readString();
5019        data.recycle();
5020        reply.recycle();
5021        return result;
5022    }
5023
5024    public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
5025        Parcel data = Parcel.obtain();
5026        Parcel reply = Parcel.obtain();
5027        data.writeInterfaceToken(IActivityManager.descriptor);
5028        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5029        mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
5030        reply.readException();
5031        data.recycle();
5032        reply.recycle();
5033    }
5034
5035    public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
5036        Parcel data = Parcel.obtain();
5037        Parcel reply = Parcel.obtain();
5038        data.writeInterfaceToken(IActivityManager.descriptor);
5039        data.writeStrongBinder(observer != null ? observer.asBinder() : null);
5040        mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
5041        reply.readException();
5042        data.recycle();
5043        reply.recycle();
5044    }
5045
5046    public void requestBugReport() throws RemoteException {
5047        Parcel data = Parcel.obtain();
5048        Parcel reply = Parcel.obtain();
5049        data.writeInterfaceToken(IActivityManager.descriptor);
5050        mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
5051        reply.readException();
5052        data.recycle();
5053        reply.recycle();
5054    }
5055
5056    public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
5057            throws RemoteException {
5058        Parcel data = Parcel.obtain();
5059        Parcel reply = Parcel.obtain();
5060        data.writeInterfaceToken(IActivityManager.descriptor);
5061        data.writeInt(pid);
5062        data.writeInt(aboveSystem ? 1 : 0);
5063        data.writeString(reason);
5064        mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
5065        reply.readException();
5066        long res = reply.readInt();
5067        data.recycle();
5068        reply.recycle();
5069        return res;
5070    }
5071
5072    public Bundle getAssistContextExtras(int requestType) throws RemoteException {
5073        Parcel data = Parcel.obtain();
5074        Parcel reply = Parcel.obtain();
5075        data.writeInterfaceToken(IActivityManager.descriptor);
5076        data.writeInt(requestType);
5077        mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
5078        reply.readException();
5079        Bundle res = reply.readBundle();
5080        data.recycle();
5081        reply.recycle();
5082        return res;
5083    }
5084
5085    public void reportAssistContextExtras(IBinder token, Bundle extras)
5086            throws RemoteException {
5087        Parcel data = Parcel.obtain();
5088        Parcel reply = Parcel.obtain();
5089        data.writeInterfaceToken(IActivityManager.descriptor);
5090        data.writeStrongBinder(token);
5091        data.writeBundle(extras);
5092        mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
5093        reply.readException();
5094        data.recycle();
5095        reply.recycle();
5096    }
5097
5098    public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle)
5099            throws RemoteException {
5100        Parcel data = Parcel.obtain();
5101        Parcel reply = Parcel.obtain();
5102        data.writeInterfaceToken(IActivityManager.descriptor);
5103        intent.writeToParcel(data, 0);
5104        data.writeInt(requestType);
5105        data.writeString(hint);
5106        data.writeInt(userHandle);
5107        mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
5108        reply.readException();
5109        boolean res = reply.readInt() != 0;
5110        data.recycle();
5111        reply.recycle();
5112        return res;
5113    }
5114
5115    public void killUid(int uid, String reason) throws RemoteException {
5116        Parcel data = Parcel.obtain();
5117        Parcel reply = Parcel.obtain();
5118        data.writeInterfaceToken(IActivityManager.descriptor);
5119        data.writeInt(uid);
5120        data.writeString(reason);
5121        mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
5122        reply.readException();
5123        data.recycle();
5124        reply.recycle();
5125    }
5126
5127    public void hang(IBinder who, boolean allowRestart) throws RemoteException {
5128        Parcel data = Parcel.obtain();
5129        Parcel reply = Parcel.obtain();
5130        data.writeInterfaceToken(IActivityManager.descriptor);
5131        data.writeStrongBinder(who);
5132        data.writeInt(allowRestart ? 1 : 0);
5133        mRemote.transact(HANG_TRANSACTION, data, reply, 0);
5134        reply.readException();
5135        data.recycle();
5136        reply.recycle();
5137    }
5138
5139    public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
5140        Parcel data = Parcel.obtain();
5141        Parcel reply = Parcel.obtain();
5142        data.writeInterfaceToken(IActivityManager.descriptor);
5143        data.writeStrongBinder(token);
5144        mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
5145        reply.readException();
5146        data.recycle();
5147        reply.recycle();
5148    }
5149
5150    public void notifyActivityDrawn(IBinder token) throws RemoteException {
5151        Parcel data = Parcel.obtain();
5152        Parcel reply = Parcel.obtain();
5153        data.writeInterfaceToken(IActivityManager.descriptor);
5154        data.writeStrongBinder(token);
5155        mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
5156        reply.readException();
5157        data.recycle();
5158        reply.recycle();
5159    }
5160
5161    public void restart() throws RemoteException {
5162        Parcel data = Parcel.obtain();
5163        Parcel reply = Parcel.obtain();
5164        data.writeInterfaceToken(IActivityManager.descriptor);
5165        mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
5166        reply.readException();
5167        data.recycle();
5168        reply.recycle();
5169    }
5170
5171    public void performIdleMaintenance() throws RemoteException {
5172        Parcel data = Parcel.obtain();
5173        Parcel reply = Parcel.obtain();
5174        data.writeInterfaceToken(IActivityManager.descriptor);
5175        mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
5176        reply.readException();
5177        data.recycle();
5178        reply.recycle();
5179    }
5180
5181    public IActivityContainer createActivityContainer(IBinder parentActivityToken,
5182            IActivityContainerCallback callback) throws RemoteException {
5183        Parcel data = Parcel.obtain();
5184        Parcel reply = Parcel.obtain();
5185        data.writeInterfaceToken(IActivityManager.descriptor);
5186        data.writeStrongBinder(parentActivityToken);
5187        data.writeStrongBinder(callback == null ? null : callback.asBinder());
5188        mRemote.transact(CREATE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
5189        reply.readException();
5190        final int result = reply.readInt();
5191        final IActivityContainer res;
5192        if (result == 1) {
5193            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
5194        } else {
5195            res = null;
5196        }
5197        data.recycle();
5198        reply.recycle();
5199        return res;
5200    }
5201
5202    public void deleteActivityContainer(IActivityContainer activityContainer)
5203            throws RemoteException {
5204        Parcel data = Parcel.obtain();
5205        Parcel reply = Parcel.obtain();
5206        data.writeInterfaceToken(IActivityManager.descriptor);
5207        data.writeStrongBinder(activityContainer.asBinder());
5208        mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
5209        reply.readException();
5210        data.recycle();
5211        reply.recycle();
5212    }
5213
5214    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
5215            throws RemoteException {
5216        Parcel data = Parcel.obtain();
5217        Parcel reply = Parcel.obtain();
5218        data.writeInterfaceToken(IActivityManager.descriptor);
5219        data.writeStrongBinder(activityToken);
5220        mRemote.transact(GET_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
5221        reply.readException();
5222        final int result = reply.readInt();
5223        final IActivityContainer res;
5224        if (result == 1) {
5225            res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
5226        } else {
5227            res = null;
5228        }
5229        data.recycle();
5230        reply.recycle();
5231        return res;
5232    }
5233
5234    public IBinder getHomeActivityToken() throws RemoteException {
5235        Parcel data = Parcel.obtain();
5236        Parcel reply = Parcel.obtain();
5237        data.writeInterfaceToken(IActivityManager.descriptor);
5238        mRemote.transact(GET_HOME_ACTIVITY_TOKEN_TRANSACTION, data, reply, 0);
5239        reply.readException();
5240        IBinder res = reply.readStrongBinder();
5241        data.recycle();
5242        reply.recycle();
5243        return res;
5244    }
5245
5246    @Override
5247    public void startLockTaskMode(int taskId) throws RemoteException {
5248        Parcel data = Parcel.obtain();
5249        Parcel reply = Parcel.obtain();
5250        data.writeInterfaceToken(IActivityManager.descriptor);
5251        data.writeInt(taskId);
5252        mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
5253        reply.readException();
5254        data.recycle();
5255        reply.recycle();
5256    }
5257
5258    @Override
5259    public void startLockTaskMode(IBinder token) throws RemoteException {
5260        Parcel data = Parcel.obtain();
5261        Parcel reply = Parcel.obtain();
5262        data.writeInterfaceToken(IActivityManager.descriptor);
5263        data.writeStrongBinder(token);
5264        mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
5265        reply.readException();
5266        data.recycle();
5267        reply.recycle();
5268    }
5269
5270    @Override
5271    public void startLockTaskModeOnCurrent() throws RemoteException {
5272        Parcel data = Parcel.obtain();
5273        Parcel reply = Parcel.obtain();
5274        data.writeInterfaceToken(IActivityManager.descriptor);
5275        mRemote.transact(START_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
5276        reply.readException();
5277        data.recycle();
5278        reply.recycle();
5279    }
5280
5281    @Override
5282    public void stopLockTaskMode() throws RemoteException {
5283        Parcel data = Parcel.obtain();
5284        Parcel reply = Parcel.obtain();
5285        data.writeInterfaceToken(IActivityManager.descriptor);
5286        mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
5287        reply.readException();
5288        data.recycle();
5289        reply.recycle();
5290    }
5291
5292    @Override
5293    public void stopLockTaskModeOnCurrent() throws RemoteException {
5294        Parcel data = Parcel.obtain();
5295        Parcel reply = Parcel.obtain();
5296        data.writeInterfaceToken(IActivityManager.descriptor);
5297        mRemote.transact(STOP_LOCK_TASK_BY_CURRENT_TRANSACTION, data, reply, 0);
5298        reply.readException();
5299        data.recycle();
5300        reply.recycle();
5301    }
5302
5303    @Override
5304    public boolean isInLockTaskMode() throws RemoteException {
5305        Parcel data = Parcel.obtain();
5306        Parcel reply = Parcel.obtain();
5307        data.writeInterfaceToken(IActivityManager.descriptor);
5308        mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
5309        reply.readException();
5310        boolean isInLockTaskMode = reply.readInt() == 1;
5311        data.recycle();
5312        reply.recycle();
5313        return isInLockTaskMode;
5314    }
5315
5316    @Override
5317    public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
5318            throws RemoteException {
5319        Parcel data = Parcel.obtain();
5320        Parcel reply = Parcel.obtain();
5321        data.writeInterfaceToken(IActivityManager.descriptor);
5322        data.writeStrongBinder(token);
5323        values.writeToParcel(data, 0);
5324        mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
5325        reply.readException();
5326        data.recycle();
5327        reply.recycle();
5328    }
5329
5330    @Override
5331    public Bitmap getTaskDescriptionIcon(String filename) throws RemoteException {
5332        Parcel data = Parcel.obtain();
5333        Parcel reply = Parcel.obtain();
5334        data.writeInterfaceToken(IActivityManager.descriptor);
5335        data.writeString(filename);
5336        mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
5337        reply.readException();
5338        final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
5339        data.recycle();
5340        reply.recycle();
5341        return icon;
5342    }
5343
5344    @Override
5345    public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
5346            throws RemoteException {
5347        Parcel data = Parcel.obtain();
5348        Parcel reply = Parcel.obtain();
5349        data.writeInterfaceToken(IActivityManager.descriptor);
5350        if (options == null) {
5351            data.writeInt(0);
5352        } else {
5353            data.writeInt(1);
5354            data.writeBundle(options.toBundle());
5355        }
5356        mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
5357        reply.readException();
5358        data.recycle();
5359        reply.recycle();
5360    }
5361
5362    @Override
5363    public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
5364        Parcel data = Parcel.obtain();
5365        Parcel reply = Parcel.obtain();
5366        data.writeInterfaceToken(IActivityManager.descriptor);
5367        data.writeStrongBinder(token);
5368        data.writeInt(visible ? 1 : 0);
5369        mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
5370        reply.readException();
5371        boolean success = reply.readInt() > 0;
5372        data.recycle();
5373        reply.recycle();
5374        return success;
5375    }
5376
5377    @Override
5378    public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
5379        Parcel data = Parcel.obtain();
5380        Parcel reply = Parcel.obtain();
5381        data.writeInterfaceToken(IActivityManager.descriptor);
5382        data.writeStrongBinder(token);
5383        mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
5384        reply.readException();
5385        final boolean visible = reply.readInt() > 0;
5386        data.recycle();
5387        reply.recycle();
5388        return visible;
5389    }
5390
5391    @Override
5392    public void backgroundResourcesReleased(IBinder token) throws RemoteException {
5393        Parcel data = Parcel.obtain();
5394        Parcel reply = Parcel.obtain();
5395        data.writeInterfaceToken(IActivityManager.descriptor);
5396        data.writeStrongBinder(token);
5397        mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply,
5398                IBinder.FLAG_ONEWAY);
5399        reply.readException();
5400        data.recycle();
5401        reply.recycle();
5402    }
5403
5404    @Override
5405    public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
5406        Parcel data = Parcel.obtain();
5407        Parcel reply = Parcel.obtain();
5408        data.writeInterfaceToken(IActivityManager.descriptor);
5409        data.writeStrongBinder(token);
5410        mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply,
5411                IBinder.FLAG_ONEWAY);
5412        reply.readException();
5413        data.recycle();
5414        reply.recycle();
5415    }
5416
5417    @Override
5418    public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
5419        Parcel data = Parcel.obtain();
5420        Parcel reply = Parcel.obtain();
5421        data.writeInterfaceToken(IActivityManager.descriptor);
5422        data.writeStrongBinder(token);
5423        mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply,
5424                IBinder.FLAG_ONEWAY);
5425        reply.readException();
5426        data.recycle();
5427        reply.recycle();
5428    }
5429
5430    @Override
5431    public void bootAnimationComplete() throws RemoteException {
5432        Parcel data = Parcel.obtain();
5433        Parcel reply = Parcel.obtain();
5434        data.writeInterfaceToken(IActivityManager.descriptor);
5435        mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
5436        reply.readException();
5437        data.recycle();
5438        reply.recycle();
5439    }
5440
5441    private IBinder mRemote;
5442}
5443