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