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.annotation.UserIdInt;
     20 import android.app.ActivityManager.StackInfo;
     21 import android.app.assist.AssistContent;
     22 import android.app.assist.AssistStructure;
     23 import android.content.ComponentName;
     24 import android.content.IIntentReceiver;
     25 import android.content.IIntentSender;
     26 import android.content.Intent;
     27 import android.content.IntentFilter;
     28 import android.content.IntentSender;
     29 import android.content.UriPermission;
     30 import android.content.pm.ApplicationInfo;
     31 import android.content.pm.ConfigurationInfo;
     32 import android.content.pm.IPackageDataObserver;
     33 import android.content.pm.ParceledListSlice;
     34 import android.content.pm.UserInfo;
     35 import android.content.res.Configuration;
     36 import android.graphics.Bitmap;
     37 import android.graphics.Point;
     38 import android.graphics.Rect;
     39 import android.net.Uri;
     40 import android.os.Binder;
     41 import android.os.Bundle;
     42 import android.os.Debug;
     43 import android.os.IBinder;
     44 import android.os.IProgressListener;
     45 import android.os.Parcel;
     46 import android.os.ParcelFileDescriptor;
     47 import android.os.Parcelable;
     48 import android.os.PersistableBundle;
     49 import android.os.RemoteException;
     50 import android.os.ServiceManager;
     51 import android.os.StrictMode;
     52 import android.service.voice.IVoiceInteractionSession;
     53 import android.text.TextUtils;
     54 import android.util.Log;
     55 import android.util.Singleton;
     56 import com.android.internal.app.IVoiceInteractor;
     57 import com.android.internal.os.IResultReceiver;
     58 
     59 import java.util.ArrayList;
     60 import java.util.List;
     61 
     62 /** {@hide} */
     63 public abstract class ActivityManagerNative extends Binder implements IActivityManager
     64 {
     65     /**
     66      * Cast a Binder object into an activity manager interface, generating
     67      * a proxy if needed.
     68      */
     69     static public IActivityManager asInterface(IBinder obj) {
     70         if (obj == null) {
     71             return null;
     72         }
     73         IActivityManager in =
     74             (IActivityManager)obj.queryLocalInterface(descriptor);
     75         if (in != null) {
     76             return in;
     77         }
     78 
     79         return new ActivityManagerProxy(obj);
     80     }
     81 
     82     /**
     83      * Retrieve the system's default/global activity manager.
     84      */
     85     static public IActivityManager getDefault() {
     86         return gDefault.get();
     87     }
     88 
     89     /**
     90      * Convenience for checking whether the system is ready.  For internal use only.
     91      */
     92     static public boolean isSystemReady() {
     93         if (!sSystemReady) {
     94             sSystemReady = getDefault().testIsSystemReady();
     95         }
     96         return sSystemReady;
     97     }
     98     static volatile boolean sSystemReady = false;
     99 
    100     static public void broadcastStickyIntent(Intent intent, String permission, int userId) {
    101         broadcastStickyIntent(intent, permission, AppOpsManager.OP_NONE, userId);
    102     }
    103 
    104     /**
    105      * Convenience for sending a sticky broadcast.  For internal use only.
    106      * If you don't care about permission, use null.
    107      */
    108     static public void broadcastStickyIntent(Intent intent, String permission, int appOp,
    109             int userId) {
    110         try {
    111             getDefault().broadcastIntent(
    112                     null, intent, null, null, Activity.RESULT_OK, null, null,
    113                     null /*permission*/, appOp, null, false, true, userId);
    114         } catch (RemoteException ex) {
    115         }
    116     }
    117 
    118     static public void noteWakeupAlarm(PendingIntent ps, int sourceUid, String sourcePkg,
    119             String tag) {
    120         try {
    121             getDefault().noteWakeupAlarm((ps != null) ? ps.getTarget() : null,
    122                     sourceUid, sourcePkg, tag);
    123         } catch (RemoteException ex) {
    124         }
    125     }
    126 
    127     static public void noteAlarmStart(PendingIntent ps, int sourceUid, String tag) {
    128         try {
    129             getDefault().noteAlarmStart((ps != null) ? ps.getTarget() : null, sourceUid, tag);
    130         } catch (RemoteException ex) {
    131         }
    132     }
    133 
    134     static public void noteAlarmFinish(PendingIntent ps, int sourceUid, String tag) {
    135         try {
    136             getDefault().noteAlarmFinish((ps != null) ? ps.getTarget() : null, sourceUid, tag);
    137         } catch (RemoteException ex) {
    138         }
    139     }
    140 
    141     public ActivityManagerNative() {
    142         attachInterface(this, descriptor);
    143     }
    144 
    145     @Override
    146     public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
    147             throws RemoteException {
    148         switch (code) {
    149         case START_ACTIVITY_TRANSACTION:
    150         {
    151             data.enforceInterface(IActivityManager.descriptor);
    152             IBinder b = data.readStrongBinder();
    153             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    154             String callingPackage = data.readString();
    155             Intent intent = Intent.CREATOR.createFromParcel(data);
    156             String resolvedType = data.readString();
    157             IBinder resultTo = data.readStrongBinder();
    158             String resultWho = data.readString();
    159             int requestCode = data.readInt();
    160             int startFlags = data.readInt();
    161             ProfilerInfo profilerInfo = data.readInt() != 0
    162                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
    163             Bundle options = data.readInt() != 0
    164                     ? Bundle.CREATOR.createFromParcel(data) : null;
    165             int result = startActivity(app, callingPackage, intent, resolvedType,
    166                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options);
    167             reply.writeNoException();
    168             reply.writeInt(result);
    169             return true;
    170         }
    171 
    172         case START_ACTIVITY_AS_USER_TRANSACTION:
    173         {
    174             data.enforceInterface(IActivityManager.descriptor);
    175             IBinder b = data.readStrongBinder();
    176             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    177             String callingPackage = data.readString();
    178             Intent intent = Intent.CREATOR.createFromParcel(data);
    179             String resolvedType = data.readString();
    180             IBinder resultTo = data.readStrongBinder();
    181             String resultWho = data.readString();
    182             int requestCode = data.readInt();
    183             int startFlags = data.readInt();
    184             ProfilerInfo profilerInfo = data.readInt() != 0
    185                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
    186             Bundle options = data.readInt() != 0
    187                     ? Bundle.CREATOR.createFromParcel(data) : null;
    188             int userId = data.readInt();
    189             int result = startActivityAsUser(app, callingPackage, intent, resolvedType,
    190                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options, userId);
    191             reply.writeNoException();
    192             reply.writeInt(result);
    193             return true;
    194         }
    195 
    196         case START_ACTIVITY_AS_CALLER_TRANSACTION:
    197         {
    198             data.enforceInterface(IActivityManager.descriptor);
    199             IBinder b = data.readStrongBinder();
    200             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    201             String callingPackage = data.readString();
    202             Intent intent = Intent.CREATOR.createFromParcel(data);
    203             String resolvedType = data.readString();
    204             IBinder resultTo = data.readStrongBinder();
    205             String resultWho = data.readString();
    206             int requestCode = data.readInt();
    207             int startFlags = data.readInt();
    208             ProfilerInfo profilerInfo = data.readInt() != 0
    209                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
    210             Bundle options = data.readInt() != 0
    211                     ? Bundle.CREATOR.createFromParcel(data) : null;
    212             boolean ignoreTargetSecurity = data.readInt() != 0;
    213             int userId = data.readInt();
    214             int result = startActivityAsCaller(app, callingPackage, intent, resolvedType,
    215                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options,
    216                     ignoreTargetSecurity, userId);
    217             reply.writeNoException();
    218             reply.writeInt(result);
    219             return true;
    220         }
    221 
    222         case START_ACTIVITY_AND_WAIT_TRANSACTION:
    223         {
    224             data.enforceInterface(IActivityManager.descriptor);
    225             IBinder b = data.readStrongBinder();
    226             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    227             String callingPackage = data.readString();
    228             Intent intent = Intent.CREATOR.createFromParcel(data);
    229             String resolvedType = data.readString();
    230             IBinder resultTo = data.readStrongBinder();
    231             String resultWho = data.readString();
    232             int requestCode = data.readInt();
    233             int startFlags = data.readInt();
    234             ProfilerInfo profilerInfo = data.readInt() != 0
    235                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
    236             Bundle options = data.readInt() != 0
    237                     ? Bundle.CREATOR.createFromParcel(data) : null;
    238             int userId = data.readInt();
    239             WaitResult result = startActivityAndWait(app, callingPackage, intent, resolvedType,
    240                     resultTo, resultWho, requestCode, startFlags, profilerInfo, options, userId);
    241             reply.writeNoException();
    242             result.writeToParcel(reply, 0);
    243             return true;
    244         }
    245 
    246         case START_ACTIVITY_WITH_CONFIG_TRANSACTION:
    247         {
    248             data.enforceInterface(IActivityManager.descriptor);
    249             IBinder b = data.readStrongBinder();
    250             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    251             String callingPackage = data.readString();
    252             Intent intent = Intent.CREATOR.createFromParcel(data);
    253             String resolvedType = data.readString();
    254             IBinder resultTo = data.readStrongBinder();
    255             String resultWho = data.readString();
    256             int requestCode = data.readInt();
    257             int startFlags = data.readInt();
    258             Configuration config = Configuration.CREATOR.createFromParcel(data);
    259             Bundle options = data.readInt() != 0
    260                     ? Bundle.CREATOR.createFromParcel(data) : null;
    261             int userId = data.readInt();
    262             int result = startActivityWithConfig(app, callingPackage, intent, resolvedType,
    263                     resultTo, resultWho, requestCode, startFlags, config, options, userId);
    264             reply.writeNoException();
    265             reply.writeInt(result);
    266             return true;
    267         }
    268 
    269         case START_ACTIVITY_INTENT_SENDER_TRANSACTION:
    270         {
    271             data.enforceInterface(IActivityManager.descriptor);
    272             IBinder b = data.readStrongBinder();
    273             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    274             IntentSender intent = IntentSender.CREATOR.createFromParcel(data);
    275             Intent fillInIntent = null;
    276             if (data.readInt() != 0) {
    277                 fillInIntent = Intent.CREATOR.createFromParcel(data);
    278             }
    279             String resolvedType = data.readString();
    280             IBinder resultTo = data.readStrongBinder();
    281             String resultWho = data.readString();
    282             int requestCode = data.readInt();
    283             int flagsMask = data.readInt();
    284             int flagsValues = data.readInt();
    285             Bundle options = data.readInt() != 0
    286                     ? Bundle.CREATOR.createFromParcel(data) : null;
    287             int result = startActivityIntentSender(app, intent,
    288                     fillInIntent, resolvedType, resultTo, resultWho,
    289                     requestCode, flagsMask, flagsValues, options);
    290             reply.writeNoException();
    291             reply.writeInt(result);
    292             return true;
    293         }
    294 
    295         case START_VOICE_ACTIVITY_TRANSACTION:
    296         {
    297             data.enforceInterface(IActivityManager.descriptor);
    298             String callingPackage = data.readString();
    299             int callingPid = data.readInt();
    300             int callingUid = data.readInt();
    301             Intent intent = Intent.CREATOR.createFromParcel(data);
    302             String resolvedType = data.readString();
    303             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
    304                     data.readStrongBinder());
    305             IVoiceInteractor interactor = IVoiceInteractor.Stub.asInterface(
    306                     data.readStrongBinder());
    307             int startFlags = data.readInt();
    308             ProfilerInfo profilerInfo = data.readInt() != 0
    309                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
    310             Bundle options = data.readInt() != 0
    311                     ? Bundle.CREATOR.createFromParcel(data) : null;
    312             int userId = data.readInt();
    313             int result = startVoiceActivity(callingPackage, callingPid, callingUid, intent,
    314                     resolvedType, session, interactor, startFlags, profilerInfo, options, userId);
    315             reply.writeNoException();
    316             reply.writeInt(result);
    317             return true;
    318         }
    319 
    320         case START_LOCAL_VOICE_INTERACTION_TRANSACTION:
    321         {
    322             data.enforceInterface(IActivityManager.descriptor);
    323             IBinder token = data.readStrongBinder();
    324             Bundle options = data.readBundle();
    325             startLocalVoiceInteraction(token, options);
    326             reply.writeNoException();
    327             return true;
    328         }
    329 
    330         case STOP_LOCAL_VOICE_INTERACTION_TRANSACTION:
    331         {
    332             data.enforceInterface(IActivityManager.descriptor);
    333             IBinder token = data.readStrongBinder();
    334             stopLocalVoiceInteraction(token);
    335             reply.writeNoException();
    336             return true;
    337         }
    338 
    339         case SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION:
    340         {
    341             data.enforceInterface(IActivityManager.descriptor);
    342             boolean result = supportsLocalVoiceInteraction();
    343             reply.writeNoException();
    344             reply.writeInt(result? 1 : 0);
    345             return true;
    346         }
    347 
    348         case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
    349         {
    350             data.enforceInterface(IActivityManager.descriptor);
    351             IBinder callingActivity = data.readStrongBinder();
    352             Intent intent = Intent.CREATOR.createFromParcel(data);
    353             Bundle options = data.readInt() != 0
    354                     ? Bundle.CREATOR.createFromParcel(data) : null;
    355             boolean result = startNextMatchingActivity(callingActivity, intent, options);
    356             reply.writeNoException();
    357             reply.writeInt(result ? 1 : 0);
    358             return true;
    359         }
    360 
    361         case START_ACTIVITY_FROM_RECENTS_TRANSACTION:
    362         {
    363             data.enforceInterface(IActivityManager.descriptor);
    364             final int taskId = data.readInt();
    365             final Bundle options =
    366                     data.readInt() == 0 ? null : Bundle.CREATOR.createFromParcel(data);
    367             final int result = startActivityFromRecents(taskId, options);
    368             reply.writeNoException();
    369             reply.writeInt(result);
    370             return true;
    371         }
    372 
    373         case FINISH_ACTIVITY_TRANSACTION: {
    374             data.enforceInterface(IActivityManager.descriptor);
    375             IBinder token = data.readStrongBinder();
    376             Intent resultData = null;
    377             int resultCode = data.readInt();
    378             if (data.readInt() != 0) {
    379                 resultData = Intent.CREATOR.createFromParcel(data);
    380             }
    381             int finishTask = data.readInt();
    382             boolean res = finishActivity(token, resultCode, resultData, finishTask);
    383             reply.writeNoException();
    384             reply.writeInt(res ? 1 : 0);
    385             return true;
    386         }
    387 
    388         case FINISH_SUB_ACTIVITY_TRANSACTION: {
    389             data.enforceInterface(IActivityManager.descriptor);
    390             IBinder token = data.readStrongBinder();
    391             String resultWho = data.readString();
    392             int requestCode = data.readInt();
    393             finishSubActivity(token, resultWho, requestCode);
    394             reply.writeNoException();
    395             return true;
    396         }
    397 
    398         case FINISH_ACTIVITY_AFFINITY_TRANSACTION: {
    399             data.enforceInterface(IActivityManager.descriptor);
    400             IBinder token = data.readStrongBinder();
    401             boolean res = finishActivityAffinity(token);
    402             reply.writeNoException();
    403             reply.writeInt(res ? 1 : 0);
    404             return true;
    405         }
    406 
    407         case FINISH_VOICE_TASK_TRANSACTION: {
    408             data.enforceInterface(IActivityManager.descriptor);
    409             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
    410                     data.readStrongBinder());
    411             finishVoiceTask(session);
    412             reply.writeNoException();
    413             return true;
    414         }
    415 
    416         case RELEASE_ACTIVITY_INSTANCE_TRANSACTION: {
    417             data.enforceInterface(IActivityManager.descriptor);
    418             IBinder token = data.readStrongBinder();
    419             boolean res = releaseActivityInstance(token);
    420             reply.writeNoException();
    421             reply.writeInt(res ? 1 : 0);
    422             return true;
    423         }
    424 
    425         case RELEASE_SOME_ACTIVITIES_TRANSACTION: {
    426             data.enforceInterface(IActivityManager.descriptor);
    427             IApplicationThread app = ApplicationThreadNative.asInterface(data.readStrongBinder());
    428             releaseSomeActivities(app);
    429             reply.writeNoException();
    430             return true;
    431         }
    432 
    433         case WILL_ACTIVITY_BE_VISIBLE_TRANSACTION: {
    434             data.enforceInterface(IActivityManager.descriptor);
    435             IBinder token = data.readStrongBinder();
    436             boolean res = willActivityBeVisible(token);
    437             reply.writeNoException();
    438             reply.writeInt(res ? 1 : 0);
    439             return true;
    440         }
    441 
    442         case REGISTER_RECEIVER_TRANSACTION:
    443         {
    444             data.enforceInterface(IActivityManager.descriptor);
    445             IBinder b = data.readStrongBinder();
    446             IApplicationThread app =
    447                 b != null ? ApplicationThreadNative.asInterface(b) : null;
    448             String packageName = data.readString();
    449             b = data.readStrongBinder();
    450             IIntentReceiver rec
    451                 = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
    452             IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
    453             String perm = data.readString();
    454             int userId = data.readInt();
    455             Intent intent = registerReceiver(app, packageName, rec, filter, perm, userId);
    456             reply.writeNoException();
    457             if (intent != null) {
    458                 reply.writeInt(1);
    459                 intent.writeToParcel(reply, 0);
    460             } else {
    461                 reply.writeInt(0);
    462             }
    463             return true;
    464         }
    465 
    466         case UNREGISTER_RECEIVER_TRANSACTION:
    467         {
    468             data.enforceInterface(IActivityManager.descriptor);
    469             IBinder b = data.readStrongBinder();
    470             if (b == null) {
    471                 return true;
    472             }
    473             IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
    474             unregisterReceiver(rec);
    475             reply.writeNoException();
    476             return true;
    477         }
    478 
    479         case BROADCAST_INTENT_TRANSACTION:
    480         {
    481             data.enforceInterface(IActivityManager.descriptor);
    482             IBinder b = data.readStrongBinder();
    483             IApplicationThread app =
    484                 b != null ? ApplicationThreadNative.asInterface(b) : null;
    485             Intent intent = Intent.CREATOR.createFromParcel(data);
    486             String resolvedType = data.readString();
    487             b = data.readStrongBinder();
    488             IIntentReceiver resultTo =
    489                 b != null ? IIntentReceiver.Stub.asInterface(b) : null;
    490             int resultCode = data.readInt();
    491             String resultData = data.readString();
    492             Bundle resultExtras = data.readBundle();
    493             String[] perms = data.readStringArray();
    494             int appOp = data.readInt();
    495             Bundle options = data.readBundle();
    496             boolean serialized = data.readInt() != 0;
    497             boolean sticky = data.readInt() != 0;
    498             int userId = data.readInt();
    499             int res = broadcastIntent(app, intent, resolvedType, resultTo,
    500                     resultCode, resultData, resultExtras, perms, appOp,
    501                     options, serialized, sticky, userId);
    502             reply.writeNoException();
    503             reply.writeInt(res);
    504             return true;
    505         }
    506 
    507         case UNBROADCAST_INTENT_TRANSACTION:
    508         {
    509             data.enforceInterface(IActivityManager.descriptor);
    510             IBinder b = data.readStrongBinder();
    511             IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
    512             Intent intent = Intent.CREATOR.createFromParcel(data);
    513             int userId = data.readInt();
    514             unbroadcastIntent(app, intent, userId);
    515             reply.writeNoException();
    516             return true;
    517         }
    518 
    519         case FINISH_RECEIVER_TRANSACTION: {
    520             data.enforceInterface(IActivityManager.descriptor);
    521             IBinder who = data.readStrongBinder();
    522             int resultCode = data.readInt();
    523             String resultData = data.readString();
    524             Bundle resultExtras = data.readBundle();
    525             boolean resultAbort = data.readInt() != 0;
    526             int intentFlags = data.readInt();
    527             if (who != null) {
    528                 finishReceiver(who, resultCode, resultData, resultExtras, resultAbort, intentFlags);
    529             }
    530             reply.writeNoException();
    531             return true;
    532         }
    533 
    534         case ATTACH_APPLICATION_TRANSACTION: {
    535             data.enforceInterface(IActivityManager.descriptor);
    536             IApplicationThread app = ApplicationThreadNative.asInterface(
    537                     data.readStrongBinder());
    538             if (app != null) {
    539                 attachApplication(app);
    540             }
    541             reply.writeNoException();
    542             return true;
    543         }
    544 
    545         case ACTIVITY_IDLE_TRANSACTION: {
    546             data.enforceInterface(IActivityManager.descriptor);
    547             IBinder token = data.readStrongBinder();
    548             Configuration config = null;
    549             if (data.readInt() != 0) {
    550                 config = Configuration.CREATOR.createFromParcel(data);
    551             }
    552             boolean stopProfiling = data.readInt() != 0;
    553             if (token != null) {
    554                 activityIdle(token, config, stopProfiling);
    555             }
    556             reply.writeNoException();
    557             return true;
    558         }
    559 
    560         case ACTIVITY_RESUMED_TRANSACTION: {
    561             data.enforceInterface(IActivityManager.descriptor);
    562             IBinder token = data.readStrongBinder();
    563             activityResumed(token);
    564             reply.writeNoException();
    565             return true;
    566         }
    567 
    568         case ACTIVITY_PAUSED_TRANSACTION: {
    569             data.enforceInterface(IActivityManager.descriptor);
    570             IBinder token = data.readStrongBinder();
    571             activityPaused(token);
    572             reply.writeNoException();
    573             return true;
    574         }
    575 
    576         case ACTIVITY_STOPPED_TRANSACTION: {
    577             data.enforceInterface(IActivityManager.descriptor);
    578             IBinder token = data.readStrongBinder();
    579             Bundle map = data.readBundle();
    580             PersistableBundle persistentState = data.readPersistableBundle();
    581             CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
    582             activityStopped(token, map, persistentState, description);
    583             reply.writeNoException();
    584             return true;
    585         }
    586 
    587         case ACTIVITY_SLEPT_TRANSACTION: {
    588             data.enforceInterface(IActivityManager.descriptor);
    589             IBinder token = data.readStrongBinder();
    590             activitySlept(token);
    591             reply.writeNoException();
    592             return true;
    593         }
    594 
    595         case ACTIVITY_DESTROYED_TRANSACTION: {
    596             data.enforceInterface(IActivityManager.descriptor);
    597             IBinder token = data.readStrongBinder();
    598             activityDestroyed(token);
    599             reply.writeNoException();
    600             return true;
    601         }
    602 
    603         case ACTIVITY_RELAUNCHED_TRANSACTION: {
    604             data.enforceInterface(IActivityManager.descriptor);
    605             IBinder token = data.readStrongBinder();
    606             activityRelaunched(token);
    607             reply.writeNoException();
    608             return true;
    609         }
    610 
    611         case GET_CALLING_PACKAGE_TRANSACTION: {
    612             data.enforceInterface(IActivityManager.descriptor);
    613             IBinder token = data.readStrongBinder();
    614             String res = token != null ? getCallingPackage(token) : null;
    615             reply.writeNoException();
    616             reply.writeString(res);
    617             return true;
    618         }
    619 
    620         case GET_CALLING_ACTIVITY_TRANSACTION: {
    621             data.enforceInterface(IActivityManager.descriptor);
    622             IBinder token = data.readStrongBinder();
    623             ComponentName cn = getCallingActivity(token);
    624             reply.writeNoException();
    625             ComponentName.writeToParcel(cn, reply);
    626             return true;
    627         }
    628 
    629         case GET_APP_TASKS_TRANSACTION: {
    630             data.enforceInterface(IActivityManager.descriptor);
    631             String callingPackage = data.readString();
    632             List<IAppTask> list = getAppTasks(callingPackage);
    633             reply.writeNoException();
    634             int N = list != null ? list.size() : -1;
    635             reply.writeInt(N);
    636             int i;
    637             for (i=0; i<N; i++) {
    638                 IAppTask task = list.get(i);
    639                 reply.writeStrongBinder(task.asBinder());
    640             }
    641             return true;
    642         }
    643 
    644         case ADD_APP_TASK_TRANSACTION: {
    645             data.enforceInterface(IActivityManager.descriptor);
    646             IBinder activityToken = data.readStrongBinder();
    647             Intent intent = Intent.CREATOR.createFromParcel(data);
    648             ActivityManager.TaskDescription descr
    649                     = ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
    650             Bitmap thumbnail = Bitmap.CREATOR.createFromParcel(data);
    651             int res = addAppTask(activityToken, intent, descr, thumbnail);
    652             reply.writeNoException();
    653             reply.writeInt(res);
    654             return true;
    655         }
    656 
    657         case GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION: {
    658             data.enforceInterface(IActivityManager.descriptor);
    659             Point size = getAppTaskThumbnailSize();
    660             reply.writeNoException();
    661             size.writeToParcel(reply, 0);
    662             return true;
    663         }
    664 
    665         case GET_TASKS_TRANSACTION: {
    666             data.enforceInterface(IActivityManager.descriptor);
    667             int maxNum = data.readInt();
    668             int fl = data.readInt();
    669             List<ActivityManager.RunningTaskInfo> list = getTasks(maxNum, fl);
    670             reply.writeNoException();
    671             int N = list != null ? list.size() : -1;
    672             reply.writeInt(N);
    673             int i;
    674             for (i=0; i<N; i++) {
    675                 ActivityManager.RunningTaskInfo info = list.get(i);
    676                 info.writeToParcel(reply, 0);
    677             }
    678             return true;
    679         }
    680 
    681         case GET_RECENT_TASKS_TRANSACTION: {
    682             data.enforceInterface(IActivityManager.descriptor);
    683             int maxNum = data.readInt();
    684             int fl = data.readInt();
    685             int userId = data.readInt();
    686             ParceledListSlice<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
    687                     fl, userId);
    688             reply.writeNoException();
    689             list.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
    690             return true;
    691         }
    692 
    693         case GET_TASK_THUMBNAIL_TRANSACTION: {
    694             data.enforceInterface(IActivityManager.descriptor);
    695             int id = data.readInt();
    696             ActivityManager.TaskThumbnail taskThumbnail = getTaskThumbnail(id);
    697             reply.writeNoException();
    698             if (taskThumbnail != null) {
    699                 reply.writeInt(1);
    700                 taskThumbnail.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
    701             } else {
    702                 reply.writeInt(0);
    703             }
    704             return true;
    705         }
    706 
    707         case GET_SERVICES_TRANSACTION: {
    708             data.enforceInterface(IActivityManager.descriptor);
    709             int maxNum = data.readInt();
    710             int fl = data.readInt();
    711             List<ActivityManager.RunningServiceInfo> list = getServices(maxNum, fl);
    712             reply.writeNoException();
    713             int N = list != null ? list.size() : -1;
    714             reply.writeInt(N);
    715             int i;
    716             for (i=0; i<N; i++) {
    717                 ActivityManager.RunningServiceInfo info = list.get(i);
    718                 info.writeToParcel(reply, 0);
    719             }
    720             return true;
    721         }
    722 
    723         case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
    724             data.enforceInterface(IActivityManager.descriptor);
    725             List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
    726             reply.writeNoException();
    727             reply.writeTypedList(list);
    728             return true;
    729         }
    730 
    731         case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
    732             data.enforceInterface(IActivityManager.descriptor);
    733             List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
    734             reply.writeNoException();
    735             reply.writeTypedList(list);
    736             return true;
    737         }
    738 
    739         case GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION: {
    740             data.enforceInterface(IActivityManager.descriptor);
    741             List<ApplicationInfo> list = getRunningExternalApplications();
    742             reply.writeNoException();
    743             reply.writeTypedList(list);
    744             return true;
    745         }
    746 
    747         case MOVE_TASK_TO_FRONT_TRANSACTION: {
    748             data.enforceInterface(IActivityManager.descriptor);
    749             int task = data.readInt();
    750             int fl = data.readInt();
    751             Bundle options = data.readInt() != 0
    752                     ? Bundle.CREATOR.createFromParcel(data) : null;
    753             moveTaskToFront(task, fl, options);
    754             reply.writeNoException();
    755             return true;
    756         }
    757 
    758         case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
    759             data.enforceInterface(IActivityManager.descriptor);
    760             IBinder token = data.readStrongBinder();
    761             boolean nonRoot = data.readInt() != 0;
    762             boolean res = moveActivityTaskToBack(token, nonRoot);
    763             reply.writeNoException();
    764             reply.writeInt(res ? 1 : 0);
    765             return true;
    766         }
    767 
    768         case MOVE_TASK_BACKWARDS_TRANSACTION: {
    769             data.enforceInterface(IActivityManager.descriptor);
    770             int task = data.readInt();
    771             moveTaskBackwards(task);
    772             reply.writeNoException();
    773             return true;
    774         }
    775 
    776         case MOVE_TASK_TO_STACK_TRANSACTION: {
    777             data.enforceInterface(IActivityManager.descriptor);
    778             int taskId = data.readInt();
    779             int stackId = data.readInt();
    780             boolean toTop = data.readInt() != 0;
    781             moveTaskToStack(taskId, stackId, toTop);
    782             reply.writeNoException();
    783             return true;
    784         }
    785 
    786         case MOVE_TASK_TO_DOCKED_STACK_TRANSACTION: {
    787             data.enforceInterface(IActivityManager.descriptor);
    788             int taskId = data.readInt();
    789             int createMode = data.readInt();
    790             boolean toTop = data.readInt() != 0;
    791             boolean animate = data.readInt() != 0;
    792             Rect bounds = null;
    793             boolean hasBounds = data.readInt() != 0;
    794             if (hasBounds) {
    795                 bounds = Rect.CREATOR.createFromParcel(data);
    796             }
    797             final boolean moveHomeStackFront = data.readInt() != 0;
    798             final boolean res = moveTaskToDockedStack(
    799                     taskId, createMode, toTop, animate, bounds, moveHomeStackFront);
    800             reply.writeNoException();
    801             reply.writeInt(res ? 1 : 0);
    802             return true;
    803         }
    804 
    805         case MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION: {
    806             data.enforceInterface(IActivityManager.descriptor);
    807             final int stackId = data.readInt();
    808             final Rect r = Rect.CREATOR.createFromParcel(data);
    809             final boolean res = moveTopActivityToPinnedStack(stackId, r);
    810             reply.writeNoException();
    811             reply.writeInt(res ? 1 : 0);
    812             return true;
    813         }
    814 
    815         case RESIZE_STACK_TRANSACTION: {
    816             data.enforceInterface(IActivityManager.descriptor);
    817             final int stackId = data.readInt();
    818             final boolean hasRect = data.readInt() != 0;
    819             Rect r = null;
    820             if (hasRect) {
    821                 r = Rect.CREATOR.createFromParcel(data);
    822             }
    823             final boolean allowResizeInDockedMode = data.readInt() == 1;
    824             final boolean preserveWindows = data.readInt() == 1;
    825             final boolean animate = data.readInt() == 1;
    826             final int animationDuration = data.readInt();
    827             resizeStack(stackId,
    828                     r, allowResizeInDockedMode, preserveWindows, animate, animationDuration);
    829             reply.writeNoException();
    830             return true;
    831         }
    832         case RESIZE_PINNED_STACK_TRANSACTION: {
    833             data.enforceInterface(IActivityManager.descriptor);
    834             final boolean hasBounds = data.readInt() != 0;
    835             Rect bounds = null;
    836             if (hasBounds) {
    837                 bounds = Rect.CREATOR.createFromParcel(data);
    838             }
    839             final boolean hasTempPinnedTaskBounds = data.readInt() != 0;
    840             Rect tempPinnedTaskBounds = null;
    841             if (hasTempPinnedTaskBounds) {
    842                 tempPinnedTaskBounds = Rect.CREATOR.createFromParcel(data);
    843             }
    844             resizePinnedStack(bounds, tempPinnedTaskBounds);
    845             return true;
    846         }
    847         case SWAP_DOCKED_AND_FULLSCREEN_STACK: {
    848             data.enforceInterface(IActivityManager.descriptor);
    849             swapDockedAndFullscreenStack();
    850             reply.writeNoException();
    851             return true;
    852         }
    853         case RESIZE_DOCKED_STACK_TRANSACTION: {
    854             data.enforceInterface(IActivityManager.descriptor);
    855             final boolean hasBounds = data.readInt() != 0;
    856             Rect bounds = null;
    857             if (hasBounds) {
    858                 bounds = Rect.CREATOR.createFromParcel(data);
    859             }
    860             final boolean hasTempDockedTaskBounds = data.readInt() != 0;
    861             Rect tempDockedTaskBounds = null;
    862             if (hasTempDockedTaskBounds) {
    863                 tempDockedTaskBounds = Rect.CREATOR.createFromParcel(data);
    864             }
    865             final boolean hasTempDockedTaskInsetBounds = data.readInt() != 0;
    866             Rect tempDockedTaskInsetBounds = null;
    867             if (hasTempDockedTaskInsetBounds) {
    868                 tempDockedTaskInsetBounds = Rect.CREATOR.createFromParcel(data);
    869             }
    870             final boolean hasTempOtherTaskBounds = data.readInt() != 0;
    871             Rect tempOtherTaskBounds = null;
    872             if (hasTempOtherTaskBounds) {
    873                 tempOtherTaskBounds = Rect.CREATOR.createFromParcel(data);
    874             }
    875             final boolean hasTempOtherTaskInsetBounds = data.readInt() != 0;
    876             Rect tempOtherTaskInsetBounds = null;
    877             if (hasTempOtherTaskInsetBounds) {
    878                 tempOtherTaskInsetBounds = Rect.CREATOR.createFromParcel(data);
    879             }
    880             resizeDockedStack(bounds, tempDockedTaskBounds, tempDockedTaskInsetBounds,
    881                     tempOtherTaskBounds, tempOtherTaskInsetBounds);
    882             reply.writeNoException();
    883             return true;
    884         }
    885 
    886         case POSITION_TASK_IN_STACK_TRANSACTION: {
    887             data.enforceInterface(IActivityManager.descriptor);
    888             int taskId = data.readInt();
    889             int stackId = data.readInt();
    890             int position = data.readInt();
    891             positionTaskInStack(taskId, stackId, position);
    892             reply.writeNoException();
    893             return true;
    894         }
    895 
    896         case GET_ALL_STACK_INFOS_TRANSACTION: {
    897             data.enforceInterface(IActivityManager.descriptor);
    898             List<StackInfo> list = getAllStackInfos();
    899             reply.writeNoException();
    900             reply.writeTypedList(list);
    901             return true;
    902         }
    903 
    904         case GET_STACK_INFO_TRANSACTION: {
    905             data.enforceInterface(IActivityManager.descriptor);
    906             int stackId = data.readInt();
    907             StackInfo info = getStackInfo(stackId);
    908             reply.writeNoException();
    909             if (info != null) {
    910                 reply.writeInt(1);
    911                 info.writeToParcel(reply, 0);
    912             } else {
    913                 reply.writeInt(0);
    914             }
    915             return true;
    916         }
    917 
    918         case IS_IN_HOME_STACK_TRANSACTION: {
    919             data.enforceInterface(IActivityManager.descriptor);
    920             int taskId = data.readInt();
    921             boolean isInHomeStack = isInHomeStack(taskId);
    922             reply.writeNoException();
    923             reply.writeInt(isInHomeStack ? 1 : 0);
    924             return true;
    925         }
    926 
    927         case SET_FOCUSED_STACK_TRANSACTION: {
    928             data.enforceInterface(IActivityManager.descriptor);
    929             int stackId = data.readInt();
    930             setFocusedStack(stackId);
    931             reply.writeNoException();
    932             return true;
    933         }
    934 
    935         case GET_FOCUSED_STACK_ID_TRANSACTION: {
    936             data.enforceInterface(IActivityManager.descriptor);
    937             int focusedStackId = getFocusedStackId();
    938             reply.writeNoException();
    939             reply.writeInt(focusedStackId);
    940             return true;
    941         }
    942 
    943         case SET_FOCUSED_TASK_TRANSACTION: {
    944             data.enforceInterface(IActivityManager.descriptor);
    945             int taskId = data.readInt();
    946             setFocusedTask(taskId);
    947             reply.writeNoException();
    948             return true;
    949         }
    950 
    951         case REGISTER_TASK_STACK_LISTENER_TRANSACTION: {
    952             data.enforceInterface(IActivityManager.descriptor);
    953             IBinder token = data.readStrongBinder();
    954             registerTaskStackListener(ITaskStackListener.Stub.asInterface(token));
    955             reply.writeNoException();
    956             return true;
    957         }
    958 
    959         case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
    960             data.enforceInterface(IActivityManager.descriptor);
    961             IBinder token = data.readStrongBinder();
    962             boolean onlyRoot = data.readInt() != 0;
    963             int res = token != null
    964                 ? getTaskForActivity(token, onlyRoot) : -1;
    965                 reply.writeNoException();
    966             reply.writeInt(res);
    967             return true;
    968         }
    969 
    970         case GET_CONTENT_PROVIDER_TRANSACTION: {
    971             data.enforceInterface(IActivityManager.descriptor);
    972             IBinder b = data.readStrongBinder();
    973             IApplicationThread app = ApplicationThreadNative.asInterface(b);
    974             String name = data.readString();
    975             int userId = data.readInt();
    976             boolean stable = data.readInt() != 0;
    977             ContentProviderHolder cph = getContentProvider(app, name, userId, stable);
    978             reply.writeNoException();
    979             if (cph != null) {
    980                 reply.writeInt(1);
    981                 cph.writeToParcel(reply, 0);
    982             } else {
    983                 reply.writeInt(0);
    984             }
    985             return true;
    986         }
    987 
    988         case GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
    989             data.enforceInterface(IActivityManager.descriptor);
    990             String name = data.readString();
    991             int userId = data.readInt();
    992             IBinder token = data.readStrongBinder();
    993             ContentProviderHolder cph = getContentProviderExternal(name, userId, token);
    994             reply.writeNoException();
    995             if (cph != null) {
    996                 reply.writeInt(1);
    997                 cph.writeToParcel(reply, 0);
    998             } else {
    999                 reply.writeInt(0);
   1000             }
   1001             return true;
   1002         }
   1003 
   1004         case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
   1005             data.enforceInterface(IActivityManager.descriptor);
   1006             IBinder b = data.readStrongBinder();
   1007             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1008             ArrayList<ContentProviderHolder> providers =
   1009                 data.createTypedArrayList(ContentProviderHolder.CREATOR);
   1010             publishContentProviders(app, providers);
   1011             reply.writeNoException();
   1012             return true;
   1013         }
   1014 
   1015         case REF_CONTENT_PROVIDER_TRANSACTION: {
   1016             data.enforceInterface(IActivityManager.descriptor);
   1017             IBinder b = data.readStrongBinder();
   1018             int stable = data.readInt();
   1019             int unstable = data.readInt();
   1020             boolean res = refContentProvider(b, stable, unstable);
   1021             reply.writeNoException();
   1022             reply.writeInt(res ? 1 : 0);
   1023             return true;
   1024         }
   1025 
   1026         case UNSTABLE_PROVIDER_DIED_TRANSACTION: {
   1027             data.enforceInterface(IActivityManager.descriptor);
   1028             IBinder b = data.readStrongBinder();
   1029             unstableProviderDied(b);
   1030             reply.writeNoException();
   1031             return true;
   1032         }
   1033 
   1034         case APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION: {
   1035             data.enforceInterface(IActivityManager.descriptor);
   1036             IBinder b = data.readStrongBinder();
   1037             appNotRespondingViaProvider(b);
   1038             reply.writeNoException();
   1039             return true;
   1040         }
   1041 
   1042         case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
   1043             data.enforceInterface(IActivityManager.descriptor);
   1044             IBinder b = data.readStrongBinder();
   1045             boolean stable = data.readInt() != 0;
   1046             removeContentProvider(b, stable);
   1047             reply.writeNoException();
   1048             return true;
   1049         }
   1050 
   1051         case REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION: {
   1052             data.enforceInterface(IActivityManager.descriptor);
   1053             String name = data.readString();
   1054             IBinder token = data.readStrongBinder();
   1055             removeContentProviderExternal(name, token);
   1056             reply.writeNoException();
   1057             return true;
   1058         }
   1059 
   1060         case GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION: {
   1061             data.enforceInterface(IActivityManager.descriptor);
   1062             ComponentName comp = ComponentName.CREATOR.createFromParcel(data);
   1063             PendingIntent pi = getRunningServiceControlPanel(comp);
   1064             reply.writeNoException();
   1065             PendingIntent.writePendingIntentOrNullToParcel(pi, reply);
   1066             return true;
   1067         }
   1068 
   1069         case START_SERVICE_TRANSACTION: {
   1070             data.enforceInterface(IActivityManager.descriptor);
   1071             IBinder b = data.readStrongBinder();
   1072             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1073             Intent service = Intent.CREATOR.createFromParcel(data);
   1074             String resolvedType = data.readString();
   1075             String callingPackage = data.readString();
   1076             int userId = data.readInt();
   1077             ComponentName cn = startService(app, service, resolvedType, callingPackage, userId);
   1078             reply.writeNoException();
   1079             ComponentName.writeToParcel(cn, reply);
   1080             return true;
   1081         }
   1082 
   1083         case STOP_SERVICE_TRANSACTION: {
   1084             data.enforceInterface(IActivityManager.descriptor);
   1085             IBinder b = data.readStrongBinder();
   1086             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1087             Intent service = Intent.CREATOR.createFromParcel(data);
   1088             String resolvedType = data.readString();
   1089             int userId = data.readInt();
   1090             int res = stopService(app, service, resolvedType, userId);
   1091             reply.writeNoException();
   1092             reply.writeInt(res);
   1093             return true;
   1094         }
   1095 
   1096         case STOP_SERVICE_TOKEN_TRANSACTION: {
   1097             data.enforceInterface(IActivityManager.descriptor);
   1098             ComponentName className = ComponentName.readFromParcel(data);
   1099             IBinder token = data.readStrongBinder();
   1100             int startId = data.readInt();
   1101             boolean res = stopServiceToken(className, token, startId);
   1102             reply.writeNoException();
   1103             reply.writeInt(res ? 1 : 0);
   1104             return true;
   1105         }
   1106 
   1107         case SET_SERVICE_FOREGROUND_TRANSACTION: {
   1108             data.enforceInterface(IActivityManager.descriptor);
   1109             ComponentName className = ComponentName.readFromParcel(data);
   1110             IBinder token = data.readStrongBinder();
   1111             int id = data.readInt();
   1112             Notification notification = null;
   1113             if (data.readInt() != 0) {
   1114                 notification = Notification.CREATOR.createFromParcel(data);
   1115             }
   1116             int sflags = data.readInt();
   1117             setServiceForeground(className, token, id, notification, sflags);
   1118             reply.writeNoException();
   1119             return true;
   1120         }
   1121 
   1122         case BIND_SERVICE_TRANSACTION: {
   1123             data.enforceInterface(IActivityManager.descriptor);
   1124             IBinder b = data.readStrongBinder();
   1125             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1126             IBinder token = data.readStrongBinder();
   1127             Intent service = Intent.CREATOR.createFromParcel(data);
   1128             String resolvedType = data.readString();
   1129             b = data.readStrongBinder();
   1130             int fl = data.readInt();
   1131             String callingPackage = data.readString();
   1132             int userId = data.readInt();
   1133             IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
   1134             int res = bindService(app, token, service, resolvedType, conn, fl,
   1135                     callingPackage, userId);
   1136             reply.writeNoException();
   1137             reply.writeInt(res);
   1138             return true;
   1139         }
   1140 
   1141         case UNBIND_SERVICE_TRANSACTION: {
   1142             data.enforceInterface(IActivityManager.descriptor);
   1143             IBinder b = data.readStrongBinder();
   1144             IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
   1145             boolean res = unbindService(conn);
   1146             reply.writeNoException();
   1147             reply.writeInt(res ? 1 : 0);
   1148             return true;
   1149         }
   1150 
   1151         case PUBLISH_SERVICE_TRANSACTION: {
   1152             data.enforceInterface(IActivityManager.descriptor);
   1153             IBinder token = data.readStrongBinder();
   1154             Intent intent = Intent.CREATOR.createFromParcel(data);
   1155             IBinder service = data.readStrongBinder();
   1156             publishService(token, intent, service);
   1157             reply.writeNoException();
   1158             return true;
   1159         }
   1160 
   1161         case UNBIND_FINISHED_TRANSACTION: {
   1162             data.enforceInterface(IActivityManager.descriptor);
   1163             IBinder token = data.readStrongBinder();
   1164             Intent intent = Intent.CREATOR.createFromParcel(data);
   1165             boolean doRebind = data.readInt() != 0;
   1166             unbindFinished(token, intent, doRebind);
   1167             reply.writeNoException();
   1168             return true;
   1169         }
   1170 
   1171         case SERVICE_DONE_EXECUTING_TRANSACTION: {
   1172             data.enforceInterface(IActivityManager.descriptor);
   1173             IBinder token = data.readStrongBinder();
   1174             int type = data.readInt();
   1175             int startId = data.readInt();
   1176             int res = data.readInt();
   1177             serviceDoneExecuting(token, type, startId, res);
   1178             reply.writeNoException();
   1179             return true;
   1180         }
   1181 
   1182         case START_INSTRUMENTATION_TRANSACTION: {
   1183             data.enforceInterface(IActivityManager.descriptor);
   1184             ComponentName className = ComponentName.readFromParcel(data);
   1185             String profileFile = data.readString();
   1186             int fl = data.readInt();
   1187             Bundle arguments = data.readBundle();
   1188             IBinder b = data.readStrongBinder();
   1189             IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
   1190             b = data.readStrongBinder();
   1191             IUiAutomationConnection c = IUiAutomationConnection.Stub.asInterface(b);
   1192             int userId = data.readInt();
   1193             String abiOverride = data.readString();
   1194             boolean res = startInstrumentation(className, profileFile, fl, arguments, w, c, userId,
   1195                     abiOverride);
   1196             reply.writeNoException();
   1197             reply.writeInt(res ? 1 : 0);
   1198             return true;
   1199         }
   1200 
   1201 
   1202         case FINISH_INSTRUMENTATION_TRANSACTION: {
   1203             data.enforceInterface(IActivityManager.descriptor);
   1204             IBinder b = data.readStrongBinder();
   1205             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1206             int resultCode = data.readInt();
   1207             Bundle results = data.readBundle();
   1208             finishInstrumentation(app, resultCode, results);
   1209             reply.writeNoException();
   1210             return true;
   1211         }
   1212 
   1213         case GET_CONFIGURATION_TRANSACTION: {
   1214             data.enforceInterface(IActivityManager.descriptor);
   1215             Configuration config = getConfiguration();
   1216             reply.writeNoException();
   1217             config.writeToParcel(reply, 0);
   1218             return true;
   1219         }
   1220 
   1221         case UPDATE_CONFIGURATION_TRANSACTION: {
   1222             data.enforceInterface(IActivityManager.descriptor);
   1223             Configuration config = Configuration.CREATOR.createFromParcel(data);
   1224             updateConfiguration(config);
   1225             reply.writeNoException();
   1226             return true;
   1227         }
   1228 
   1229         case SET_REQUESTED_ORIENTATION_TRANSACTION: {
   1230             data.enforceInterface(IActivityManager.descriptor);
   1231             IBinder token = data.readStrongBinder();
   1232             int requestedOrientation = data.readInt();
   1233             setRequestedOrientation(token, requestedOrientation);
   1234             reply.writeNoException();
   1235             return true;
   1236         }
   1237 
   1238         case GET_REQUESTED_ORIENTATION_TRANSACTION: {
   1239             data.enforceInterface(IActivityManager.descriptor);
   1240             IBinder token = data.readStrongBinder();
   1241             int req = getRequestedOrientation(token);
   1242             reply.writeNoException();
   1243             reply.writeInt(req);
   1244             return true;
   1245         }
   1246 
   1247         case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
   1248             data.enforceInterface(IActivityManager.descriptor);
   1249             IBinder token = data.readStrongBinder();
   1250             ComponentName cn = getActivityClassForToken(token);
   1251             reply.writeNoException();
   1252             ComponentName.writeToParcel(cn, reply);
   1253             return true;
   1254         }
   1255 
   1256         case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
   1257             data.enforceInterface(IActivityManager.descriptor);
   1258             IBinder token = data.readStrongBinder();
   1259             reply.writeNoException();
   1260             reply.writeString(getPackageForToken(token));
   1261             return true;
   1262         }
   1263 
   1264         case GET_INTENT_SENDER_TRANSACTION: {
   1265             data.enforceInterface(IActivityManager.descriptor);
   1266             int type = data.readInt();
   1267             String packageName = data.readString();
   1268             IBinder token = data.readStrongBinder();
   1269             String resultWho = data.readString();
   1270             int requestCode = data.readInt();
   1271             Intent[] requestIntents;
   1272             String[] requestResolvedTypes;
   1273             if (data.readInt() != 0) {
   1274                 requestIntents = data.createTypedArray(Intent.CREATOR);
   1275                 requestResolvedTypes = data.createStringArray();
   1276             } else {
   1277                 requestIntents = null;
   1278                 requestResolvedTypes = null;
   1279             }
   1280             int fl = data.readInt();
   1281             Bundle options = data.readInt() != 0
   1282                     ? Bundle.CREATOR.createFromParcel(data) : null;
   1283             int userId = data.readInt();
   1284             IIntentSender res = getIntentSender(type, packageName, token,
   1285                     resultWho, requestCode, requestIntents,
   1286                     requestResolvedTypes, fl, options, userId);
   1287             reply.writeNoException();
   1288             reply.writeStrongBinder(res != null ? res.asBinder() : null);
   1289             return true;
   1290         }
   1291 
   1292         case CANCEL_INTENT_SENDER_TRANSACTION: {
   1293             data.enforceInterface(IActivityManager.descriptor);
   1294             IIntentSender r = IIntentSender.Stub.asInterface(
   1295                 data.readStrongBinder());
   1296             cancelIntentSender(r);
   1297             reply.writeNoException();
   1298             return true;
   1299         }
   1300 
   1301         case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
   1302             data.enforceInterface(IActivityManager.descriptor);
   1303             IIntentSender r = IIntentSender.Stub.asInterface(
   1304                 data.readStrongBinder());
   1305             String res = getPackageForIntentSender(r);
   1306             reply.writeNoException();
   1307             reply.writeString(res);
   1308             return true;
   1309         }
   1310 
   1311         case GET_UID_FOR_INTENT_SENDER_TRANSACTION: {
   1312             data.enforceInterface(IActivityManager.descriptor);
   1313             IIntentSender r = IIntentSender.Stub.asInterface(
   1314                 data.readStrongBinder());
   1315             int res = getUidForIntentSender(r);
   1316             reply.writeNoException();
   1317             reply.writeInt(res);
   1318             return true;
   1319         }
   1320 
   1321         case HANDLE_INCOMING_USER_TRANSACTION: {
   1322             data.enforceInterface(IActivityManager.descriptor);
   1323             int callingPid = data.readInt();
   1324             int callingUid = data.readInt();
   1325             int userId = data.readInt();
   1326             boolean allowAll = data.readInt() != 0 ;
   1327             boolean requireFull = data.readInt() != 0;
   1328             String name = data.readString();
   1329             String callerPackage = data.readString();
   1330             int res = handleIncomingUser(callingPid, callingUid, userId, allowAll,
   1331                     requireFull, name, callerPackage);
   1332             reply.writeNoException();
   1333             reply.writeInt(res);
   1334             return true;
   1335         }
   1336 
   1337         case SET_PROCESS_LIMIT_TRANSACTION: {
   1338             data.enforceInterface(IActivityManager.descriptor);
   1339             int max = data.readInt();
   1340             setProcessLimit(max);
   1341             reply.writeNoException();
   1342             return true;
   1343         }
   1344 
   1345         case GET_PROCESS_LIMIT_TRANSACTION: {
   1346             data.enforceInterface(IActivityManager.descriptor);
   1347             int limit = getProcessLimit();
   1348             reply.writeNoException();
   1349             reply.writeInt(limit);
   1350             return true;
   1351         }
   1352 
   1353         case SET_PROCESS_FOREGROUND_TRANSACTION: {
   1354             data.enforceInterface(IActivityManager.descriptor);
   1355             IBinder token = data.readStrongBinder();
   1356             int pid = data.readInt();
   1357             boolean isForeground = data.readInt() != 0;
   1358             setProcessForeground(token, pid, isForeground);
   1359             reply.writeNoException();
   1360             return true;
   1361         }
   1362 
   1363         case CHECK_PERMISSION_TRANSACTION: {
   1364             data.enforceInterface(IActivityManager.descriptor);
   1365             String perm = data.readString();
   1366             int pid = data.readInt();
   1367             int uid = data.readInt();
   1368             int res = checkPermission(perm, pid, uid);
   1369             reply.writeNoException();
   1370             reply.writeInt(res);
   1371             return true;
   1372         }
   1373 
   1374         case CHECK_PERMISSION_WITH_TOKEN_TRANSACTION: {
   1375             data.enforceInterface(IActivityManager.descriptor);
   1376             String perm = data.readString();
   1377             int pid = data.readInt();
   1378             int uid = data.readInt();
   1379             IBinder token = data.readStrongBinder();
   1380             int res = checkPermissionWithToken(perm, pid, uid, token);
   1381             reply.writeNoException();
   1382             reply.writeInt(res);
   1383             return true;
   1384         }
   1385 
   1386         case CHECK_URI_PERMISSION_TRANSACTION: {
   1387             data.enforceInterface(IActivityManager.descriptor);
   1388             Uri uri = Uri.CREATOR.createFromParcel(data);
   1389             int pid = data.readInt();
   1390             int uid = data.readInt();
   1391             int mode = data.readInt();
   1392             int userId = data.readInt();
   1393             IBinder callerToken = data.readStrongBinder();
   1394             int res = checkUriPermission(uri, pid, uid, mode, userId, callerToken);
   1395             reply.writeNoException();
   1396             reply.writeInt(res);
   1397             return true;
   1398         }
   1399 
   1400         case CLEAR_APP_DATA_TRANSACTION: {
   1401             data.enforceInterface(IActivityManager.descriptor);
   1402             String packageName = data.readString();
   1403             IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
   1404                     data.readStrongBinder());
   1405             int userId = data.readInt();
   1406             boolean res = clearApplicationUserData(packageName, observer, userId);
   1407             reply.writeNoException();
   1408             reply.writeInt(res ? 1 : 0);
   1409             return true;
   1410         }
   1411 
   1412         case GRANT_URI_PERMISSION_TRANSACTION: {
   1413             data.enforceInterface(IActivityManager.descriptor);
   1414             IBinder b = data.readStrongBinder();
   1415             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1416             String targetPkg = data.readString();
   1417             Uri uri = Uri.CREATOR.createFromParcel(data);
   1418             int mode = data.readInt();
   1419             int userId = data.readInt();
   1420             grantUriPermission(app, targetPkg, uri, mode, userId);
   1421             reply.writeNoException();
   1422             return true;
   1423         }
   1424 
   1425         case REVOKE_URI_PERMISSION_TRANSACTION: {
   1426             data.enforceInterface(IActivityManager.descriptor);
   1427             IBinder b = data.readStrongBinder();
   1428             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1429             Uri uri = Uri.CREATOR.createFromParcel(data);
   1430             int mode = data.readInt();
   1431             int userId = data.readInt();
   1432             revokeUriPermission(app, uri, mode, userId);
   1433             reply.writeNoException();
   1434             return true;
   1435         }
   1436 
   1437         case TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
   1438             data.enforceInterface(IActivityManager.descriptor);
   1439             Uri uri = Uri.CREATOR.createFromParcel(data);
   1440             int mode = data.readInt();
   1441             int userId = data.readInt();
   1442             takePersistableUriPermission(uri, mode, userId);
   1443             reply.writeNoException();
   1444             return true;
   1445         }
   1446 
   1447         case RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION: {
   1448             data.enforceInterface(IActivityManager.descriptor);
   1449             Uri uri = Uri.CREATOR.createFromParcel(data);
   1450             int mode = data.readInt();
   1451             int userId = data.readInt();
   1452             releasePersistableUriPermission(uri, mode, userId);
   1453             reply.writeNoException();
   1454             return true;
   1455         }
   1456 
   1457         case GET_PERSISTED_URI_PERMISSIONS_TRANSACTION: {
   1458             data.enforceInterface(IActivityManager.descriptor);
   1459             final String packageName = data.readString();
   1460             final boolean incoming = data.readInt() != 0;
   1461             final ParceledListSlice<UriPermission> perms = getPersistedUriPermissions(
   1462                     packageName, incoming);
   1463             reply.writeNoException();
   1464             perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   1465             return true;
   1466         }
   1467 
   1468         case GET_GRANTED_URI_PERMISSIONS_TRANSACTION: {
   1469             data.enforceInterface(IActivityManager.descriptor);
   1470             final String packageName = data.readString();
   1471             final int userId = data.readInt();
   1472             final ParceledListSlice<UriPermission> perms = getGrantedUriPermissions(packageName,
   1473                     userId);
   1474             reply.writeNoException();
   1475             perms.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   1476             return true;
   1477         }
   1478 
   1479         case CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION: {
   1480             data.enforceInterface(IActivityManager.descriptor);
   1481             final String packageName = data.readString();
   1482             final int userId = data.readInt();
   1483             clearGrantedUriPermissions(packageName, userId);
   1484             reply.writeNoException();
   1485             return true;
   1486         }
   1487 
   1488         case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
   1489             data.enforceInterface(IActivityManager.descriptor);
   1490             IBinder b = data.readStrongBinder();
   1491             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   1492             boolean waiting = data.readInt() != 0;
   1493             showWaitingForDebugger(app, waiting);
   1494             reply.writeNoException();
   1495             return true;
   1496         }
   1497 
   1498         case GET_MEMORY_INFO_TRANSACTION: {
   1499             data.enforceInterface(IActivityManager.descriptor);
   1500             ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
   1501             getMemoryInfo(mi);
   1502             reply.writeNoException();
   1503             mi.writeToParcel(reply, 0);
   1504             return true;
   1505         }
   1506 
   1507         case UNHANDLED_BACK_TRANSACTION: {
   1508             data.enforceInterface(IActivityManager.descriptor);
   1509             unhandledBack();
   1510             reply.writeNoException();
   1511             return true;
   1512         }
   1513 
   1514         case OPEN_CONTENT_URI_TRANSACTION: {
   1515             data.enforceInterface(IActivityManager.descriptor);
   1516             Uri uri = Uri.parse(data.readString());
   1517             ParcelFileDescriptor pfd = openContentUri(uri);
   1518             reply.writeNoException();
   1519             if (pfd != null) {
   1520                 reply.writeInt(1);
   1521                 pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   1522             } else {
   1523                 reply.writeInt(0);
   1524             }
   1525             return true;
   1526         }
   1527 
   1528         case SET_LOCK_SCREEN_SHOWN_TRANSACTION: {
   1529             data.enforceInterface(IActivityManager.descriptor);
   1530             final boolean showing = data.readInt() != 0;
   1531             final boolean occluded = data.readInt() != 0;
   1532             setLockScreenShown(showing, occluded);
   1533             reply.writeNoException();
   1534             return true;
   1535         }
   1536 
   1537         case SET_DEBUG_APP_TRANSACTION: {
   1538             data.enforceInterface(IActivityManager.descriptor);
   1539             String pn = data.readString();
   1540             boolean wfd = data.readInt() != 0;
   1541             boolean per = data.readInt() != 0;
   1542             setDebugApp(pn, wfd, per);
   1543             reply.writeNoException();
   1544             return true;
   1545         }
   1546 
   1547         case SET_ALWAYS_FINISH_TRANSACTION: {
   1548             data.enforceInterface(IActivityManager.descriptor);
   1549             boolean enabled = data.readInt() != 0;
   1550             setAlwaysFinish(enabled);
   1551             reply.writeNoException();
   1552             return true;
   1553         }
   1554 
   1555         case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
   1556             data.enforceInterface(IActivityManager.descriptor);
   1557             IActivityController watcher = IActivityController.Stub.asInterface(
   1558                     data.readStrongBinder());
   1559             boolean imAMonkey = data.readInt() != 0;
   1560             setActivityController(watcher, imAMonkey);
   1561             reply.writeNoException();
   1562             return true;
   1563         }
   1564 
   1565         case SET_LENIENT_BACKGROUND_CHECK_TRANSACTION: {
   1566             data.enforceInterface(IActivityManager.descriptor);
   1567             boolean enabled = data.readInt() != 0;
   1568             setLenientBackgroundCheck(enabled);
   1569             reply.writeNoException();
   1570             return true;
   1571         }
   1572 
   1573         case GET_MEMORY_TRIM_LEVEL_TRANSACTION: {
   1574             data.enforceInterface(IActivityManager.descriptor);
   1575             int level = getMemoryTrimLevel();
   1576             reply.writeNoException();
   1577             reply.writeInt(level);
   1578             return true;
   1579         }
   1580 
   1581         case ENTER_SAFE_MODE_TRANSACTION: {
   1582             data.enforceInterface(IActivityManager.descriptor);
   1583             enterSafeMode();
   1584             reply.writeNoException();
   1585             return true;
   1586         }
   1587 
   1588         case NOTE_WAKEUP_ALARM_TRANSACTION: {
   1589             data.enforceInterface(IActivityManager.descriptor);
   1590             IIntentSender is = IIntentSender.Stub.asInterface(
   1591                     data.readStrongBinder());
   1592             int sourceUid = data.readInt();
   1593             String sourcePkg = data.readString();
   1594             String tag = data.readString();
   1595             noteWakeupAlarm(is, sourceUid, sourcePkg, tag);
   1596             reply.writeNoException();
   1597             return true;
   1598         }
   1599 
   1600         case NOTE_ALARM_START_TRANSACTION: {
   1601             data.enforceInterface(IActivityManager.descriptor);
   1602             IIntentSender is = IIntentSender.Stub.asInterface(
   1603                     data.readStrongBinder());
   1604             int sourceUid = data.readInt();
   1605             String tag = data.readString();
   1606             noteAlarmStart(is, sourceUid, tag);
   1607             reply.writeNoException();
   1608             return true;
   1609         }
   1610 
   1611         case NOTE_ALARM_FINISH_TRANSACTION: {
   1612             data.enforceInterface(IActivityManager.descriptor);
   1613             IIntentSender is = IIntentSender.Stub.asInterface(
   1614                     data.readStrongBinder());
   1615             int sourceUid = data.readInt();
   1616             String tag = data.readString();
   1617             noteAlarmFinish(is, sourceUid, tag);
   1618             reply.writeNoException();
   1619             return true;
   1620         }
   1621 
   1622         case KILL_PIDS_TRANSACTION: {
   1623             data.enforceInterface(IActivityManager.descriptor);
   1624             int[] pids = data.createIntArray();
   1625             String reason = data.readString();
   1626             boolean secure = data.readInt() != 0;
   1627             boolean res = killPids(pids, reason, secure);
   1628             reply.writeNoException();
   1629             reply.writeInt(res ? 1 : 0);
   1630             return true;
   1631         }
   1632 
   1633         case KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION: {
   1634             data.enforceInterface(IActivityManager.descriptor);
   1635             String reason = data.readString();
   1636             boolean res = killProcessesBelowForeground(reason);
   1637             reply.writeNoException();
   1638             reply.writeInt(res ? 1 : 0);
   1639             return true;
   1640         }
   1641 
   1642         case HANDLE_APPLICATION_CRASH_TRANSACTION: {
   1643             data.enforceInterface(IActivityManager.descriptor);
   1644             IBinder app = data.readStrongBinder();
   1645             ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
   1646             handleApplicationCrash(app, ci);
   1647             reply.writeNoException();
   1648             return true;
   1649         }
   1650 
   1651         case HANDLE_APPLICATION_WTF_TRANSACTION: {
   1652             data.enforceInterface(IActivityManager.descriptor);
   1653             IBinder app = data.readStrongBinder();
   1654             String tag = data.readString();
   1655             boolean system = data.readInt() != 0;
   1656             ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data);
   1657             boolean res = handleApplicationWtf(app, tag, system, ci);
   1658             reply.writeNoException();
   1659             reply.writeInt(res ? 1 : 0);
   1660             return true;
   1661         }
   1662 
   1663         case HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION: {
   1664             data.enforceInterface(IActivityManager.descriptor);
   1665             IBinder app = data.readStrongBinder();
   1666             int violationMask = data.readInt();
   1667             StrictMode.ViolationInfo info = new StrictMode.ViolationInfo(data);
   1668             handleApplicationStrictModeViolation(app, violationMask, info);
   1669             reply.writeNoException();
   1670             return true;
   1671         }
   1672 
   1673         case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
   1674             data.enforceInterface(IActivityManager.descriptor);
   1675             int sig = data.readInt();
   1676             signalPersistentProcesses(sig);
   1677             reply.writeNoException();
   1678             return true;
   1679         }
   1680 
   1681         case KILL_BACKGROUND_PROCESSES_TRANSACTION: {
   1682             data.enforceInterface(IActivityManager.descriptor);
   1683             String packageName = data.readString();
   1684             int userId = data.readInt();
   1685             killBackgroundProcesses(packageName, userId);
   1686             reply.writeNoException();
   1687             return true;
   1688         }
   1689 
   1690         case KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION: {
   1691             data.enforceInterface(IActivityManager.descriptor);
   1692             killAllBackgroundProcesses();
   1693             reply.writeNoException();
   1694             return true;
   1695         }
   1696 
   1697         case KILL_PACKAGE_DEPENDENTS_TRANSACTION: {
   1698             data.enforceInterface(IActivityManager.descriptor);
   1699             String packageName = data.readString();
   1700             int userId = data.readInt();
   1701             killPackageDependents(packageName, userId);
   1702             reply.writeNoException();
   1703             return true;
   1704         }
   1705 
   1706         case FORCE_STOP_PACKAGE_TRANSACTION: {
   1707             data.enforceInterface(IActivityManager.descriptor);
   1708             String packageName = data.readString();
   1709             int userId = data.readInt();
   1710             forceStopPackage(packageName, userId);
   1711             reply.writeNoException();
   1712             return true;
   1713         }
   1714 
   1715         case GET_MY_MEMORY_STATE_TRANSACTION: {
   1716             data.enforceInterface(IActivityManager.descriptor);
   1717             ActivityManager.RunningAppProcessInfo info =
   1718                     new ActivityManager.RunningAppProcessInfo();
   1719             getMyMemoryState(info);
   1720             reply.writeNoException();
   1721             info.writeToParcel(reply, 0);
   1722             return true;
   1723         }
   1724 
   1725         case GET_DEVICE_CONFIGURATION_TRANSACTION: {
   1726             data.enforceInterface(IActivityManager.descriptor);
   1727             ConfigurationInfo config = getDeviceConfigurationInfo();
   1728             reply.writeNoException();
   1729             config.writeToParcel(reply, 0);
   1730             return true;
   1731         }
   1732 
   1733         case PROFILE_CONTROL_TRANSACTION: {
   1734             data.enforceInterface(IActivityManager.descriptor);
   1735             String process = data.readString();
   1736             int userId = data.readInt();
   1737             boolean start = data.readInt() != 0;
   1738             int profileType = data.readInt();
   1739             ProfilerInfo profilerInfo = data.readInt() != 0
   1740                     ? ProfilerInfo.CREATOR.createFromParcel(data) : null;
   1741             boolean res = profileControl(process, userId, start, profilerInfo, profileType);
   1742             reply.writeNoException();
   1743             reply.writeInt(res ? 1 : 0);
   1744             return true;
   1745         }
   1746 
   1747         case SHUTDOWN_TRANSACTION: {
   1748             data.enforceInterface(IActivityManager.descriptor);
   1749             boolean res = shutdown(data.readInt());
   1750             reply.writeNoException();
   1751             reply.writeInt(res ? 1 : 0);
   1752             return true;
   1753         }
   1754 
   1755         case STOP_APP_SWITCHES_TRANSACTION: {
   1756             data.enforceInterface(IActivityManager.descriptor);
   1757             stopAppSwitches();
   1758             reply.writeNoException();
   1759             return true;
   1760         }
   1761 
   1762         case RESUME_APP_SWITCHES_TRANSACTION: {
   1763             data.enforceInterface(IActivityManager.descriptor);
   1764             resumeAppSwitches();
   1765             reply.writeNoException();
   1766             return true;
   1767         }
   1768 
   1769         case PEEK_SERVICE_TRANSACTION: {
   1770             data.enforceInterface(IActivityManager.descriptor);
   1771             Intent service = Intent.CREATOR.createFromParcel(data);
   1772             String resolvedType = data.readString();
   1773             String callingPackage = data.readString();
   1774             IBinder binder = peekService(service, resolvedType, callingPackage);
   1775             reply.writeNoException();
   1776             reply.writeStrongBinder(binder);
   1777             return true;
   1778         }
   1779 
   1780         case START_BACKUP_AGENT_TRANSACTION: {
   1781             data.enforceInterface(IActivityManager.descriptor);
   1782             String packageName = data.readString();
   1783             int backupRestoreMode = data.readInt();
   1784             int userId = data.readInt();
   1785             boolean success = bindBackupAgent(packageName, backupRestoreMode, userId);
   1786             reply.writeNoException();
   1787             reply.writeInt(success ? 1 : 0);
   1788             return true;
   1789         }
   1790 
   1791         case BACKUP_AGENT_CREATED_TRANSACTION: {
   1792             data.enforceInterface(IActivityManager.descriptor);
   1793             String packageName = data.readString();
   1794             IBinder agent = data.readStrongBinder();
   1795             backupAgentCreated(packageName, agent);
   1796             reply.writeNoException();
   1797             return true;
   1798         }
   1799 
   1800         case UNBIND_BACKUP_AGENT_TRANSACTION: {
   1801             data.enforceInterface(IActivityManager.descriptor);
   1802             ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
   1803             unbindBackupAgent(info);
   1804             reply.writeNoException();
   1805             return true;
   1806         }
   1807 
   1808         case ADD_PACKAGE_DEPENDENCY_TRANSACTION: {
   1809             data.enforceInterface(IActivityManager.descriptor);
   1810             String packageName = data.readString();
   1811             addPackageDependency(packageName);
   1812             reply.writeNoException();
   1813             return true;
   1814         }
   1815 
   1816         case KILL_APPLICATION_TRANSACTION: {
   1817             data.enforceInterface(IActivityManager.descriptor);
   1818             String pkg = data.readString();
   1819             int appId = data.readInt();
   1820             int userId = data.readInt();
   1821             String reason = data.readString();
   1822             killApplication(pkg, appId, userId, reason);
   1823             reply.writeNoException();
   1824             return true;
   1825         }
   1826 
   1827         case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
   1828             data.enforceInterface(IActivityManager.descriptor);
   1829             String reason = data.readString();
   1830             closeSystemDialogs(reason);
   1831             reply.writeNoException();
   1832             return true;
   1833         }
   1834 
   1835         case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
   1836             data.enforceInterface(IActivityManager.descriptor);
   1837             int[] pids = data.createIntArray();
   1838             Debug.MemoryInfo[] res =  getProcessMemoryInfo(pids);
   1839             reply.writeNoException();
   1840             reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   1841             return true;
   1842         }
   1843 
   1844         case KILL_APPLICATION_PROCESS_TRANSACTION: {
   1845             data.enforceInterface(IActivityManager.descriptor);
   1846             String processName = data.readString();
   1847             int uid = data.readInt();
   1848             killApplicationProcess(processName, uid);
   1849             reply.writeNoException();
   1850             return true;
   1851         }
   1852 
   1853         case OVERRIDE_PENDING_TRANSITION_TRANSACTION: {
   1854             data.enforceInterface(IActivityManager.descriptor);
   1855             IBinder token = data.readStrongBinder();
   1856             String packageName = data.readString();
   1857             int enterAnim = data.readInt();
   1858             int exitAnim = data.readInt();
   1859             overridePendingTransition(token, packageName, enterAnim, exitAnim);
   1860             reply.writeNoException();
   1861             return true;
   1862         }
   1863 
   1864         case IS_USER_A_MONKEY_TRANSACTION: {
   1865             data.enforceInterface(IActivityManager.descriptor);
   1866             boolean areThey = isUserAMonkey();
   1867             reply.writeNoException();
   1868             reply.writeInt(areThey ? 1 : 0);
   1869             return true;
   1870         }
   1871 
   1872         case SET_USER_IS_MONKEY_TRANSACTION: {
   1873             data.enforceInterface(IActivityManager.descriptor);
   1874             final boolean monkey = (data.readInt() == 1);
   1875             setUserIsMonkey(monkey);
   1876             reply.writeNoException();
   1877             return true;
   1878         }
   1879 
   1880         case FINISH_HEAVY_WEIGHT_APP_TRANSACTION: {
   1881             data.enforceInterface(IActivityManager.descriptor);
   1882             finishHeavyWeightApp();
   1883             reply.writeNoException();
   1884             return true;
   1885         }
   1886 
   1887         case IS_IMMERSIVE_TRANSACTION: {
   1888             data.enforceInterface(IActivityManager.descriptor);
   1889             IBinder token = data.readStrongBinder();
   1890             boolean isit = isImmersive(token);
   1891             reply.writeNoException();
   1892             reply.writeInt(isit ? 1 : 0);
   1893             return true;
   1894         }
   1895 
   1896         case IS_TOP_OF_TASK_TRANSACTION: {
   1897             data.enforceInterface(IActivityManager.descriptor);
   1898             IBinder token = data.readStrongBinder();
   1899             final boolean isTopOfTask = isTopOfTask(token);
   1900             reply.writeNoException();
   1901             reply.writeInt(isTopOfTask ? 1 : 0);
   1902             return true;
   1903         }
   1904 
   1905         case CONVERT_FROM_TRANSLUCENT_TRANSACTION: {
   1906             data.enforceInterface(IActivityManager.descriptor);
   1907             IBinder token = data.readStrongBinder();
   1908             boolean converted = convertFromTranslucent(token);
   1909             reply.writeNoException();
   1910             reply.writeInt(converted ? 1 : 0);
   1911             return true;
   1912         }
   1913 
   1914         case CONVERT_TO_TRANSLUCENT_TRANSACTION: {
   1915             data.enforceInterface(IActivityManager.descriptor);
   1916             IBinder token = data.readStrongBinder();
   1917             final Bundle bundle;
   1918             if (data.readInt() == 0) {
   1919                 bundle = null;
   1920             } else {
   1921                 bundle = data.readBundle();
   1922             }
   1923             final ActivityOptions options = ActivityOptions.fromBundle(bundle);
   1924             boolean converted = convertToTranslucent(token, options);
   1925             reply.writeNoException();
   1926             reply.writeInt(converted ? 1 : 0);
   1927             return true;
   1928         }
   1929 
   1930         case GET_ACTIVITY_OPTIONS_TRANSACTION: {
   1931             data.enforceInterface(IActivityManager.descriptor);
   1932             IBinder token = data.readStrongBinder();
   1933             final ActivityOptions options = getActivityOptions(token);
   1934             reply.writeNoException();
   1935             reply.writeBundle(options == null ? null : options.toBundle());
   1936             return true;
   1937         }
   1938 
   1939         case SET_IMMERSIVE_TRANSACTION: {
   1940             data.enforceInterface(IActivityManager.descriptor);
   1941             IBinder token = data.readStrongBinder();
   1942             boolean imm = data.readInt() == 1;
   1943             setImmersive(token, imm);
   1944             reply.writeNoException();
   1945             return true;
   1946         }
   1947 
   1948         case IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION: {
   1949             data.enforceInterface(IActivityManager.descriptor);
   1950             boolean isit = isTopActivityImmersive();
   1951             reply.writeNoException();
   1952             reply.writeInt(isit ? 1 : 0);
   1953             return true;
   1954         }
   1955 
   1956         case CRASH_APPLICATION_TRANSACTION: {
   1957             data.enforceInterface(IActivityManager.descriptor);
   1958             int uid = data.readInt();
   1959             int initialPid = data.readInt();
   1960             String packageName = data.readString();
   1961             String message = data.readString();
   1962             crashApplication(uid, initialPid, packageName, message);
   1963             reply.writeNoException();
   1964             return true;
   1965         }
   1966 
   1967         case GET_PROVIDER_MIME_TYPE_TRANSACTION: {
   1968             data.enforceInterface(IActivityManager.descriptor);
   1969             Uri uri = Uri.CREATOR.createFromParcel(data);
   1970             int userId = data.readInt();
   1971             String type = getProviderMimeType(uri, userId);
   1972             reply.writeNoException();
   1973             reply.writeString(type);
   1974             return true;
   1975         }
   1976 
   1977         case NEW_URI_PERMISSION_OWNER_TRANSACTION: {
   1978             data.enforceInterface(IActivityManager.descriptor);
   1979             String name = data.readString();
   1980             IBinder perm = newUriPermissionOwner(name);
   1981             reply.writeNoException();
   1982             reply.writeStrongBinder(perm);
   1983             return true;
   1984         }
   1985 
   1986         case GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION: {
   1987             data.enforceInterface(IActivityManager.descriptor);
   1988             IBinder activityToken = data.readStrongBinder();
   1989             IBinder perm = getUriPermissionOwnerForActivity(activityToken);
   1990             reply.writeNoException();
   1991             reply.writeStrongBinder(perm);
   1992             return true;
   1993         }
   1994 
   1995         case GRANT_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
   1996             data.enforceInterface(IActivityManager.descriptor);
   1997             IBinder owner = data.readStrongBinder();
   1998             int fromUid = data.readInt();
   1999             String targetPkg = data.readString();
   2000             Uri uri = Uri.CREATOR.createFromParcel(data);
   2001             int mode = data.readInt();
   2002             int sourceUserId = data.readInt();
   2003             int targetUserId = data.readInt();
   2004             grantUriPermissionFromOwner(owner, fromUid, targetPkg, uri, mode, sourceUserId,
   2005                     targetUserId);
   2006             reply.writeNoException();
   2007             return true;
   2008         }
   2009 
   2010         case REVOKE_URI_PERMISSION_FROM_OWNER_TRANSACTION: {
   2011             data.enforceInterface(IActivityManager.descriptor);
   2012             IBinder owner = data.readStrongBinder();
   2013             Uri uri = null;
   2014             if (data.readInt() != 0) {
   2015                 uri = Uri.CREATOR.createFromParcel(data);
   2016             }
   2017             int mode = data.readInt();
   2018             int userId = data.readInt();
   2019             revokeUriPermissionFromOwner(owner, uri, mode, userId);
   2020             reply.writeNoException();
   2021             return true;
   2022         }
   2023 
   2024         case CHECK_GRANT_URI_PERMISSION_TRANSACTION: {
   2025             data.enforceInterface(IActivityManager.descriptor);
   2026             int callingUid = data.readInt();
   2027             String targetPkg = data.readString();
   2028             Uri uri = Uri.CREATOR.createFromParcel(data);
   2029             int modeFlags = data.readInt();
   2030             int userId = data.readInt();
   2031             int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags, userId);
   2032             reply.writeNoException();
   2033             reply.writeInt(res);
   2034             return true;
   2035         }
   2036 
   2037         case DUMP_HEAP_TRANSACTION: {
   2038             data.enforceInterface(IActivityManager.descriptor);
   2039             String process = data.readString();
   2040             int userId = data.readInt();
   2041             boolean managed = data.readInt() != 0;
   2042             String path = data.readString();
   2043             ParcelFileDescriptor fd = data.readInt() != 0
   2044                     ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
   2045             boolean res = dumpHeap(process, userId, managed, path, fd);
   2046             reply.writeNoException();
   2047             reply.writeInt(res ? 1 : 0);
   2048             return true;
   2049         }
   2050 
   2051         case START_ACTIVITIES_TRANSACTION:
   2052         {
   2053             data.enforceInterface(IActivityManager.descriptor);
   2054             IBinder b = data.readStrongBinder();
   2055             IApplicationThread app = ApplicationThreadNative.asInterface(b);
   2056             String callingPackage = data.readString();
   2057             Intent[] intents = data.createTypedArray(Intent.CREATOR);
   2058             String[] resolvedTypes = data.createStringArray();
   2059             IBinder resultTo = data.readStrongBinder();
   2060             Bundle options = data.readInt() != 0
   2061                     ? Bundle.CREATOR.createFromParcel(data) : null;
   2062             int userId = data.readInt();
   2063             int result = startActivities(app, callingPackage, intents, resolvedTypes, resultTo,
   2064                     options, userId);
   2065             reply.writeNoException();
   2066             reply.writeInt(result);
   2067             return true;
   2068         }
   2069 
   2070         case GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
   2071         {
   2072             data.enforceInterface(IActivityManager.descriptor);
   2073             int mode = getFrontActivityScreenCompatMode();
   2074             reply.writeNoException();
   2075             reply.writeInt(mode);
   2076             return true;
   2077         }
   2078 
   2079         case SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION:
   2080         {
   2081             data.enforceInterface(IActivityManager.descriptor);
   2082             int mode = data.readInt();
   2083             setFrontActivityScreenCompatMode(mode);
   2084             reply.writeNoException();
   2085             reply.writeInt(mode);
   2086             return true;
   2087         }
   2088 
   2089         case GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
   2090         {
   2091             data.enforceInterface(IActivityManager.descriptor);
   2092             String pkg = data.readString();
   2093             int mode = getPackageScreenCompatMode(pkg);
   2094             reply.writeNoException();
   2095             reply.writeInt(mode);
   2096             return true;
   2097         }
   2098 
   2099         case SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION:
   2100         {
   2101             data.enforceInterface(IActivityManager.descriptor);
   2102             String pkg = data.readString();
   2103             int mode = data.readInt();
   2104             setPackageScreenCompatMode(pkg, mode);
   2105             reply.writeNoException();
   2106             return true;
   2107         }
   2108 
   2109         case SWITCH_USER_TRANSACTION: {
   2110             data.enforceInterface(IActivityManager.descriptor);
   2111             int userid = data.readInt();
   2112             boolean result = switchUser(userid);
   2113             reply.writeNoException();
   2114             reply.writeInt(result ? 1 : 0);
   2115             return true;
   2116         }
   2117 
   2118         case START_USER_IN_BACKGROUND_TRANSACTION: {
   2119             data.enforceInterface(IActivityManager.descriptor);
   2120             int userid = data.readInt();
   2121             boolean result = startUserInBackground(userid);
   2122             reply.writeNoException();
   2123             reply.writeInt(result ? 1 : 0);
   2124             return true;
   2125         }
   2126 
   2127         case UNLOCK_USER_TRANSACTION: {
   2128             data.enforceInterface(IActivityManager.descriptor);
   2129             int userId = data.readInt();
   2130             byte[] token = data.createByteArray();
   2131             byte[] secret = data.createByteArray();
   2132             IProgressListener listener = IProgressListener.Stub
   2133                     .asInterface(data.readStrongBinder());
   2134             boolean result = unlockUser(userId, token, secret, listener);
   2135             reply.writeNoException();
   2136             reply.writeInt(result ? 1 : 0);
   2137             return true;
   2138         }
   2139 
   2140         case STOP_USER_TRANSACTION: {
   2141             data.enforceInterface(IActivityManager.descriptor);
   2142             int userid = data.readInt();
   2143             boolean force = data.readInt() != 0;
   2144             IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
   2145                     data.readStrongBinder());
   2146             int result = stopUser(userid, force, callback);
   2147             reply.writeNoException();
   2148             reply.writeInt(result);
   2149             return true;
   2150         }
   2151 
   2152         case GET_CURRENT_USER_TRANSACTION: {
   2153             data.enforceInterface(IActivityManager.descriptor);
   2154             UserInfo userInfo = getCurrentUser();
   2155             reply.writeNoException();
   2156             userInfo.writeToParcel(reply, 0);
   2157             return true;
   2158         }
   2159 
   2160         case IS_USER_RUNNING_TRANSACTION: {
   2161             data.enforceInterface(IActivityManager.descriptor);
   2162             int userid = data.readInt();
   2163             int _flags = data.readInt();
   2164             boolean result = isUserRunning(userid, _flags);
   2165             reply.writeNoException();
   2166             reply.writeInt(result ? 1 : 0);
   2167             return true;
   2168         }
   2169 
   2170         case GET_RUNNING_USER_IDS_TRANSACTION: {
   2171             data.enforceInterface(IActivityManager.descriptor);
   2172             int[] result = getRunningUserIds();
   2173             reply.writeNoException();
   2174             reply.writeIntArray(result);
   2175             return true;
   2176         }
   2177 
   2178         case REMOVE_TASK_TRANSACTION:
   2179         {
   2180             data.enforceInterface(IActivityManager.descriptor);
   2181             int taskId = data.readInt();
   2182             boolean result = removeTask(taskId);
   2183             reply.writeNoException();
   2184             reply.writeInt(result ? 1 : 0);
   2185             return true;
   2186         }
   2187 
   2188         case REGISTER_PROCESS_OBSERVER_TRANSACTION: {
   2189             data.enforceInterface(IActivityManager.descriptor);
   2190             IProcessObserver observer = IProcessObserver.Stub.asInterface(
   2191                     data.readStrongBinder());
   2192             registerProcessObserver(observer);
   2193             return true;
   2194         }
   2195 
   2196         case UNREGISTER_PROCESS_OBSERVER_TRANSACTION: {
   2197             data.enforceInterface(IActivityManager.descriptor);
   2198             IProcessObserver observer = IProcessObserver.Stub.asInterface(
   2199                     data.readStrongBinder());
   2200             unregisterProcessObserver(observer);
   2201             return true;
   2202         }
   2203 
   2204         case REGISTER_UID_OBSERVER_TRANSACTION: {
   2205             data.enforceInterface(IActivityManager.descriptor);
   2206             IUidObserver observer = IUidObserver.Stub.asInterface(
   2207                     data.readStrongBinder());
   2208             int which = data.readInt();
   2209             registerUidObserver(observer, which);
   2210             return true;
   2211         }
   2212 
   2213         case UNREGISTER_UID_OBSERVER_TRANSACTION: {
   2214             data.enforceInterface(IActivityManager.descriptor);
   2215             IUidObserver observer = IUidObserver.Stub.asInterface(
   2216                     data.readStrongBinder());
   2217             unregisterUidObserver(observer);
   2218             return true;
   2219         }
   2220 
   2221         case GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
   2222         {
   2223             data.enforceInterface(IActivityManager.descriptor);
   2224             String pkg = data.readString();
   2225             boolean ask = getPackageAskScreenCompat(pkg);
   2226             reply.writeNoException();
   2227             reply.writeInt(ask ? 1 : 0);
   2228             return true;
   2229         }
   2230 
   2231         case SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION:
   2232         {
   2233             data.enforceInterface(IActivityManager.descriptor);
   2234             String pkg = data.readString();
   2235             boolean ask = data.readInt() != 0;
   2236             setPackageAskScreenCompat(pkg, ask);
   2237             reply.writeNoException();
   2238             return true;
   2239         }
   2240 
   2241         case IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION: {
   2242             data.enforceInterface(IActivityManager.descriptor);
   2243             IIntentSender r = IIntentSender.Stub.asInterface(
   2244                     data.readStrongBinder());
   2245             boolean res = isIntentSenderTargetedToPackage(r);
   2246             reply.writeNoException();
   2247             reply.writeInt(res ? 1 : 0);
   2248             return true;
   2249         }
   2250 
   2251         case IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION: {
   2252             data.enforceInterface(IActivityManager.descriptor);
   2253             IIntentSender r = IIntentSender.Stub.asInterface(
   2254                 data.readStrongBinder());
   2255             boolean res = isIntentSenderAnActivity(r);
   2256             reply.writeNoException();
   2257             reply.writeInt(res ? 1 : 0);
   2258             return true;
   2259         }
   2260 
   2261         case GET_INTENT_FOR_INTENT_SENDER_TRANSACTION: {
   2262             data.enforceInterface(IActivityManager.descriptor);
   2263             IIntentSender r = IIntentSender.Stub.asInterface(
   2264                 data.readStrongBinder());
   2265             Intent intent = getIntentForIntentSender(r);
   2266             reply.writeNoException();
   2267             if (intent != null) {
   2268                 reply.writeInt(1);
   2269                 intent.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   2270             } else {
   2271                 reply.writeInt(0);
   2272             }
   2273             return true;
   2274         }
   2275 
   2276         case GET_TAG_FOR_INTENT_SENDER_TRANSACTION: {
   2277             data.enforceInterface(IActivityManager.descriptor);
   2278             IIntentSender r = IIntentSender.Stub.asInterface(
   2279                 data.readStrongBinder());
   2280             String prefix = data.readString();
   2281             String tag = getTagForIntentSender(r, prefix);
   2282             reply.writeNoException();
   2283             reply.writeString(tag);
   2284             return true;
   2285         }
   2286 
   2287         case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
   2288             data.enforceInterface(IActivityManager.descriptor);
   2289             Configuration config = Configuration.CREATOR.createFromParcel(data);
   2290             updatePersistentConfiguration(config);
   2291             reply.writeNoException();
   2292             return true;
   2293         }
   2294 
   2295         case GET_PROCESS_PSS_TRANSACTION: {
   2296             data.enforceInterface(IActivityManager.descriptor);
   2297             int[] pids = data.createIntArray();
   2298             long[] pss = getProcessPss(pids);
   2299             reply.writeNoException();
   2300             reply.writeLongArray(pss);
   2301             return true;
   2302         }
   2303 
   2304         case SHOW_BOOT_MESSAGE_TRANSACTION: {
   2305             data.enforceInterface(IActivityManager.descriptor);
   2306             CharSequence msg = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
   2307             boolean always = data.readInt() != 0;
   2308             showBootMessage(msg, always);
   2309             reply.writeNoException();
   2310             return true;
   2311         }
   2312 
   2313         case KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION: {
   2314             data.enforceInterface(IActivityManager.descriptor);
   2315             keyguardWaitingForActivityDrawn();
   2316             reply.writeNoException();
   2317             return true;
   2318         }
   2319 
   2320         case KEYGUARD_GOING_AWAY_TRANSACTION: {
   2321             data.enforceInterface(IActivityManager.descriptor);
   2322             keyguardGoingAway(data.readInt());
   2323             reply.writeNoException();
   2324             return true;
   2325         }
   2326 
   2327         case SHOULD_UP_RECREATE_TASK_TRANSACTION: {
   2328             data.enforceInterface(IActivityManager.descriptor);
   2329             IBinder token = data.readStrongBinder();
   2330             String destAffinity = data.readString();
   2331             boolean res = shouldUpRecreateTask(token, destAffinity);
   2332             reply.writeNoException();
   2333             reply.writeInt(res ? 1 : 0);
   2334             return true;
   2335         }
   2336 
   2337         case NAVIGATE_UP_TO_TRANSACTION: {
   2338             data.enforceInterface(IActivityManager.descriptor);
   2339             IBinder token = data.readStrongBinder();
   2340             Intent target = Intent.CREATOR.createFromParcel(data);
   2341             int resultCode = data.readInt();
   2342             Intent resultData = null;
   2343             if (data.readInt() != 0) {
   2344                 resultData = Intent.CREATOR.createFromParcel(data);
   2345             }
   2346             boolean res = navigateUpTo(token, target, resultCode, resultData);
   2347             reply.writeNoException();
   2348             reply.writeInt(res ? 1 : 0);
   2349             return true;
   2350         }
   2351 
   2352         case GET_LAUNCHED_FROM_UID_TRANSACTION: {
   2353             data.enforceInterface(IActivityManager.descriptor);
   2354             IBinder token = data.readStrongBinder();
   2355             int res = getLaunchedFromUid(token);
   2356             reply.writeNoException();
   2357             reply.writeInt(res);
   2358             return true;
   2359         }
   2360 
   2361         case GET_LAUNCHED_FROM_PACKAGE_TRANSACTION: {
   2362             data.enforceInterface(IActivityManager.descriptor);
   2363             IBinder token = data.readStrongBinder();
   2364             String res = getLaunchedFromPackage(token);
   2365             reply.writeNoException();
   2366             reply.writeString(res);
   2367             return true;
   2368         }
   2369 
   2370         case REGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
   2371             data.enforceInterface(IActivityManager.descriptor);
   2372             IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
   2373                     data.readStrongBinder());
   2374             String name = data.readString();
   2375             registerUserSwitchObserver(observer, name);
   2376             reply.writeNoException();
   2377             return true;
   2378         }
   2379 
   2380         case UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION: {
   2381             data.enforceInterface(IActivityManager.descriptor);
   2382             IUserSwitchObserver observer = IUserSwitchObserver.Stub.asInterface(
   2383                     data.readStrongBinder());
   2384             unregisterUserSwitchObserver(observer);
   2385             reply.writeNoException();
   2386             return true;
   2387         }
   2388 
   2389         case REQUEST_BUG_REPORT_TRANSACTION: {
   2390             data.enforceInterface(IActivityManager.descriptor);
   2391             int bugreportType = data.readInt();
   2392             requestBugReport(bugreportType);
   2393             reply.writeNoException();
   2394             return true;
   2395         }
   2396 
   2397         case INPUT_DISPATCHING_TIMED_OUT_TRANSACTION: {
   2398             data.enforceInterface(IActivityManager.descriptor);
   2399             int pid = data.readInt();
   2400             boolean aboveSystem = data.readInt() != 0;
   2401             String reason = data.readString();
   2402             long res = inputDispatchingTimedOut(pid, aboveSystem, reason);
   2403             reply.writeNoException();
   2404             reply.writeLong(res);
   2405             return true;
   2406         }
   2407 
   2408         case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
   2409             data.enforceInterface(IActivityManager.descriptor);
   2410             int requestType = data.readInt();
   2411             Bundle res = getAssistContextExtras(requestType);
   2412             reply.writeNoException();
   2413             reply.writeBundle(res);
   2414             return true;
   2415         }
   2416 
   2417         case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
   2418             data.enforceInterface(IActivityManager.descriptor);
   2419             int requestType = data.readInt();
   2420             IResultReceiver receiver = IResultReceiver.Stub.asInterface(data.readStrongBinder());
   2421             Bundle receiverExtras = data.readBundle();
   2422             IBinder activityToken = data.readStrongBinder();
   2423             boolean focused = data.readInt() == 1;
   2424             boolean newSessionId = data.readInt() == 1;
   2425             boolean res = requestAssistContextExtras(requestType, receiver, receiverExtras,
   2426                     activityToken, focused, newSessionId);
   2427             reply.writeNoException();
   2428             reply.writeInt(res ? 1 : 0);
   2429             return true;
   2430         }
   2431 
   2432         case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
   2433             data.enforceInterface(IActivityManager.descriptor);
   2434             IBinder token = data.readStrongBinder();
   2435             Bundle extras = data.readBundle();
   2436             AssistStructure structure = AssistStructure.CREATOR.createFromParcel(data);
   2437             AssistContent content = AssistContent.CREATOR.createFromParcel(data);
   2438             Uri referrer = data.readInt() != 0 ? Uri.CREATOR.createFromParcel(data) : null;
   2439             reportAssistContextExtras(token, extras, structure, content, referrer);
   2440             reply.writeNoException();
   2441             return true;
   2442         }
   2443 
   2444         case LAUNCH_ASSIST_INTENT_TRANSACTION: {
   2445             data.enforceInterface(IActivityManager.descriptor);
   2446             Intent intent = Intent.CREATOR.createFromParcel(data);
   2447             int requestType = data.readInt();
   2448             String hint = data.readString();
   2449             int userHandle = data.readInt();
   2450             Bundle args = data.readBundle();
   2451             boolean res = launchAssistIntent(intent, requestType, hint, userHandle, args);
   2452             reply.writeNoException();
   2453             reply.writeInt(res ? 1 : 0);
   2454             return true;
   2455         }
   2456 
   2457         case IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION: {
   2458             data.enforceInterface(IActivityManager.descriptor);
   2459             boolean res = isAssistDataAllowedOnCurrentActivity();
   2460             reply.writeNoException();
   2461             reply.writeInt(res ? 1 : 0);
   2462             return true;
   2463         }
   2464 
   2465         case SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION: {
   2466             data.enforceInterface(IActivityManager.descriptor);
   2467             IBinder token = data.readStrongBinder();
   2468             Bundle args = data.readBundle();
   2469             boolean res = showAssistFromActivity(token, args);
   2470             reply.writeNoException();
   2471             reply.writeInt(res ? 1 : 0);
   2472             return true;
   2473         }
   2474 
   2475         case KILL_UID_TRANSACTION: {
   2476             data.enforceInterface(IActivityManager.descriptor);
   2477             int appId = data.readInt();
   2478             int userId = data.readInt();
   2479             String reason = data.readString();
   2480             killUid(appId, userId, reason);
   2481             reply.writeNoException();
   2482             return true;
   2483         }
   2484 
   2485         case HANG_TRANSACTION: {
   2486             data.enforceInterface(IActivityManager.descriptor);
   2487             IBinder who = data.readStrongBinder();
   2488             boolean allowRestart = data.readInt() != 0;
   2489             hang(who, allowRestart);
   2490             reply.writeNoException();
   2491             return true;
   2492         }
   2493 
   2494         case REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION: {
   2495             data.enforceInterface(IActivityManager.descriptor);
   2496             IBinder token = data.readStrongBinder();
   2497             reportActivityFullyDrawn(token);
   2498             reply.writeNoException();
   2499             return true;
   2500         }
   2501 
   2502         case NOTIFY_ACTIVITY_DRAWN_TRANSACTION: {
   2503             data.enforceInterface(IActivityManager.descriptor);
   2504             IBinder token = data.readStrongBinder();
   2505             notifyActivityDrawn(token);
   2506             reply.writeNoException();
   2507             return true;
   2508         }
   2509 
   2510         case RESTART_TRANSACTION: {
   2511             data.enforceInterface(IActivityManager.descriptor);
   2512             restart();
   2513             reply.writeNoException();
   2514             return true;
   2515         }
   2516 
   2517         case PERFORM_IDLE_MAINTENANCE_TRANSACTION: {
   2518             data.enforceInterface(IActivityManager.descriptor);
   2519             performIdleMaintenance();
   2520             reply.writeNoException();
   2521             return true;
   2522         }
   2523 
   2524         case CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION: {
   2525             data.enforceInterface(IActivityManager.descriptor);
   2526             IBinder parentActivityToken = data.readStrongBinder();
   2527             IActivityContainerCallback callback =
   2528                     IActivityContainerCallback.Stub.asInterface(data.readStrongBinder());
   2529             IActivityContainer activityContainer =
   2530                     createVirtualActivityContainer(parentActivityToken, callback);
   2531             reply.writeNoException();
   2532             if (activityContainer != null) {
   2533                 reply.writeInt(1);
   2534                 reply.writeStrongBinder(activityContainer.asBinder());
   2535             } else {
   2536                 reply.writeInt(0);
   2537             }
   2538             return true;
   2539         }
   2540 
   2541         case DELETE_ACTIVITY_CONTAINER_TRANSACTION:  {
   2542             data.enforceInterface(IActivityManager.descriptor);
   2543             IActivityContainer activityContainer =
   2544                     IActivityContainer.Stub.asInterface(data.readStrongBinder());
   2545             deleteActivityContainer(activityContainer);
   2546             reply.writeNoException();
   2547             return true;
   2548         }
   2549 
   2550         case CREATE_STACK_ON_DISPLAY: {
   2551             data.enforceInterface(IActivityManager.descriptor);
   2552             int displayId = data.readInt();
   2553             IActivityContainer activityContainer = createStackOnDisplay(displayId);
   2554             reply.writeNoException();
   2555             if (activityContainer != null) {
   2556                 reply.writeInt(1);
   2557                 reply.writeStrongBinder(activityContainer.asBinder());
   2558             } else {
   2559                 reply.writeInt(0);
   2560             }
   2561             return true;
   2562         }
   2563 
   2564         case GET_ACTIVITY_DISPLAY_ID_TRANSACTION: {
   2565             data.enforceInterface(IActivityManager.descriptor);
   2566             IBinder activityToken = data.readStrongBinder();
   2567             int displayId = getActivityDisplayId(activityToken);
   2568             reply.writeNoException();
   2569             reply.writeInt(displayId);
   2570             return true;
   2571         }
   2572 
   2573         case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
   2574             data.enforceInterface(IActivityManager.descriptor);
   2575             final int taskId = data.readInt();
   2576             startLockTaskMode(taskId);
   2577             reply.writeNoException();
   2578             return true;
   2579         }
   2580 
   2581         case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
   2582             data.enforceInterface(IActivityManager.descriptor);
   2583             IBinder token = data.readStrongBinder();
   2584             startLockTaskMode(token);
   2585             reply.writeNoException();
   2586             return true;
   2587         }
   2588 
   2589         case START_SYSTEM_LOCK_TASK_TRANSACTION: {
   2590             data.enforceInterface(IActivityManager.descriptor);
   2591             int taskId = data.readInt();
   2592             startSystemLockTaskMode(taskId);
   2593             reply.writeNoException();
   2594             return true;
   2595         }
   2596 
   2597         case STOP_LOCK_TASK_MODE_TRANSACTION: {
   2598             data.enforceInterface(IActivityManager.descriptor);
   2599             stopLockTaskMode();
   2600             reply.writeNoException();
   2601             return true;
   2602         }
   2603 
   2604         case STOP_SYSTEM_LOCK_TASK_TRANSACTION: {
   2605             data.enforceInterface(IActivityManager.descriptor);
   2606             stopSystemLockTaskMode();
   2607             reply.writeNoException();
   2608             return true;
   2609         }
   2610 
   2611         case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
   2612             data.enforceInterface(IActivityManager.descriptor);
   2613             final boolean isInLockTaskMode = isInLockTaskMode();
   2614             reply.writeNoException();
   2615             reply.writeInt(isInLockTaskMode ? 1 : 0);
   2616             return true;
   2617         }
   2618 
   2619         case GET_LOCK_TASK_MODE_STATE_TRANSACTION: {
   2620             data.enforceInterface(IActivityManager.descriptor);
   2621             final int lockTaskModeState = getLockTaskModeState();
   2622             reply.writeNoException();
   2623             reply.writeInt(lockTaskModeState);
   2624             return true;
   2625         }
   2626 
   2627         case SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION: {
   2628             data.enforceInterface(IActivityManager.descriptor);
   2629             final IBinder token = data.readStrongBinder();
   2630             showLockTaskEscapeMessage(token);
   2631             reply.writeNoException();
   2632             return true;
   2633         }
   2634 
   2635         case SET_TASK_DESCRIPTION_TRANSACTION: {
   2636             data.enforceInterface(IActivityManager.descriptor);
   2637             IBinder token = data.readStrongBinder();
   2638             ActivityManager.TaskDescription values =
   2639                     ActivityManager.TaskDescription.CREATOR.createFromParcel(data);
   2640             setTaskDescription(token, values);
   2641             reply.writeNoException();
   2642             return true;
   2643         }
   2644 
   2645         case SET_TASK_RESIZEABLE_TRANSACTION: {
   2646             data.enforceInterface(IActivityManager.descriptor);
   2647             final int taskId = data.readInt();
   2648             final int resizeableMode = data.readInt();
   2649             setTaskResizeable(taskId, resizeableMode);
   2650             reply.writeNoException();
   2651             return true;
   2652         }
   2653 
   2654         case RESIZE_TASK_TRANSACTION: {
   2655             data.enforceInterface(IActivityManager.descriptor);
   2656             int taskId = data.readInt();
   2657             int resizeMode = data.readInt();
   2658             Rect r = Rect.CREATOR.createFromParcel(data);
   2659             resizeTask(taskId, r, resizeMode);
   2660             reply.writeNoException();
   2661             return true;
   2662         }
   2663 
   2664         case GET_TASK_BOUNDS_TRANSACTION: {
   2665             data.enforceInterface(IActivityManager.descriptor);
   2666             int taskId = data.readInt();
   2667             Rect r = getTaskBounds(taskId);
   2668             reply.writeNoException();
   2669             r.writeToParcel(reply, 0);
   2670             return true;
   2671         }
   2672 
   2673         case GET_TASK_DESCRIPTION_ICON_TRANSACTION: {
   2674             data.enforceInterface(IActivityManager.descriptor);
   2675             String filename = data.readString();
   2676             int userId = data.readInt();
   2677             Bitmap icon = getTaskDescriptionIcon(filename, userId);
   2678             reply.writeNoException();
   2679             if (icon == null) {
   2680                 reply.writeInt(0);
   2681             } else {
   2682                 reply.writeInt(1);
   2683                 icon.writeToParcel(reply, 0);
   2684             }
   2685             return true;
   2686         }
   2687 
   2688         case START_IN_PLACE_ANIMATION_TRANSACTION: {
   2689             data.enforceInterface(IActivityManager.descriptor);
   2690             final Bundle bundle;
   2691             if (data.readInt() == 0) {
   2692                 bundle = null;
   2693             } else {
   2694                 bundle = data.readBundle();
   2695             }
   2696             final ActivityOptions options = ActivityOptions.fromBundle(bundle);
   2697             startInPlaceAnimationOnFrontMostApplication(options);
   2698             reply.writeNoException();
   2699             return true;
   2700         }
   2701 
   2702         case REQUEST_VISIBLE_BEHIND_TRANSACTION: {
   2703             data.enforceInterface(IActivityManager.descriptor);
   2704             IBinder token = data.readStrongBinder();
   2705             boolean enable = data.readInt() > 0;
   2706             boolean success = requestVisibleBehind(token, enable);
   2707             reply.writeNoException();
   2708             reply.writeInt(success ? 1 : 0);
   2709             return true;
   2710         }
   2711 
   2712         case IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION: {
   2713             data.enforceInterface(IActivityManager.descriptor);
   2714             IBinder token = data.readStrongBinder();
   2715             final boolean enabled = isBackgroundVisibleBehind(token);
   2716             reply.writeNoException();
   2717             reply.writeInt(enabled ? 1 : 0);
   2718             return true;
   2719         }
   2720 
   2721         case BACKGROUND_RESOURCES_RELEASED_TRANSACTION: {
   2722             data.enforceInterface(IActivityManager.descriptor);
   2723             IBinder token = data.readStrongBinder();
   2724             backgroundResourcesReleased(token);
   2725             reply.writeNoException();
   2726             return true;
   2727         }
   2728 
   2729         case NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION: {
   2730             data.enforceInterface(IActivityManager.descriptor);
   2731             IBinder token = data.readStrongBinder();
   2732             notifyLaunchTaskBehindComplete(token);
   2733             reply.writeNoException();
   2734             return true;
   2735         }
   2736 
   2737         case NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION: {
   2738             data.enforceInterface(IActivityManager.descriptor);
   2739             IBinder token = data.readStrongBinder();
   2740             notifyEnterAnimationComplete(token);
   2741             reply.writeNoException();
   2742             return true;
   2743         }
   2744 
   2745         case BOOT_ANIMATION_COMPLETE_TRANSACTION: {
   2746             data.enforceInterface(IActivityManager.descriptor);
   2747             bootAnimationComplete();
   2748             reply.writeNoException();
   2749             return true;
   2750         }
   2751 
   2752         case NOTIFY_CLEARTEXT_NETWORK_TRANSACTION: {
   2753             data.enforceInterface(IActivityManager.descriptor);
   2754             final int uid = data.readInt();
   2755             final byte[] firstPacket = data.createByteArray();
   2756             notifyCleartextNetwork(uid, firstPacket);
   2757             reply.writeNoException();
   2758             return true;
   2759         }
   2760 
   2761         case SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION: {
   2762             data.enforceInterface(IActivityManager.descriptor);
   2763             String procName = data.readString();
   2764             int uid = data.readInt();
   2765             long maxMemSize = data.readLong();
   2766             String reportPackage = data.readString();
   2767             setDumpHeapDebugLimit(procName, uid, maxMemSize, reportPackage);
   2768             reply.writeNoException();
   2769             return true;
   2770         }
   2771 
   2772         case DUMP_HEAP_FINISHED_TRANSACTION: {
   2773             data.enforceInterface(IActivityManager.descriptor);
   2774             String path = data.readString();
   2775             dumpHeapFinished(path);
   2776             reply.writeNoException();
   2777             return true;
   2778         }
   2779 
   2780         case SET_VOICE_KEEP_AWAKE_TRANSACTION: {
   2781             data.enforceInterface(IActivityManager.descriptor);
   2782             IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
   2783                     data.readStrongBinder());
   2784             boolean keepAwake = data.readInt() != 0;
   2785             setVoiceKeepAwake(session, keepAwake);
   2786             reply.writeNoException();
   2787             return true;
   2788         }
   2789 
   2790         case UPDATE_LOCK_TASK_PACKAGES_TRANSACTION: {
   2791             data.enforceInterface(IActivityManager.descriptor);
   2792             int userId = data.readInt();
   2793             String[] packages = data.readStringArray();
   2794             updateLockTaskPackages(userId, packages);
   2795             reply.writeNoException();
   2796             return true;
   2797         }
   2798 
   2799         case UPDATE_DEVICE_OWNER_TRANSACTION: {
   2800             data.enforceInterface(IActivityManager.descriptor);
   2801             String packageName = data.readString();
   2802             updateDeviceOwner(packageName);
   2803             reply.writeNoException();
   2804             return true;
   2805         }
   2806 
   2807         case GET_PACKAGE_PROCESS_STATE_TRANSACTION: {
   2808             data.enforceInterface(IActivityManager.descriptor);
   2809             String pkg = data.readString();
   2810             String callingPackage = data.readString();
   2811             int res = getPackageProcessState(pkg, callingPackage);
   2812             reply.writeNoException();
   2813             reply.writeInt(res);
   2814             return true;
   2815         }
   2816 
   2817         case SET_PROCESS_MEMORY_TRIM_TRANSACTION: {
   2818             data.enforceInterface(IActivityManager.descriptor);
   2819             String process = data.readString();
   2820             int userId = data.readInt();
   2821             int level = data.readInt();
   2822             boolean res = setProcessMemoryTrimLevel(process, userId, level);
   2823             reply.writeNoException();
   2824             reply.writeInt(res ? 1 : 0);
   2825             return true;
   2826         }
   2827 
   2828         case IS_ROOT_VOICE_INTERACTION_TRANSACTION: {
   2829             data.enforceInterface(IActivityManager.descriptor);
   2830             IBinder token = data.readStrongBinder();
   2831             boolean res = isRootVoiceInteraction(token);
   2832             reply.writeNoException();
   2833             reply.writeInt(res ? 1 : 0);
   2834             return true;
   2835         }
   2836 
   2837         case START_BINDER_TRACKING_TRANSACTION: {
   2838             data.enforceInterface(IActivityManager.descriptor);
   2839             boolean res = startBinderTracking();
   2840             reply.writeNoException();
   2841             reply.writeInt(res ? 1 : 0);
   2842             return true;
   2843         }
   2844 
   2845         case STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION: {
   2846             data.enforceInterface(IActivityManager.descriptor);
   2847             ParcelFileDescriptor fd = data.readInt() != 0
   2848                     ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
   2849             boolean res = stopBinderTrackingAndDump(fd);
   2850             reply.writeNoException();
   2851             reply.writeInt(res ? 1 : 0);
   2852             return true;
   2853         }
   2854         case GET_ACTIVITY_STACK_ID_TRANSACTION: {
   2855             data.enforceInterface(IActivityManager.descriptor);
   2856             IBinder token = data.readStrongBinder();
   2857             int stackId = getActivityStackId(token);
   2858             reply.writeNoException();
   2859             reply.writeInt(stackId);
   2860             return true;
   2861         }
   2862         case EXIT_FREEFORM_MODE_TRANSACTION: {
   2863             data.enforceInterface(IActivityManager.descriptor);
   2864             IBinder token = data.readStrongBinder();
   2865             exitFreeformMode(token);
   2866             reply.writeNoException();
   2867             return true;
   2868         }
   2869         case REPORT_SIZE_CONFIGURATIONS: {
   2870             data.enforceInterface(IActivityManager.descriptor);
   2871             IBinder token = data.readStrongBinder();
   2872             int[] horizontal = readIntArray(data);
   2873             int[] vertical = readIntArray(data);
   2874             int[] smallest = readIntArray(data);
   2875             reportSizeConfigurations(token, horizontal, vertical, smallest);
   2876             return true;
   2877         }
   2878         case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: {
   2879             data.enforceInterface(IActivityManager.descriptor);
   2880             final boolean suppress = data.readInt() == 1;
   2881             suppressResizeConfigChanges(suppress);
   2882             reply.writeNoException();
   2883             return true;
   2884         }
   2885         case MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION: {
   2886             data.enforceInterface(IActivityManager.descriptor);
   2887             final int stackId = data.readInt();
   2888             final boolean onTop = data.readInt() == 1;
   2889             moveTasksToFullscreenStack(stackId, onTop);
   2890             reply.writeNoException();
   2891             return true;
   2892         }
   2893         case GET_APP_START_MODE_TRANSACTION: {
   2894             data.enforceInterface(IActivityManager.descriptor);
   2895             final int uid = data.readInt();
   2896             final String pkg = data.readString();
   2897             int res = getAppStartMode(uid, pkg);
   2898             reply.writeNoException();
   2899             reply.writeInt(res);
   2900             return true;
   2901         }
   2902         case IN_MULTI_WINDOW_TRANSACTION: {
   2903             data.enforceInterface(IActivityManager.descriptor);
   2904             final IBinder token = data.readStrongBinder();
   2905             final boolean inMultiWindow = isInMultiWindowMode(token);
   2906             reply.writeNoException();
   2907             reply.writeInt(inMultiWindow ? 1 : 0);
   2908             return true;
   2909         }
   2910         case IN_PICTURE_IN_PICTURE_TRANSACTION: {
   2911             data.enforceInterface(IActivityManager.descriptor);
   2912             final IBinder token = data.readStrongBinder();
   2913             final boolean inPip = isInPictureInPictureMode(token);
   2914             reply.writeNoException();
   2915             reply.writeInt(inPip ? 1 : 0);
   2916             return true;
   2917         }
   2918         case ENTER_PICTURE_IN_PICTURE_TRANSACTION: {
   2919             data.enforceInterface(IActivityManager.descriptor);
   2920             final IBinder token = data.readStrongBinder();
   2921             enterPictureInPictureMode(token);
   2922             reply.writeNoException();
   2923             return true;
   2924         }
   2925         case SET_VR_MODE_TRANSACTION: {
   2926             data.enforceInterface(IActivityManager.descriptor);
   2927             final IBinder token = data.readStrongBinder();
   2928             final boolean enable = data.readInt() == 1;
   2929             final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
   2930             int res = setVrMode(token, enable, packageName);
   2931             reply.writeNoException();
   2932             reply.writeInt(res);
   2933             return true;
   2934         }
   2935         case IS_VR_PACKAGE_ENABLED_TRANSACTION: {
   2936             data.enforceInterface(IActivityManager.descriptor);
   2937             final ComponentName packageName = ComponentName.CREATOR.createFromParcel(data);
   2938             boolean res = isVrModePackageEnabled(packageName);
   2939             reply.writeNoException();
   2940             reply.writeInt(res ? 1 : 0);
   2941             return true;
   2942         }
   2943         case IS_APP_FOREGROUND_TRANSACTION: {
   2944             data.enforceInterface(IActivityManager.descriptor);
   2945             final int userHandle = data.readInt();
   2946             final boolean isForeground = isAppForeground(userHandle);
   2947             reply.writeNoException();
   2948             reply.writeInt(isForeground ? 1 : 0);
   2949             return true;
   2950         }
   2951         case NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION: {
   2952             data.enforceInterface(IActivityManager.descriptor);
   2953             reply.writeNoException();
   2954             return true;
   2955         }
   2956         case REMOVE_STACK: {
   2957             data.enforceInterface(IActivityManager.descriptor);
   2958             final int stackId = data.readInt();
   2959             removeStack(stackId);
   2960             reply.writeNoException();
   2961             return true;
   2962         }
   2963         case NOTIFY_LOCKED_PROFILE: {
   2964             data.enforceInterface(IActivityManager.descriptor);
   2965             final int userId = data.readInt();
   2966             notifyLockedProfile(userId);
   2967             reply.writeNoException();
   2968             return true;
   2969         }
   2970         case START_CONFIRM_DEVICE_CREDENTIAL_INTENT: {
   2971             data.enforceInterface(IActivityManager.descriptor);
   2972             final Intent intent = Intent.CREATOR.createFromParcel(data);
   2973             startConfirmDeviceCredentialIntent(intent);
   2974             reply.writeNoException();
   2975             return true;
   2976         }
   2977         case SEND_IDLE_JOB_TRIGGER_TRANSACTION: {
   2978             data.enforceInterface(IActivityManager.descriptor);
   2979             sendIdleJobTrigger();
   2980             reply.writeNoException();
   2981             return true;
   2982         }
   2983         case SEND_INTENT_SENDER_TRANSACTION: {
   2984             data.enforceInterface(IActivityManager.descriptor);
   2985             IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
   2986             int scode = data.readInt();
   2987             Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
   2988             String resolvedType = data.readString();
   2989             IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
   2990                     data.readStrongBinder());
   2991             String requiredPermission = data.readString();
   2992             Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
   2993             int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
   2994                     requiredPermission, options);
   2995             reply.writeNoException();
   2996             reply.writeInt(result);
   2997             return true;
   2998         }
   2999         case SET_VR_THREAD_TRANSACTION: {
   3000             data.enforceInterface(IActivityManager.descriptor);
   3001             final int tid = data.readInt();
   3002             setVrThread(tid);
   3003             reply.writeNoException();
   3004             return true;
   3005         }
   3006         case SET_RENDER_THREAD_TRANSACTION: {
   3007             data.enforceInterface(IActivityManager.descriptor);
   3008             final int tid = data.readInt();
   3009             setRenderThread(tid);
   3010             reply.writeNoException();
   3011             return true;
   3012         }
   3013         case SET_HAS_TOP_UI: {
   3014             data.enforceInterface(IActivityManager.descriptor);
   3015             final boolean hasTopUi = data.readInt() != 0;
   3016             setHasTopUi(hasTopUi);
   3017             reply.writeNoException();
   3018             return true;
   3019         }
   3020         case CAN_BYPASS_WORK_CHALLENGE: {
   3021             data.enforceInterface(IActivityManager.descriptor);
   3022             final PendingIntent intent = PendingIntent.CREATOR.createFromParcel(data);
   3023             final boolean result = canBypassWorkChallenge(intent);
   3024             reply.writeNoException();
   3025             reply.writeInt(result ? 1 : 0);
   3026             return true;
   3027         }
   3028         }
   3029 
   3030         return super.onTransact(code, data, reply, flags);
   3031     }
   3032 
   3033     private int[] readIntArray(Parcel data) {
   3034         int[] smallest = null;
   3035         int smallestSize = data.readInt();
   3036         if (smallestSize > 0) {
   3037             smallest = new int[smallestSize];
   3038             data.readIntArray(smallest);
   3039         }
   3040         return smallest;
   3041     }
   3042 
   3043     public IBinder asBinder() {
   3044         return this;
   3045     }
   3046 
   3047     private static final Singleton<IActivityManager> gDefault = new Singleton<IActivityManager>() {
   3048         protected IActivityManager create() {
   3049             IBinder b = ServiceManager.getService("activity");
   3050             if (false) {
   3051                 Log.v("ActivityManager", "default service binder = " + b);
   3052             }
   3053             IActivityManager am = asInterface(b);
   3054             if (false) {
   3055                 Log.v("ActivityManager", "default service = " + am);
   3056             }
   3057             return am;
   3058         }
   3059     };
   3060 }
   3061 
   3062 class ActivityManagerProxy implements IActivityManager
   3063 {
   3064     public ActivityManagerProxy(IBinder remote)
   3065     {
   3066         mRemote = remote;
   3067     }
   3068 
   3069     public IBinder asBinder()
   3070     {
   3071         return mRemote;
   3072     }
   3073 
   3074     public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
   3075             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
   3076             int startFlags, ProfilerInfo profilerInfo, Bundle options) throws RemoteException {
   3077         Parcel data = Parcel.obtain();
   3078         Parcel reply = Parcel.obtain();
   3079         data.writeInterfaceToken(IActivityManager.descriptor);
   3080         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3081         data.writeString(callingPackage);
   3082         intent.writeToParcel(data, 0);
   3083         data.writeString(resolvedType);
   3084         data.writeStrongBinder(resultTo);
   3085         data.writeString(resultWho);
   3086         data.writeInt(requestCode);
   3087         data.writeInt(startFlags);
   3088         if (profilerInfo != null) {
   3089             data.writeInt(1);
   3090             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   3091         } else {
   3092             data.writeInt(0);
   3093         }
   3094         if (options != null) {
   3095             data.writeInt(1);
   3096             options.writeToParcel(data, 0);
   3097         } else {
   3098             data.writeInt(0);
   3099         }
   3100         mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
   3101         reply.readException();
   3102         int result = reply.readInt();
   3103         reply.recycle();
   3104         data.recycle();
   3105         return result;
   3106     }
   3107 
   3108     public int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent,
   3109             String resolvedType, IBinder resultTo, String resultWho, int requestCode,
   3110             int startFlags, ProfilerInfo profilerInfo, Bundle options,
   3111             int userId) throws RemoteException {
   3112         Parcel data = Parcel.obtain();
   3113         Parcel reply = Parcel.obtain();
   3114         data.writeInterfaceToken(IActivityManager.descriptor);
   3115         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3116         data.writeString(callingPackage);
   3117         intent.writeToParcel(data, 0);
   3118         data.writeString(resolvedType);
   3119         data.writeStrongBinder(resultTo);
   3120         data.writeString(resultWho);
   3121         data.writeInt(requestCode);
   3122         data.writeInt(startFlags);
   3123         if (profilerInfo != null) {
   3124             data.writeInt(1);
   3125             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   3126         } else {
   3127             data.writeInt(0);
   3128         }
   3129         if (options != null) {
   3130             data.writeInt(1);
   3131             options.writeToParcel(data, 0);
   3132         } else {
   3133             data.writeInt(0);
   3134         }
   3135         data.writeInt(userId);
   3136         mRemote.transact(START_ACTIVITY_AS_USER_TRANSACTION, data, reply, 0);
   3137         reply.readException();
   3138         int result = reply.readInt();
   3139         reply.recycle();
   3140         data.recycle();
   3141         return result;
   3142     }
   3143     public int startActivityAsCaller(IApplicationThread caller, String callingPackage,
   3144             Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
   3145             int startFlags, ProfilerInfo profilerInfo, Bundle options, boolean ignoreTargetSecurity,
   3146             int userId) throws RemoteException {
   3147         Parcel data = Parcel.obtain();
   3148         Parcel reply = Parcel.obtain();
   3149         data.writeInterfaceToken(IActivityManager.descriptor);
   3150         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3151         data.writeString(callingPackage);
   3152         intent.writeToParcel(data, 0);
   3153         data.writeString(resolvedType);
   3154         data.writeStrongBinder(resultTo);
   3155         data.writeString(resultWho);
   3156         data.writeInt(requestCode);
   3157         data.writeInt(startFlags);
   3158         if (profilerInfo != null) {
   3159             data.writeInt(1);
   3160             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   3161         } else {
   3162             data.writeInt(0);
   3163         }
   3164         if (options != null) {
   3165             data.writeInt(1);
   3166             options.writeToParcel(data, 0);
   3167         } else {
   3168             data.writeInt(0);
   3169         }
   3170         data.writeInt(ignoreTargetSecurity ? 1 : 0);
   3171         data.writeInt(userId);
   3172         mRemote.transact(START_ACTIVITY_AS_CALLER_TRANSACTION, data, reply, 0);
   3173         reply.readException();
   3174         int result = reply.readInt();
   3175         reply.recycle();
   3176         data.recycle();
   3177         return result;
   3178     }
   3179     public WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage,
   3180             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
   3181             int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle options,
   3182             int userId) throws RemoteException {
   3183         Parcel data = Parcel.obtain();
   3184         Parcel reply = Parcel.obtain();
   3185         data.writeInterfaceToken(IActivityManager.descriptor);
   3186         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3187         data.writeString(callingPackage);
   3188         intent.writeToParcel(data, 0);
   3189         data.writeString(resolvedType);
   3190         data.writeStrongBinder(resultTo);
   3191         data.writeString(resultWho);
   3192         data.writeInt(requestCode);
   3193         data.writeInt(startFlags);
   3194         if (profilerInfo != null) {
   3195             data.writeInt(1);
   3196             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   3197         } else {
   3198             data.writeInt(0);
   3199         }
   3200         if (options != null) {
   3201             data.writeInt(1);
   3202             options.writeToParcel(data, 0);
   3203         } else {
   3204             data.writeInt(0);
   3205         }
   3206         data.writeInt(userId);
   3207         mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0);
   3208         reply.readException();
   3209         WaitResult result = WaitResult.CREATOR.createFromParcel(reply);
   3210         reply.recycle();
   3211         data.recycle();
   3212         return result;
   3213     }
   3214     public int startActivityWithConfig(IApplicationThread caller, String callingPackage,
   3215             Intent intent, String resolvedType, IBinder resultTo, String resultWho,
   3216             int requestCode, int startFlags, Configuration config,
   3217             Bundle options, int userId) throws RemoteException {
   3218         Parcel data = Parcel.obtain();
   3219         Parcel reply = Parcel.obtain();
   3220         data.writeInterfaceToken(IActivityManager.descriptor);
   3221         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3222         data.writeString(callingPackage);
   3223         intent.writeToParcel(data, 0);
   3224         data.writeString(resolvedType);
   3225         data.writeStrongBinder(resultTo);
   3226         data.writeString(resultWho);
   3227         data.writeInt(requestCode);
   3228         data.writeInt(startFlags);
   3229         config.writeToParcel(data, 0);
   3230         if (options != null) {
   3231             data.writeInt(1);
   3232             options.writeToParcel(data, 0);
   3233         } else {
   3234             data.writeInt(0);
   3235         }
   3236         data.writeInt(userId);
   3237         mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
   3238         reply.readException();
   3239         int result = reply.readInt();
   3240         reply.recycle();
   3241         data.recycle();
   3242         return result;
   3243     }
   3244     public int startActivityIntentSender(IApplicationThread caller,
   3245             IntentSender intent, Intent fillInIntent, String resolvedType,
   3246             IBinder resultTo, String resultWho, int requestCode,
   3247             int flagsMask, int flagsValues, Bundle options) throws RemoteException {
   3248         Parcel data = Parcel.obtain();
   3249         Parcel reply = Parcel.obtain();
   3250         data.writeInterfaceToken(IActivityManager.descriptor);
   3251         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3252         intent.writeToParcel(data, 0);
   3253         if (fillInIntent != null) {
   3254             data.writeInt(1);
   3255             fillInIntent.writeToParcel(data, 0);
   3256         } else {
   3257             data.writeInt(0);
   3258         }
   3259         data.writeString(resolvedType);
   3260         data.writeStrongBinder(resultTo);
   3261         data.writeString(resultWho);
   3262         data.writeInt(requestCode);
   3263         data.writeInt(flagsMask);
   3264         data.writeInt(flagsValues);
   3265         if (options != null) {
   3266             data.writeInt(1);
   3267             options.writeToParcel(data, 0);
   3268         } else {
   3269             data.writeInt(0);
   3270         }
   3271         mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
   3272         reply.readException();
   3273         int result = reply.readInt();
   3274         reply.recycle();
   3275         data.recycle();
   3276         return result;
   3277     }
   3278     public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
   3279             Intent intent, String resolvedType, IVoiceInteractionSession session,
   3280             IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo,
   3281             Bundle options, int userId) throws RemoteException {
   3282         Parcel data = Parcel.obtain();
   3283         Parcel reply = Parcel.obtain();
   3284         data.writeInterfaceToken(IActivityManager.descriptor);
   3285         data.writeString(callingPackage);
   3286         data.writeInt(callingPid);
   3287         data.writeInt(callingUid);
   3288         intent.writeToParcel(data, 0);
   3289         data.writeString(resolvedType);
   3290         data.writeStrongBinder(session.asBinder());
   3291         data.writeStrongBinder(interactor.asBinder());
   3292         data.writeInt(startFlags);
   3293         if (profilerInfo != null) {
   3294             data.writeInt(1);
   3295             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   3296         } else {
   3297             data.writeInt(0);
   3298         }
   3299         if (options != null) {
   3300             data.writeInt(1);
   3301             options.writeToParcel(data, 0);
   3302         } else {
   3303             data.writeInt(0);
   3304         }
   3305         data.writeInt(userId);
   3306         mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
   3307         reply.readException();
   3308         int result = reply.readInt();
   3309         reply.recycle();
   3310         data.recycle();
   3311         return result;
   3312     }
   3313 
   3314     public void startLocalVoiceInteraction(IBinder callingActivity, Bundle options)
   3315             throws RemoteException {
   3316         Parcel data = Parcel.obtain();
   3317         Parcel reply = Parcel.obtain();
   3318         data.writeInterfaceToken(IActivityManager.descriptor);
   3319         data.writeStrongBinder(callingActivity);
   3320         data.writeBundle(options);
   3321         mRemote.transact(START_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
   3322         reply.readException();
   3323         reply.recycle();
   3324         data.recycle();
   3325     }
   3326 
   3327     public void stopLocalVoiceInteraction(IBinder callingActivity) throws RemoteException {
   3328         Parcel data = Parcel.obtain();
   3329         Parcel reply = Parcel.obtain();
   3330         data.writeInterfaceToken(IActivityManager.descriptor);
   3331         data.writeStrongBinder(callingActivity);
   3332         mRemote.transact(STOP_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
   3333         reply.readException();
   3334         reply.recycle();
   3335         data.recycle();
   3336     }
   3337 
   3338     public boolean supportsLocalVoiceInteraction() throws RemoteException {
   3339         Parcel data = Parcel.obtain();
   3340         Parcel reply = Parcel.obtain();
   3341         data.writeInterfaceToken(IActivityManager.descriptor);
   3342         mRemote.transact(SUPPORTS_LOCAL_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
   3343         reply.readException();
   3344         int result = reply.readInt();
   3345         reply.recycle();
   3346         data.recycle();
   3347         return result != 0;
   3348     }
   3349 
   3350     public boolean startNextMatchingActivity(IBinder callingActivity,
   3351             Intent intent, Bundle options) throws RemoteException {
   3352         Parcel data = Parcel.obtain();
   3353         Parcel reply = Parcel.obtain();
   3354         data.writeInterfaceToken(IActivityManager.descriptor);
   3355         data.writeStrongBinder(callingActivity);
   3356         intent.writeToParcel(data, 0);
   3357         if (options != null) {
   3358             data.writeInt(1);
   3359             options.writeToParcel(data, 0);
   3360         } else {
   3361             data.writeInt(0);
   3362         }
   3363         mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
   3364         reply.readException();
   3365         int result = reply.readInt();
   3366         reply.recycle();
   3367         data.recycle();
   3368         return result != 0;
   3369     }
   3370     public int startActivityFromRecents(int taskId, Bundle options)
   3371             throws RemoteException {
   3372         Parcel data = Parcel.obtain();
   3373         Parcel reply = Parcel.obtain();
   3374         data.writeInterfaceToken(IActivityManager.descriptor);
   3375         data.writeInt(taskId);
   3376         if (options == null) {
   3377             data.writeInt(0);
   3378         } else {
   3379             data.writeInt(1);
   3380             options.writeToParcel(data, 0);
   3381         }
   3382         mRemote.transact(START_ACTIVITY_FROM_RECENTS_TRANSACTION, data, reply, 0);
   3383         reply.readException();
   3384         int result = reply.readInt();
   3385         reply.recycle();
   3386         data.recycle();
   3387         return result;
   3388     }
   3389     public boolean finishActivity(IBinder token, int resultCode, Intent resultData, int finishTask)
   3390             throws RemoteException {
   3391         Parcel data = Parcel.obtain();
   3392         Parcel reply = Parcel.obtain();
   3393         data.writeInterfaceToken(IActivityManager.descriptor);
   3394         data.writeStrongBinder(token);
   3395         data.writeInt(resultCode);
   3396         if (resultData != null) {
   3397             data.writeInt(1);
   3398             resultData.writeToParcel(data, 0);
   3399         } else {
   3400             data.writeInt(0);
   3401         }
   3402         data.writeInt(finishTask);
   3403         mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
   3404         reply.readException();
   3405         boolean res = reply.readInt() != 0;
   3406         data.recycle();
   3407         reply.recycle();
   3408         return res;
   3409     }
   3410     public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
   3411     {
   3412         Parcel data = Parcel.obtain();
   3413         Parcel reply = Parcel.obtain();
   3414         data.writeInterfaceToken(IActivityManager.descriptor);
   3415         data.writeStrongBinder(token);
   3416         data.writeString(resultWho);
   3417         data.writeInt(requestCode);
   3418         mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
   3419         reply.readException();
   3420         data.recycle();
   3421         reply.recycle();
   3422     }
   3423     public boolean finishActivityAffinity(IBinder token) throws RemoteException {
   3424         Parcel data = Parcel.obtain();
   3425         Parcel reply = Parcel.obtain();
   3426         data.writeInterfaceToken(IActivityManager.descriptor);
   3427         data.writeStrongBinder(token);
   3428         mRemote.transact(FINISH_ACTIVITY_AFFINITY_TRANSACTION, data, reply, 0);
   3429         reply.readException();
   3430         boolean res = reply.readInt() != 0;
   3431         data.recycle();
   3432         reply.recycle();
   3433         return res;
   3434     }
   3435     public void finishVoiceTask(IVoiceInteractionSession session) throws RemoteException {
   3436         Parcel data = Parcel.obtain();
   3437         Parcel reply = Parcel.obtain();
   3438         data.writeInterfaceToken(IActivityManager.descriptor);
   3439         data.writeStrongBinder(session.asBinder());
   3440         mRemote.transact(FINISH_VOICE_TASK_TRANSACTION, data, reply, 0);
   3441         reply.readException();
   3442         data.recycle();
   3443         reply.recycle();
   3444     }
   3445     public boolean releaseActivityInstance(IBinder token) throws RemoteException {
   3446         Parcel data = Parcel.obtain();
   3447         Parcel reply = Parcel.obtain();
   3448         data.writeInterfaceToken(IActivityManager.descriptor);
   3449         data.writeStrongBinder(token);
   3450         mRemote.transact(RELEASE_ACTIVITY_INSTANCE_TRANSACTION, data, reply, 0);
   3451         reply.readException();
   3452         boolean res = reply.readInt() != 0;
   3453         data.recycle();
   3454         reply.recycle();
   3455         return res;
   3456     }
   3457     public void releaseSomeActivities(IApplicationThread app) throws RemoteException {
   3458         Parcel data = Parcel.obtain();
   3459         Parcel reply = Parcel.obtain();
   3460         data.writeInterfaceToken(IActivityManager.descriptor);
   3461         data.writeStrongBinder(app.asBinder());
   3462         mRemote.transact(RELEASE_SOME_ACTIVITIES_TRANSACTION, data, reply, 0);
   3463         reply.readException();
   3464         data.recycle();
   3465         reply.recycle();
   3466     }
   3467     public boolean willActivityBeVisible(IBinder token) throws RemoteException {
   3468         Parcel data = Parcel.obtain();
   3469         Parcel reply = Parcel.obtain();
   3470         data.writeInterfaceToken(IActivityManager.descriptor);
   3471         data.writeStrongBinder(token);
   3472         mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0);
   3473         reply.readException();
   3474         boolean res = reply.readInt() != 0;
   3475         data.recycle();
   3476         reply.recycle();
   3477         return res;
   3478     }
   3479     public Intent registerReceiver(IApplicationThread caller, String packageName,
   3480             IIntentReceiver receiver,
   3481             IntentFilter filter, String perm, int userId) throws RemoteException
   3482     {
   3483         Parcel data = Parcel.obtain();
   3484         Parcel reply = Parcel.obtain();
   3485         data.writeInterfaceToken(IActivityManager.descriptor);
   3486         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3487         data.writeString(packageName);
   3488         data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
   3489         filter.writeToParcel(data, 0);
   3490         data.writeString(perm);
   3491         data.writeInt(userId);
   3492         mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
   3493         reply.readException();
   3494         Intent intent = null;
   3495         int haveIntent = reply.readInt();
   3496         if (haveIntent != 0) {
   3497             intent = Intent.CREATOR.createFromParcel(reply);
   3498         }
   3499         reply.recycle();
   3500         data.recycle();
   3501         return intent;
   3502     }
   3503     public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
   3504     {
   3505         Parcel data = Parcel.obtain();
   3506         Parcel reply = Parcel.obtain();
   3507         data.writeInterfaceToken(IActivityManager.descriptor);
   3508         data.writeStrongBinder(receiver.asBinder());
   3509         mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
   3510         reply.readException();
   3511         data.recycle();
   3512         reply.recycle();
   3513     }
   3514     public int broadcastIntent(IApplicationThread caller,
   3515             Intent intent, String resolvedType, IIntentReceiver resultTo,
   3516             int resultCode, String resultData, Bundle map,
   3517             String[] requiredPermissions, int appOp, Bundle options, boolean serialized,
   3518             boolean sticky, int userId) throws RemoteException
   3519     {
   3520         Parcel data = Parcel.obtain();
   3521         Parcel reply = Parcel.obtain();
   3522         data.writeInterfaceToken(IActivityManager.descriptor);
   3523         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3524         intent.writeToParcel(data, 0);
   3525         data.writeString(resolvedType);
   3526         data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
   3527         data.writeInt(resultCode);
   3528         data.writeString(resultData);
   3529         data.writeBundle(map);
   3530         data.writeStringArray(requiredPermissions);
   3531         data.writeInt(appOp);
   3532         data.writeBundle(options);
   3533         data.writeInt(serialized ? 1 : 0);
   3534         data.writeInt(sticky ? 1 : 0);
   3535         data.writeInt(userId);
   3536         mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
   3537         reply.readException();
   3538         int res = reply.readInt();
   3539         reply.recycle();
   3540         data.recycle();
   3541         return res;
   3542     }
   3543     public void unbroadcastIntent(IApplicationThread caller, Intent intent, int userId)
   3544             throws RemoteException
   3545     {
   3546         Parcel data = Parcel.obtain();
   3547         Parcel reply = Parcel.obtain();
   3548         data.writeInterfaceToken(IActivityManager.descriptor);
   3549         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   3550         intent.writeToParcel(data, 0);
   3551         data.writeInt(userId);
   3552         mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
   3553         reply.readException();
   3554         data.recycle();
   3555         reply.recycle();
   3556     }
   3557     public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map,
   3558             boolean abortBroadcast, int flags) throws RemoteException
   3559     {
   3560         Parcel data = Parcel.obtain();
   3561         Parcel reply = Parcel.obtain();
   3562         data.writeInterfaceToken(IActivityManager.descriptor);
   3563         data.writeStrongBinder(who);
   3564         data.writeInt(resultCode);
   3565         data.writeString(resultData);
   3566         data.writeBundle(map);
   3567         data.writeInt(abortBroadcast ? 1 : 0);
   3568         data.writeInt(flags);
   3569         mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   3570         reply.readException();
   3571         data.recycle();
   3572         reply.recycle();
   3573     }
   3574     public void attachApplication(IApplicationThread app) throws RemoteException
   3575     {
   3576         Parcel data = Parcel.obtain();
   3577         Parcel reply = Parcel.obtain();
   3578         data.writeInterfaceToken(IActivityManager.descriptor);
   3579         data.writeStrongBinder(app.asBinder());
   3580         mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
   3581         reply.readException();
   3582         data.recycle();
   3583         reply.recycle();
   3584     }
   3585     public void activityIdle(IBinder token, Configuration config, boolean stopProfiling)
   3586             throws RemoteException
   3587     {
   3588         Parcel data = Parcel.obtain();
   3589         Parcel reply = Parcel.obtain();
   3590         data.writeInterfaceToken(IActivityManager.descriptor);
   3591         data.writeStrongBinder(token);
   3592         if (config != null) {
   3593             data.writeInt(1);
   3594             config.writeToParcel(data, 0);
   3595         } else {
   3596             data.writeInt(0);
   3597         }
   3598         data.writeInt(stopProfiling ? 1 : 0);
   3599         mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   3600         reply.readException();
   3601         data.recycle();
   3602         reply.recycle();
   3603     }
   3604     public void activityResumed(IBinder token) throws RemoteException
   3605     {
   3606         Parcel data = Parcel.obtain();
   3607         Parcel reply = Parcel.obtain();
   3608         data.writeInterfaceToken(IActivityManager.descriptor);
   3609         data.writeStrongBinder(token);
   3610         mRemote.transact(ACTIVITY_RESUMED_TRANSACTION, data, reply, 0);
   3611         reply.readException();
   3612         data.recycle();
   3613         reply.recycle();
   3614     }
   3615     public void activityPaused(IBinder token) throws RemoteException
   3616     {
   3617         Parcel data = Parcel.obtain();
   3618         Parcel reply = Parcel.obtain();
   3619         data.writeInterfaceToken(IActivityManager.descriptor);
   3620         data.writeStrongBinder(token);
   3621         mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
   3622         reply.readException();
   3623         data.recycle();
   3624         reply.recycle();
   3625     }
   3626     public void activityStopped(IBinder token, Bundle state,
   3627             PersistableBundle persistentState, CharSequence description) throws RemoteException
   3628     {
   3629         Parcel data = Parcel.obtain();
   3630         Parcel reply = Parcel.obtain();
   3631         data.writeInterfaceToken(IActivityManager.descriptor);
   3632         data.writeStrongBinder(token);
   3633         data.writeBundle(state);
   3634         data.writePersistableBundle(persistentState);
   3635         TextUtils.writeToParcel(description, data, 0);
   3636         mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   3637         reply.readException();
   3638         data.recycle();
   3639         reply.recycle();
   3640     }
   3641     public void activitySlept(IBinder token) throws RemoteException
   3642     {
   3643         Parcel data = Parcel.obtain();
   3644         Parcel reply = Parcel.obtain();
   3645         data.writeInterfaceToken(IActivityManager.descriptor);
   3646         data.writeStrongBinder(token);
   3647         mRemote.transact(ACTIVITY_SLEPT_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   3648         reply.readException();
   3649         data.recycle();
   3650         reply.recycle();
   3651     }
   3652     public void activityDestroyed(IBinder token) throws RemoteException
   3653     {
   3654         Parcel data = Parcel.obtain();
   3655         Parcel reply = Parcel.obtain();
   3656         data.writeInterfaceToken(IActivityManager.descriptor);
   3657         data.writeStrongBinder(token);
   3658         mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   3659         reply.readException();
   3660         data.recycle();
   3661         reply.recycle();
   3662     }
   3663     public void activityRelaunched(IBinder token) throws RemoteException
   3664     {
   3665         Parcel data = Parcel.obtain();
   3666         Parcel reply = Parcel.obtain();
   3667         data.writeInterfaceToken(IActivityManager.descriptor);
   3668         data.writeStrongBinder(token);
   3669         mRemote.transact(ACTIVITY_RELAUNCHED_TRANSACTION, data, reply, 0);
   3670         reply.readException();
   3671         data.recycle();
   3672         reply.recycle();
   3673     }
   3674     public String getCallingPackage(IBinder token) throws RemoteException
   3675     {
   3676         Parcel data = Parcel.obtain();
   3677         Parcel reply = Parcel.obtain();
   3678         data.writeInterfaceToken(IActivityManager.descriptor);
   3679         data.writeStrongBinder(token);
   3680         mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
   3681         reply.readException();
   3682         String res = reply.readString();
   3683         data.recycle();
   3684         reply.recycle();
   3685         return res;
   3686     }
   3687     public ComponentName getCallingActivity(IBinder token)
   3688             throws RemoteException {
   3689         Parcel data = Parcel.obtain();
   3690         Parcel reply = Parcel.obtain();
   3691         data.writeInterfaceToken(IActivityManager.descriptor);
   3692         data.writeStrongBinder(token);
   3693         mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
   3694         reply.readException();
   3695         ComponentName res = ComponentName.readFromParcel(reply);
   3696         data.recycle();
   3697         reply.recycle();
   3698         return res;
   3699     }
   3700     public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException {
   3701         Parcel data = Parcel.obtain();
   3702         Parcel reply = Parcel.obtain();
   3703         data.writeInterfaceToken(IActivityManager.descriptor);
   3704         data.writeString(callingPackage);
   3705         mRemote.transact(GET_APP_TASKS_TRANSACTION, data, reply, 0);
   3706         reply.readException();
   3707         ArrayList<IAppTask> list = null;
   3708         int N = reply.readInt();
   3709         if (N >= 0) {
   3710             list = new ArrayList<>();
   3711             while (N > 0) {
   3712                 IAppTask task = IAppTask.Stub.asInterface(reply.readStrongBinder());
   3713                 list.add(task);
   3714                 N--;
   3715             }
   3716         }
   3717         data.recycle();
   3718         reply.recycle();
   3719         return list;
   3720     }
   3721     public int addAppTask(IBinder activityToken, Intent intent,
   3722             ActivityManager.TaskDescription description, Bitmap thumbnail) throws RemoteException {
   3723         Parcel data = Parcel.obtain();
   3724         Parcel reply = Parcel.obtain();
   3725         data.writeInterfaceToken(IActivityManager.descriptor);
   3726         data.writeStrongBinder(activityToken);
   3727         intent.writeToParcel(data, 0);
   3728         description.writeToParcel(data, 0);
   3729         thumbnail.writeToParcel(data, 0);
   3730         mRemote.transact(ADD_APP_TASK_TRANSACTION, data, reply, 0);
   3731         reply.readException();
   3732         int res = reply.readInt();
   3733         data.recycle();
   3734         reply.recycle();
   3735         return res;
   3736     }
   3737     public Point getAppTaskThumbnailSize() throws RemoteException {
   3738         Parcel data = Parcel.obtain();
   3739         Parcel reply = Parcel.obtain();
   3740         data.writeInterfaceToken(IActivityManager.descriptor);
   3741         mRemote.transact(GET_APP_TASK_THUMBNAIL_SIZE_TRANSACTION, data, reply, 0);
   3742         reply.readException();
   3743         Point size = Point.CREATOR.createFromParcel(reply);
   3744         data.recycle();
   3745         reply.recycle();
   3746         return size;
   3747     }
   3748     public List<ActivityManager.RunningTaskInfo> getTasks(int maxNum, int flags)
   3749             throws RemoteException {
   3750         Parcel data = Parcel.obtain();
   3751         Parcel reply = Parcel.obtain();
   3752         data.writeInterfaceToken(IActivityManager.descriptor);
   3753         data.writeInt(maxNum);
   3754         data.writeInt(flags);
   3755         mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
   3756         reply.readException();
   3757         ArrayList<ActivityManager.RunningTaskInfo> list = null;
   3758         int N = reply.readInt();
   3759         if (N >= 0) {
   3760             list = new ArrayList<>();
   3761             while (N > 0) {
   3762                 ActivityManager.RunningTaskInfo info =
   3763                         ActivityManager.RunningTaskInfo.CREATOR
   3764                                 .createFromParcel(reply);
   3765                 list.add(info);
   3766                 N--;
   3767             }
   3768         }
   3769         data.recycle();
   3770         reply.recycle();
   3771         return list;
   3772     }
   3773     public ParceledListSlice<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
   3774             int flags, int userId) throws RemoteException {
   3775         Parcel data = Parcel.obtain();
   3776         Parcel reply = Parcel.obtain();
   3777         data.writeInterfaceToken(IActivityManager.descriptor);
   3778         data.writeInt(maxNum);
   3779         data.writeInt(flags);
   3780         data.writeInt(userId);
   3781         mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
   3782         reply.readException();
   3783         final ParceledListSlice<ActivityManager.RecentTaskInfo> list = ParceledListSlice.CREATOR
   3784                 .createFromParcel(reply);
   3785         data.recycle();
   3786         reply.recycle();
   3787         return list;
   3788     }
   3789     public ActivityManager.TaskThumbnail getTaskThumbnail(int id) throws RemoteException {
   3790         Parcel data = Parcel.obtain();
   3791         Parcel reply = Parcel.obtain();
   3792         data.writeInterfaceToken(IActivityManager.descriptor);
   3793         data.writeInt(id);
   3794         mRemote.transact(GET_TASK_THUMBNAIL_TRANSACTION, data, reply, 0);
   3795         reply.readException();
   3796         ActivityManager.TaskThumbnail taskThumbnail = null;
   3797         if (reply.readInt() != 0) {
   3798             taskThumbnail = ActivityManager.TaskThumbnail.CREATOR.createFromParcel(reply);
   3799         }
   3800         data.recycle();
   3801         reply.recycle();
   3802         return taskThumbnail;
   3803     }
   3804     public List<ActivityManager.RunningServiceInfo> getServices(int maxNum, int flags)
   3805             throws RemoteException {
   3806         Parcel data = Parcel.obtain();
   3807         Parcel reply = Parcel.obtain();
   3808         data.writeInterfaceToken(IActivityManager.descriptor);
   3809         data.writeInt(maxNum);
   3810         data.writeInt(flags);
   3811         mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
   3812         reply.readException();
   3813         ArrayList<ActivityManager.RunningServiceInfo> list = null;
   3814         int N = reply.readInt();
   3815         if (N >= 0) {
   3816             list = new ArrayList<>();
   3817             while (N > 0) {
   3818                 ActivityManager.RunningServiceInfo info =
   3819                         ActivityManager.RunningServiceInfo.CREATOR
   3820                         .createFromParcel(reply);
   3821                 list.add(info);
   3822                 N--;
   3823             }
   3824         }
   3825         data.recycle();
   3826         reply.recycle();
   3827         return list;
   3828     }
   3829     public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
   3830             throws RemoteException {
   3831         Parcel data = Parcel.obtain();
   3832         Parcel reply = Parcel.obtain();
   3833         data.writeInterfaceToken(IActivityManager.descriptor);
   3834         mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
   3835         reply.readException();
   3836         ArrayList<ActivityManager.ProcessErrorStateInfo> list
   3837             = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
   3838         data.recycle();
   3839         reply.recycle();
   3840         return list;
   3841     }
   3842     public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
   3843             throws RemoteException {
   3844         Parcel data = Parcel.obtain();
   3845         Parcel reply = Parcel.obtain();
   3846         data.writeInterfaceToken(IActivityManager.descriptor);
   3847         mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
   3848         reply.readException();
   3849         ArrayList<ActivityManager.RunningAppProcessInfo> list
   3850         = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
   3851         data.recycle();
   3852         reply.recycle();
   3853         return list;
   3854     }
   3855     public List<ApplicationInfo> getRunningExternalApplications()
   3856             throws RemoteException {
   3857         Parcel data = Parcel.obtain();
   3858         Parcel reply = Parcel.obtain();
   3859         data.writeInterfaceToken(IActivityManager.descriptor);
   3860         mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0);
   3861         reply.readException();
   3862         ArrayList<ApplicationInfo> list
   3863         = reply.createTypedArrayList(ApplicationInfo.CREATOR);
   3864         data.recycle();
   3865         reply.recycle();
   3866         return list;
   3867     }
   3868     public void moveTaskToFront(int task, int flags, Bundle options) throws RemoteException
   3869     {
   3870         Parcel data = Parcel.obtain();
   3871         Parcel reply = Parcel.obtain();
   3872         data.writeInterfaceToken(IActivityManager.descriptor);
   3873         data.writeInt(task);
   3874         data.writeInt(flags);
   3875         if (options != null) {
   3876             data.writeInt(1);
   3877             options.writeToParcel(data, 0);
   3878         } else {
   3879             data.writeInt(0);
   3880         }
   3881         mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
   3882         reply.readException();
   3883         data.recycle();
   3884         reply.recycle();
   3885     }
   3886     public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
   3887             throws RemoteException {
   3888         Parcel data = Parcel.obtain();
   3889         Parcel reply = Parcel.obtain();
   3890         data.writeInterfaceToken(IActivityManager.descriptor);
   3891         data.writeStrongBinder(token);
   3892         data.writeInt(nonRoot ? 1 : 0);
   3893         mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
   3894         reply.readException();
   3895         boolean res = reply.readInt() != 0;
   3896         data.recycle();
   3897         reply.recycle();
   3898         return res;
   3899     }
   3900     public void moveTaskBackwards(int task) throws RemoteException
   3901     {
   3902         Parcel data = Parcel.obtain();
   3903         Parcel reply = Parcel.obtain();
   3904         data.writeInterfaceToken(IActivityManager.descriptor);
   3905         data.writeInt(task);
   3906         mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
   3907         reply.readException();
   3908         data.recycle();
   3909         reply.recycle();
   3910     }
   3911     @Override
   3912     public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException
   3913     {
   3914         Parcel data = Parcel.obtain();
   3915         Parcel reply = Parcel.obtain();
   3916         data.writeInterfaceToken(IActivityManager.descriptor);
   3917         data.writeInt(taskId);
   3918         data.writeInt(stackId);
   3919         data.writeInt(toTop ? 1 : 0);
   3920         mRemote.transact(MOVE_TASK_TO_STACK_TRANSACTION, data, reply, 0);
   3921         reply.readException();
   3922         data.recycle();
   3923         reply.recycle();
   3924     }
   3925     @Override
   3926     public boolean moveTaskToDockedStack(int taskId, int createMode, boolean toTop, boolean animate,
   3927             Rect initialBounds, boolean moveHomeStackFront) throws RemoteException
   3928     {
   3929         Parcel data = Parcel.obtain();
   3930         Parcel reply = Parcel.obtain();
   3931         data.writeInterfaceToken(IActivityManager.descriptor);
   3932         data.writeInt(taskId);
   3933         data.writeInt(createMode);
   3934         data.writeInt(toTop ? 1 : 0);
   3935         data.writeInt(animate ? 1 : 0);
   3936         if (initialBounds != null) {
   3937             data.writeInt(1);
   3938             initialBounds.writeToParcel(data, 0);
   3939         } else {
   3940             data.writeInt(0);
   3941         }
   3942         data.writeInt(moveHomeStackFront ? 1 : 0);
   3943         mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0);
   3944         reply.readException();
   3945         boolean res = reply.readInt() > 0;
   3946         data.recycle();
   3947         reply.recycle();
   3948         return res;
   3949     }
   3950     @Override
   3951     public boolean moveTopActivityToPinnedStack(int stackId, Rect r)
   3952         throws RemoteException
   3953     {
   3954         Parcel data = Parcel.obtain();
   3955         Parcel reply = Parcel.obtain();
   3956         data.writeInterfaceToken(IActivityManager.descriptor);
   3957         data.writeInt(stackId);
   3958         r.writeToParcel(data, 0);
   3959         mRemote.transact(MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION, data, reply, 0);
   3960         reply.readException();
   3961         final boolean res = reply.readInt() != 0;
   3962         data.recycle();
   3963         reply.recycle();
   3964         return res;
   3965     }
   3966     @Override
   3967     public void resizeStack(int stackId, Rect r, boolean allowResizeInDockedMode,
   3968             boolean preserveWindows, boolean animate, int animationDuration)
   3969             throws RemoteException {
   3970         Parcel data = Parcel.obtain();
   3971         Parcel reply = Parcel.obtain();
   3972         data.writeInterfaceToken(IActivityManager.descriptor);
   3973         data.writeInt(stackId);
   3974         if (r != null) {
   3975             data.writeInt(1);
   3976             r.writeToParcel(data, 0);
   3977         } else {
   3978             data.writeInt(0);
   3979         }
   3980         data.writeInt(allowResizeInDockedMode ? 1 : 0);
   3981         data.writeInt(preserveWindows ? 1 : 0);
   3982         data.writeInt(animate ? 1 : 0);
   3983         data.writeInt(animationDuration);
   3984         mRemote.transact(RESIZE_STACK_TRANSACTION, data, reply, 0);
   3985         reply.readException();
   3986         data.recycle();
   3987         reply.recycle();
   3988     }
   3989     @Override
   3990     public void swapDockedAndFullscreenStack() throws RemoteException
   3991     {
   3992         Parcel data = Parcel.obtain();
   3993         Parcel reply = Parcel.obtain();
   3994         data.writeInterfaceToken(IActivityManager.descriptor);
   3995         mRemote.transact(SWAP_DOCKED_AND_FULLSCREEN_STACK, data, reply, 0);
   3996         reply.readException();
   3997         data.recycle();
   3998         reply.recycle();
   3999     }
   4000     @Override
   4001     public void resizeDockedStack(Rect dockedBounds, Rect tempDockedTaskBounds,
   4002             Rect tempDockedTaskInsetBounds,
   4003             Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds)
   4004             throws RemoteException
   4005     {
   4006         Parcel data = Parcel.obtain();
   4007         Parcel reply = Parcel.obtain();
   4008         data.writeInterfaceToken(IActivityManager.descriptor);
   4009         if (dockedBounds != null) {
   4010             data.writeInt(1);
   4011             dockedBounds.writeToParcel(data, 0);
   4012         } else {
   4013             data.writeInt(0);
   4014         }
   4015         if (tempDockedTaskBounds != null) {
   4016             data.writeInt(1);
   4017             tempDockedTaskBounds.writeToParcel(data, 0);
   4018         } else {
   4019             data.writeInt(0);
   4020         }
   4021         if (tempDockedTaskInsetBounds != null) {
   4022             data.writeInt(1);
   4023             tempDockedTaskInsetBounds.writeToParcel(data, 0);
   4024         } else {
   4025             data.writeInt(0);
   4026         }
   4027         if (tempOtherTaskBounds != null) {
   4028             data.writeInt(1);
   4029             tempOtherTaskBounds.writeToParcel(data, 0);
   4030         } else {
   4031             data.writeInt(0);
   4032         }
   4033         if (tempOtherTaskInsetBounds != null) {
   4034             data.writeInt(1);
   4035             tempOtherTaskInsetBounds.writeToParcel(data, 0);
   4036         } else {
   4037             data.writeInt(0);
   4038         }
   4039         mRemote.transact(RESIZE_DOCKED_STACK_TRANSACTION, data, reply, 0);
   4040         reply.readException();
   4041         data.recycle();
   4042         reply.recycle();
   4043     }
   4044 
   4045     @Override
   4046     public void resizePinnedStack(Rect pinnedBounds, Rect tempPinnedTaskBounds) throws RemoteException
   4047     {
   4048         Parcel data = Parcel.obtain();
   4049         Parcel reply = Parcel.obtain();
   4050         data.writeInterfaceToken(IActivityManager.descriptor);
   4051         if (pinnedBounds != null) {
   4052             data.writeInt(1);
   4053             pinnedBounds.writeToParcel(data, 0);
   4054         } else {
   4055             data.writeInt(0);
   4056         }
   4057         if (tempPinnedTaskBounds != null) {
   4058             data.writeInt(1);
   4059             tempPinnedTaskBounds.writeToParcel(data, 0);
   4060         } else {
   4061             data.writeInt(0);
   4062         }
   4063         mRemote.transact(RESIZE_PINNED_STACK_TRANSACTION, data, reply, 0);
   4064         reply.readException();
   4065         data.recycle();
   4066         reply.recycle();
   4067     }
   4068 
   4069     @Override
   4070     public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException
   4071     {
   4072         Parcel data = Parcel.obtain();
   4073         Parcel reply = Parcel.obtain();
   4074         data.writeInterfaceToken(IActivityManager.descriptor);
   4075         data.writeInt(taskId);
   4076         data.writeInt(stackId);
   4077         data.writeInt(position);
   4078         mRemote.transact(POSITION_TASK_IN_STACK_TRANSACTION, data, reply, 0);
   4079         reply.readException();
   4080         data.recycle();
   4081         reply.recycle();
   4082     }
   4083     @Override
   4084     public List<StackInfo> getAllStackInfos() throws RemoteException
   4085     {
   4086         Parcel data = Parcel.obtain();
   4087         Parcel reply = Parcel.obtain();
   4088         data.writeInterfaceToken(IActivityManager.descriptor);
   4089         mRemote.transact(GET_ALL_STACK_INFOS_TRANSACTION, data, reply, 0);
   4090         reply.readException();
   4091         ArrayList<StackInfo> list = reply.createTypedArrayList(StackInfo.CREATOR);
   4092         data.recycle();
   4093         reply.recycle();
   4094         return list;
   4095     }
   4096     @Override
   4097     public StackInfo getStackInfo(int stackId) throws RemoteException
   4098     {
   4099         Parcel data = Parcel.obtain();
   4100         Parcel reply = Parcel.obtain();
   4101         data.writeInterfaceToken(IActivityManager.descriptor);
   4102         data.writeInt(stackId);
   4103         mRemote.transact(GET_STACK_INFO_TRANSACTION, data, reply, 0);
   4104         reply.readException();
   4105         int res = reply.readInt();
   4106         StackInfo info = null;
   4107         if (res != 0) {
   4108             info = StackInfo.CREATOR.createFromParcel(reply);
   4109         }
   4110         data.recycle();
   4111         reply.recycle();
   4112         return info;
   4113     }
   4114     @Override
   4115     public boolean isInHomeStack(int taskId) throws RemoteException {
   4116         Parcel data = Parcel.obtain();
   4117         Parcel reply = Parcel.obtain();
   4118         data.writeInterfaceToken(IActivityManager.descriptor);
   4119         data.writeInt(taskId);
   4120         mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
   4121         reply.readException();
   4122         boolean isInHomeStack = reply.readInt() > 0;
   4123         data.recycle();
   4124         reply.recycle();
   4125         return isInHomeStack;
   4126     }
   4127     @Override
   4128     public void setFocusedStack(int stackId) throws RemoteException
   4129     {
   4130         Parcel data = Parcel.obtain();
   4131         Parcel reply = Parcel.obtain();
   4132         data.writeInterfaceToken(IActivityManager.descriptor);
   4133         data.writeInt(stackId);
   4134         mRemote.transact(SET_FOCUSED_STACK_TRANSACTION, data, reply, 0);
   4135         reply.readException();
   4136         data.recycle();
   4137         reply.recycle();
   4138     }
   4139     @Override
   4140     public int getFocusedStackId() throws RemoteException {
   4141         Parcel data = Parcel.obtain();
   4142         Parcel reply = Parcel.obtain();
   4143         data.writeInterfaceToken(IActivityManager.descriptor);
   4144         mRemote.transact(GET_FOCUSED_STACK_ID_TRANSACTION, data, reply, 0);
   4145         reply.readException();
   4146         int focusedStackId = reply.readInt();
   4147         data.recycle();
   4148         reply.recycle();
   4149         return focusedStackId;
   4150     }
   4151     @Override
   4152     public void setFocusedTask(int taskId) throws RemoteException
   4153     {
   4154         Parcel data = Parcel.obtain();
   4155         Parcel reply = Parcel.obtain();
   4156         data.writeInterfaceToken(IActivityManager.descriptor);
   4157         data.writeInt(taskId);
   4158         mRemote.transact(SET_FOCUSED_TASK_TRANSACTION, data, reply, 0);
   4159         reply.readException();
   4160         data.recycle();
   4161         reply.recycle();
   4162     }
   4163     @Override
   4164     public void registerTaskStackListener(ITaskStackListener listener) throws RemoteException
   4165     {
   4166         Parcel data = Parcel.obtain();
   4167         Parcel reply = Parcel.obtain();
   4168         data.writeInterfaceToken(IActivityManager.descriptor);
   4169         data.writeStrongBinder(listener.asBinder());
   4170         mRemote.transact(REGISTER_TASK_STACK_LISTENER_TRANSACTION, data, reply, 0);
   4171         reply.readException();
   4172         data.recycle();
   4173         reply.recycle();
   4174     }
   4175     public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
   4176     {
   4177         Parcel data = Parcel.obtain();
   4178         Parcel reply = Parcel.obtain();
   4179         data.writeInterfaceToken(IActivityManager.descriptor);
   4180         data.writeStrongBinder(token);
   4181         data.writeInt(onlyRoot ? 1 : 0);
   4182         mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
   4183         reply.readException();
   4184         int res = reply.readInt();
   4185         data.recycle();
   4186         reply.recycle();
   4187         return res;
   4188     }
   4189     public ContentProviderHolder getContentProvider(IApplicationThread caller,
   4190             String name, int userId, boolean stable) throws RemoteException {
   4191         Parcel data = Parcel.obtain();
   4192         Parcel reply = Parcel.obtain();
   4193         data.writeInterfaceToken(IActivityManager.descriptor);
   4194         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   4195         data.writeString(name);
   4196         data.writeInt(userId);
   4197         data.writeInt(stable ? 1 : 0);
   4198         mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
   4199         reply.readException();
   4200         int res = reply.readInt();
   4201         ContentProviderHolder cph = null;
   4202         if (res != 0) {
   4203             cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
   4204         }
   4205         data.recycle();
   4206         reply.recycle();
   4207         return cph;
   4208     }
   4209     public ContentProviderHolder getContentProviderExternal(String name, int userId, IBinder token)
   4210             throws RemoteException {
   4211         Parcel data = Parcel.obtain();
   4212         Parcel reply = Parcel.obtain();
   4213         data.writeInterfaceToken(IActivityManager.descriptor);
   4214         data.writeString(name);
   4215         data.writeInt(userId);
   4216         data.writeStrongBinder(token);
   4217         mRemote.transact(GET_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
   4218         reply.readException();
   4219         int res = reply.readInt();
   4220         ContentProviderHolder cph = null;
   4221         if (res != 0) {
   4222             cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
   4223         }
   4224         data.recycle();
   4225         reply.recycle();
   4226         return cph;
   4227     }
   4228     public void publishContentProviders(IApplicationThread caller,
   4229             List<ContentProviderHolder> providers) throws RemoteException
   4230     {
   4231         Parcel data = Parcel.obtain();
   4232         Parcel reply = Parcel.obtain();
   4233         data.writeInterfaceToken(IActivityManager.descriptor);
   4234         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   4235         data.writeTypedList(providers);
   4236         mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
   4237         reply.readException();
   4238         data.recycle();
   4239         reply.recycle();
   4240     }
   4241     public boolean refContentProvider(IBinder connection, int stable, int unstable)
   4242             throws RemoteException {
   4243         Parcel data = Parcel.obtain();
   4244         Parcel reply = Parcel.obtain();
   4245         data.writeInterfaceToken(IActivityManager.descriptor);
   4246         data.writeStrongBinder(connection);
   4247         data.writeInt(stable);
   4248         data.writeInt(unstable);
   4249         mRemote.transact(REF_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
   4250         reply.readException();
   4251         boolean res = reply.readInt() != 0;
   4252         data.recycle();
   4253         reply.recycle();
   4254         return res;
   4255     }
   4256 
   4257     public void unstableProviderDied(IBinder connection) throws RemoteException {
   4258         Parcel data = Parcel.obtain();
   4259         Parcel reply = Parcel.obtain();
   4260         data.writeInterfaceToken(IActivityManager.descriptor);
   4261         data.writeStrongBinder(connection);
   4262         mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, reply, 0);
   4263         reply.readException();
   4264         data.recycle();
   4265         reply.recycle();
   4266     }
   4267 
   4268     @Override
   4269     public void appNotRespondingViaProvider(IBinder connection) throws RemoteException {
   4270         Parcel data = Parcel.obtain();
   4271         Parcel reply = Parcel.obtain();
   4272         data.writeInterfaceToken(IActivityManager.descriptor);
   4273         data.writeStrongBinder(connection);
   4274         mRemote.transact(APP_NOT_RESPONDING_VIA_PROVIDER_TRANSACTION, data, reply, 0);
   4275         reply.readException();
   4276         data.recycle();
   4277         reply.recycle();
   4278     }
   4279 
   4280     public void removeContentProvider(IBinder connection, boolean stable) throws RemoteException {
   4281         Parcel data = Parcel.obtain();
   4282         Parcel reply = Parcel.obtain();
   4283         data.writeInterfaceToken(IActivityManager.descriptor);
   4284         data.writeStrongBinder(connection);
   4285         data.writeInt(stable ? 1 : 0);
   4286         mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
   4287         reply.readException();
   4288         data.recycle();
   4289         reply.recycle();
   4290     }
   4291 
   4292     public void removeContentProviderExternal(String name, IBinder token) throws RemoteException {
   4293         Parcel data = Parcel.obtain();
   4294         Parcel reply = Parcel.obtain();
   4295         data.writeInterfaceToken(IActivityManager.descriptor);
   4296         data.writeString(name);
   4297         data.writeStrongBinder(token);
   4298         mRemote.transact(REMOVE_CONTENT_PROVIDER_EXTERNAL_TRANSACTION, data, reply, 0);
   4299         reply.readException();
   4300         data.recycle();
   4301         reply.recycle();
   4302     }
   4303 
   4304     public PendingIntent getRunningServiceControlPanel(ComponentName service)
   4305             throws RemoteException
   4306     {
   4307         Parcel data = Parcel.obtain();
   4308         Parcel reply = Parcel.obtain();
   4309         data.writeInterfaceToken(IActivityManager.descriptor);
   4310         service.writeToParcel(data, 0);
   4311         mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
   4312         reply.readException();
   4313         PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
   4314         data.recycle();
   4315         reply.recycle();
   4316         return res;
   4317     }
   4318 
   4319     public ComponentName startService(IApplicationThread caller, Intent service,
   4320             String resolvedType, String callingPackage, int userId) throws RemoteException
   4321     {
   4322         Parcel data = Parcel.obtain();
   4323         Parcel reply = Parcel.obtain();
   4324         data.writeInterfaceToken(IActivityManager.descriptor);
   4325         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   4326         service.writeToParcel(data, 0);
   4327         data.writeString(resolvedType);
   4328         data.writeString(callingPackage);
   4329         data.writeInt(userId);
   4330         mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
   4331         reply.readException();
   4332         ComponentName res = ComponentName.readFromParcel(reply);
   4333         data.recycle();
   4334         reply.recycle();
   4335         return res;
   4336     }
   4337     public int stopService(IApplicationThread caller, Intent service,
   4338             String resolvedType, int userId) throws RemoteException
   4339     {
   4340         Parcel data = Parcel.obtain();
   4341         Parcel reply = Parcel.obtain();
   4342         data.writeInterfaceToken(IActivityManager.descriptor);
   4343         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   4344         service.writeToParcel(data, 0);
   4345         data.writeString(resolvedType);
   4346         data.writeInt(userId);
   4347         mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
   4348         reply.readException();
   4349         int res = reply.readInt();
   4350         reply.recycle();
   4351         data.recycle();
   4352         return res;
   4353     }
   4354     public boolean stopServiceToken(ComponentName className, IBinder token,
   4355             int startId) throws RemoteException {
   4356         Parcel data = Parcel.obtain();
   4357         Parcel reply = Parcel.obtain();
   4358         data.writeInterfaceToken(IActivityManager.descriptor);
   4359         ComponentName.writeToParcel(className, data);
   4360         data.writeStrongBinder(token);
   4361         data.writeInt(startId);
   4362         mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
   4363         reply.readException();
   4364         boolean res = reply.readInt() != 0;
   4365         data.recycle();
   4366         reply.recycle();
   4367         return res;
   4368     }
   4369     public void setServiceForeground(ComponentName className, IBinder token,
   4370             int id, Notification notification, int flags) throws RemoteException {
   4371         Parcel data = Parcel.obtain();
   4372         Parcel reply = Parcel.obtain();
   4373         data.writeInterfaceToken(IActivityManager.descriptor);
   4374         ComponentName.writeToParcel(className, data);
   4375         data.writeStrongBinder(token);
   4376         data.writeInt(id);
   4377         if (notification != null) {
   4378             data.writeInt(1);
   4379             notification.writeToParcel(data, 0);
   4380         } else {
   4381             data.writeInt(0);
   4382         }
   4383         data.writeInt(flags);
   4384         mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
   4385         reply.readException();
   4386         data.recycle();
   4387         reply.recycle();
   4388     }
   4389     public int bindService(IApplicationThread caller, IBinder token,
   4390             Intent service, String resolvedType, IServiceConnection connection,
   4391             int flags,  String callingPackage, int userId) throws RemoteException {
   4392         Parcel data = Parcel.obtain();
   4393         Parcel reply = Parcel.obtain();
   4394         data.writeInterfaceToken(IActivityManager.descriptor);
   4395         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   4396         data.writeStrongBinder(token);
   4397         service.writeToParcel(data, 0);
   4398         data.writeString(resolvedType);
   4399         data.writeStrongBinder(connection.asBinder());
   4400         data.writeInt(flags);
   4401         data.writeString(callingPackage);
   4402         data.writeInt(userId);
   4403         mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
   4404         reply.readException();
   4405         int res = reply.readInt();
   4406         data.recycle();
   4407         reply.recycle();
   4408         return res;
   4409     }
   4410     public boolean unbindService(IServiceConnection connection) throws RemoteException
   4411     {
   4412         Parcel data = Parcel.obtain();
   4413         Parcel reply = Parcel.obtain();
   4414         data.writeInterfaceToken(IActivityManager.descriptor);
   4415         data.writeStrongBinder(connection.asBinder());
   4416         mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
   4417         reply.readException();
   4418         boolean res = reply.readInt() != 0;
   4419         data.recycle();
   4420         reply.recycle();
   4421         return res;
   4422     }
   4423 
   4424     public void publishService(IBinder token,
   4425             Intent intent, IBinder service) throws RemoteException {
   4426         Parcel data = Parcel.obtain();
   4427         Parcel reply = Parcel.obtain();
   4428         data.writeInterfaceToken(IActivityManager.descriptor);
   4429         data.writeStrongBinder(token);
   4430         intent.writeToParcel(data, 0);
   4431         data.writeStrongBinder(service);
   4432         mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
   4433         reply.readException();
   4434         data.recycle();
   4435         reply.recycle();
   4436     }
   4437 
   4438     public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
   4439             throws RemoteException {
   4440         Parcel data = Parcel.obtain();
   4441         Parcel reply = Parcel.obtain();
   4442         data.writeInterfaceToken(IActivityManager.descriptor);
   4443         data.writeStrongBinder(token);
   4444         intent.writeToParcel(data, 0);
   4445         data.writeInt(doRebind ? 1 : 0);
   4446         mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
   4447         reply.readException();
   4448         data.recycle();
   4449         reply.recycle();
   4450     }
   4451 
   4452     public void serviceDoneExecuting(IBinder token, int type, int startId,
   4453             int res) throws RemoteException {
   4454         Parcel data = Parcel.obtain();
   4455         Parcel reply = Parcel.obtain();
   4456         data.writeInterfaceToken(IActivityManager.descriptor);
   4457         data.writeStrongBinder(token);
   4458         data.writeInt(type);
   4459         data.writeInt(startId);
   4460         data.writeInt(res);
   4461         mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
   4462         reply.readException();
   4463         data.recycle();
   4464         reply.recycle();
   4465     }
   4466 
   4467     public IBinder peekService(Intent service, String resolvedType, String callingPackage)
   4468             throws RemoteException {
   4469         Parcel data = Parcel.obtain();
   4470         Parcel reply = Parcel.obtain();
   4471         data.writeInterfaceToken(IActivityManager.descriptor);
   4472         service.writeToParcel(data, 0);
   4473         data.writeString(resolvedType);
   4474         data.writeString(callingPackage);
   4475         mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
   4476         reply.readException();
   4477         IBinder binder = reply.readStrongBinder();
   4478         reply.recycle();
   4479         data.recycle();
   4480         return binder;
   4481     }
   4482 
   4483     public boolean bindBackupAgent(String packageName, int backupRestoreMode, int userId)
   4484             throws RemoteException {
   4485         Parcel data = Parcel.obtain();
   4486         Parcel reply = Parcel.obtain();
   4487         data.writeInterfaceToken(IActivityManager.descriptor);
   4488         data.writeString(packageName);
   4489         data.writeInt(backupRestoreMode);
   4490         data.writeInt(userId);
   4491         mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
   4492         reply.readException();
   4493         boolean success = reply.readInt() != 0;
   4494         reply.recycle();
   4495         data.recycle();
   4496         return success;
   4497     }
   4498 
   4499     public void clearPendingBackup() throws RemoteException {
   4500         Parcel data = Parcel.obtain();
   4501         Parcel reply = Parcel.obtain();
   4502         data.writeInterfaceToken(IActivityManager.descriptor);
   4503         mRemote.transact(CLEAR_PENDING_BACKUP_TRANSACTION, data, reply, 0);
   4504         reply.recycle();
   4505         data.recycle();
   4506     }
   4507 
   4508     public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
   4509         Parcel data = Parcel.obtain();
   4510         Parcel reply = Parcel.obtain();
   4511         data.writeInterfaceToken(IActivityManager.descriptor);
   4512         data.writeString(packageName);
   4513         data.writeStrongBinder(agent);
   4514         mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
   4515         reply.recycle();
   4516         data.recycle();
   4517     }
   4518 
   4519     public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
   4520         Parcel data = Parcel.obtain();
   4521         Parcel reply = Parcel.obtain();
   4522         data.writeInterfaceToken(IActivityManager.descriptor);
   4523         app.writeToParcel(data, 0);
   4524         mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
   4525         reply.readException();
   4526         reply.recycle();
   4527         data.recycle();
   4528     }
   4529 
   4530     public boolean startInstrumentation(ComponentName className, String profileFile,
   4531             int flags, Bundle arguments, IInstrumentationWatcher watcher,
   4532             IUiAutomationConnection connection, int userId, String instructionSet)
   4533             throws RemoteException {
   4534         Parcel data = Parcel.obtain();
   4535         Parcel reply = Parcel.obtain();
   4536         data.writeInterfaceToken(IActivityManager.descriptor);
   4537         ComponentName.writeToParcel(className, data);
   4538         data.writeString(profileFile);
   4539         data.writeInt(flags);
   4540         data.writeBundle(arguments);
   4541         data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
   4542         data.writeStrongBinder(connection != null ? connection.asBinder() : null);
   4543         data.writeInt(userId);
   4544         data.writeString(instructionSet);
   4545         mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
   4546         reply.readException();
   4547         boolean res = reply.readInt() != 0;
   4548         reply.recycle();
   4549         data.recycle();
   4550         return res;
   4551     }
   4552 
   4553     public void finishInstrumentation(IApplicationThread target,
   4554             int resultCode, Bundle results) throws RemoteException {
   4555         Parcel data = Parcel.obtain();
   4556         Parcel reply = Parcel.obtain();
   4557         data.writeInterfaceToken(IActivityManager.descriptor);
   4558         data.writeStrongBinder(target != null ? target.asBinder() : null);
   4559         data.writeInt(resultCode);
   4560         data.writeBundle(results);
   4561         mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
   4562         reply.readException();
   4563         data.recycle();
   4564         reply.recycle();
   4565     }
   4566     public Configuration getConfiguration() throws RemoteException
   4567     {
   4568         Parcel data = Parcel.obtain();
   4569         Parcel reply = Parcel.obtain();
   4570         data.writeInterfaceToken(IActivityManager.descriptor);
   4571         mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
   4572         reply.readException();
   4573         Configuration res = Configuration.CREATOR.createFromParcel(reply);
   4574         reply.recycle();
   4575         data.recycle();
   4576         return res;
   4577     }
   4578     public void updateConfiguration(Configuration values) throws RemoteException
   4579     {
   4580         Parcel data = Parcel.obtain();
   4581         Parcel reply = Parcel.obtain();
   4582         data.writeInterfaceToken(IActivityManager.descriptor);
   4583         values.writeToParcel(data, 0);
   4584         mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
   4585         reply.readException();
   4586         data.recycle();
   4587         reply.recycle();
   4588     }
   4589     public void setRequestedOrientation(IBinder token, int requestedOrientation)
   4590             throws RemoteException {
   4591         Parcel data = Parcel.obtain();
   4592         Parcel reply = Parcel.obtain();
   4593         data.writeInterfaceToken(IActivityManager.descriptor);
   4594         data.writeStrongBinder(token);
   4595         data.writeInt(requestedOrientation);
   4596         mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
   4597         reply.readException();
   4598         data.recycle();
   4599         reply.recycle();
   4600     }
   4601     public int getRequestedOrientation(IBinder token) throws RemoteException {
   4602         Parcel data = Parcel.obtain();
   4603         Parcel reply = Parcel.obtain();
   4604         data.writeInterfaceToken(IActivityManager.descriptor);
   4605         data.writeStrongBinder(token);
   4606         mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
   4607         reply.readException();
   4608         int res = reply.readInt();
   4609         data.recycle();
   4610         reply.recycle();
   4611         return res;
   4612     }
   4613     public ComponentName getActivityClassForToken(IBinder token)
   4614             throws RemoteException {
   4615         Parcel data = Parcel.obtain();
   4616         Parcel reply = Parcel.obtain();
   4617         data.writeInterfaceToken(IActivityManager.descriptor);
   4618         data.writeStrongBinder(token);
   4619         mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
   4620         reply.readException();
   4621         ComponentName res = ComponentName.readFromParcel(reply);
   4622         data.recycle();
   4623         reply.recycle();
   4624         return res;
   4625     }
   4626     public String getPackageForToken(IBinder token) throws RemoteException
   4627     {
   4628         Parcel data = Parcel.obtain();
   4629         Parcel reply = Parcel.obtain();
   4630         data.writeInterfaceToken(IActivityManager.descriptor);
   4631         data.writeStrongBinder(token);
   4632         mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
   4633         reply.readException();
   4634         String res = reply.readString();
   4635         data.recycle();
   4636         reply.recycle();
   4637         return res;
   4638     }
   4639     public IIntentSender getIntentSender(int type,
   4640             String packageName, IBinder token, String resultWho,
   4641             int requestCode, Intent[] intents, String[] resolvedTypes, int flags,
   4642             Bundle options, int userId) throws RemoteException {
   4643         Parcel data = Parcel.obtain();
   4644         Parcel reply = Parcel.obtain();
   4645         data.writeInterfaceToken(IActivityManager.descriptor);
   4646         data.writeInt(type);
   4647         data.writeString(packageName);
   4648         data.writeStrongBinder(token);
   4649         data.writeString(resultWho);
   4650         data.writeInt(requestCode);
   4651         if (intents != null) {
   4652             data.writeInt(1);
   4653             data.writeTypedArray(intents, 0);
   4654             data.writeStringArray(resolvedTypes);
   4655         } else {
   4656             data.writeInt(0);
   4657         }
   4658         data.writeInt(flags);
   4659         if (options != null) {
   4660             data.writeInt(1);
   4661             options.writeToParcel(data, 0);
   4662         } else {
   4663             data.writeInt(0);
   4664         }
   4665         data.writeInt(userId);
   4666         mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
   4667         reply.readException();
   4668         IIntentSender res = IIntentSender.Stub.asInterface(
   4669                 reply.readStrongBinder());
   4670         data.recycle();
   4671         reply.recycle();
   4672         return res;
   4673     }
   4674     public void cancelIntentSender(IIntentSender sender) throws RemoteException {
   4675         Parcel data = Parcel.obtain();
   4676         Parcel reply = Parcel.obtain();
   4677         data.writeInterfaceToken(IActivityManager.descriptor);
   4678         data.writeStrongBinder(sender.asBinder());
   4679         mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
   4680         reply.readException();
   4681         data.recycle();
   4682         reply.recycle();
   4683     }
   4684     public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
   4685         Parcel data = Parcel.obtain();
   4686         Parcel reply = Parcel.obtain();
   4687         data.writeInterfaceToken(IActivityManager.descriptor);
   4688         data.writeStrongBinder(sender.asBinder());
   4689         mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
   4690         reply.readException();
   4691         String res = reply.readString();
   4692         data.recycle();
   4693         reply.recycle();
   4694         return res;
   4695     }
   4696     public int getUidForIntentSender(IIntentSender sender) throws RemoteException {
   4697         Parcel data = Parcel.obtain();
   4698         Parcel reply = Parcel.obtain();
   4699         data.writeInterfaceToken(IActivityManager.descriptor);
   4700         data.writeStrongBinder(sender.asBinder());
   4701         mRemote.transact(GET_UID_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
   4702         reply.readException();
   4703         int res = reply.readInt();
   4704         data.recycle();
   4705         reply.recycle();
   4706         return res;
   4707     }
   4708     public int handleIncomingUser(int callingPid, int callingUid, int userId, boolean allowAll,
   4709             boolean requireFull, String name, String callerPackage) throws RemoteException {
   4710         Parcel data = Parcel.obtain();
   4711         Parcel reply = Parcel.obtain();
   4712         data.writeInterfaceToken(IActivityManager.descriptor);
   4713         data.writeInt(callingPid);
   4714         data.writeInt(callingUid);
   4715         data.writeInt(userId);
   4716         data.writeInt(allowAll ? 1 : 0);
   4717         data.writeInt(requireFull ? 1 : 0);
   4718         data.writeString(name);
   4719         data.writeString(callerPackage);
   4720         mRemote.transact(HANDLE_INCOMING_USER_TRANSACTION, data, reply, 0);
   4721         reply.readException();
   4722         int res = reply.readInt();
   4723         data.recycle();
   4724         reply.recycle();
   4725         return res;
   4726     }
   4727     public void setProcessLimit(int max) throws RemoteException
   4728     {
   4729         Parcel data = Parcel.obtain();
   4730         Parcel reply = Parcel.obtain();
   4731         data.writeInterfaceToken(IActivityManager.descriptor);
   4732         data.writeInt(max);
   4733         mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
   4734         reply.readException();
   4735         data.recycle();
   4736         reply.recycle();
   4737     }
   4738     public int getProcessLimit() throws RemoteException
   4739     {
   4740         Parcel data = Parcel.obtain();
   4741         Parcel reply = Parcel.obtain();
   4742         data.writeInterfaceToken(IActivityManager.descriptor);
   4743         mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
   4744         reply.readException();
   4745         int res = reply.readInt();
   4746         data.recycle();
   4747         reply.recycle();
   4748         return res;
   4749     }
   4750     public void setProcessForeground(IBinder token, int pid,
   4751             boolean isForeground) throws RemoteException {
   4752         Parcel data = Parcel.obtain();
   4753         Parcel reply = Parcel.obtain();
   4754         data.writeInterfaceToken(IActivityManager.descriptor);
   4755         data.writeStrongBinder(token);
   4756         data.writeInt(pid);
   4757         data.writeInt(isForeground ? 1 : 0);
   4758         mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
   4759         reply.readException();
   4760         data.recycle();
   4761         reply.recycle();
   4762     }
   4763     public int checkPermission(String permission, int pid, int uid)
   4764             throws RemoteException {
   4765         Parcel data = Parcel.obtain();
   4766         Parcel reply = Parcel.obtain();
   4767         data.writeInterfaceToken(IActivityManager.descriptor);
   4768         data.writeString(permission);
   4769         data.writeInt(pid);
   4770         data.writeInt(uid);
   4771         mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
   4772         reply.readException();
   4773         int res = reply.readInt();
   4774         data.recycle();
   4775         reply.recycle();
   4776         return res;
   4777     }
   4778     public int checkPermissionWithToken(String permission, int pid, int uid, IBinder callerToken)
   4779             throws RemoteException {
   4780         Parcel data = Parcel.obtain();
   4781         Parcel reply = Parcel.obtain();
   4782         data.writeInterfaceToken(IActivityManager.descriptor);
   4783         data.writeString(permission);
   4784         data.writeInt(pid);
   4785         data.writeInt(uid);
   4786         data.writeStrongBinder(callerToken);
   4787         mRemote.transact(CHECK_PERMISSION_WITH_TOKEN_TRANSACTION, data, reply, 0);
   4788         reply.readException();
   4789         int res = reply.readInt();
   4790         data.recycle();
   4791         reply.recycle();
   4792         return res;
   4793     }
   4794     public boolean clearApplicationUserData(final String packageName,
   4795             final IPackageDataObserver observer, final int userId) throws RemoteException {
   4796         Parcel data = Parcel.obtain();
   4797         Parcel reply = Parcel.obtain();
   4798         data.writeInterfaceToken(IActivityManager.descriptor);
   4799         data.writeString(packageName);
   4800         data.writeStrongBinder((observer != null) ? observer.asBinder() : null);
   4801         data.writeInt(userId);
   4802         mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
   4803         reply.readException();
   4804         boolean res = reply.readInt() != 0;
   4805         data.recycle();
   4806         reply.recycle();
   4807         return res;
   4808     }
   4809     public int checkUriPermission(Uri uri, int pid, int uid, int mode, int userId,
   4810             IBinder callerToken) throws RemoteException {
   4811         Parcel data = Parcel.obtain();
   4812         Parcel reply = Parcel.obtain();
   4813         data.writeInterfaceToken(IActivityManager.descriptor);
   4814         uri.writeToParcel(data, 0);
   4815         data.writeInt(pid);
   4816         data.writeInt(uid);
   4817         data.writeInt(mode);
   4818         data.writeInt(userId);
   4819         data.writeStrongBinder(callerToken);
   4820         mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
   4821         reply.readException();
   4822         int res = reply.readInt();
   4823         data.recycle();
   4824         reply.recycle();
   4825         return res;
   4826     }
   4827     public void grantUriPermission(IApplicationThread caller, String targetPkg,
   4828             Uri uri, int mode, int userId) throws RemoteException {
   4829         Parcel data = Parcel.obtain();
   4830         Parcel reply = Parcel.obtain();
   4831         data.writeInterfaceToken(IActivityManager.descriptor);
   4832         data.writeStrongBinder(caller.asBinder());
   4833         data.writeString(targetPkg);
   4834         uri.writeToParcel(data, 0);
   4835         data.writeInt(mode);
   4836         data.writeInt(userId);
   4837         mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
   4838         reply.readException();
   4839         data.recycle();
   4840         reply.recycle();
   4841     }
   4842     public void revokeUriPermission(IApplicationThread caller, Uri uri,
   4843             int mode, int userId) throws RemoteException {
   4844         Parcel data = Parcel.obtain();
   4845         Parcel reply = Parcel.obtain();
   4846         data.writeInterfaceToken(IActivityManager.descriptor);
   4847         data.writeStrongBinder(caller.asBinder());
   4848         uri.writeToParcel(data, 0);
   4849         data.writeInt(mode);
   4850         data.writeInt(userId);
   4851         mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
   4852         reply.readException();
   4853         data.recycle();
   4854         reply.recycle();
   4855     }
   4856 
   4857     @Override
   4858     public void takePersistableUriPermission(Uri uri, int mode, int userId)
   4859             throws RemoteException {
   4860         Parcel data = Parcel.obtain();
   4861         Parcel reply = Parcel.obtain();
   4862         data.writeInterfaceToken(IActivityManager.descriptor);
   4863         uri.writeToParcel(data, 0);
   4864         data.writeInt(mode);
   4865         data.writeInt(userId);
   4866         mRemote.transact(TAKE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
   4867         reply.readException();
   4868         data.recycle();
   4869         reply.recycle();
   4870     }
   4871 
   4872     @Override
   4873     public void releasePersistableUriPermission(Uri uri, int mode, int userId)
   4874             throws RemoteException {
   4875         Parcel data = Parcel.obtain();
   4876         Parcel reply = Parcel.obtain();
   4877         data.writeInterfaceToken(IActivityManager.descriptor);
   4878         uri.writeToParcel(data, 0);
   4879         data.writeInt(mode);
   4880         data.writeInt(userId);
   4881         mRemote.transact(RELEASE_PERSISTABLE_URI_PERMISSION_TRANSACTION, data, reply, 0);
   4882         reply.readException();
   4883         data.recycle();
   4884         reply.recycle();
   4885     }
   4886 
   4887     @Override
   4888     public ParceledListSlice<UriPermission> getPersistedUriPermissions(
   4889             String packageName, boolean incoming) throws RemoteException {
   4890         Parcel data = Parcel.obtain();
   4891         Parcel reply = Parcel.obtain();
   4892         data.writeInterfaceToken(IActivityManager.descriptor);
   4893         data.writeString(packageName);
   4894         data.writeInt(incoming ? 1 : 0);
   4895         mRemote.transact(GET_PERSISTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
   4896         reply.readException();
   4897         @SuppressWarnings("unchecked")
   4898         final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
   4899                 reply);
   4900         data.recycle();
   4901         reply.recycle();
   4902         return perms;
   4903     }
   4904 
   4905     @Override
   4906     public ParceledListSlice<UriPermission> getGrantedUriPermissions(String packageName, int userId)
   4907             throws RemoteException {
   4908         Parcel data = Parcel.obtain();
   4909         Parcel reply = Parcel.obtain();
   4910         data.writeInterfaceToken(IActivityManager.descriptor);
   4911         data.writeString(packageName);
   4912         data.writeInt(userId);
   4913         mRemote.transact(GET_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
   4914         reply.readException();
   4915         @SuppressWarnings("unchecked")
   4916         final ParceledListSlice<UriPermission> perms = ParceledListSlice.CREATOR.createFromParcel(
   4917                 reply);
   4918         data.recycle();
   4919         reply.recycle();
   4920         return perms;
   4921     }
   4922 
   4923     @Override
   4924     public void clearGrantedUriPermissions(String packageName, int userId) throws RemoteException {
   4925         Parcel data = Parcel.obtain();
   4926         Parcel reply = Parcel.obtain();
   4927         data.writeInterfaceToken(IActivityManager.descriptor);
   4928         data.writeString(packageName);
   4929         data.writeInt(userId);
   4930         mRemote.transact(CLEAR_GRANTED_URI_PERMISSIONS_TRANSACTION, data, reply, 0);
   4931         reply.readException();
   4932         data.recycle();
   4933         reply.recycle();
   4934     }
   4935 
   4936     public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
   4937             throws RemoteException {
   4938         Parcel data = Parcel.obtain();
   4939         Parcel reply = Parcel.obtain();
   4940         data.writeInterfaceToken(IActivityManager.descriptor);
   4941         data.writeStrongBinder(who.asBinder());
   4942         data.writeInt(waiting ? 1 : 0);
   4943         mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
   4944         reply.readException();
   4945         data.recycle();
   4946         reply.recycle();
   4947     }
   4948     public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
   4949         Parcel data = Parcel.obtain();
   4950         Parcel reply = Parcel.obtain();
   4951         data.writeInterfaceToken(IActivityManager.descriptor);
   4952         mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
   4953         reply.readException();
   4954         outInfo.readFromParcel(reply);
   4955         data.recycle();
   4956         reply.recycle();
   4957     }
   4958     public void unhandledBack() throws RemoteException
   4959     {
   4960         Parcel data = Parcel.obtain();
   4961         Parcel reply = Parcel.obtain();
   4962         data.writeInterfaceToken(IActivityManager.descriptor);
   4963         mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
   4964         reply.readException();
   4965         data.recycle();
   4966         reply.recycle();
   4967     }
   4968     public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
   4969     {
   4970         Parcel data = Parcel.obtain();
   4971         Parcel reply = Parcel.obtain();
   4972         data.writeInterfaceToken(IActivityManager.descriptor);
   4973         mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
   4974         reply.readException();
   4975         ParcelFileDescriptor pfd = null;
   4976         if (reply.readInt() != 0) {
   4977             pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
   4978         }
   4979         data.recycle();
   4980         reply.recycle();
   4981         return pfd;
   4982     }
   4983     public void setLockScreenShown(boolean showing, boolean occluded) throws RemoteException
   4984     {
   4985         Parcel data = Parcel.obtain();
   4986         Parcel reply = Parcel.obtain();
   4987         data.writeInterfaceToken(IActivityManager.descriptor);
   4988         data.writeInt(showing ? 1 : 0);
   4989         data.writeInt(occluded ? 1 : 0);
   4990         mRemote.transact(SET_LOCK_SCREEN_SHOWN_TRANSACTION, data, reply, 0);
   4991         reply.readException();
   4992         data.recycle();
   4993         reply.recycle();
   4994     }
   4995     public void setDebugApp(
   4996         String packageName, boolean waitForDebugger, boolean persistent)
   4997         throws RemoteException
   4998     {
   4999         Parcel data = Parcel.obtain();
   5000         Parcel reply = Parcel.obtain();
   5001         data.writeInterfaceToken(IActivityManager.descriptor);
   5002         data.writeString(packageName);
   5003         data.writeInt(waitForDebugger ? 1 : 0);
   5004         data.writeInt(persistent ? 1 : 0);
   5005         mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
   5006         reply.readException();
   5007         data.recycle();
   5008         reply.recycle();
   5009     }
   5010     public void setAlwaysFinish(boolean enabled) throws RemoteException
   5011     {
   5012         Parcel data = Parcel.obtain();
   5013         Parcel reply = Parcel.obtain();
   5014         data.writeInterfaceToken(IActivityManager.descriptor);
   5015         data.writeInt(enabled ? 1 : 0);
   5016         mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
   5017         reply.readException();
   5018         data.recycle();
   5019         reply.recycle();
   5020     }
   5021     public void setActivityController(IActivityController watcher, boolean imAMonkey)
   5022             throws RemoteException
   5023     {
   5024         Parcel data = Parcel.obtain();
   5025         Parcel reply = Parcel.obtain();
   5026         data.writeInterfaceToken(IActivityManager.descriptor);
   5027         data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
   5028         data.writeInt(imAMonkey ? 1 : 0);
   5029         mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
   5030         reply.readException();
   5031         data.recycle();
   5032         reply.recycle();
   5033     }
   5034     public void setLenientBackgroundCheck(boolean enabled) throws RemoteException
   5035     {
   5036         Parcel data = Parcel.obtain();
   5037         Parcel reply = Parcel.obtain();
   5038         data.writeInterfaceToken(IActivityManager.descriptor);
   5039         data.writeInt(enabled ? 1 : 0);
   5040         mRemote.transact(SET_LENIENT_BACKGROUND_CHECK_TRANSACTION, data, reply, 0);
   5041         reply.readException();
   5042         data.recycle();
   5043         reply.recycle();
   5044     }
   5045     public int getMemoryTrimLevel() throws RemoteException
   5046     {
   5047         Parcel data = Parcel.obtain();
   5048         Parcel reply = Parcel.obtain();
   5049         data.writeInterfaceToken(IActivityManager.descriptor);
   5050         mRemote.transact(GET_MEMORY_TRIM_LEVEL_TRANSACTION, data, reply, 0);
   5051         reply.readException();
   5052         int level = reply.readInt();
   5053         data.recycle();
   5054         reply.recycle();
   5055         return level;
   5056     }
   5057     public void enterSafeMode() throws RemoteException {
   5058         Parcel data = Parcel.obtain();
   5059         data.writeInterfaceToken(IActivityManager.descriptor);
   5060         mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
   5061         data.recycle();
   5062     }
   5063     public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg, String tag)
   5064             throws RemoteException {
   5065         Parcel data = Parcel.obtain();
   5066         data.writeInterfaceToken(IActivityManager.descriptor);
   5067         data.writeStrongBinder(sender.asBinder());
   5068         data.writeInt(sourceUid);
   5069         data.writeString(sourcePkg);
   5070         data.writeString(tag);
   5071         mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
   5072         data.recycle();
   5073     }
   5074     public void noteAlarmStart(IIntentSender sender, int sourceUid, String tag)
   5075             throws RemoteException {
   5076         Parcel data = Parcel.obtain();
   5077         data.writeInterfaceToken(IActivityManager.descriptor);
   5078         data.writeStrongBinder(sender.asBinder());
   5079         data.writeInt(sourceUid);
   5080         data.writeString(tag);
   5081         mRemote.transact(NOTE_ALARM_START_TRANSACTION, data, null, 0);
   5082         data.recycle();
   5083     }
   5084     public void noteAlarmFinish(IIntentSender sender, int sourceUid, String tag)
   5085             throws RemoteException {
   5086         Parcel data = Parcel.obtain();
   5087         data.writeInterfaceToken(IActivityManager.descriptor);
   5088         data.writeStrongBinder(sender.asBinder());
   5089         data.writeInt(sourceUid);
   5090         data.writeString(tag);
   5091         mRemote.transact(NOTE_ALARM_FINISH_TRANSACTION, data, null, 0);
   5092         data.recycle();
   5093     }
   5094     public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException {
   5095         Parcel data = Parcel.obtain();
   5096         Parcel reply = Parcel.obtain();
   5097         data.writeInterfaceToken(IActivityManager.descriptor);
   5098         data.writeIntArray(pids);
   5099         data.writeString(reason);
   5100         data.writeInt(secure ? 1 : 0);
   5101         mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0);
   5102         reply.readException();
   5103         boolean res = reply.readInt() != 0;
   5104         data.recycle();
   5105         reply.recycle();
   5106         return res;
   5107     }
   5108     @Override
   5109     public boolean killProcessesBelowForeground(String reason) throws RemoteException {
   5110         Parcel data = Parcel.obtain();
   5111         Parcel reply = Parcel.obtain();
   5112         data.writeInterfaceToken(IActivityManager.descriptor);
   5113         data.writeString(reason);
   5114         mRemote.transact(KILL_PROCESSES_BELOW_FOREGROUND_TRANSACTION, data, reply, 0);
   5115         boolean res = reply.readInt() != 0;
   5116         data.recycle();
   5117         reply.recycle();
   5118         return res;
   5119     }
   5120     public boolean testIsSystemReady()
   5121     {
   5122         /* this base class version is never called */
   5123         return true;
   5124     }
   5125     public void handleApplicationCrash(IBinder app,
   5126             ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
   5127     {
   5128         Parcel data = Parcel.obtain();
   5129         Parcel reply = Parcel.obtain();
   5130         data.writeInterfaceToken(IActivityManager.descriptor);
   5131         data.writeStrongBinder(app);
   5132         crashInfo.writeToParcel(data, 0);
   5133         mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0);
   5134         reply.readException();
   5135         reply.recycle();
   5136         data.recycle();
   5137     }
   5138 
   5139     public boolean handleApplicationWtf(IBinder app, String tag, boolean system,
   5140             ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException
   5141     {
   5142         Parcel data = Parcel.obtain();
   5143         Parcel reply = Parcel.obtain();
   5144         data.writeInterfaceToken(IActivityManager.descriptor);
   5145         data.writeStrongBinder(app);
   5146         data.writeString(tag);
   5147         data.writeInt(system ? 1 : 0);
   5148         crashInfo.writeToParcel(data, 0);
   5149         mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0);
   5150         reply.readException();
   5151         boolean res = reply.readInt() != 0;
   5152         reply.recycle();
   5153         data.recycle();
   5154         return res;
   5155     }
   5156 
   5157     public void handleApplicationStrictModeViolation(IBinder app,
   5158             int violationMask,
   5159             StrictMode.ViolationInfo info) throws RemoteException
   5160     {
   5161         Parcel data = Parcel.obtain();
   5162         Parcel reply = Parcel.obtain();
   5163         data.writeInterfaceToken(IActivityManager.descriptor);
   5164         data.writeStrongBinder(app);
   5165         data.writeInt(violationMask);
   5166         info.writeToParcel(data, 0);
   5167         mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0);
   5168         reply.readException();
   5169         reply.recycle();
   5170         data.recycle();
   5171     }
   5172 
   5173     public void signalPersistentProcesses(int sig) throws RemoteException {
   5174         Parcel data = Parcel.obtain();
   5175         Parcel reply = Parcel.obtain();
   5176         data.writeInterfaceToken(IActivityManager.descriptor);
   5177         data.writeInt(sig);
   5178         mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
   5179         reply.readException();
   5180         data.recycle();
   5181         reply.recycle();
   5182     }
   5183 
   5184     public void killBackgroundProcesses(String packageName, int userId) throws RemoteException {
   5185         Parcel data = Parcel.obtain();
   5186         Parcel reply = Parcel.obtain();
   5187         data.writeInterfaceToken(IActivityManager.descriptor);
   5188         data.writeString(packageName);
   5189         data.writeInt(userId);
   5190         mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
   5191         reply.readException();
   5192         data.recycle();
   5193         reply.recycle();
   5194     }
   5195 
   5196     public void killAllBackgroundProcesses() throws RemoteException {
   5197         Parcel data = Parcel.obtain();
   5198         Parcel reply = Parcel.obtain();
   5199         data.writeInterfaceToken(IActivityManager.descriptor);
   5200         mRemote.transact(KILL_ALL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0);
   5201         reply.readException();
   5202         data.recycle();
   5203         reply.recycle();
   5204     }
   5205 
   5206     public void killPackageDependents(String packageName, int userId) throws RemoteException {
   5207         Parcel data = Parcel.obtain();
   5208         Parcel reply = Parcel.obtain();
   5209         data.writeInterfaceToken(IActivityManager.descriptor);
   5210         data.writeString(packageName);
   5211         data.writeInt(userId);
   5212         mRemote.transact(KILL_PACKAGE_DEPENDENTS_TRANSACTION, data, reply, 0);
   5213         reply.readException();
   5214         data.recycle();
   5215         reply.recycle();
   5216     }
   5217 
   5218     public void forceStopPackage(String packageName, int userId) throws RemoteException {
   5219         Parcel data = Parcel.obtain();
   5220         Parcel reply = Parcel.obtain();
   5221         data.writeInterfaceToken(IActivityManager.descriptor);
   5222         data.writeString(packageName);
   5223         data.writeInt(userId);
   5224         mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0);
   5225         reply.readException();
   5226         data.recycle();
   5227         reply.recycle();
   5228     }
   5229 
   5230     public void getMyMemoryState(ActivityManager.RunningAppProcessInfo outInfo)
   5231             throws RemoteException
   5232     {
   5233         Parcel data = Parcel.obtain();
   5234         Parcel reply = Parcel.obtain();
   5235         data.writeInterfaceToken(IActivityManager.descriptor);
   5236         mRemote.transact(GET_MY_MEMORY_STATE_TRANSACTION, data, reply, 0);
   5237         reply.readException();
   5238         outInfo.readFromParcel(reply);
   5239         reply.recycle();
   5240         data.recycle();
   5241     }
   5242 
   5243     public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
   5244     {
   5245         Parcel data = Parcel.obtain();
   5246         Parcel reply = Parcel.obtain();
   5247         data.writeInterfaceToken(IActivityManager.descriptor);
   5248         mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
   5249         reply.readException();
   5250         ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
   5251         reply.recycle();
   5252         data.recycle();
   5253         return res;
   5254     }
   5255 
   5256     public boolean profileControl(String process, int userId, boolean start,
   5257             ProfilerInfo profilerInfo, int profileType) throws RemoteException
   5258     {
   5259         Parcel data = Parcel.obtain();
   5260         Parcel reply = Parcel.obtain();
   5261         data.writeInterfaceToken(IActivityManager.descriptor);
   5262         data.writeString(process);
   5263         data.writeInt(userId);
   5264         data.writeInt(start ? 1 : 0);
   5265         data.writeInt(profileType);
   5266         if (profilerInfo != null) {
   5267             data.writeInt(1);
   5268             profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   5269         } else {
   5270             data.writeInt(0);
   5271         }
   5272         mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
   5273         reply.readException();
   5274         boolean res = reply.readInt() != 0;
   5275         reply.recycle();
   5276         data.recycle();
   5277         return res;
   5278     }
   5279 
   5280     public boolean shutdown(int timeout) throws RemoteException
   5281     {
   5282         Parcel data = Parcel.obtain();
   5283         Parcel reply = Parcel.obtain();
   5284         data.writeInterfaceToken(IActivityManager.descriptor);
   5285         data.writeInt(timeout);
   5286         mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
   5287         reply.readException();
   5288         boolean res = reply.readInt() != 0;
   5289         reply.recycle();
   5290         data.recycle();
   5291         return res;
   5292     }
   5293 
   5294     public void stopAppSwitches() throws RemoteException {
   5295         Parcel data = Parcel.obtain();
   5296         Parcel reply = Parcel.obtain();
   5297         data.writeInterfaceToken(IActivityManager.descriptor);
   5298         mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
   5299         reply.readException();
   5300         reply.recycle();
   5301         data.recycle();
   5302     }
   5303 
   5304     public void resumeAppSwitches() throws RemoteException {
   5305         Parcel data = Parcel.obtain();
   5306         Parcel reply = Parcel.obtain();
   5307         data.writeInterfaceToken(IActivityManager.descriptor);
   5308         mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
   5309         reply.readException();
   5310         reply.recycle();
   5311         data.recycle();
   5312     }
   5313 
   5314     public void addPackageDependency(String packageName) throws RemoteException {
   5315         Parcel data = Parcel.obtain();
   5316         Parcel reply = Parcel.obtain();
   5317         data.writeInterfaceToken(IActivityManager.descriptor);
   5318         data.writeString(packageName);
   5319         mRemote.transact(ADD_PACKAGE_DEPENDENCY_TRANSACTION, data, reply, 0);
   5320         reply.readException();
   5321         data.recycle();
   5322         reply.recycle();
   5323     }
   5324 
   5325     public void killApplication(String pkg, int appId, int userId, String reason)
   5326             throws RemoteException {
   5327         Parcel data = Parcel.obtain();
   5328         Parcel reply = Parcel.obtain();
   5329         data.writeInterfaceToken(IActivityManager.descriptor);
   5330         data.writeString(pkg);
   5331         data.writeInt(appId);
   5332         data.writeInt(userId);
   5333         data.writeString(reason);
   5334         mRemote.transact(KILL_APPLICATION_TRANSACTION, data, reply, 0);
   5335         reply.readException();
   5336         data.recycle();
   5337         reply.recycle();
   5338     }
   5339 
   5340     public void closeSystemDialogs(String reason) throws RemoteException {
   5341         Parcel data = Parcel.obtain();
   5342         Parcel reply = Parcel.obtain();
   5343         data.writeInterfaceToken(IActivityManager.descriptor);
   5344         data.writeString(reason);
   5345         mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
   5346         reply.readException();
   5347         data.recycle();
   5348         reply.recycle();
   5349     }
   5350 
   5351     public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
   5352             throws RemoteException {
   5353         Parcel data = Parcel.obtain();
   5354         Parcel reply = Parcel.obtain();
   5355         data.writeInterfaceToken(IActivityManager.descriptor);
   5356         data.writeIntArray(pids);
   5357         mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
   5358         reply.readException();
   5359         Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
   5360         data.recycle();
   5361         reply.recycle();
   5362         return res;
   5363     }
   5364 
   5365     public void killApplicationProcess(String processName, int uid) throws RemoteException {
   5366         Parcel data = Parcel.obtain();
   5367         Parcel reply = Parcel.obtain();
   5368         data.writeInterfaceToken(IActivityManager.descriptor);
   5369         data.writeString(processName);
   5370         data.writeInt(uid);
   5371         mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
   5372         reply.readException();
   5373         data.recycle();
   5374         reply.recycle();
   5375     }
   5376 
   5377     public void overridePendingTransition(IBinder token, String packageName,
   5378             int enterAnim, int exitAnim) throws RemoteException {
   5379         Parcel data = Parcel.obtain();
   5380         Parcel reply = Parcel.obtain();
   5381         data.writeInterfaceToken(IActivityManager.descriptor);
   5382         data.writeStrongBinder(token);
   5383         data.writeString(packageName);
   5384         data.writeInt(enterAnim);
   5385         data.writeInt(exitAnim);
   5386         mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0);
   5387         reply.readException();
   5388         data.recycle();
   5389         reply.recycle();
   5390     }
   5391 
   5392     public boolean isUserAMonkey() throws RemoteException {
   5393         Parcel data = Parcel.obtain();
   5394         Parcel reply = Parcel.obtain();
   5395         data.writeInterfaceToken(IActivityManager.descriptor);
   5396         mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0);
   5397         reply.readException();
   5398         boolean res = reply.readInt() != 0;
   5399         data.recycle();
   5400         reply.recycle();
   5401         return res;
   5402     }
   5403 
   5404     public void setUserIsMonkey(boolean monkey) throws RemoteException {
   5405         Parcel data = Parcel.obtain();
   5406         Parcel reply = Parcel.obtain();
   5407         data.writeInterfaceToken(IActivityManager.descriptor);
   5408         data.writeInt(monkey ? 1 : 0);
   5409         mRemote.transact(SET_USER_IS_MONKEY_TRANSACTION, data, reply, 0);
   5410         reply.readException();
   5411         data.recycle();
   5412         reply.recycle();
   5413     }
   5414 
   5415     public void finishHeavyWeightApp() throws RemoteException {
   5416         Parcel data = Parcel.obtain();
   5417         Parcel reply = Parcel.obtain();
   5418         data.writeInterfaceToken(IActivityManager.descriptor);
   5419         mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0);
   5420         reply.readException();
   5421         data.recycle();
   5422         reply.recycle();
   5423     }
   5424 
   5425     public boolean convertFromTranslucent(IBinder token)
   5426             throws RemoteException {
   5427         Parcel data = Parcel.obtain();
   5428         Parcel reply = Parcel.obtain();
   5429         data.writeInterfaceToken(IActivityManager.descriptor);
   5430         data.writeStrongBinder(token);
   5431         mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0);
   5432         reply.readException();
   5433         boolean res = reply.readInt() != 0;
   5434         data.recycle();
   5435         reply.recycle();
   5436         return res;
   5437     }
   5438 
   5439     public boolean convertToTranslucent(IBinder token, ActivityOptions options)
   5440             throws RemoteException {
   5441         Parcel data = Parcel.obtain();
   5442         Parcel reply = Parcel.obtain();
   5443         data.writeInterfaceToken(IActivityManager.descriptor);
   5444         data.writeStrongBinder(token);
   5445         if (options == null) {
   5446             data.writeInt(0);
   5447         } else {
   5448             data.writeInt(1);
   5449             data.writeBundle(options.toBundle());
   5450         }
   5451         mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0);
   5452         reply.readException();
   5453         boolean res = reply.readInt() != 0;
   5454         data.recycle();
   5455         reply.recycle();
   5456         return res;
   5457     }
   5458 
   5459     public ActivityOptions getActivityOptions(IBinder token) throws RemoteException {
   5460         Parcel data = Parcel.obtain();
   5461         Parcel reply = Parcel.obtain();
   5462         data.writeInterfaceToken(IActivityManager.descriptor);
   5463         data.writeStrongBinder(token);
   5464         mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0);
   5465         reply.readException();
   5466         ActivityOptions options = ActivityOptions.fromBundle(reply.readBundle());
   5467         data.recycle();
   5468         reply.recycle();
   5469         return options;
   5470     }
   5471 
   5472     public void setImmersive(IBinder token, boolean immersive)
   5473             throws RemoteException {
   5474         Parcel data = Parcel.obtain();
   5475         Parcel reply = Parcel.obtain();
   5476         data.writeInterfaceToken(IActivityManager.descriptor);
   5477         data.writeStrongBinder(token);
   5478         data.writeInt(immersive ? 1 : 0);
   5479         mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0);
   5480         reply.readException();
   5481         data.recycle();
   5482         reply.recycle();
   5483     }
   5484 
   5485     public boolean isImmersive(IBinder token)
   5486             throws RemoteException {
   5487         Parcel data = Parcel.obtain();
   5488         Parcel reply = Parcel.obtain();
   5489         data.writeInterfaceToken(IActivityManager.descriptor);
   5490         data.writeStrongBinder(token);
   5491         mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0);
   5492         reply.readException();
   5493         boolean res = reply.readInt() == 1;
   5494         data.recycle();
   5495         reply.recycle();
   5496         return res;
   5497     }
   5498 
   5499     public boolean isTopOfTask(IBinder token) throws RemoteException {
   5500         Parcel data = Parcel.obtain();
   5501         Parcel reply = Parcel.obtain();
   5502         data.writeInterfaceToken(IActivityManager.descriptor);
   5503         data.writeStrongBinder(token);
   5504         mRemote.transact(IS_TOP_OF_TASK_TRANSACTION, data, reply, 0);
   5505         reply.readException();
   5506         boolean res = reply.readInt() == 1;
   5507         data.recycle();
   5508         reply.recycle();
   5509         return res;
   5510     }
   5511 
   5512     public boolean isTopActivityImmersive()
   5513             throws RemoteException {
   5514         Parcel data = Parcel.obtain();
   5515         Parcel reply = Parcel.obtain();
   5516         data.writeInterfaceToken(IActivityManager.descriptor);
   5517         mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0);
   5518         reply.readException();
   5519         boolean res = reply.readInt() == 1;
   5520         data.recycle();
   5521         reply.recycle();
   5522         return res;
   5523     }
   5524 
   5525     public void crashApplication(int uid, int initialPid, String packageName,
   5526             String message) throws RemoteException {
   5527         Parcel data = Parcel.obtain();
   5528         Parcel reply = Parcel.obtain();
   5529         data.writeInterfaceToken(IActivityManager.descriptor);
   5530         data.writeInt(uid);
   5531         data.writeInt(initialPid);
   5532         data.writeString(packageName);
   5533         data.writeString(message);
   5534         mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0);
   5535         reply.readException();
   5536         data.recycle();
   5537         reply.recycle();
   5538     }
   5539 
   5540     public String getProviderMimeType(Uri uri, int userId) throws RemoteException {
   5541         Parcel data = Parcel.obtain();
   5542         Parcel reply = Parcel.obtain();
   5543         data.writeInterfaceToken(IActivityManager.descriptor);
   5544         uri.writeToParcel(data, 0);
   5545         data.writeInt(userId);
   5546         mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0);
   5547         reply.readException();
   5548         String res = reply.readString();
   5549         data.recycle();
   5550         reply.recycle();
   5551         return res;
   5552     }
   5553 
   5554     public IBinder newUriPermissionOwner(String name)
   5555             throws RemoteException {
   5556         Parcel data = Parcel.obtain();
   5557         Parcel reply = Parcel.obtain();
   5558         data.writeInterfaceToken(IActivityManager.descriptor);
   5559         data.writeString(name);
   5560         mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0);
   5561         reply.readException();
   5562         IBinder res = reply.readStrongBinder();
   5563         data.recycle();
   5564         reply.recycle();
   5565         return res;
   5566     }
   5567 
   5568     public IBinder getUriPermissionOwnerForActivity(IBinder activityToken) throws RemoteException {
   5569         Parcel data = Parcel.obtain();
   5570         Parcel reply = Parcel.obtain();
   5571         data.writeInterfaceToken(IActivityManager.descriptor);
   5572         data.writeStrongBinder(activityToken);
   5573         mRemote.transact(GET_URI_PERMISSION_OWNER_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
   5574         reply.readException();
   5575         IBinder res = reply.readStrongBinder();
   5576         data.recycle();
   5577         reply.recycle();
   5578         return res;
   5579     }
   5580 
   5581     public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg,
   5582             Uri uri, int mode, int sourceUserId, int targetUserId) throws RemoteException {
   5583         Parcel data = Parcel.obtain();
   5584         Parcel reply = Parcel.obtain();
   5585         data.writeInterfaceToken(IActivityManager.descriptor);
   5586         data.writeStrongBinder(owner);
   5587         data.writeInt(fromUid);
   5588         data.writeString(targetPkg);
   5589         uri.writeToParcel(data, 0);
   5590         data.writeInt(mode);
   5591         data.writeInt(sourceUserId);
   5592         data.writeInt(targetUserId);
   5593         mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
   5594         reply.readException();
   5595         data.recycle();
   5596         reply.recycle();
   5597     }
   5598 
   5599     public void revokeUriPermissionFromOwner(IBinder owner, Uri uri,
   5600             int mode, int userId) throws RemoteException {
   5601         Parcel data = Parcel.obtain();
   5602         Parcel reply = Parcel.obtain();
   5603         data.writeInterfaceToken(IActivityManager.descriptor);
   5604         data.writeStrongBinder(owner);
   5605         if (uri != null) {
   5606             data.writeInt(1);
   5607             uri.writeToParcel(data, 0);
   5608         } else {
   5609             data.writeInt(0);
   5610         }
   5611         data.writeInt(mode);
   5612         data.writeInt(userId);
   5613         mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
   5614         reply.readException();
   5615         data.recycle();
   5616         reply.recycle();
   5617     }
   5618 
   5619     public int checkGrantUriPermission(int callingUid, String targetPkg,
   5620             Uri uri, int modeFlags, int userId) throws RemoteException {
   5621         Parcel data = Parcel.obtain();
   5622         Parcel reply = Parcel.obtain();
   5623         data.writeInterfaceToken(IActivityManager.descriptor);
   5624         data.writeInt(callingUid);
   5625         data.writeString(targetPkg);
   5626         uri.writeToParcel(data, 0);
   5627         data.writeInt(modeFlags);
   5628         data.writeInt(userId);
   5629         mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
   5630         reply.readException();
   5631         int res = reply.readInt();
   5632         data.recycle();
   5633         reply.recycle();
   5634         return res;
   5635     }
   5636 
   5637     public boolean dumpHeap(String process, int userId, boolean managed,
   5638             String path, ParcelFileDescriptor fd) throws RemoteException {
   5639         Parcel data = Parcel.obtain();
   5640         Parcel reply = Parcel.obtain();
   5641         data.writeInterfaceToken(IActivityManager.descriptor);
   5642         data.writeString(process);
   5643         data.writeInt(userId);
   5644         data.writeInt(managed ? 1 : 0);
   5645         data.writeString(path);
   5646         if (fd != null) {
   5647             data.writeInt(1);
   5648             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   5649         } else {
   5650             data.writeInt(0);
   5651         }
   5652         mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0);
   5653         reply.readException();
   5654         boolean res = reply.readInt() != 0;
   5655         reply.recycle();
   5656         data.recycle();
   5657         return res;
   5658     }
   5659 
   5660     public int startActivities(IApplicationThread caller, String callingPackage,
   5661             Intent[] intents, String[] resolvedTypes, IBinder resultTo,
   5662             Bundle options, int userId) throws RemoteException {
   5663         Parcel data = Parcel.obtain();
   5664         Parcel reply = Parcel.obtain();
   5665         data.writeInterfaceToken(IActivityManager.descriptor);
   5666         data.writeStrongBinder(caller != null ? caller.asBinder() : null);
   5667         data.writeString(callingPackage);
   5668         data.writeTypedArray(intents, 0);
   5669         data.writeStringArray(resolvedTypes);
   5670         data.writeStrongBinder(resultTo);
   5671         if (options != null) {
   5672             data.writeInt(1);
   5673             options.writeToParcel(data, 0);
   5674         } else {
   5675             data.writeInt(0);
   5676         }
   5677         data.writeInt(userId);
   5678         mRemote.transact(START_ACTIVITIES_TRANSACTION, data, reply, 0);
   5679         reply.readException();
   5680         int result = reply.readInt();
   5681         reply.recycle();
   5682         data.recycle();
   5683         return result;
   5684     }
   5685 
   5686     public int getFrontActivityScreenCompatMode() throws RemoteException {
   5687         Parcel data = Parcel.obtain();
   5688         Parcel reply = Parcel.obtain();
   5689         data.writeInterfaceToken(IActivityManager.descriptor);
   5690         mRemote.transact(GET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
   5691         reply.readException();
   5692         int mode = reply.readInt();
   5693         reply.recycle();
   5694         data.recycle();
   5695         return mode;
   5696     }
   5697 
   5698     public void setFrontActivityScreenCompatMode(int mode) throws RemoteException {
   5699         Parcel data = Parcel.obtain();
   5700         Parcel reply = Parcel.obtain();
   5701         data.writeInterfaceToken(IActivityManager.descriptor);
   5702         data.writeInt(mode);
   5703         mRemote.transact(SET_FRONT_ACTIVITY_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
   5704         reply.readException();
   5705         reply.recycle();
   5706         data.recycle();
   5707     }
   5708 
   5709     public int getPackageScreenCompatMode(String packageName) throws RemoteException {
   5710         Parcel data = Parcel.obtain();
   5711         Parcel reply = Parcel.obtain();
   5712         data.writeInterfaceToken(IActivityManager.descriptor);
   5713         data.writeString(packageName);
   5714         mRemote.transact(GET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
   5715         reply.readException();
   5716         int mode = reply.readInt();
   5717         reply.recycle();
   5718         data.recycle();
   5719         return mode;
   5720     }
   5721 
   5722     public void setPackageScreenCompatMode(String packageName, int mode)
   5723             throws RemoteException {
   5724         Parcel data = Parcel.obtain();
   5725         Parcel reply = Parcel.obtain();
   5726         data.writeInterfaceToken(IActivityManager.descriptor);
   5727         data.writeString(packageName);
   5728         data.writeInt(mode);
   5729         mRemote.transact(SET_PACKAGE_SCREEN_COMPAT_MODE_TRANSACTION, data, reply, 0);
   5730         reply.readException();
   5731         reply.recycle();
   5732         data.recycle();
   5733     }
   5734 
   5735     public boolean getPackageAskScreenCompat(String packageName) throws RemoteException {
   5736         Parcel data = Parcel.obtain();
   5737         Parcel reply = Parcel.obtain();
   5738         data.writeInterfaceToken(IActivityManager.descriptor);
   5739         data.writeString(packageName);
   5740         mRemote.transact(GET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
   5741         reply.readException();
   5742         boolean ask = reply.readInt() != 0;
   5743         reply.recycle();
   5744         data.recycle();
   5745         return ask;
   5746     }
   5747 
   5748     public void setPackageAskScreenCompat(String packageName, boolean ask)
   5749             throws RemoteException {
   5750         Parcel data = Parcel.obtain();
   5751         Parcel reply = Parcel.obtain();
   5752         data.writeInterfaceToken(IActivityManager.descriptor);
   5753         data.writeString(packageName);
   5754         data.writeInt(ask ? 1 : 0);
   5755         mRemote.transact(SET_PACKAGE_ASK_SCREEN_COMPAT_TRANSACTION, data, reply, 0);
   5756         reply.readException();
   5757         reply.recycle();
   5758         data.recycle();
   5759     }
   5760 
   5761     public boolean switchUser(int userid) throws RemoteException {
   5762         Parcel data = Parcel.obtain();
   5763         Parcel reply = Parcel.obtain();
   5764         data.writeInterfaceToken(IActivityManager.descriptor);
   5765         data.writeInt(userid);
   5766         mRemote.transact(SWITCH_USER_TRANSACTION, data, reply, 0);
   5767         reply.readException();
   5768         boolean result = reply.readInt() != 0;
   5769         reply.recycle();
   5770         data.recycle();
   5771         return result;
   5772     }
   5773 
   5774     public boolean startUserInBackground(int userid) throws RemoteException {
   5775         Parcel data = Parcel.obtain();
   5776         Parcel reply = Parcel.obtain();
   5777         data.writeInterfaceToken(IActivityManager.descriptor);
   5778         data.writeInt(userid);
   5779         mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
   5780         reply.readException();
   5781         boolean result = reply.readInt() != 0;
   5782         reply.recycle();
   5783         data.recycle();
   5784         return result;
   5785     }
   5786 
   5787     public boolean unlockUser(int userId, byte[] token, byte[] secret, IProgressListener listener)
   5788             throws RemoteException {
   5789         Parcel data = Parcel.obtain();
   5790         Parcel reply = Parcel.obtain();
   5791         data.writeInterfaceToken(IActivityManager.descriptor);
   5792         data.writeInt(userId);
   5793         data.writeByteArray(token);
   5794         data.writeByteArray(secret);
   5795         data.writeStrongInterface(listener);
   5796         mRemote.transact(IActivityManager.UNLOCK_USER_TRANSACTION, data, reply, 0);
   5797         reply.readException();
   5798         boolean result = reply.readInt() != 0;
   5799         reply.recycle();
   5800         data.recycle();
   5801         return result;
   5802     }
   5803 
   5804     public int stopUser(int userid, boolean force, IStopUserCallback callback)
   5805             throws RemoteException {
   5806         Parcel data = Parcel.obtain();
   5807         Parcel reply = Parcel.obtain();
   5808         data.writeInterfaceToken(IActivityManager.descriptor);
   5809         data.writeInt(userid);
   5810         data.writeInt(force ? 1 : 0);
   5811         data.writeStrongInterface(callback);
   5812         mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
   5813         reply.readException();
   5814         int result = reply.readInt();
   5815         reply.recycle();
   5816         data.recycle();
   5817         return result;
   5818     }
   5819 
   5820     public UserInfo getCurrentUser() throws RemoteException {
   5821         Parcel data = Parcel.obtain();
   5822         Parcel reply = Parcel.obtain();
   5823         data.writeInterfaceToken(IActivityManager.descriptor);
   5824         mRemote.transact(GET_CURRENT_USER_TRANSACTION, data, reply, 0);
   5825         reply.readException();
   5826         UserInfo userInfo = UserInfo.CREATOR.createFromParcel(reply);
   5827         reply.recycle();
   5828         data.recycle();
   5829         return userInfo;
   5830     }
   5831 
   5832     public boolean isUserRunning(int userid, int flags) throws RemoteException {
   5833         Parcel data = Parcel.obtain();
   5834         Parcel reply = Parcel.obtain();
   5835         data.writeInterfaceToken(IActivityManager.descriptor);
   5836         data.writeInt(userid);
   5837         data.writeInt(flags);
   5838         mRemote.transact(IS_USER_RUNNING_TRANSACTION, data, reply, 0);
   5839         reply.readException();
   5840         boolean result = reply.readInt() != 0;
   5841         reply.recycle();
   5842         data.recycle();
   5843         return result;
   5844     }
   5845 
   5846     public int[] getRunningUserIds() throws RemoteException {
   5847         Parcel data = Parcel.obtain();
   5848         Parcel reply = Parcel.obtain();
   5849         data.writeInterfaceToken(IActivityManager.descriptor);
   5850         mRemote.transact(GET_RUNNING_USER_IDS_TRANSACTION, data, reply, 0);
   5851         reply.readException();
   5852         int[] result = reply.createIntArray();
   5853         reply.recycle();
   5854         data.recycle();
   5855         return result;
   5856     }
   5857 
   5858     public boolean removeTask(int taskId) throws RemoteException {
   5859         Parcel data = Parcel.obtain();
   5860         Parcel reply = Parcel.obtain();
   5861         data.writeInterfaceToken(IActivityManager.descriptor);
   5862         data.writeInt(taskId);
   5863         mRemote.transact(REMOVE_TASK_TRANSACTION, data, reply, 0);
   5864         reply.readException();
   5865         boolean result = reply.readInt() != 0;
   5866         reply.recycle();
   5867         data.recycle();
   5868         return result;
   5869     }
   5870 
   5871     public void registerProcessObserver(IProcessObserver observer) throws RemoteException {
   5872         Parcel data = Parcel.obtain();
   5873         Parcel reply = Parcel.obtain();
   5874         data.writeInterfaceToken(IActivityManager.descriptor);
   5875         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   5876         mRemote.transact(REGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
   5877         reply.readException();
   5878         data.recycle();
   5879         reply.recycle();
   5880     }
   5881 
   5882     public void unregisterProcessObserver(IProcessObserver observer) throws RemoteException {
   5883         Parcel data = Parcel.obtain();
   5884         Parcel reply = Parcel.obtain();
   5885         data.writeInterfaceToken(IActivityManager.descriptor);
   5886         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   5887         mRemote.transact(UNREGISTER_PROCESS_OBSERVER_TRANSACTION, data, reply, 0);
   5888         reply.readException();
   5889         data.recycle();
   5890         reply.recycle();
   5891     }
   5892 
   5893     public void registerUidObserver(IUidObserver observer, int which) throws RemoteException {
   5894         Parcel data = Parcel.obtain();
   5895         Parcel reply = Parcel.obtain();
   5896         data.writeInterfaceToken(IActivityManager.descriptor);
   5897         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   5898         data.writeInt(which);
   5899         mRemote.transact(REGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
   5900         reply.readException();
   5901         data.recycle();
   5902         reply.recycle();
   5903     }
   5904 
   5905     public void unregisterUidObserver(IUidObserver observer) throws RemoteException {
   5906         Parcel data = Parcel.obtain();
   5907         Parcel reply = Parcel.obtain();
   5908         data.writeInterfaceToken(IActivityManager.descriptor);
   5909         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   5910         mRemote.transact(UNREGISTER_UID_OBSERVER_TRANSACTION, data, reply, 0);
   5911         reply.readException();
   5912         data.recycle();
   5913         reply.recycle();
   5914     }
   5915 
   5916     public boolean isIntentSenderTargetedToPackage(IIntentSender sender) throws RemoteException {
   5917         Parcel data = Parcel.obtain();
   5918         Parcel reply = Parcel.obtain();
   5919         data.writeInterfaceToken(IActivityManager.descriptor);
   5920         data.writeStrongBinder(sender.asBinder());
   5921         mRemote.transact(IS_INTENT_SENDER_TARGETED_TO_PACKAGE_TRANSACTION, data, reply, 0);
   5922         reply.readException();
   5923         boolean res = reply.readInt() != 0;
   5924         data.recycle();
   5925         reply.recycle();
   5926         return res;
   5927     }
   5928 
   5929     public boolean isIntentSenderAnActivity(IIntentSender sender) throws RemoteException {
   5930         Parcel data = Parcel.obtain();
   5931         Parcel reply = Parcel.obtain();
   5932         data.writeInterfaceToken(IActivityManager.descriptor);
   5933         data.writeStrongBinder(sender.asBinder());
   5934         mRemote.transact(IS_INTENT_SENDER_AN_ACTIVITY_TRANSACTION, data, reply, 0);
   5935         reply.readException();
   5936         boolean res = reply.readInt() != 0;
   5937         data.recycle();
   5938         reply.recycle();
   5939         return res;
   5940     }
   5941 
   5942     public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException {
   5943         Parcel data = Parcel.obtain();
   5944         Parcel reply = Parcel.obtain();
   5945         data.writeInterfaceToken(IActivityManager.descriptor);
   5946         data.writeStrongBinder(sender.asBinder());
   5947         mRemote.transact(GET_INTENT_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
   5948         reply.readException();
   5949         Intent res = reply.readInt() != 0
   5950                 ? Intent.CREATOR.createFromParcel(reply) : null;
   5951         data.recycle();
   5952         reply.recycle();
   5953         return res;
   5954     }
   5955 
   5956     public String getTagForIntentSender(IIntentSender sender, String prefix)
   5957             throws RemoteException {
   5958         Parcel data = Parcel.obtain();
   5959         Parcel reply = Parcel.obtain();
   5960         data.writeInterfaceToken(IActivityManager.descriptor);
   5961         data.writeStrongBinder(sender.asBinder());
   5962         data.writeString(prefix);
   5963         mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
   5964         reply.readException();
   5965         String res = reply.readString();
   5966         data.recycle();
   5967         reply.recycle();
   5968         return res;
   5969     }
   5970 
   5971     public void updatePersistentConfiguration(Configuration values) throws RemoteException
   5972     {
   5973         Parcel data = Parcel.obtain();
   5974         Parcel reply = Parcel.obtain();
   5975         data.writeInterfaceToken(IActivityManager.descriptor);
   5976         values.writeToParcel(data, 0);
   5977         mRemote.transact(UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION, data, reply, 0);
   5978         reply.readException();
   5979         data.recycle();
   5980         reply.recycle();
   5981     }
   5982 
   5983     public long[] getProcessPss(int[] pids) throws RemoteException {
   5984         Parcel data = Parcel.obtain();
   5985         Parcel reply = Parcel.obtain();
   5986         data.writeInterfaceToken(IActivityManager.descriptor);
   5987         data.writeIntArray(pids);
   5988         mRemote.transact(GET_PROCESS_PSS_TRANSACTION, data, reply, 0);
   5989         reply.readException();
   5990         long[] res = reply.createLongArray();
   5991         data.recycle();
   5992         reply.recycle();
   5993         return res;
   5994     }
   5995 
   5996     public void showBootMessage(CharSequence msg, boolean always) throws RemoteException {
   5997         Parcel data = Parcel.obtain();
   5998         Parcel reply = Parcel.obtain();
   5999         data.writeInterfaceToken(IActivityManager.descriptor);
   6000         TextUtils.writeToParcel(msg, data, 0);
   6001         data.writeInt(always ? 1 : 0);
   6002         mRemote.transact(SHOW_BOOT_MESSAGE_TRANSACTION, data, reply, 0);
   6003         reply.readException();
   6004         data.recycle();
   6005         reply.recycle();
   6006     }
   6007 
   6008     public void keyguardWaitingForActivityDrawn() throws RemoteException {
   6009         Parcel data = Parcel.obtain();
   6010         Parcel reply = Parcel.obtain();
   6011         data.writeInterfaceToken(IActivityManager.descriptor);
   6012         mRemote.transact(KEYGUARD_WAITING_FOR_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
   6013         reply.readException();
   6014         data.recycle();
   6015         reply.recycle();
   6016     }
   6017 
   6018     public void keyguardGoingAway(int flags)
   6019             throws RemoteException {
   6020         Parcel data = Parcel.obtain();
   6021         Parcel reply = Parcel.obtain();
   6022         data.writeInterfaceToken(IActivityManager.descriptor);
   6023         data.writeInt(flags);
   6024         mRemote.transact(KEYGUARD_GOING_AWAY_TRANSACTION, data, reply, 0);
   6025         reply.readException();
   6026         data.recycle();
   6027         reply.recycle();
   6028     }
   6029 
   6030     public boolean shouldUpRecreateTask(IBinder token, String destAffinity)
   6031             throws RemoteException {
   6032         Parcel data = Parcel.obtain();
   6033         Parcel reply = Parcel.obtain();
   6034         data.writeInterfaceToken(IActivityManager.descriptor);
   6035         data.writeStrongBinder(token);
   6036         data.writeString(destAffinity);
   6037         mRemote.transact(SHOULD_UP_RECREATE_TASK_TRANSACTION, data, reply, 0);
   6038         reply.readException();
   6039         boolean result = reply.readInt() != 0;
   6040         data.recycle();
   6041         reply.recycle();
   6042         return result;
   6043     }
   6044 
   6045     public boolean navigateUpTo(IBinder token, Intent target, int resultCode, Intent resultData)
   6046             throws RemoteException {
   6047         Parcel data = Parcel.obtain();
   6048         Parcel reply = Parcel.obtain();
   6049         data.writeInterfaceToken(IActivityManager.descriptor);
   6050         data.writeStrongBinder(token);
   6051         target.writeToParcel(data, 0);
   6052         data.writeInt(resultCode);
   6053         if (resultData != null) {
   6054             data.writeInt(1);
   6055             resultData.writeToParcel(data, 0);
   6056         } else {
   6057             data.writeInt(0);
   6058         }
   6059         mRemote.transact(NAVIGATE_UP_TO_TRANSACTION, data, reply, 0);
   6060         reply.readException();
   6061         boolean result = reply.readInt() != 0;
   6062         data.recycle();
   6063         reply.recycle();
   6064         return result;
   6065     }
   6066 
   6067     public int getLaunchedFromUid(IBinder activityToken) throws RemoteException {
   6068         Parcel data = Parcel.obtain();
   6069         Parcel reply = Parcel.obtain();
   6070         data.writeInterfaceToken(IActivityManager.descriptor);
   6071         data.writeStrongBinder(activityToken);
   6072         mRemote.transact(GET_LAUNCHED_FROM_UID_TRANSACTION, data, reply, 0);
   6073         reply.readException();
   6074         int result = reply.readInt();
   6075         data.recycle();
   6076         reply.recycle();
   6077         return result;
   6078     }
   6079 
   6080     public String getLaunchedFromPackage(IBinder activityToken) throws RemoteException {
   6081         Parcel data = Parcel.obtain();
   6082         Parcel reply = Parcel.obtain();
   6083         data.writeInterfaceToken(IActivityManager.descriptor);
   6084         data.writeStrongBinder(activityToken);
   6085         mRemote.transact(GET_LAUNCHED_FROM_PACKAGE_TRANSACTION, data, reply, 0);
   6086         reply.readException();
   6087         String result = reply.readString();
   6088         data.recycle();
   6089         reply.recycle();
   6090         return result;
   6091     }
   6092 
   6093     public void registerUserSwitchObserver(IUserSwitchObserver observer,
   6094             String name) throws RemoteException {
   6095         Parcel data = Parcel.obtain();
   6096         Parcel reply = Parcel.obtain();
   6097         data.writeInterfaceToken(IActivityManager.descriptor);
   6098         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   6099         data.writeString(name);
   6100         mRemote.transact(REGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
   6101         reply.readException();
   6102         data.recycle();
   6103         reply.recycle();
   6104     }
   6105 
   6106     public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException {
   6107         Parcel data = Parcel.obtain();
   6108         Parcel reply = Parcel.obtain();
   6109         data.writeInterfaceToken(IActivityManager.descriptor);
   6110         data.writeStrongBinder(observer != null ? observer.asBinder() : null);
   6111         mRemote.transact(UNREGISTER_USER_SWITCH_OBSERVER_TRANSACTION, data, reply, 0);
   6112         reply.readException();
   6113         data.recycle();
   6114         reply.recycle();
   6115     }
   6116 
   6117     public void requestBugReport(@ActivityManager.BugreportMode int bugreportType)
   6118             throws RemoteException {
   6119         Parcel data = Parcel.obtain();
   6120         Parcel reply = Parcel.obtain();
   6121         data.writeInterfaceToken(IActivityManager.descriptor);
   6122         data.writeInt(bugreportType);
   6123         mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
   6124         reply.readException();
   6125         data.recycle();
   6126         reply.recycle();
   6127     }
   6128 
   6129     public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
   6130             throws RemoteException {
   6131         Parcel data = Parcel.obtain();
   6132         Parcel reply = Parcel.obtain();
   6133         data.writeInterfaceToken(IActivityManager.descriptor);
   6134         data.writeInt(pid);
   6135         data.writeInt(aboveSystem ? 1 : 0);
   6136         data.writeString(reason);
   6137         mRemote.transact(INPUT_DISPATCHING_TIMED_OUT_TRANSACTION, data, reply, 0);
   6138         reply.readException();
   6139         long res = reply.readInt();
   6140         data.recycle();
   6141         reply.recycle();
   6142         return res;
   6143     }
   6144 
   6145     public Bundle getAssistContextExtras(int requestType) throws RemoteException {
   6146         Parcel data = Parcel.obtain();
   6147         Parcel reply = Parcel.obtain();
   6148         data.writeInterfaceToken(IActivityManager.descriptor);
   6149         data.writeInt(requestType);
   6150         mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
   6151         reply.readException();
   6152         Bundle res = reply.readBundle();
   6153         data.recycle();
   6154         reply.recycle();
   6155         return res;
   6156     }
   6157 
   6158     public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
   6159             Bundle receiverExtras,
   6160             IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException {
   6161         Parcel data = Parcel.obtain();
   6162         Parcel reply = Parcel.obtain();
   6163         data.writeInterfaceToken(IActivityManager.descriptor);
   6164         data.writeInt(requestType);
   6165         data.writeStrongBinder(receiver.asBinder());
   6166         data.writeBundle(receiverExtras);
   6167         data.writeStrongBinder(activityToken);
   6168         data.writeInt(focused ? 1 : 0);
   6169         data.writeInt(newSessionId ? 1 : 0);
   6170         mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
   6171         reply.readException();
   6172         boolean res = reply.readInt() != 0;
   6173         data.recycle();
   6174         reply.recycle();
   6175         return res;
   6176     }
   6177 
   6178     public void reportAssistContextExtras(IBinder token, Bundle extras, AssistStructure structure,
   6179             AssistContent content, Uri referrer) throws RemoteException {
   6180         Parcel data = Parcel.obtain();
   6181         Parcel reply = Parcel.obtain();
   6182         data.writeInterfaceToken(IActivityManager.descriptor);
   6183         data.writeStrongBinder(token);
   6184         data.writeBundle(extras);
   6185         structure.writeToParcel(data, 0);
   6186         content.writeToParcel(data, 0);
   6187         if (referrer != null) {
   6188             data.writeInt(1);
   6189             referrer.writeToParcel(data, 0);
   6190         } else {
   6191             data.writeInt(0);
   6192         }
   6193         mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
   6194         reply.readException();
   6195         data.recycle();
   6196         reply.recycle();
   6197     }
   6198 
   6199     public boolean launchAssistIntent(Intent intent, int requestType, String hint, int userHandle,
   6200             Bundle args) throws RemoteException {
   6201         Parcel data = Parcel.obtain();
   6202         Parcel reply = Parcel.obtain();
   6203         data.writeInterfaceToken(IActivityManager.descriptor);
   6204         intent.writeToParcel(data, 0);
   6205         data.writeInt(requestType);
   6206         data.writeString(hint);
   6207         data.writeInt(userHandle);
   6208         data.writeBundle(args);
   6209         mRemote.transact(LAUNCH_ASSIST_INTENT_TRANSACTION, data, reply, 0);
   6210         reply.readException();
   6211         boolean res = reply.readInt() != 0;
   6212         data.recycle();
   6213         reply.recycle();
   6214         return res;
   6215     }
   6216 
   6217     public boolean isAssistDataAllowedOnCurrentActivity() throws RemoteException {
   6218         Parcel data = Parcel.obtain();
   6219         Parcel reply = Parcel.obtain();
   6220         data.writeInterfaceToken(IActivityManager.descriptor);
   6221         mRemote.transact(IS_SCREEN_CAPTURE_ALLOWED_ON_CURRENT_ACTIVITY_TRANSACTION, data, reply, 0);
   6222         reply.readException();
   6223         boolean res = reply.readInt() != 0;
   6224         data.recycle();
   6225         reply.recycle();
   6226         return res;
   6227     }
   6228 
   6229     public boolean showAssistFromActivity(IBinder token, Bundle args) throws RemoteException {
   6230         Parcel data = Parcel.obtain();
   6231         Parcel reply = Parcel.obtain();
   6232         data.writeInterfaceToken(IActivityManager.descriptor);
   6233         data.writeStrongBinder(token);
   6234         data.writeBundle(args);
   6235         mRemote.transact(SHOW_ASSIST_FROM_ACTIVITY_TRANSACTION, data, reply, 0);
   6236         reply.readException();
   6237         boolean res = reply.readInt() != 0;
   6238         data.recycle();
   6239         reply.recycle();
   6240         return res;
   6241     }
   6242 
   6243     public void killUid(int appId, int userId, String reason) throws RemoteException {
   6244         Parcel data = Parcel.obtain();
   6245         Parcel reply = Parcel.obtain();
   6246         data.writeInterfaceToken(IActivityManager.descriptor);
   6247         data.writeInt(appId);
   6248         data.writeInt(userId);
   6249         data.writeString(reason);
   6250         mRemote.transact(KILL_UID_TRANSACTION, data, reply, 0);
   6251         reply.readException();
   6252         data.recycle();
   6253         reply.recycle();
   6254     }
   6255 
   6256     public void hang(IBinder who, boolean allowRestart) throws RemoteException {
   6257         Parcel data = Parcel.obtain();
   6258         Parcel reply = Parcel.obtain();
   6259         data.writeInterfaceToken(IActivityManager.descriptor);
   6260         data.writeStrongBinder(who);
   6261         data.writeInt(allowRestart ? 1 : 0);
   6262         mRemote.transact(HANG_TRANSACTION, data, reply, 0);
   6263         reply.readException();
   6264         data.recycle();
   6265         reply.recycle();
   6266     }
   6267 
   6268     public void reportActivityFullyDrawn(IBinder token) throws RemoteException {
   6269         Parcel data = Parcel.obtain();
   6270         Parcel reply = Parcel.obtain();
   6271         data.writeInterfaceToken(IActivityManager.descriptor);
   6272         data.writeStrongBinder(token);
   6273         mRemote.transact(REPORT_ACTIVITY_FULLY_DRAWN_TRANSACTION, data, reply, 0);
   6274         reply.readException();
   6275         data.recycle();
   6276         reply.recycle();
   6277     }
   6278 
   6279     public void notifyActivityDrawn(IBinder token) throws RemoteException {
   6280         Parcel data = Parcel.obtain();
   6281         Parcel reply = Parcel.obtain();
   6282         data.writeInterfaceToken(IActivityManager.descriptor);
   6283         data.writeStrongBinder(token);
   6284         mRemote.transact(NOTIFY_ACTIVITY_DRAWN_TRANSACTION, data, reply, 0);
   6285         reply.readException();
   6286         data.recycle();
   6287         reply.recycle();
   6288     }
   6289 
   6290     public void restart() throws RemoteException {
   6291         Parcel data = Parcel.obtain();
   6292         Parcel reply = Parcel.obtain();
   6293         data.writeInterfaceToken(IActivityManager.descriptor);
   6294         mRemote.transact(RESTART_TRANSACTION, data, reply, 0);
   6295         reply.readException();
   6296         data.recycle();
   6297         reply.recycle();
   6298     }
   6299 
   6300     public void performIdleMaintenance() throws RemoteException {
   6301         Parcel data = Parcel.obtain();
   6302         Parcel reply = Parcel.obtain();
   6303         data.writeInterfaceToken(IActivityManager.descriptor);
   6304         mRemote.transact(PERFORM_IDLE_MAINTENANCE_TRANSACTION, data, reply, 0);
   6305         reply.readException();
   6306         data.recycle();
   6307         reply.recycle();
   6308     }
   6309 
   6310     public void sendIdleJobTrigger() throws RemoteException {
   6311         Parcel data = Parcel.obtain();
   6312         Parcel reply = Parcel.obtain();
   6313         data.writeInterfaceToken(IActivityManager.descriptor);
   6314         mRemote.transact(SEND_IDLE_JOB_TRIGGER_TRANSACTION, data, reply, 0);
   6315         reply.readException();
   6316         data.recycle();
   6317         reply.recycle();
   6318     }
   6319 
   6320     public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
   6321             IActivityContainerCallback callback) throws RemoteException {
   6322         Parcel data = Parcel.obtain();
   6323         Parcel reply = Parcel.obtain();
   6324         data.writeInterfaceToken(IActivityManager.descriptor);
   6325         data.writeStrongBinder(parentActivityToken);
   6326         data.writeStrongBinder(callback == null ? null : callback.asBinder());
   6327         mRemote.transact(CREATE_VIRTUAL_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
   6328         reply.readException();
   6329         final int result = reply.readInt();
   6330         final IActivityContainer res;
   6331         if (result == 1) {
   6332             res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
   6333         } else {
   6334             res = null;
   6335         }
   6336         data.recycle();
   6337         reply.recycle();
   6338         return res;
   6339     }
   6340 
   6341     public void deleteActivityContainer(IActivityContainer activityContainer)
   6342             throws RemoteException {
   6343         Parcel data = Parcel.obtain();
   6344         Parcel reply = Parcel.obtain();
   6345         data.writeInterfaceToken(IActivityManager.descriptor);
   6346         data.writeStrongBinder(activityContainer.asBinder());
   6347         mRemote.transact(DELETE_ACTIVITY_CONTAINER_TRANSACTION, data, reply, 0);
   6348         reply.readException();
   6349         data.recycle();
   6350         reply.recycle();
   6351     }
   6352 
   6353     public boolean startBinderTracking() throws RemoteException {
   6354         Parcel data = Parcel.obtain();
   6355         Parcel reply = Parcel.obtain();
   6356         data.writeInterfaceToken(IActivityManager.descriptor);
   6357         mRemote.transact(START_BINDER_TRACKING_TRANSACTION, data, reply, 0);
   6358         reply.readException();
   6359         boolean res = reply.readInt() != 0;
   6360         reply.recycle();
   6361         data.recycle();
   6362         return res;
   6363     }
   6364 
   6365     public boolean stopBinderTrackingAndDump(ParcelFileDescriptor fd) throws RemoteException {
   6366         Parcel data = Parcel.obtain();
   6367         Parcel reply = Parcel.obtain();
   6368         data.writeInterfaceToken(IActivityManager.descriptor);
   6369         if (fd != null) {
   6370             data.writeInt(1);
   6371             fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
   6372         } else {
   6373             data.writeInt(0);
   6374         }
   6375         mRemote.transact(STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION, data, reply, 0);
   6376         reply.readException();
   6377         boolean res = reply.readInt() != 0;
   6378         reply.recycle();
   6379         data.recycle();
   6380         return res;
   6381     }
   6382 
   6383     public int setVrMode(IBinder token, boolean enabled, ComponentName packageName)
   6384             throws RemoteException {
   6385         Parcel data = Parcel.obtain();
   6386         Parcel reply = Parcel.obtain();
   6387         data.writeInterfaceToken(IActivityManager.descriptor);
   6388         data.writeStrongBinder(token);
   6389         data.writeInt(enabled ? 1 : 0);
   6390         packageName.writeToParcel(data, 0);
   6391         mRemote.transact(SET_VR_MODE_TRANSACTION, data, reply, 0);
   6392         reply.readException();
   6393         int res = reply.readInt();
   6394         data.recycle();
   6395         reply.recycle();
   6396         return res;
   6397     }
   6398 
   6399     public boolean isVrModePackageEnabled(ComponentName packageName)
   6400             throws RemoteException {
   6401         Parcel data = Parcel.obtain();
   6402         Parcel reply = Parcel.obtain();
   6403         data.writeInterfaceToken(IActivityManager.descriptor);
   6404         packageName.writeToParcel(data, 0);
   6405         mRemote.transact(IS_VR_PACKAGE_ENABLED_TRANSACTION, data, reply, 0);
   6406         reply.readException();
   6407         int res = reply.readInt();
   6408         data.recycle();
   6409         reply.recycle();
   6410         return res == 1;
   6411     }
   6412 
   6413     @Override
   6414     public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException {
   6415         Parcel data = Parcel.obtain();
   6416         Parcel reply = Parcel.obtain();
   6417         data.writeInterfaceToken(IActivityManager.descriptor);
   6418         data.writeInt(displayId);
   6419         mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0);
   6420         reply.readException();
   6421         final int result = reply.readInt();
   6422         final IActivityContainer res;
   6423         if (result == 1) {
   6424             res = IActivityContainer.Stub.asInterface(reply.readStrongBinder());
   6425         } else {
   6426             res = null;
   6427         }
   6428         data.recycle();
   6429         reply.recycle();
   6430         return res;
   6431     }
   6432 
   6433     @Override
   6434     public int getActivityDisplayId(IBinder activityToken)
   6435             throws RemoteException {
   6436         Parcel data = Parcel.obtain();
   6437         Parcel reply = Parcel.obtain();
   6438         data.writeInterfaceToken(IActivityManager.descriptor);
   6439         data.writeStrongBinder(activityToken);
   6440         mRemote.transact(GET_ACTIVITY_DISPLAY_ID_TRANSACTION, data, reply, 0);
   6441         reply.readException();
   6442         final int displayId = reply.readInt();
   6443         data.recycle();
   6444         reply.recycle();
   6445         return displayId;
   6446     }
   6447 
   6448     @Override
   6449     public void startLockTaskMode(int taskId) throws RemoteException {
   6450         Parcel data = Parcel.obtain();
   6451         Parcel reply = Parcel.obtain();
   6452         data.writeInterfaceToken(IActivityManager.descriptor);
   6453         data.writeInt(taskId);
   6454         mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
   6455         reply.readException();
   6456         data.recycle();
   6457         reply.recycle();
   6458     }
   6459 
   6460     @Override
   6461     public void startLockTaskMode(IBinder token) throws RemoteException {
   6462         Parcel data = Parcel.obtain();
   6463         Parcel reply = Parcel.obtain();
   6464         data.writeInterfaceToken(IActivityManager.descriptor);
   6465         data.writeStrongBinder(token);
   6466         mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
   6467         reply.readException();
   6468         data.recycle();
   6469         reply.recycle();
   6470     }
   6471 
   6472     @Override
   6473     public void startSystemLockTaskMode(int taskId) throws RemoteException {
   6474         Parcel data = Parcel.obtain();
   6475         Parcel reply = Parcel.obtain();
   6476         data.writeInterfaceToken(IActivityManager.descriptor);
   6477         data.writeInt(taskId);
   6478         mRemote.transact(START_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
   6479         reply.readException();
   6480         data.recycle();
   6481         reply.recycle();
   6482     }
   6483 
   6484     @Override
   6485     public void stopLockTaskMode() throws RemoteException {
   6486         Parcel data = Parcel.obtain();
   6487         Parcel reply = Parcel.obtain();
   6488         data.writeInterfaceToken(IActivityManager.descriptor);
   6489         mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
   6490         reply.readException();
   6491         data.recycle();
   6492         reply.recycle();
   6493     }
   6494 
   6495     @Override
   6496     public void stopSystemLockTaskMode() throws RemoteException {
   6497         Parcel data = Parcel.obtain();
   6498         Parcel reply = Parcel.obtain();
   6499         data.writeInterfaceToken(IActivityManager.descriptor);
   6500         mRemote.transact(STOP_SYSTEM_LOCK_TASK_TRANSACTION, data, reply, 0);
   6501         reply.readException();
   6502         data.recycle();
   6503         reply.recycle();
   6504     }
   6505 
   6506     @Override
   6507     public boolean isInLockTaskMode() throws RemoteException {
   6508         Parcel data = Parcel.obtain();
   6509         Parcel reply = Parcel.obtain();
   6510         data.writeInterfaceToken(IActivityManager.descriptor);
   6511         mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
   6512         reply.readException();
   6513         boolean isInLockTaskMode = reply.readInt() == 1;
   6514         data.recycle();
   6515         reply.recycle();
   6516         return isInLockTaskMode;
   6517     }
   6518 
   6519     @Override
   6520     public int getLockTaskModeState() throws RemoteException {
   6521         Parcel data = Parcel.obtain();
   6522         Parcel reply = Parcel.obtain();
   6523         data.writeInterfaceToken(IActivityManager.descriptor);
   6524         mRemote.transact(GET_LOCK_TASK_MODE_STATE_TRANSACTION, data, reply, 0);
   6525         reply.readException();
   6526         int lockTaskModeState = reply.readInt();
   6527         data.recycle();
   6528         reply.recycle();
   6529         return lockTaskModeState;
   6530     }
   6531 
   6532     @Override
   6533     public void showLockTaskEscapeMessage(IBinder token) throws RemoteException {
   6534         Parcel data = Parcel.obtain();
   6535         Parcel reply = Parcel.obtain();
   6536         data.writeInterfaceToken(IActivityManager.descriptor);
   6537         data.writeStrongBinder(token);
   6538         mRemote.transact(SHOW_LOCK_TASK_ESCAPE_MESSAGE_TRANSACTION, data, reply,
   6539                 IBinder.FLAG_ONEWAY);
   6540         reply.readException();
   6541         data.recycle();
   6542         reply.recycle();
   6543     }
   6544 
   6545     @Override
   6546     public void setTaskDescription(IBinder token, ActivityManager.TaskDescription values)
   6547             throws RemoteException {
   6548         Parcel data = Parcel.obtain();
   6549         Parcel reply = Parcel.obtain();
   6550         data.writeInterfaceToken(IActivityManager.descriptor);
   6551         data.writeStrongBinder(token);
   6552         values.writeToParcel(data, 0);
   6553         mRemote.transact(SET_TASK_DESCRIPTION_TRANSACTION, data, reply, 0);
   6554         reply.readException();
   6555         data.recycle();
   6556         reply.recycle();
   6557     }
   6558 
   6559     @Override
   6560     public void setTaskResizeable(int taskId, int resizeableMode) throws  RemoteException {
   6561         Parcel data = Parcel.obtain();
   6562         Parcel reply = Parcel.obtain();
   6563         data.writeInterfaceToken(IActivityManager.descriptor);
   6564         data.writeInt(taskId);
   6565         data.writeInt(resizeableMode);
   6566         mRemote.transact(SET_TASK_RESIZEABLE_TRANSACTION, data, reply, 0);
   6567         reply.readException();
   6568         data.recycle();
   6569         reply.recycle();
   6570     }
   6571 
   6572     @Override
   6573     public void resizeTask(int taskId, Rect r, int resizeMode) throws RemoteException
   6574     {
   6575         Parcel data = Parcel.obtain();
   6576         Parcel reply = Parcel.obtain();
   6577         data.writeInterfaceToken(IActivityManager.descriptor);
   6578         data.writeInt(taskId);
   6579         data.writeInt(resizeMode);
   6580         r.writeToParcel(data, 0);
   6581         mRemote.transact(RESIZE_TASK_TRANSACTION, data, reply, 0);
   6582         reply.readException();
   6583         data.recycle();
   6584         reply.recycle();
   6585     }
   6586 
   6587     @Override
   6588     public Rect getTaskBounds(int taskId) throws RemoteException
   6589     {
   6590         Parcel data = Parcel.obtain();
   6591         Parcel reply = Parcel.obtain();
   6592         data.writeInterfaceToken(IActivityManager.descriptor);
   6593         data.writeInt(taskId);
   6594         mRemote.transact(GET_TASK_BOUNDS_TRANSACTION, data, reply, 0);
   6595         reply.readException();
   6596         Rect rect = Rect.CREATOR.createFromParcel(reply);
   6597         data.recycle();
   6598         reply.recycle();
   6599         return rect;
   6600     }
   6601 
   6602     @Override
   6603     public Bitmap getTaskDescriptionIcon(String filename, int userId) throws RemoteException {
   6604         Parcel data = Parcel.obtain();
   6605         Parcel reply = Parcel.obtain();
   6606         data.writeInterfaceToken(IActivityManager.descriptor);
   6607         data.writeString(filename);
   6608         data.writeInt(userId);
   6609         mRemote.transact(GET_TASK_DESCRIPTION_ICON_TRANSACTION, data, reply, 0);
   6610         reply.readException();
   6611         final Bitmap icon = reply.readInt() == 0 ? null : Bitmap.CREATOR.createFromParcel(reply);
   6612         data.recycle();
   6613         reply.recycle();
   6614         return icon;
   6615     }
   6616 
   6617     @Override
   6618     public void startInPlaceAnimationOnFrontMostApplication(ActivityOptions options)
   6619             throws RemoteException {
   6620         Parcel data = Parcel.obtain();
   6621         Parcel reply = Parcel.obtain();
   6622         data.writeInterfaceToken(IActivityManager.descriptor);
   6623         if (options == null) {
   6624             data.writeInt(0);
   6625         } else {
   6626             data.writeInt(1);
   6627             data.writeBundle(options.toBundle());
   6628         }
   6629         mRemote.transact(START_IN_PLACE_ANIMATION_TRANSACTION, data, reply, 0);
   6630         reply.readException();
   6631         data.recycle();
   6632         reply.recycle();
   6633     }
   6634 
   6635     @Override
   6636     public boolean requestVisibleBehind(IBinder token, boolean visible) throws RemoteException {
   6637         Parcel data = Parcel.obtain();
   6638         Parcel reply = Parcel.obtain();
   6639         data.writeInterfaceToken(IActivityManager.descriptor);
   6640         data.writeStrongBinder(token);
   6641         data.writeInt(visible ? 1 : 0);
   6642         mRemote.transact(REQUEST_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
   6643         reply.readException();
   6644         boolean success = reply.readInt() > 0;
   6645         data.recycle();
   6646         reply.recycle();
   6647         return success;
   6648     }
   6649 
   6650     @Override
   6651     public boolean isBackgroundVisibleBehind(IBinder token) throws RemoteException {
   6652         Parcel data = Parcel.obtain();
   6653         Parcel reply = Parcel.obtain();
   6654         data.writeInterfaceToken(IActivityManager.descriptor);
   6655         data.writeStrongBinder(token);
   6656         mRemote.transact(IS_BACKGROUND_VISIBLE_BEHIND_TRANSACTION, data, reply, 0);
   6657         reply.readException();
   6658         final boolean visible = reply.readInt() > 0;
   6659         data.recycle();
   6660         reply.recycle();
   6661         return visible;
   6662     }
   6663 
   6664     @Override
   6665     public void backgroundResourcesReleased(IBinder token) throws RemoteException {
   6666         Parcel data = Parcel.obtain();
   6667         Parcel reply = Parcel.obtain();
   6668         data.writeInterfaceToken(IActivityManager.descriptor);
   6669         data.writeStrongBinder(token);
   6670         mRemote.transact(BACKGROUND_RESOURCES_RELEASED_TRANSACTION, data, reply, 0);
   6671         reply.readException();
   6672         data.recycle();
   6673         reply.recycle();
   6674     }
   6675 
   6676     @Override
   6677     public void notifyLaunchTaskBehindComplete(IBinder token) throws RemoteException {
   6678         Parcel data = Parcel.obtain();
   6679         Parcel reply = Parcel.obtain();
   6680         data.writeInterfaceToken(IActivityManager.descriptor);
   6681         data.writeStrongBinder(token);
   6682         mRemote.transact(NOTIFY_LAUNCH_TASK_BEHIND_COMPLETE_TRANSACTION, data, reply, 0);
   6683         reply.readException();
   6684         data.recycle();
   6685         reply.recycle();
   6686     }
   6687 
   6688     @Override
   6689     public void notifyEnterAnimationComplete(IBinder token) throws RemoteException {
   6690         Parcel data = Parcel.obtain();
   6691         Parcel reply = Parcel.obtain();
   6692         data.writeInterfaceToken(IActivityManager.descriptor);
   6693         data.writeStrongBinder(token);
   6694         mRemote.transact(NOTIFY_ENTER_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
   6695         reply.readException();
   6696         data.recycle();
   6697         reply.recycle();
   6698     }
   6699 
   6700     @Override
   6701     public void bootAnimationComplete() throws RemoteException {
   6702         Parcel data = Parcel.obtain();
   6703         Parcel reply = Parcel.obtain();
   6704         data.writeInterfaceToken(IActivityManager.descriptor);
   6705         mRemote.transact(BOOT_ANIMATION_COMPLETE_TRANSACTION, data, reply, 0);
   6706         reply.readException();
   6707         data.recycle();
   6708         reply.recycle();
   6709     }
   6710 
   6711     @Override
   6712     public void notifyCleartextNetwork(int uid, byte[] firstPacket) throws RemoteException {
   6713         Parcel data = Parcel.obtain();
   6714         Parcel reply = Parcel.obtain();
   6715         data.writeInterfaceToken(IActivityManager.descriptor);
   6716         data.writeInt(uid);
   6717         data.writeByteArray(firstPacket);
   6718         mRemote.transact(NOTIFY_CLEARTEXT_NETWORK_TRANSACTION, data, reply, 0);
   6719         reply.readException();
   6720         data.recycle();
   6721         reply.recycle();
   6722     }
   6723 
   6724     @Override
   6725     public void setDumpHeapDebugLimit(String processName, int uid, long maxMemSize,
   6726             String reportPackage) throws RemoteException {
   6727         Parcel data = Parcel.obtain();
   6728         Parcel reply = Parcel.obtain();
   6729         data.writeInterfaceToken(IActivityManager.descriptor);
   6730         data.writeString(processName);
   6731         data.writeInt(uid);
   6732         data.writeLong(maxMemSize);
   6733         data.writeString(reportPackage);
   6734         mRemote.transact(SET_DUMP_HEAP_DEBUG_LIMIT_TRANSACTION, data, reply, 0);
   6735         reply.readException();
   6736         data.recycle();
   6737         reply.recycle();
   6738     }
   6739 
   6740     @Override
   6741     public void dumpHeapFinished(String path) throws RemoteException {
   6742         Parcel data = Parcel.obtain();
   6743         Parcel reply = Parcel.obtain();
   6744         data.writeInterfaceToken(IActivityManager.descriptor);
   6745         data.writeString(path);
   6746         mRemote.transact(DUMP_HEAP_FINISHED_TRANSACTION, data, reply, 0);
   6747         reply.readException();
   6748         data.recycle();
   6749         reply.recycle();
   6750     }
   6751 
   6752     @Override
   6753     public void setVoiceKeepAwake(IVoiceInteractionSession session, boolean keepAwake)
   6754             throws RemoteException {
   6755         Parcel data = Parcel.obtain();
   6756         Parcel reply = Parcel.obtain();
   6757         data.writeInterfaceToken(IActivityManager.descriptor);
   6758         data.writeStrongBinder(session.asBinder());
   6759         data.writeInt(keepAwake ? 1 : 0);
   6760         mRemote.transact(SET_VOICE_KEEP_AWAKE_TRANSACTION, data, reply, 0);
   6761         reply.readException();
   6762         data.recycle();
   6763         reply.recycle();
   6764     }
   6765 
   6766     @Override
   6767     public void updateLockTaskPackages(int userId, String[] packages) throws RemoteException {
   6768         Parcel data = Parcel.obtain();
   6769         Parcel reply = Parcel.obtain();
   6770         data.writeInterfaceToken(IActivityManager.descriptor);
   6771         data.writeInt(userId);
   6772         data.writeStringArray(packages);
   6773         mRemote.transact(UPDATE_LOCK_TASK_PACKAGES_TRANSACTION, data, reply, 0);
   6774         reply.readException();
   6775         data.recycle();
   6776         reply.recycle();
   6777     }
   6778 
   6779     @Override
   6780     public void updateDeviceOwner(String packageName) throws RemoteException {
   6781         Parcel data = Parcel.obtain();
   6782         Parcel reply = Parcel.obtain();
   6783         data.writeInterfaceToken(IActivityManager.descriptor);
   6784         data.writeString(packageName);
   6785         mRemote.transact(UPDATE_DEVICE_OWNER_TRANSACTION, data, reply, 0);
   6786         reply.readException();
   6787         data.recycle();
   6788         reply.recycle();
   6789     }
   6790 
   6791     @Override
   6792     public int getPackageProcessState(String packageName, String callingPackage)
   6793             throws RemoteException {
   6794         Parcel data = Parcel.obtain();
   6795         Parcel reply = Parcel.obtain();
   6796         data.writeInterfaceToken(IActivityManager.descriptor);
   6797         data.writeString(packageName);
   6798         data.writeString(callingPackage);
   6799         mRemote.transact(GET_PACKAGE_PROCESS_STATE_TRANSACTION, data, reply, 0);
   6800         reply.readException();
   6801         int res = reply.readInt();
   6802         data.recycle();
   6803         reply.recycle();
   6804         return res;
   6805     }
   6806 
   6807     @Override
   6808     public boolean setProcessMemoryTrimLevel(String process, int userId, int level)
   6809             throws RemoteException {
   6810         Parcel data = Parcel.obtain();
   6811         Parcel reply = Parcel.obtain();
   6812         data.writeInterfaceToken(IActivityManager.descriptor);
   6813         data.writeString(process);
   6814         data.writeInt(userId);
   6815         data.writeInt(level);
   6816         mRemote.transact(SET_PROCESS_MEMORY_TRIM_TRANSACTION, data, reply, 0);
   6817         reply.readException();
   6818         int res = reply.readInt();
   6819         data.recycle();
   6820         reply.recycle();
   6821         return res != 0;
   6822     }
   6823 
   6824     @Override
   6825     public boolean isRootVoiceInteraction(IBinder token) throws RemoteException {
   6826         Parcel data = Parcel.obtain();
   6827         Parcel reply = Parcel.obtain();
   6828         data.writeInterfaceToken(IActivityManager.descriptor);
   6829         data.writeStrongBinder(token);
   6830         mRemote.transact(IS_ROOT_VOICE_INTERACTION_TRANSACTION, data, reply, 0);
   6831         reply.readException();
   6832         int res = reply.readInt();
   6833         data.recycle();
   6834         reply.recycle();
   6835         return res != 0;
   6836     }
   6837 
   6838     @Override
   6839     public void exitFreeformMode(IBinder token) throws RemoteException {
   6840         Parcel data = Parcel.obtain();
   6841         Parcel reply = Parcel.obtain();
   6842         data.writeInterfaceToken(IActivityManager.descriptor);
   6843         data.writeStrongBinder(token);
   6844         mRemote.transact(EXIT_FREEFORM_MODE_TRANSACTION, data, reply, 0);
   6845         reply.readException();
   6846         data.recycle();
   6847         reply.recycle();
   6848     }
   6849 
   6850     @Override
   6851     public int getActivityStackId(IBinder token) throws RemoteException {
   6852         Parcel data = Parcel.obtain();
   6853         Parcel reply = Parcel.obtain();
   6854         data.writeInterfaceToken(IActivityManager.descriptor);
   6855         data.writeStrongBinder(token);
   6856         mRemote.transact(GET_ACTIVITY_STACK_ID_TRANSACTION, data, reply, 0);
   6857         reply.readException();
   6858         int stackId = reply.readInt();
   6859         data.recycle();
   6860         reply.recycle();
   6861         return stackId;
   6862     }
   6863 
   6864     @Override
   6865     public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
   6866             int[] verticalSizeConfigurations, int[] smallestSizeConfigurations)
   6867             throws RemoteException {
   6868         Parcel data = Parcel.obtain();
   6869         Parcel reply = Parcel.obtain();
   6870         data.writeInterfaceToken(IActivityManager.descriptor);
   6871         data.writeStrongBinder(token);
   6872         writeIntArray(horizontalSizeConfiguration, data);
   6873         writeIntArray(verticalSizeConfigurations, data);
   6874         writeIntArray(smallestSizeConfigurations, data);
   6875         mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
   6876         reply.readException();
   6877         data.recycle();
   6878         reply.recycle();
   6879     }
   6880 
   6881     private static void writeIntArray(int[] array, Parcel data) {
   6882         if (array == null) {
   6883             data.writeInt(0);
   6884         } else {
   6885             data.writeInt(array.length);
   6886             data.writeIntArray(array);
   6887         }
   6888     }
   6889 
   6890     @Override
   6891     public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
   6892         Parcel data = Parcel.obtain();
   6893         Parcel reply = Parcel.obtain();
   6894         data.writeInterfaceToken(IActivityManager.descriptor);
   6895         data.writeInt(suppress ? 1 : 0);
   6896         mRemote.transact(SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION, data, reply, 0);
   6897         reply.readException();
   6898         data.recycle();
   6899         reply.recycle();
   6900     }
   6901 
   6902     @Override
   6903     public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException {
   6904         Parcel data = Parcel.obtain();
   6905         Parcel reply = Parcel.obtain();
   6906         data.writeInterfaceToken(IActivityManager.descriptor);
   6907         data.writeInt(fromStackId);
   6908         data.writeInt(onTop ? 1 : 0);
   6909         mRemote.transact(MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION, data, reply, 0);
   6910         reply.readException();
   6911         data.recycle();
   6912         reply.recycle();
   6913     }
   6914 
   6915     @Override
   6916     public int getAppStartMode(int uid, String packageName) throws RemoteException {
   6917         Parcel data = Parcel.obtain();
   6918         Parcel reply = Parcel.obtain();
   6919         data.writeInterfaceToken(IActivityManager.descriptor);
   6920         data.writeInt(uid);
   6921         data.writeString(packageName);
   6922         mRemote.transact(GET_APP_START_MODE_TRANSACTION, data, reply, 0);
   6923         reply.readException();
   6924         int res = reply.readInt();
   6925         data.recycle();
   6926         reply.recycle();
   6927         return res;
   6928     }
   6929 
   6930     @Override
   6931     public boolean isInMultiWindowMode(IBinder token) throws RemoteException {
   6932         Parcel data = Parcel.obtain();
   6933         Parcel reply = Parcel.obtain();
   6934         data.writeInterfaceToken(IActivityManager.descriptor);
   6935         data.writeStrongBinder(token);
   6936         mRemote.transact(IN_MULTI_WINDOW_TRANSACTION, data, reply, 0);
   6937         reply.readException();
   6938         final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
   6939         data.recycle();
   6940         reply.recycle();
   6941         return multiWindowMode;
   6942     }
   6943 
   6944     @Override
   6945     public boolean isInPictureInPictureMode(IBinder token) throws RemoteException {
   6946         Parcel data = Parcel.obtain();
   6947         Parcel reply = Parcel.obtain();
   6948         data.writeInterfaceToken(IActivityManager.descriptor);
   6949         data.writeStrongBinder(token);
   6950         mRemote.transact(IN_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
   6951         reply.readException();
   6952         final boolean pipMode = reply.readInt() == 1 ? true : false;
   6953         data.recycle();
   6954         reply.recycle();
   6955         return pipMode;
   6956     }
   6957 
   6958     @Override
   6959     public void enterPictureInPictureMode(IBinder token) throws RemoteException {
   6960         Parcel data = Parcel.obtain();
   6961         Parcel reply = Parcel.obtain();
   6962         data.writeInterfaceToken(IActivityManager.descriptor);
   6963         data.writeStrongBinder(token);
   6964         mRemote.transact(ENTER_PICTURE_IN_PICTURE_TRANSACTION, data, reply, 0);
   6965         reply.readException();
   6966         data.recycle();
   6967         reply.recycle();
   6968     }
   6969 
   6970     @Override
   6971     public boolean isAppForeground(int uid) throws RemoteException {
   6972         Parcel data = Parcel.obtain();
   6973         Parcel reply = Parcel.obtain();
   6974         data.writeInterfaceToken(IActivityManager.descriptor);
   6975         data.writeInt(uid);
   6976         mRemote.transact(IS_APP_FOREGROUND_TRANSACTION, data, reply, 0);
   6977         final boolean isForeground = reply.readInt() == 1 ? true : false;
   6978         data.recycle();
   6979         reply.recycle();
   6980         return isForeground;
   6981     };
   6982 
   6983     @Override
   6984     public void notifyPinnedStackAnimationEnded() throws RemoteException {
   6985         Parcel data = Parcel.obtain();
   6986         Parcel reply = Parcel.obtain();
   6987         data.writeInterfaceToken(IActivityManager.descriptor);
   6988         mRemote.transact(NOTIFY_PINNED_STACK_ANIMATION_ENDED_TRANSACTION, data, reply, 0);
   6989         data.recycle();
   6990         reply.recycle();
   6991     };
   6992 
   6993     @Override
   6994     public void removeStack(int stackId) throws RemoteException {
   6995         Parcel data = Parcel.obtain();
   6996         Parcel reply = Parcel.obtain();
   6997         data.writeInterfaceToken(IActivityManager.descriptor);
   6998         data.writeInt(stackId);
   6999         mRemote.transact(REMOVE_STACK, data, reply, 0);
   7000         reply.readException();
   7001         data.recycle();
   7002         reply.recycle();
   7003     }
   7004 
   7005     @Override
   7006     public void notifyLockedProfile(@UserIdInt int userId) throws RemoteException {
   7007         Parcel data = Parcel.obtain();
   7008         Parcel reply = Parcel.obtain();
   7009         data.writeInterfaceToken(IActivityManager.descriptor);
   7010         data.writeInt(userId);
   7011         mRemote.transact(NOTIFY_LOCKED_PROFILE, data, reply, 0);
   7012         reply.readException();
   7013         data.recycle();
   7014         reply.recycle();
   7015     }
   7016 
   7017     @Override
   7018     public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException {
   7019         Parcel data = Parcel.obtain();
   7020         Parcel reply = Parcel.obtain();
   7021         data.writeInterfaceToken(IActivityManager.descriptor);
   7022         intent.writeToParcel(data, 0);
   7023         mRemote.transact(START_CONFIRM_DEVICE_CREDENTIAL_INTENT, data, reply, 0);
   7024         reply.readException();
   7025         data.recycle();
   7026         reply.recycle();
   7027     }
   7028 
   7029     @Override
   7030     public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
   7031             IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
   7032             throws RemoteException {
   7033         Parcel data = Parcel.obtain();
   7034         Parcel reply = Parcel.obtain();
   7035         data.writeInterfaceToken(IActivityManager.descriptor);
   7036         data.writeStrongBinder(target.asBinder());
   7037         data.writeInt(code);
   7038         if ((intent!=null)) {
   7039             data.writeInt(1);
   7040             intent.writeToParcel(data, 0);
   7041         }
   7042         else {
   7043             data.writeInt(0);
   7044         }
   7045         data.writeString(resolvedType);
   7046         data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
   7047         data.writeString(requiredPermission);
   7048         if ((options!=null)) {
   7049             data.writeInt(1);
   7050             options.writeToParcel(data, 0);
   7051         }
   7052         else {
   7053             data.writeInt(0);
   7054         }
   7055         mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
   7056         reply.readException();
   7057         final int res = reply.readInt();
   7058         data.recycle();
   7059         reply.recycle();
   7060         return res;
   7061     }
   7062 
   7063     @Override
   7064     public void setVrThread(int tid)
   7065         throws RemoteException {
   7066         Parcel data = Parcel.obtain();
   7067         Parcel reply = Parcel.obtain();
   7068         data.writeInterfaceToken(IActivityManager.descriptor);
   7069         data.writeInt(tid);
   7070         mRemote.transact(SET_VR_THREAD_TRANSACTION, data, reply, 0);
   7071         reply.readException();
   7072         data.recycle();
   7073         reply.recycle();
   7074         return;
   7075     }
   7076 
   7077     public void setRenderThread(int tid)
   7078         throws RemoteException {
   7079         Parcel data = Parcel.obtain();
   7080         Parcel reply = Parcel.obtain();
   7081         data.writeInterfaceToken(IActivityManager.descriptor);
   7082         data.writeInt(tid);
   7083         mRemote.transact(SET_RENDER_THREAD_TRANSACTION, data, reply, 0);
   7084         reply.readException();
   7085         data.recycle();
   7086         reply.recycle();
   7087         return;
   7088     }
   7089 
   7090     public void setHasTopUi(boolean hasTopUi)
   7091             throws RemoteException {
   7092         Parcel data = Parcel.obtain();
   7093         Parcel reply = Parcel.obtain();
   7094         data.writeInterfaceToken(IActivityManager.descriptor);
   7095         data.writeInt(hasTopUi ? 1 : 0);
   7096         mRemote.transact(SET_HAS_TOP_UI, data, reply, 0);
   7097         reply.readException();
   7098         data.recycle();
   7099         reply.recycle();
   7100         return;
   7101     }
   7102     @Override
   7103     public boolean canBypassWorkChallenge(PendingIntent intent)
   7104             throws RemoteException {
   7105         Parcel data = Parcel.obtain();
   7106         Parcel reply = Parcel.obtain();
   7107         data.writeInterfaceToken(IActivityManager.descriptor);
   7108         intent.writeToParcel(data, 0);
   7109         mRemote.transact(CAN_BYPASS_WORK_CHALLENGE, data, reply, 0);
   7110         reply.readException();
   7111         final int result = reply.readInt();
   7112         data.recycle();
   7113         reply.recycle();
   7114         return result != 0;
   7115     }
   7116 
   7117     private IBinder mRemote;
   7118 }
   7119