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