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