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