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