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