blob: 16f0a300eecbc1474a11559659d4d6f64988edfc [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
17package android.app;
18
19import android.content.ComponentName;
20import android.content.ContentResolver;
21import android.content.Intent;
22import android.content.IntentFilter;
23import android.content.pm.ConfigurationInfo;
24import android.content.pm.IPackageDataObserver;
25import android.content.res.Configuration;
26import android.graphics.Bitmap;
27import android.net.Uri;
28import android.os.Binder;
29import android.os.Bundle;
30import android.os.Parcelable;
31import android.os.ParcelFileDescriptor;
32import android.os.RemoteException;
33import android.os.IBinder;
34import android.os.Parcel;
35import android.os.ServiceManager;
36import android.text.TextUtils;
37import android.util.Config;
38import android.util.Log;
39
40import java.io.FileNotFoundException;
41import java.io.FileDescriptor;
42import java.io.IOException;
43import java.util.ArrayList;
44import java.util.List;
45
46/** {@hide} */
47public abstract class ActivityManagerNative extends Binder implements IActivityManager
48{
49 /**
50 * Cast a Binder object into an activity manager interface, generating
51 * a proxy if needed.
52 */
53 static public IActivityManager asInterface(IBinder obj)
54 {
55 if (obj == null) {
56 return null;
57 }
58 IActivityManager in =
59 (IActivityManager)obj.queryLocalInterface(descriptor);
60 if (in != null) {
61 return in;
62 }
63
64 return new ActivityManagerProxy(obj);
65 }
66
67 /**
68 * Retrieve the system's default/global activity manager.
69 */
70 static public IActivityManager getDefault()
71 {
72 if (gDefault != null) {
73 //if (Config.LOGV) Log.v(
74 // "ActivityManager", "returning cur default = " + gDefault);
75 return gDefault;
76 }
77 IBinder b = ServiceManager.getService("activity");
78 if (Config.LOGV) Log.v(
79 "ActivityManager", "default service binder = " + b);
80 gDefault = asInterface(b);
81 if (Config.LOGV) Log.v(
82 "ActivityManager", "default service = " + gDefault);
83 return gDefault;
84 }
85
86 /**
87 * Convenience for checking whether the system is ready. For internal use only.
88 */
89 static public boolean isSystemReady() {
90 if (!sSystemReady) {
91 sSystemReady = getDefault().testIsSystemReady();
92 }
93 return sSystemReady;
94 }
95 static boolean sSystemReady = false;
96
97 /**
98 * Convenience for sending a sticky broadcast. For internal use only.
99 * If you don't care about permission, use null.
100 */
101 static public void broadcastStickyIntent(Intent intent, String permission)
102 {
103 try {
104 getDefault().broadcastIntent(
105 null, intent, null, null, Activity.RESULT_OK, null, null,
106 null /*permission*/, false, true);
107 } catch (RemoteException ex) {
108 }
109 }
110
111 static public void noteWakeupAlarm(PendingIntent ps) {
112 try {
113 getDefault().noteWakeupAlarm(ps.getTarget());
114 } catch (RemoteException ex) {
115 }
116 }
117
118 public ActivityManagerNative()
119 {
120 attachInterface(this, descriptor);
121 }
122
123 public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
124 throws RemoteException {
125 switch (code) {
126 case START_ACTIVITY_TRANSACTION:
127 {
128 data.enforceInterface(IActivityManager.descriptor);
129 IBinder b = data.readStrongBinder();
130 IApplicationThread app = ApplicationThreadNative.asInterface(b);
131 Intent intent = Intent.CREATOR.createFromParcel(data);
132 String resolvedType = data.readString();
133 Uri[] grantedUriPermissions = data.createTypedArray(Uri.CREATOR);
134 int grantedMode = data.readInt();
135 IBinder resultTo = data.readStrongBinder();
136 String resultWho = data.readString();
137 int requestCode = data.readInt();
138 boolean onlyIfNeeded = data.readInt() != 0;
139 boolean debug = data.readInt() != 0;
140 int result = startActivity(app, intent, resolvedType,
141 grantedUriPermissions, grantedMode, resultTo, resultWho,
142 requestCode, onlyIfNeeded, debug);
143 reply.writeNoException();
144 reply.writeInt(result);
145 return true;
146 }
147
148 case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
149 {
150 data.enforceInterface(IActivityManager.descriptor);
151 IBinder callingActivity = data.readStrongBinder();
152 Intent intent = Intent.CREATOR.createFromParcel(data);
153 boolean result = startNextMatchingActivity(callingActivity, intent);
154 reply.writeNoException();
155 reply.writeInt(result ? 1 : 0);
156 return true;
157 }
158
159 case FINISH_ACTIVITY_TRANSACTION: {
160 data.enforceInterface(IActivityManager.descriptor);
161 IBinder token = data.readStrongBinder();
162 Intent resultData = null;
163 int resultCode = data.readInt();
164 if (data.readInt() != 0) {
165 resultData = Intent.CREATOR.createFromParcel(data);
166 }
167 boolean res = finishActivity(token, resultCode, resultData);
168 reply.writeNoException();
169 reply.writeInt(res ? 1 : 0);
170 return true;
171 }
172
173 case FINISH_SUB_ACTIVITY_TRANSACTION: {
174 data.enforceInterface(IActivityManager.descriptor);
175 IBinder token = data.readStrongBinder();
176 String resultWho = data.readString();
177 int requestCode = data.readInt();
178 finishSubActivity(token, resultWho, requestCode);
179 reply.writeNoException();
180 return true;
181 }
182
183 case REGISTER_RECEIVER_TRANSACTION:
184 {
185 data.enforceInterface(IActivityManager.descriptor);
186 IBinder b = data.readStrongBinder();
187 IApplicationThread app =
188 b != null ? ApplicationThreadNative.asInterface(b) : null;
189 b = data.readStrongBinder();
190 IIntentReceiver rec
191 = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
192 IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
193 String perm = data.readString();
194 Intent intent = registerReceiver(app, rec, filter, perm);
195 reply.writeNoException();
196 if (intent != null) {
197 reply.writeInt(1);
198 intent.writeToParcel(reply, 0);
199 } else {
200 reply.writeInt(0);
201 }
202 return true;
203 }
204
205 case UNREGISTER_RECEIVER_TRANSACTION:
206 {
207 data.enforceInterface(IActivityManager.descriptor);
208 IBinder b = data.readStrongBinder();
209 if (b == null) {
210 return true;
211 }
212 IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
213 unregisterReceiver(rec);
214 reply.writeNoException();
215 return true;
216 }
217
218 case BROADCAST_INTENT_TRANSACTION:
219 {
220 data.enforceInterface(IActivityManager.descriptor);
221 IBinder b = data.readStrongBinder();
222 IApplicationThread app =
223 b != null ? ApplicationThreadNative.asInterface(b) : null;
224 Intent intent = Intent.CREATOR.createFromParcel(data);
225 String resolvedType = data.readString();
226 b = data.readStrongBinder();
227 IIntentReceiver resultTo =
228 b != null ? IIntentReceiver.Stub.asInterface(b) : null;
229 int resultCode = data.readInt();
230 String resultData = data.readString();
231 Bundle resultExtras = data.readBundle();
232 String perm = data.readString();
233 boolean serialized = data.readInt() != 0;
234 boolean sticky = data.readInt() != 0;
235 int res = broadcastIntent(app, intent, resolvedType, resultTo,
236 resultCode, resultData, resultExtras, perm,
237 serialized, sticky);
238 reply.writeNoException();
239 reply.writeInt(res);
240 return true;
241 }
242
243 case UNBROADCAST_INTENT_TRANSACTION:
244 {
245 data.enforceInterface(IActivityManager.descriptor);
246 IBinder b = data.readStrongBinder();
247 IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
248 Intent intent = Intent.CREATOR.createFromParcel(data);
249 unbroadcastIntent(app, intent);
250 reply.writeNoException();
251 return true;
252 }
253
254 case FINISH_RECEIVER_TRANSACTION: {
255 data.enforceInterface(IActivityManager.descriptor);
256 IBinder who = data.readStrongBinder();
257 int resultCode = data.readInt();
258 String resultData = data.readString();
259 Bundle resultExtras = data.readBundle();
260 boolean resultAbort = data.readInt() != 0;
261 if (who != null) {
262 finishReceiver(who, resultCode, resultData, resultExtras, resultAbort);
263 }
264 reply.writeNoException();
265 return true;
266 }
267
268 case SET_PERSISTENT_TRANSACTION: {
269 data.enforceInterface(IActivityManager.descriptor);
270 IBinder token = data.readStrongBinder();
271 boolean isPersistent = data.readInt() != 0;
272 if (token != null) {
273 setPersistent(token, isPersistent);
274 }
275 reply.writeNoException();
276 return true;
277 }
278
279 case ATTACH_APPLICATION_TRANSACTION: {
280 data.enforceInterface(IActivityManager.descriptor);
281 IApplicationThread app = ApplicationThreadNative.asInterface(
282 data.readStrongBinder());
283 if (app != null) {
284 attachApplication(app);
285 }
286 reply.writeNoException();
287 return true;
288 }
289
290 case ACTIVITY_IDLE_TRANSACTION: {
291 data.enforceInterface(IActivityManager.descriptor);
292 IBinder token = data.readStrongBinder();
293 if (token != null) {
294 activityIdle(token);
295 }
296 reply.writeNoException();
297 return true;
298 }
299
300 case ACTIVITY_PAUSED_TRANSACTION: {
301 data.enforceInterface(IActivityManager.descriptor);
302 IBinder token = data.readStrongBinder();
303 Bundle map = data.readBundle();
304 activityPaused(token, map);
305 reply.writeNoException();
306 return true;
307 }
308
309 case ACTIVITY_STOPPED_TRANSACTION: {
310 data.enforceInterface(IActivityManager.descriptor);
311 IBinder token = data.readStrongBinder();
312 Bitmap thumbnail = data.readInt() != 0
313 ? Bitmap.CREATOR.createFromParcel(data) : null;
314 CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
315 activityStopped(token, thumbnail, description);
316 reply.writeNoException();
317 return true;
318 }
319
320 case ACTIVITY_DESTROYED_TRANSACTION: {
321 data.enforceInterface(IActivityManager.descriptor);
322 IBinder token = data.readStrongBinder();
323 activityDestroyed(token);
324 reply.writeNoException();
325 return true;
326 }
327
328 case GET_CALLING_PACKAGE_TRANSACTION: {
329 data.enforceInterface(IActivityManager.descriptor);
330 IBinder token = data.readStrongBinder();
331 String res = token != null ? getCallingPackage(token) : null;
332 reply.writeNoException();
333 reply.writeString(res);
334 return true;
335 }
336
337 case GET_CALLING_ACTIVITY_TRANSACTION: {
338 data.enforceInterface(IActivityManager.descriptor);
339 IBinder token = data.readStrongBinder();
340 ComponentName cn = getCallingActivity(token);
341 reply.writeNoException();
342 ComponentName.writeToParcel(cn, reply);
343 return true;
344 }
345
346 case GET_TASKS_TRANSACTION: {
347 data.enforceInterface(IActivityManager.descriptor);
348 int maxNum = data.readInt();
349 int fl = data.readInt();
350 IBinder receiverBinder = data.readStrongBinder();
351 IThumbnailReceiver receiver = receiverBinder != null
352 ? IThumbnailReceiver.Stub.asInterface(receiverBinder)
353 : null;
354 List list = getTasks(maxNum, fl, receiver);
355 reply.writeNoException();
356 int N = list != null ? list.size() : -1;
357 reply.writeInt(N);
358 int i;
359 for (i=0; i<N; i++) {
360 ActivityManager.RunningTaskInfo info =
361 (ActivityManager.RunningTaskInfo)list.get(i);
362 info.writeToParcel(reply, 0);
363 }
364 return true;
365 }
366
367 case GET_RECENT_TASKS_TRANSACTION: {
368 data.enforceInterface(IActivityManager.descriptor);
369 int maxNum = data.readInt();
370 int fl = data.readInt();
371 List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
372 fl);
373 reply.writeNoException();
374 reply.writeTypedList(list);
375 return true;
376 }
377
378 case GET_SERVICES_TRANSACTION: {
379 data.enforceInterface(IActivityManager.descriptor);
380 int maxNum = data.readInt();
381 int fl = data.readInt();
382 List list = getServices(maxNum, fl);
383 reply.writeNoException();
384 int N = list != null ? list.size() : -1;
385 reply.writeInt(N);
386 int i;
387 for (i=0; i<N; i++) {
388 ActivityManager.RunningServiceInfo info =
389 (ActivityManager.RunningServiceInfo)list.get(i);
390 info.writeToParcel(reply, 0);
391 }
392 return true;
393 }
394
395 case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
396 data.enforceInterface(IActivityManager.descriptor);
397 List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
398 reply.writeNoException();
399 reply.writeTypedList(list);
400 return true;
401 }
402
403 case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
404 data.enforceInterface(IActivityManager.descriptor);
405 List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
406 reply.writeNoException();
407 reply.writeTypedList(list);
408 return true;
409 }
410
411 case MOVE_TASK_TO_FRONT_TRANSACTION: {
412 data.enforceInterface(IActivityManager.descriptor);
413 int task = data.readInt();
414 moveTaskToFront(task);
415 reply.writeNoException();
416 return true;
417 }
418
419 case MOVE_TASK_TO_BACK_TRANSACTION: {
420 data.enforceInterface(IActivityManager.descriptor);
421 int task = data.readInt();
422 moveTaskToBack(task);
423 reply.writeNoException();
424 return true;
425 }
426
427 case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
428 data.enforceInterface(IActivityManager.descriptor);
429 IBinder token = data.readStrongBinder();
430 boolean nonRoot = data.readInt() != 0;
431 boolean res = moveActivityTaskToBack(token, nonRoot);
432 reply.writeNoException();
433 reply.writeInt(res ? 1 : 0);
434 return true;
435 }
436
437 case MOVE_TASK_BACKWARDS_TRANSACTION: {
438 data.enforceInterface(IActivityManager.descriptor);
439 int task = data.readInt();
440 moveTaskBackwards(task);
441 reply.writeNoException();
442 return true;
443 }
444
445 case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
446 data.enforceInterface(IActivityManager.descriptor);
447 IBinder token = data.readStrongBinder();
448 boolean onlyRoot = data.readInt() != 0;
449 int res = token != null
450 ? getTaskForActivity(token, onlyRoot) : -1;
451 reply.writeNoException();
452 reply.writeInt(res);
453 return true;
454 }
455
456 case FINISH_OTHER_INSTANCES_TRANSACTION: {
457 data.enforceInterface(IActivityManager.descriptor);
458 IBinder token = data.readStrongBinder();
459 ComponentName className = ComponentName.readFromParcel(data);
460 finishOtherInstances(token, className);
461 reply.writeNoException();
462 return true;
463 }
464
465 case REPORT_THUMBNAIL_TRANSACTION: {
466 data.enforceInterface(IActivityManager.descriptor);
467 IBinder token = data.readStrongBinder();
468 Bitmap thumbnail = data.readInt() != 0
469 ? Bitmap.CREATOR.createFromParcel(data) : null;
470 CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
471 reportThumbnail(token, thumbnail, description);
472 reply.writeNoException();
473 return true;
474 }
475
476 case GET_CONTENT_PROVIDER_TRANSACTION: {
477 data.enforceInterface(IActivityManager.descriptor);
478 IBinder b = data.readStrongBinder();
479 IApplicationThread app = ApplicationThreadNative.asInterface(b);
480 String name = data.readString();
481 ContentProviderHolder cph = getContentProvider(app, name);
482 reply.writeNoException();
483 if (cph != null) {
484 reply.writeInt(1);
485 cph.writeToParcel(reply, 0);
486 } else {
487 reply.writeInt(0);
488 }
489 return true;
490 }
491
492 case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
493 data.enforceInterface(IActivityManager.descriptor);
494 IBinder b = data.readStrongBinder();
495 IApplicationThread app = ApplicationThreadNative.asInterface(b);
496 ArrayList<ContentProviderHolder> providers =
497 data.createTypedArrayList(ContentProviderHolder.CREATOR);
498 publishContentProviders(app, providers);
499 reply.writeNoException();
500 return true;
501 }
502
503 case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
504 data.enforceInterface(IActivityManager.descriptor);
505 IBinder b = data.readStrongBinder();
506 IApplicationThread app = ApplicationThreadNative.asInterface(b);
507 String name = data.readString();
508 removeContentProvider(app, name);
509 reply.writeNoException();
510 return true;
511 }
512
513 case START_SERVICE_TRANSACTION: {
514 data.enforceInterface(IActivityManager.descriptor);
515 IBinder b = data.readStrongBinder();
516 IApplicationThread app = ApplicationThreadNative.asInterface(b);
517 Intent service = Intent.CREATOR.createFromParcel(data);
518 String resolvedType = data.readString();
519 ComponentName cn = startService(app, service, resolvedType);
520 reply.writeNoException();
521 ComponentName.writeToParcel(cn, reply);
522 return true;
523 }
524
525 case STOP_SERVICE_TRANSACTION: {
526 data.enforceInterface(IActivityManager.descriptor);
527 IBinder b = data.readStrongBinder();
528 IApplicationThread app = ApplicationThreadNative.asInterface(b);
529 Intent service = Intent.CREATOR.createFromParcel(data);
530 String resolvedType = data.readString();
531 int res = stopService(app, service, resolvedType);
532 reply.writeNoException();
533 reply.writeInt(res);
534 return true;
535 }
536
537 case STOP_SERVICE_TOKEN_TRANSACTION: {
538 data.enforceInterface(IActivityManager.descriptor);
539 ComponentName className = ComponentName.readFromParcel(data);
540 IBinder token = data.readStrongBinder();
541 int startId = data.readInt();
542 boolean res = stopServiceToken(className, token, startId);
543 reply.writeNoException();
544 reply.writeInt(res ? 1 : 0);
545 return true;
546 }
547
548 case SET_SERVICE_FOREGROUND_TRANSACTION: {
549 data.enforceInterface(IActivityManager.descriptor);
550 ComponentName className = ComponentName.readFromParcel(data);
551 IBinder token = data.readStrongBinder();
552 boolean isForeground = data.readInt() != 0;
553 setServiceForeground(className, token, isForeground);
554 reply.writeNoException();
555 return true;
556 }
557
558 case BIND_SERVICE_TRANSACTION: {
559 data.enforceInterface(IActivityManager.descriptor);
560 IBinder b = data.readStrongBinder();
561 IApplicationThread app = ApplicationThreadNative.asInterface(b);
562 IBinder token = data.readStrongBinder();
563 Intent service = Intent.CREATOR.createFromParcel(data);
564 String resolvedType = data.readString();
565 b = data.readStrongBinder();
566 int fl = data.readInt();
567 IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
568 int res = bindService(app, token, service, resolvedType, conn, fl);
569 reply.writeNoException();
570 reply.writeInt(res);
571 return true;
572 }
573
574 case UNBIND_SERVICE_TRANSACTION: {
575 data.enforceInterface(IActivityManager.descriptor);
576 IBinder b = data.readStrongBinder();
577 IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
578 boolean res = unbindService(conn);
579 reply.writeNoException();
580 reply.writeInt(res ? 1 : 0);
581 return true;
582 }
583
584 case PUBLISH_SERVICE_TRANSACTION: {
585 data.enforceInterface(IActivityManager.descriptor);
586 IBinder token = data.readStrongBinder();
587 Intent intent = Intent.CREATOR.createFromParcel(data);
588 IBinder service = data.readStrongBinder();
589 publishService(token, intent, service);
590 reply.writeNoException();
591 return true;
592 }
593
594 case UNBIND_FINISHED_TRANSACTION: {
595 data.enforceInterface(IActivityManager.descriptor);
596 IBinder token = data.readStrongBinder();
597 Intent intent = Intent.CREATOR.createFromParcel(data);
598 boolean doRebind = data.readInt() != 0;
599 unbindFinished(token, intent, doRebind);
600 reply.writeNoException();
601 return true;
602 }
603
604 case SERVICE_DONE_EXECUTING_TRANSACTION: {
605 data.enforceInterface(IActivityManager.descriptor);
606 IBinder token = data.readStrongBinder();
607 serviceDoneExecuting(token);
608 reply.writeNoException();
609 return true;
610 }
611
612 case START_INSTRUMENTATION_TRANSACTION: {
613 data.enforceInterface(IActivityManager.descriptor);
614 ComponentName className = ComponentName.readFromParcel(data);
615 String profileFile = data.readString();
616 int fl = data.readInt();
617 Bundle arguments = data.readBundle();
618 IBinder b = data.readStrongBinder();
619 IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
620 boolean res = startInstrumentation(className, profileFile, fl, arguments, w);
621 reply.writeNoException();
622 reply.writeInt(res ? 1 : 0);
623 return true;
624 }
625
626
627 case FINISH_INSTRUMENTATION_TRANSACTION: {
628 data.enforceInterface(IActivityManager.descriptor);
629 IBinder b = data.readStrongBinder();
630 IApplicationThread app = ApplicationThreadNative.asInterface(b);
631 int resultCode = data.readInt();
632 Bundle results = data.readBundle();
633 finishInstrumentation(app, resultCode, results);
634 reply.writeNoException();
635 return true;
636 }
637
638 case GET_CONFIGURATION_TRANSACTION: {
639 data.enforceInterface(IActivityManager.descriptor);
640 Configuration config = getConfiguration();
641 reply.writeNoException();
642 config.writeToParcel(reply, 0);
643 return true;
644 }
645
646 case UPDATE_CONFIGURATION_TRANSACTION: {
647 data.enforceInterface(IActivityManager.descriptor);
648 Configuration config = Configuration.CREATOR.createFromParcel(data);
649 updateConfiguration(config);
650 reply.writeNoException();
651 return true;
652 }
653
654 case SET_REQUESTED_ORIENTATION_TRANSACTION: {
655 data.enforceInterface(IActivityManager.descriptor);
656 IBinder token = data.readStrongBinder();
657 int requestedOrientation = data.readInt();
658 setRequestedOrientation(token, requestedOrientation);
659 reply.writeNoException();
660 return true;
661 }
662
663 case GET_REQUESTED_ORIENTATION_TRANSACTION: {
664 data.enforceInterface(IActivityManager.descriptor);
665 IBinder token = data.readStrongBinder();
666 int req = getRequestedOrientation(token);
667 reply.writeNoException();
668 reply.writeInt(req);
669 return true;
670 }
671
672 case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
673 data.enforceInterface(IActivityManager.descriptor);
674 IBinder token = data.readStrongBinder();
675 ComponentName cn = getActivityClassForToken(token);
676 reply.writeNoException();
677 ComponentName.writeToParcel(cn, reply);
678 return true;
679 }
680
681 case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
682 data.enforceInterface(IActivityManager.descriptor);
683 IBinder token = data.readStrongBinder();
684 reply.writeNoException();
685 reply.writeString(getPackageForToken(token));
686 return true;
687 }
688
689 case GET_INTENT_SENDER_TRANSACTION: {
690 data.enforceInterface(IActivityManager.descriptor);
691 int type = data.readInt();
692 String packageName = data.readString();
693 IBinder token = data.readStrongBinder();
694 String resultWho = data.readString();
695 int requestCode = data.readInt();
696 Intent requestIntent = data.readInt() != 0
697 ? Intent.CREATOR.createFromParcel(data) : null;
698 String requestResolvedType = data.readString();
699 int fl = data.readInt();
700 IIntentSender res = getIntentSender(type, packageName, token,
701 resultWho, requestCode, requestIntent,
702 requestResolvedType, fl);
703 reply.writeNoException();
704 reply.writeStrongBinder(res != null ? res.asBinder() : null);
705 return true;
706 }
707
708 case CANCEL_INTENT_SENDER_TRANSACTION: {
709 data.enforceInterface(IActivityManager.descriptor);
710 IIntentSender r = IIntentSender.Stub.asInterface(
711 data.readStrongBinder());
712 cancelIntentSender(r);
713 reply.writeNoException();
714 return true;
715 }
716
717 case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
718 data.enforceInterface(IActivityManager.descriptor);
719 IIntentSender r = IIntentSender.Stub.asInterface(
720 data.readStrongBinder());
721 String res = getPackageForIntentSender(r);
722 reply.writeNoException();
723 reply.writeString(res);
724 return true;
725 }
726
727 case SET_PROCESS_LIMIT_TRANSACTION: {
728 data.enforceInterface(IActivityManager.descriptor);
729 int max = data.readInt();
730 setProcessLimit(max);
731 reply.writeNoException();
732 return true;
733 }
734
735 case GET_PROCESS_LIMIT_TRANSACTION: {
736 data.enforceInterface(IActivityManager.descriptor);
737 int limit = getProcessLimit();
738 reply.writeNoException();
739 reply.writeInt(limit);
740 return true;
741 }
742
743 case SET_PROCESS_FOREGROUND_TRANSACTION: {
744 data.enforceInterface(IActivityManager.descriptor);
745 IBinder token = data.readStrongBinder();
746 int pid = data.readInt();
747 boolean isForeground = data.readInt() != 0;
748 setProcessForeground(token, pid, isForeground);
749 reply.writeNoException();
750 return true;
751 }
752
753 case CHECK_PERMISSION_TRANSACTION: {
754 data.enforceInterface(IActivityManager.descriptor);
755 String perm = data.readString();
756 int pid = data.readInt();
757 int uid = data.readInt();
758 int res = checkPermission(perm, pid, uid);
759 reply.writeNoException();
760 reply.writeInt(res);
761 return true;
762 }
763
764 case CHECK_URI_PERMISSION_TRANSACTION: {
765 data.enforceInterface(IActivityManager.descriptor);
766 Uri uri = Uri.CREATOR.createFromParcel(data);
767 int pid = data.readInt();
768 int uid = data.readInt();
769 int mode = data.readInt();
770 int res = checkUriPermission(uri, pid, uid, mode);
771 reply.writeNoException();
772 reply.writeInt(res);
773 return true;
774 }
775
776 case CLEAR_APP_DATA_TRANSACTION: {
777 data.enforceInterface(IActivityManager.descriptor);
778 String packageName = data.readString();
779 IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
780 data.readStrongBinder());
781 boolean res = clearApplicationUserData(packageName, observer);
782 reply.writeNoException();
783 reply.writeInt(res ? 1 : 0);
784 return true;
785 }
786
787 case GRANT_URI_PERMISSION_TRANSACTION: {
788 data.enforceInterface(IActivityManager.descriptor);
789 IBinder b = data.readStrongBinder();
790 IApplicationThread app = ApplicationThreadNative.asInterface(b);
791 String targetPkg = data.readString();
792 Uri uri = Uri.CREATOR.createFromParcel(data);
793 int mode = data.readInt();
794 grantUriPermission(app, targetPkg, uri, mode);
795 reply.writeNoException();
796 return true;
797 }
798
799 case REVOKE_URI_PERMISSION_TRANSACTION: {
800 data.enforceInterface(IActivityManager.descriptor);
801 IBinder b = data.readStrongBinder();
802 IApplicationThread app = ApplicationThreadNative.asInterface(b);
803 Uri uri = Uri.CREATOR.createFromParcel(data);
804 int mode = data.readInt();
805 revokeUriPermission(app, uri, mode);
806 reply.writeNoException();
807 return true;
808 }
809
810 case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
811 data.enforceInterface(IActivityManager.descriptor);
812 IBinder b = data.readStrongBinder();
813 IApplicationThread app = ApplicationThreadNative.asInterface(b);
814 boolean waiting = data.readInt() != 0;
815 showWaitingForDebugger(app, waiting);
816 reply.writeNoException();
817 return true;
818 }
819
820 case GET_MEMORY_INFO_TRANSACTION: {
821 data.enforceInterface(IActivityManager.descriptor);
822 ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
823 getMemoryInfo(mi);
824 reply.writeNoException();
825 mi.writeToParcel(reply, 0);
826 return true;
827 }
828
829 case UNHANDLED_BACK_TRANSACTION: {
830 data.enforceInterface(IActivityManager.descriptor);
831 unhandledBack();
832 reply.writeNoException();
833 return true;
834 }
835
836 case OPEN_CONTENT_URI_TRANSACTION: {
837 data.enforceInterface(IActivityManager.descriptor);
838 Uri uri = Uri.parse(data.readString());
839 ParcelFileDescriptor pfd = openContentUri(uri);
840 reply.writeNoException();
841 if (pfd != null) {
842 reply.writeInt(1);
843 pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
844 } else {
845 reply.writeInt(0);
846 }
847 return true;
848 }
849
850 case GOING_TO_SLEEP_TRANSACTION: {
851 data.enforceInterface(IActivityManager.descriptor);
852 goingToSleep();
853 reply.writeNoException();
854 return true;
855 }
856
857 case WAKING_UP_TRANSACTION: {
858 data.enforceInterface(IActivityManager.descriptor);
859 wakingUp();
860 reply.writeNoException();
861 return true;
862 }
863
864 case SET_DEBUG_APP_TRANSACTION: {
865 data.enforceInterface(IActivityManager.descriptor);
866 String pn = data.readString();
867 boolean wfd = data.readInt() != 0;
868 boolean per = data.readInt() != 0;
869 setDebugApp(pn, wfd, per);
870 reply.writeNoException();
871 return true;
872 }
873
874 case SET_ALWAYS_FINISH_TRANSACTION: {
875 data.enforceInterface(IActivityManager.descriptor);
876 boolean enabled = data.readInt() != 0;
877 setAlwaysFinish(enabled);
878 reply.writeNoException();
879 return true;
880 }
881
882 case SET_ACTIVITY_WATCHER_TRANSACTION: {
883 data.enforceInterface(IActivityManager.descriptor);
884 IActivityWatcher watcher = IActivityWatcher.Stub.asInterface(
885 data.readStrongBinder());
886 setActivityWatcher(watcher);
887 return true;
888 }
889
890 case ENTER_SAFE_MODE_TRANSACTION: {
891 data.enforceInterface(IActivityManager.descriptor);
892 enterSafeMode();
893 reply.writeNoException();
894 return true;
895 }
896
897 case NOTE_WAKEUP_ALARM_TRANSACTION: {
898 data.enforceInterface(IActivityManager.descriptor);
899 IIntentSender is = IIntentSender.Stub.asInterface(
900 data.readStrongBinder());
901 noteWakeupAlarm(is);
902 reply.writeNoException();
903 return true;
904 }
905
906 case KILL_PIDS_FOR_MEMORY_TRANSACTION: {
907 data.enforceInterface(IActivityManager.descriptor);
908 int[] pids = data.createIntArray();
909 boolean res = killPidsForMemory(pids);
910 reply.writeNoException();
911 reply.writeInt(res ? 1 : 0);
912 return true;
913 }
914
915 case REPORT_PSS_TRANSACTION: {
916 data.enforceInterface(IActivityManager.descriptor);
917 IBinder b = data.readStrongBinder();
918 IApplicationThread app = ApplicationThreadNative.asInterface(b);
919 int pss = data.readInt();
920 reportPss(app, pss);
921 reply.writeNoException();
922 return true;
923 }
924
925 case START_RUNNING_TRANSACTION: {
926 data.enforceInterface(IActivityManager.descriptor);
927 String pkg = data.readString();
928 String cls = data.readString();
929 String action = data.readString();
930 String indata = data.readString();
931 startRunning(pkg, cls, action, indata);
932 reply.writeNoException();
933 return true;
934 }
935
936 case SYSTEM_READY_TRANSACTION: {
937 data.enforceInterface(IActivityManager.descriptor);
938 systemReady();
939 reply.writeNoException();
940 return true;
941 }
942
943 case HANDLE_APPLICATION_ERROR_TRANSACTION: {
944 data.enforceInterface(IActivityManager.descriptor);
945 IBinder app = data.readStrongBinder();
946 int fl = data.readInt();
947 String tag = data.readString();
948 String shortMsg = data.readString();
949 String longMsg = data.readString();
950 byte[] crashData = data.createByteArray();
951 int res = handleApplicationError(app, fl, tag, shortMsg, longMsg,
952 crashData);
953 reply.writeNoException();
954 reply.writeInt(res);
955 return true;
956 }
957
958 case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
959 data.enforceInterface(IActivityManager.descriptor);
960 int sig = data.readInt();
961 signalPersistentProcesses(sig);
962 reply.writeNoException();
963 return true;
964 }
965
966 case RESTART_PACKAGE_TRANSACTION: {
967 data.enforceInterface(IActivityManager.descriptor);
968 String packageName = data.readString();
969 restartPackage(packageName);
970 reply.writeNoException();
971 return true;
972 }
973
974 case GET_DEVICE_CONFIGURATION_TRANSACTION: {
975 data.enforceInterface(IActivityManager.descriptor);
976 ConfigurationInfo config = getDeviceConfigurationInfo();
977 reply.writeNoException();
978 config.writeToParcel(reply, 0);
979 return true;
980 }
981
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -0800982 case PROFILE_CONTROL_TRANSACTION: {
983 data.enforceInterface(IActivityManager.descriptor);
984 String process = data.readString();
985 boolean start = data.readInt() != 0;
986 String path = data.readString();
987 boolean res = profileControl(process, start, path);
988 reply.writeNoException();
989 reply.writeInt(res ? 1 : 0);
990 return true;
991 }
992
Dianne Hackborn55280a92009-05-07 15:53:46 -0700993 case SHUTDOWN_TRANSACTION: {
994 data.enforceInterface(IActivityManager.descriptor);
995 boolean res = shutdown(data.readInt());
996 reply.writeNoException();
997 reply.writeInt(res ? 1 : 0);
998 return true;
999 }
1000
Dianne Hackborn95fc68f2009-05-19 18:37:45 -07001001 case STOP_APP_SWITCHES_TRANSACTION: {
1002 data.enforceInterface(IActivityManager.descriptor);
1003 stopAppSwitches();
1004 reply.writeNoException();
1005 return true;
1006 }
1007
1008 case RESUME_APP_SWITCHES_TRANSACTION: {
1009 data.enforceInterface(IActivityManager.descriptor);
1010 resumeAppSwitches();
1011 reply.writeNoException();
1012 return true;
1013 }
1014
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001015 case PEEK_SERVICE_TRANSACTION: {
1016 data.enforceInterface(IActivityManager.descriptor);
1017 Intent service = Intent.CREATOR.createFromParcel(data);
1018 String resolvedType = data.readString();
1019 IBinder binder = peekService(service, resolvedType);
1020 reply.writeNoException();
1021 reply.writeStrongBinder(binder);
1022 return true;
1023 }
1024 }
1025
1026 return super.onTransact(code, data, reply, flags);
1027 }
1028
1029 public IBinder asBinder()
1030 {
1031 return this;
1032 }
1033
1034 private static IActivityManager gDefault;
1035}
1036
1037class ActivityManagerProxy implements IActivityManager
1038{
1039 public ActivityManagerProxy(IBinder remote)
1040 {
1041 mRemote = remote;
1042 }
1043
1044 public IBinder asBinder()
1045 {
1046 return mRemote;
1047 }
1048
1049 public int startActivity(IApplicationThread caller, Intent intent,
1050 String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1051 IBinder resultTo, String resultWho,
1052 int requestCode, boolean onlyIfNeeded,
1053 boolean debug) throws RemoteException {
1054 Parcel data = Parcel.obtain();
1055 Parcel reply = Parcel.obtain();
1056 data.writeInterfaceToken(IActivityManager.descriptor);
1057 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1058 intent.writeToParcel(data, 0);
1059 data.writeString(resolvedType);
1060 data.writeTypedArray(grantedUriPermissions, 0);
1061 data.writeInt(grantedMode);
1062 data.writeStrongBinder(resultTo);
1063 data.writeString(resultWho);
1064 data.writeInt(requestCode);
1065 data.writeInt(onlyIfNeeded ? 1 : 0);
1066 data.writeInt(debug ? 1 : 0);
1067 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1068 reply.readException();
1069 int result = reply.readInt();
1070 reply.recycle();
1071 data.recycle();
1072 return result;
1073 }
1074 public boolean startNextMatchingActivity(IBinder callingActivity,
1075 Intent intent) throws RemoteException {
1076 Parcel data = Parcel.obtain();
1077 Parcel reply = Parcel.obtain();
1078 data.writeInterfaceToken(IActivityManager.descriptor);
1079 data.writeStrongBinder(callingActivity);
1080 intent.writeToParcel(data, 0);
1081 mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
1082 reply.readException();
1083 int result = reply.readInt();
1084 reply.recycle();
1085 data.recycle();
1086 return result != 0;
1087 }
1088 public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
1089 throws RemoteException {
1090 Parcel data = Parcel.obtain();
1091 Parcel reply = Parcel.obtain();
1092 data.writeInterfaceToken(IActivityManager.descriptor);
1093 data.writeStrongBinder(token);
1094 data.writeInt(resultCode);
1095 if (resultData != null) {
1096 data.writeInt(1);
1097 resultData.writeToParcel(data, 0);
1098 } else {
1099 data.writeInt(0);
1100 }
1101 mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
1102 reply.readException();
1103 boolean res = reply.readInt() != 0;
1104 data.recycle();
1105 reply.recycle();
1106 return res;
1107 }
1108 public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
1109 {
1110 Parcel data = Parcel.obtain();
1111 Parcel reply = Parcel.obtain();
1112 data.writeInterfaceToken(IActivityManager.descriptor);
1113 data.writeStrongBinder(token);
1114 data.writeString(resultWho);
1115 data.writeInt(requestCode);
1116 mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
1117 reply.readException();
1118 data.recycle();
1119 reply.recycle();
1120 }
1121 public Intent registerReceiver(IApplicationThread caller,
1122 IIntentReceiver receiver,
1123 IntentFilter filter, String perm) throws RemoteException
1124 {
1125 Parcel data = Parcel.obtain();
1126 Parcel reply = Parcel.obtain();
1127 data.writeInterfaceToken(IActivityManager.descriptor);
1128 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1129 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1130 filter.writeToParcel(data, 0);
1131 data.writeString(perm);
1132 mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1133 reply.readException();
1134 Intent intent = null;
1135 int haveIntent = reply.readInt();
1136 if (haveIntent != 0) {
1137 intent = Intent.CREATOR.createFromParcel(reply);
1138 }
1139 reply.recycle();
1140 data.recycle();
1141 return intent;
1142 }
1143 public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
1144 {
1145 Parcel data = Parcel.obtain();
1146 Parcel reply = Parcel.obtain();
1147 data.writeInterfaceToken(IActivityManager.descriptor);
1148 data.writeStrongBinder(receiver.asBinder());
1149 mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1150 reply.readException();
1151 data.recycle();
1152 reply.recycle();
1153 }
1154 public int broadcastIntent(IApplicationThread caller,
1155 Intent intent, String resolvedType, IIntentReceiver resultTo,
1156 int resultCode, String resultData, Bundle map,
1157 String requiredPermission, boolean serialized,
1158 boolean sticky) throws RemoteException
1159 {
1160 Parcel data = Parcel.obtain();
1161 Parcel reply = Parcel.obtain();
1162 data.writeInterfaceToken(IActivityManager.descriptor);
1163 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1164 intent.writeToParcel(data, 0);
1165 data.writeString(resolvedType);
1166 data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
1167 data.writeInt(resultCode);
1168 data.writeString(resultData);
1169 data.writeBundle(map);
1170 data.writeString(requiredPermission);
1171 data.writeInt(serialized ? 1 : 0);
1172 data.writeInt(sticky ? 1 : 0);
1173 mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
1174 reply.readException();
1175 int res = reply.readInt();
1176 reply.recycle();
1177 data.recycle();
1178 return res;
1179 }
1180 public void unbroadcastIntent(IApplicationThread caller, Intent intent) throws RemoteException
1181 {
1182 Parcel data = Parcel.obtain();
1183 Parcel reply = Parcel.obtain();
1184 data.writeInterfaceToken(IActivityManager.descriptor);
1185 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1186 intent.writeToParcel(data, 0);
1187 mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
1188 reply.readException();
1189 data.recycle();
1190 reply.recycle();
1191 }
1192 public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
1193 {
1194 Parcel data = Parcel.obtain();
1195 Parcel reply = Parcel.obtain();
1196 data.writeInterfaceToken(IActivityManager.descriptor);
1197 data.writeStrongBinder(who);
1198 data.writeInt(resultCode);
1199 data.writeString(resultData);
1200 data.writeBundle(map);
1201 data.writeInt(abortBroadcast ? 1 : 0);
1202 mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1203 reply.readException();
1204 data.recycle();
1205 reply.recycle();
1206 }
1207 public void setPersistent(IBinder token, boolean isPersistent) throws RemoteException
1208 {
1209 Parcel data = Parcel.obtain();
1210 Parcel reply = Parcel.obtain();
1211 data.writeInterfaceToken(IActivityManager.descriptor);
1212 data.writeStrongBinder(token);
1213 data.writeInt(isPersistent ? 1 : 0);
1214 mRemote.transact(SET_PERSISTENT_TRANSACTION, data, reply, 0);
1215 reply.readException();
1216 data.recycle();
1217 reply.recycle();
1218 }
1219 public void attachApplication(IApplicationThread app) throws RemoteException
1220 {
1221 Parcel data = Parcel.obtain();
1222 Parcel reply = Parcel.obtain();
1223 data.writeInterfaceToken(IActivityManager.descriptor);
1224 data.writeStrongBinder(app.asBinder());
1225 mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
1226 reply.readException();
1227 data.recycle();
1228 reply.recycle();
1229 }
1230 public void activityIdle(IBinder token) throws RemoteException
1231 {
1232 Parcel data = Parcel.obtain();
1233 Parcel reply = Parcel.obtain();
1234 data.writeInterfaceToken(IActivityManager.descriptor);
1235 data.writeStrongBinder(token);
1236 mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1237 reply.readException();
1238 data.recycle();
1239 reply.recycle();
1240 }
1241 public void activityPaused(IBinder token, Bundle state) throws RemoteException
1242 {
1243 Parcel data = Parcel.obtain();
1244 Parcel reply = Parcel.obtain();
1245 data.writeInterfaceToken(IActivityManager.descriptor);
1246 data.writeStrongBinder(token);
1247 data.writeBundle(state);
1248 mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
1249 reply.readException();
1250 data.recycle();
1251 reply.recycle();
1252 }
1253 public void activityStopped(IBinder token,
1254 Bitmap thumbnail, CharSequence description) throws RemoteException
1255 {
1256 Parcel data = Parcel.obtain();
1257 Parcel reply = Parcel.obtain();
1258 data.writeInterfaceToken(IActivityManager.descriptor);
1259 data.writeStrongBinder(token);
1260 if (thumbnail != null) {
1261 data.writeInt(1);
1262 thumbnail.writeToParcel(data, 0);
1263 } else {
1264 data.writeInt(0);
1265 }
1266 TextUtils.writeToParcel(description, data, 0);
1267 mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1268 reply.readException();
1269 data.recycle();
1270 reply.recycle();
1271 }
1272 public void activityDestroyed(IBinder token) throws RemoteException
1273 {
1274 Parcel data = Parcel.obtain();
1275 Parcel reply = Parcel.obtain();
1276 data.writeInterfaceToken(IActivityManager.descriptor);
1277 data.writeStrongBinder(token);
1278 mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1279 reply.readException();
1280 data.recycle();
1281 reply.recycle();
1282 }
1283 public String getCallingPackage(IBinder token) throws RemoteException
1284 {
1285 Parcel data = Parcel.obtain();
1286 Parcel reply = Parcel.obtain();
1287 data.writeInterfaceToken(IActivityManager.descriptor);
1288 data.writeStrongBinder(token);
1289 mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
1290 reply.readException();
1291 String res = reply.readString();
1292 data.recycle();
1293 reply.recycle();
1294 return res;
1295 }
1296 public ComponentName getCallingActivity(IBinder token)
1297 throws RemoteException {
1298 Parcel data = Parcel.obtain();
1299 Parcel reply = Parcel.obtain();
1300 data.writeInterfaceToken(IActivityManager.descriptor);
1301 data.writeStrongBinder(token);
1302 mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
1303 reply.readException();
1304 ComponentName res = ComponentName.readFromParcel(reply);
1305 data.recycle();
1306 reply.recycle();
1307 return res;
1308 }
1309 public List getTasks(int maxNum, int flags,
1310 IThumbnailReceiver receiver) throws RemoteException {
1311 Parcel data = Parcel.obtain();
1312 Parcel reply = Parcel.obtain();
1313 data.writeInterfaceToken(IActivityManager.descriptor);
1314 data.writeInt(maxNum);
1315 data.writeInt(flags);
1316 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1317 mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
1318 reply.readException();
1319 ArrayList list = null;
1320 int N = reply.readInt();
1321 if (N >= 0) {
1322 list = new ArrayList();
1323 while (N > 0) {
1324 ActivityManager.RunningTaskInfo info =
1325 ActivityManager.RunningTaskInfo.CREATOR
1326 .createFromParcel(reply);
1327 list.add(info);
1328 N--;
1329 }
1330 }
1331 data.recycle();
1332 reply.recycle();
1333 return list;
1334 }
1335 public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
1336 int flags) throws RemoteException {
1337 Parcel data = Parcel.obtain();
1338 Parcel reply = Parcel.obtain();
1339 data.writeInterfaceToken(IActivityManager.descriptor);
1340 data.writeInt(maxNum);
1341 data.writeInt(flags);
1342 mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
1343 reply.readException();
1344 ArrayList<ActivityManager.RecentTaskInfo> list
1345 = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
1346 data.recycle();
1347 reply.recycle();
1348 return list;
1349 }
1350 public List getServices(int maxNum, int flags) throws RemoteException {
1351 Parcel data = Parcel.obtain();
1352 Parcel reply = Parcel.obtain();
1353 data.writeInterfaceToken(IActivityManager.descriptor);
1354 data.writeInt(maxNum);
1355 data.writeInt(flags);
1356 mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
1357 reply.readException();
1358 ArrayList list = null;
1359 int N = reply.readInt();
1360 if (N >= 0) {
1361 list = new ArrayList();
1362 while (N > 0) {
1363 ActivityManager.RunningServiceInfo info =
1364 ActivityManager.RunningServiceInfo.CREATOR
1365 .createFromParcel(reply);
1366 list.add(info);
1367 N--;
1368 }
1369 }
1370 data.recycle();
1371 reply.recycle();
1372 return list;
1373 }
1374 public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
1375 throws RemoteException {
1376 Parcel data = Parcel.obtain();
1377 Parcel reply = Parcel.obtain();
1378 data.writeInterfaceToken(IActivityManager.descriptor);
1379 mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
1380 reply.readException();
1381 ArrayList<ActivityManager.ProcessErrorStateInfo> list
1382 = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
1383 data.recycle();
1384 reply.recycle();
1385 return list;
1386 }
1387 public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
1388 throws RemoteException {
1389 Parcel data = Parcel.obtain();
1390 Parcel reply = Parcel.obtain();
1391 data.writeInterfaceToken(IActivityManager.descriptor);
1392 mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
1393 reply.readException();
1394 ArrayList<ActivityManager.RunningAppProcessInfo> list
1395 = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
1396 data.recycle();
1397 reply.recycle();
1398 return list;
1399 }
1400 public void moveTaskToFront(int task) throws RemoteException
1401 {
1402 Parcel data = Parcel.obtain();
1403 Parcel reply = Parcel.obtain();
1404 data.writeInterfaceToken(IActivityManager.descriptor);
1405 data.writeInt(task);
1406 mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
1407 reply.readException();
1408 data.recycle();
1409 reply.recycle();
1410 }
1411 public void moveTaskToBack(int task) throws RemoteException
1412 {
1413 Parcel data = Parcel.obtain();
1414 Parcel reply = Parcel.obtain();
1415 data.writeInterfaceToken(IActivityManager.descriptor);
1416 data.writeInt(task);
1417 mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1418 reply.readException();
1419 data.recycle();
1420 reply.recycle();
1421 }
1422 public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
1423 throws RemoteException {
1424 Parcel data = Parcel.obtain();
1425 Parcel reply = Parcel.obtain();
1426 data.writeInterfaceToken(IActivityManager.descriptor);
1427 data.writeStrongBinder(token);
1428 data.writeInt(nonRoot ? 1 : 0);
1429 mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1430 reply.readException();
1431 boolean res = reply.readInt() != 0;
1432 data.recycle();
1433 reply.recycle();
1434 return res;
1435 }
1436 public void moveTaskBackwards(int task) throws RemoteException
1437 {
1438 Parcel data = Parcel.obtain();
1439 Parcel reply = Parcel.obtain();
1440 data.writeInterfaceToken(IActivityManager.descriptor);
1441 data.writeInt(task);
1442 mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
1443 reply.readException();
1444 data.recycle();
1445 reply.recycle();
1446 }
1447 public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
1448 {
1449 Parcel data = Parcel.obtain();
1450 Parcel reply = Parcel.obtain();
1451 data.writeInterfaceToken(IActivityManager.descriptor);
1452 data.writeStrongBinder(token);
1453 data.writeInt(onlyRoot ? 1 : 0);
1454 mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
1455 reply.readException();
1456 int res = reply.readInt();
1457 data.recycle();
1458 reply.recycle();
1459 return res;
1460 }
1461 public void finishOtherInstances(IBinder token, ComponentName className) throws RemoteException
1462 {
1463 Parcel data = Parcel.obtain();
1464 Parcel reply = Parcel.obtain();
1465 data.writeInterfaceToken(IActivityManager.descriptor);
1466 data.writeStrongBinder(token);
1467 ComponentName.writeToParcel(className, data);
1468 mRemote.transact(FINISH_OTHER_INSTANCES_TRANSACTION, data, reply, 0);
1469 reply.readException();
1470 data.recycle();
1471 reply.recycle();
1472 }
1473 public void reportThumbnail(IBinder token,
1474 Bitmap thumbnail, CharSequence description) throws RemoteException
1475 {
1476 Parcel data = Parcel.obtain();
1477 Parcel reply = Parcel.obtain();
1478 data.writeInterfaceToken(IActivityManager.descriptor);
1479 data.writeStrongBinder(token);
1480 if (thumbnail != null) {
1481 data.writeInt(1);
1482 thumbnail.writeToParcel(data, 0);
1483 } else {
1484 data.writeInt(0);
1485 }
1486 TextUtils.writeToParcel(description, data, 0);
1487 mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1488 reply.readException();
1489 data.recycle();
1490 reply.recycle();
1491 }
1492 public ContentProviderHolder getContentProvider(IApplicationThread caller,
1493 String name) throws RemoteException
1494 {
1495 Parcel data = Parcel.obtain();
1496 Parcel reply = Parcel.obtain();
1497 data.writeInterfaceToken(IActivityManager.descriptor);
1498 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1499 data.writeString(name);
1500 mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1501 reply.readException();
1502 int res = reply.readInt();
1503 ContentProviderHolder cph = null;
1504 if (res != 0) {
1505 cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
1506 }
1507 data.recycle();
1508 reply.recycle();
1509 return cph;
1510 }
1511 public void publishContentProviders(IApplicationThread caller,
1512 List<ContentProviderHolder> providers) throws RemoteException
1513 {
1514 Parcel data = Parcel.obtain();
1515 Parcel reply = Parcel.obtain();
1516 data.writeInterfaceToken(IActivityManager.descriptor);
1517 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1518 data.writeTypedList(providers);
1519 mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
1520 reply.readException();
1521 data.recycle();
1522 reply.recycle();
1523 }
1524
1525 public void removeContentProvider(IApplicationThread caller,
1526 String name) throws RemoteException {
1527 Parcel data = Parcel.obtain();
1528 Parcel reply = Parcel.obtain();
1529 data.writeInterfaceToken(IActivityManager.descriptor);
1530 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1531 data.writeString(name);
1532 mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1533 reply.readException();
1534 data.recycle();
1535 reply.recycle();
1536 }
1537
1538 public ComponentName startService(IApplicationThread caller, Intent service,
1539 String resolvedType) throws RemoteException
1540 {
1541 Parcel data = Parcel.obtain();
1542 Parcel reply = Parcel.obtain();
1543 data.writeInterfaceToken(IActivityManager.descriptor);
1544 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1545 service.writeToParcel(data, 0);
1546 data.writeString(resolvedType);
1547 mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
1548 reply.readException();
1549 ComponentName res = ComponentName.readFromParcel(reply);
1550 data.recycle();
1551 reply.recycle();
1552 return res;
1553 }
1554 public int stopService(IApplicationThread caller, Intent service,
1555 String resolvedType) throws RemoteException
1556 {
1557 Parcel data = Parcel.obtain();
1558 Parcel reply = Parcel.obtain();
1559 data.writeInterfaceToken(IActivityManager.descriptor);
1560 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1561 service.writeToParcel(data, 0);
1562 data.writeString(resolvedType);
1563 mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
1564 reply.readException();
1565 int res = reply.readInt();
1566 reply.recycle();
1567 data.recycle();
1568 return res;
1569 }
1570 public boolean stopServiceToken(ComponentName className, IBinder token,
1571 int startId) throws RemoteException {
1572 Parcel data = Parcel.obtain();
1573 Parcel reply = Parcel.obtain();
1574 data.writeInterfaceToken(IActivityManager.descriptor);
1575 ComponentName.writeToParcel(className, data);
1576 data.writeStrongBinder(token);
1577 data.writeInt(startId);
1578 mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
1579 reply.readException();
1580 boolean res = reply.readInt() != 0;
1581 data.recycle();
1582 reply.recycle();
1583 return res;
1584 }
1585 public void setServiceForeground(ComponentName className, IBinder token,
1586 boolean isForeground) throws RemoteException {
1587 Parcel data = Parcel.obtain();
1588 Parcel reply = Parcel.obtain();
1589 data.writeInterfaceToken(IActivityManager.descriptor);
1590 ComponentName.writeToParcel(className, data);
1591 data.writeStrongBinder(token);
1592 data.writeInt(isForeground ? 1 : 0);
1593 mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
1594 reply.readException();
1595 data.recycle();
1596 reply.recycle();
1597 }
1598 public int bindService(IApplicationThread caller, IBinder token,
1599 Intent service, String resolvedType, IServiceConnection connection,
1600 int flags) throws RemoteException {
1601 Parcel data = Parcel.obtain();
1602 Parcel reply = Parcel.obtain();
1603 data.writeInterfaceToken(IActivityManager.descriptor);
1604 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1605 data.writeStrongBinder(token);
1606 service.writeToParcel(data, 0);
1607 data.writeString(resolvedType);
1608 data.writeStrongBinder(connection.asBinder());
1609 data.writeInt(flags);
1610 mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
1611 reply.readException();
1612 int res = reply.readInt();
1613 data.recycle();
1614 reply.recycle();
1615 return res;
1616 }
1617 public boolean unbindService(IServiceConnection connection) throws RemoteException
1618 {
1619 Parcel data = Parcel.obtain();
1620 Parcel reply = Parcel.obtain();
1621 data.writeInterfaceToken(IActivityManager.descriptor);
1622 data.writeStrongBinder(connection.asBinder());
1623 mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
1624 reply.readException();
1625 boolean res = reply.readInt() != 0;
1626 data.recycle();
1627 reply.recycle();
1628 return res;
1629 }
1630
1631 public void publishService(IBinder token,
1632 Intent intent, IBinder service) throws RemoteException {
1633 Parcel data = Parcel.obtain();
1634 Parcel reply = Parcel.obtain();
1635 data.writeInterfaceToken(IActivityManager.descriptor);
1636 data.writeStrongBinder(token);
1637 intent.writeToParcel(data, 0);
1638 data.writeStrongBinder(service);
1639 mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
1640 reply.readException();
1641 data.recycle();
1642 reply.recycle();
1643 }
1644
1645 public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
1646 throws RemoteException {
1647 Parcel data = Parcel.obtain();
1648 Parcel reply = Parcel.obtain();
1649 data.writeInterfaceToken(IActivityManager.descriptor);
1650 data.writeStrongBinder(token);
1651 intent.writeToParcel(data, 0);
1652 data.writeInt(doRebind ? 1 : 0);
1653 mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
1654 reply.readException();
1655 data.recycle();
1656 reply.recycle();
1657 }
1658
1659 public void serviceDoneExecuting(IBinder token) throws RemoteException {
1660 Parcel data = Parcel.obtain();
1661 Parcel reply = Parcel.obtain();
1662 data.writeInterfaceToken(IActivityManager.descriptor);
1663 data.writeStrongBinder(token);
1664 mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1665 reply.readException();
1666 data.recycle();
1667 reply.recycle();
1668 }
1669
1670 public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
1671 Parcel data = Parcel.obtain();
1672 Parcel reply = Parcel.obtain();
1673 data.writeInterfaceToken(IActivityManager.descriptor);
1674 service.writeToParcel(data, 0);
1675 data.writeString(resolvedType);
1676 mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
1677 reply.readException();
1678 IBinder binder = reply.readStrongBinder();
1679 reply.recycle();
1680 data.recycle();
1681 return binder;
1682 }
1683
1684 public boolean startInstrumentation(ComponentName className, String profileFile,
1685 int flags, Bundle arguments, IInstrumentationWatcher watcher)
1686 throws RemoteException {
1687 Parcel data = Parcel.obtain();
1688 Parcel reply = Parcel.obtain();
1689 data.writeInterfaceToken(IActivityManager.descriptor);
1690 ComponentName.writeToParcel(className, data);
1691 data.writeString(profileFile);
1692 data.writeInt(flags);
1693 data.writeBundle(arguments);
1694 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
1695 mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1696 reply.readException();
1697 boolean res = reply.readInt() != 0;
1698 reply.recycle();
1699 data.recycle();
1700 return res;
1701 }
1702
1703 public void finishInstrumentation(IApplicationThread target,
1704 int resultCode, Bundle results) throws RemoteException {
1705 Parcel data = Parcel.obtain();
1706 Parcel reply = Parcel.obtain();
1707 data.writeInterfaceToken(IActivityManager.descriptor);
1708 data.writeStrongBinder(target != null ? target.asBinder() : null);
1709 data.writeInt(resultCode);
1710 data.writeBundle(results);
1711 mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1712 reply.readException();
1713 data.recycle();
1714 reply.recycle();
1715 }
1716 public Configuration getConfiguration() throws RemoteException
1717 {
1718 Parcel data = Parcel.obtain();
1719 Parcel reply = Parcel.obtain();
1720 data.writeInterfaceToken(IActivityManager.descriptor);
1721 mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
1722 reply.readException();
1723 Configuration res = Configuration.CREATOR.createFromParcel(reply);
1724 reply.recycle();
1725 data.recycle();
1726 return res;
1727 }
1728 public void updateConfiguration(Configuration values) throws RemoteException
1729 {
1730 Parcel data = Parcel.obtain();
1731 Parcel reply = Parcel.obtain();
1732 data.writeInterfaceToken(IActivityManager.descriptor);
1733 values.writeToParcel(data, 0);
1734 mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
1735 reply.readException();
1736 data.recycle();
1737 reply.recycle();
1738 }
1739 public void setRequestedOrientation(IBinder token, int requestedOrientation)
1740 throws RemoteException {
1741 Parcel data = Parcel.obtain();
1742 Parcel reply = Parcel.obtain();
1743 data.writeInterfaceToken(IActivityManager.descriptor);
1744 data.writeStrongBinder(token);
1745 data.writeInt(requestedOrientation);
1746 mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1747 reply.readException();
1748 data.recycle();
1749 reply.recycle();
1750 }
1751 public int getRequestedOrientation(IBinder token) throws RemoteException {
1752 Parcel data = Parcel.obtain();
1753 Parcel reply = Parcel.obtain();
1754 data.writeInterfaceToken(IActivityManager.descriptor);
1755 data.writeStrongBinder(token);
1756 mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1757 reply.readException();
1758 int res = reply.readInt();
1759 data.recycle();
1760 reply.recycle();
1761 return res;
1762 }
1763 public ComponentName getActivityClassForToken(IBinder token)
1764 throws RemoteException {
1765 Parcel data = Parcel.obtain();
1766 Parcel reply = Parcel.obtain();
1767 data.writeInterfaceToken(IActivityManager.descriptor);
1768 data.writeStrongBinder(token);
1769 mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
1770 reply.readException();
1771 ComponentName res = ComponentName.readFromParcel(reply);
1772 data.recycle();
1773 reply.recycle();
1774 return res;
1775 }
1776 public String getPackageForToken(IBinder token) throws RemoteException
1777 {
1778 Parcel data = Parcel.obtain();
1779 Parcel reply = Parcel.obtain();
1780 data.writeInterfaceToken(IActivityManager.descriptor);
1781 data.writeStrongBinder(token);
1782 mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
1783 reply.readException();
1784 String res = reply.readString();
1785 data.recycle();
1786 reply.recycle();
1787 return res;
1788 }
1789 public IIntentSender getIntentSender(int type,
1790 String packageName, IBinder token, String resultWho,
1791 int requestCode, Intent intent, String resolvedType, int flags)
1792 throws RemoteException {
1793 Parcel data = Parcel.obtain();
1794 Parcel reply = Parcel.obtain();
1795 data.writeInterfaceToken(IActivityManager.descriptor);
1796 data.writeInt(type);
1797 data.writeString(packageName);
1798 data.writeStrongBinder(token);
1799 data.writeString(resultWho);
1800 data.writeInt(requestCode);
1801 if (intent != null) {
1802 data.writeInt(1);
1803 intent.writeToParcel(data, 0);
1804 } else {
1805 data.writeInt(0);
1806 }
1807 data.writeString(resolvedType);
1808 data.writeInt(flags);
1809 mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
1810 reply.readException();
1811 IIntentSender res = IIntentSender.Stub.asInterface(
1812 reply.readStrongBinder());
1813 data.recycle();
1814 reply.recycle();
1815 return res;
1816 }
1817 public void cancelIntentSender(IIntentSender sender) throws RemoteException {
1818 Parcel data = Parcel.obtain();
1819 Parcel reply = Parcel.obtain();
1820 data.writeInterfaceToken(IActivityManager.descriptor);
1821 data.writeStrongBinder(sender.asBinder());
1822 mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
1823 reply.readException();
1824 data.recycle();
1825 reply.recycle();
1826 }
1827 public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
1828 Parcel data = Parcel.obtain();
1829 Parcel reply = Parcel.obtain();
1830 data.writeInterfaceToken(IActivityManager.descriptor);
1831 data.writeStrongBinder(sender.asBinder());
1832 mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
1833 reply.readException();
1834 String res = reply.readString();
1835 data.recycle();
1836 reply.recycle();
1837 return res;
1838 }
1839 public void setProcessLimit(int max) throws RemoteException
1840 {
1841 Parcel data = Parcel.obtain();
1842 Parcel reply = Parcel.obtain();
1843 data.writeInterfaceToken(IActivityManager.descriptor);
1844 data.writeInt(max);
1845 mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
1846 reply.readException();
1847 data.recycle();
1848 reply.recycle();
1849 }
1850 public int getProcessLimit() throws RemoteException
1851 {
1852 Parcel data = Parcel.obtain();
1853 Parcel reply = Parcel.obtain();
1854 data.writeInterfaceToken(IActivityManager.descriptor);
1855 mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
1856 reply.readException();
1857 int res = reply.readInt();
1858 data.recycle();
1859 reply.recycle();
1860 return res;
1861 }
1862 public void setProcessForeground(IBinder token, int pid,
1863 boolean isForeground) throws RemoteException {
1864 Parcel data = Parcel.obtain();
1865 Parcel reply = Parcel.obtain();
1866 data.writeInterfaceToken(IActivityManager.descriptor);
1867 data.writeStrongBinder(token);
1868 data.writeInt(pid);
1869 data.writeInt(isForeground ? 1 : 0);
1870 mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
1871 reply.readException();
1872 data.recycle();
1873 reply.recycle();
1874 }
1875 public int checkPermission(String permission, int pid, int uid)
1876 throws RemoteException {
1877 Parcel data = Parcel.obtain();
1878 Parcel reply = Parcel.obtain();
1879 data.writeInterfaceToken(IActivityManager.descriptor);
1880 data.writeString(permission);
1881 data.writeInt(pid);
1882 data.writeInt(uid);
1883 mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
1884 reply.readException();
1885 int res = reply.readInt();
1886 data.recycle();
1887 reply.recycle();
1888 return res;
1889 }
1890 public boolean clearApplicationUserData(final String packageName,
1891 final IPackageDataObserver observer) throws RemoteException {
1892 Parcel data = Parcel.obtain();
1893 Parcel reply = Parcel.obtain();
1894 data.writeInterfaceToken(IActivityManager.descriptor);
1895 data.writeString(packageName);
1896 data.writeStrongBinder(observer.asBinder());
1897 mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
1898 reply.readException();
1899 boolean res = reply.readInt() != 0;
1900 data.recycle();
1901 reply.recycle();
1902 return res;
1903 }
1904 public int checkUriPermission(Uri uri, int pid, int uid, int mode)
1905 throws RemoteException {
1906 Parcel data = Parcel.obtain();
1907 Parcel reply = Parcel.obtain();
1908 data.writeInterfaceToken(IActivityManager.descriptor);
1909 uri.writeToParcel(data, 0);
1910 data.writeInt(pid);
1911 data.writeInt(uid);
1912 data.writeInt(mode);
1913 mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
1914 reply.readException();
1915 int res = reply.readInt();
1916 data.recycle();
1917 reply.recycle();
1918 return res;
1919 }
1920 public void grantUriPermission(IApplicationThread caller, String targetPkg,
1921 Uri uri, int mode) throws RemoteException {
1922 Parcel data = Parcel.obtain();
1923 Parcel reply = Parcel.obtain();
1924 data.writeInterfaceToken(IActivityManager.descriptor);
1925 data.writeStrongBinder(caller.asBinder());
1926 data.writeString(targetPkg);
1927 uri.writeToParcel(data, 0);
1928 data.writeInt(mode);
1929 mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
1930 reply.readException();
1931 data.recycle();
1932 reply.recycle();
1933 }
1934 public void revokeUriPermission(IApplicationThread caller, Uri uri,
1935 int mode) throws RemoteException {
1936 Parcel data = Parcel.obtain();
1937 Parcel reply = Parcel.obtain();
1938 data.writeInterfaceToken(IActivityManager.descriptor);
1939 data.writeStrongBinder(caller.asBinder());
1940 uri.writeToParcel(data, 0);
1941 data.writeInt(mode);
1942 mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
1943 reply.readException();
1944 data.recycle();
1945 reply.recycle();
1946 }
1947 public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
1948 throws RemoteException {
1949 Parcel data = Parcel.obtain();
1950 Parcel reply = Parcel.obtain();
1951 data.writeInterfaceToken(IActivityManager.descriptor);
1952 data.writeStrongBinder(who.asBinder());
1953 data.writeInt(waiting ? 1 : 0);
1954 mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
1955 reply.readException();
1956 data.recycle();
1957 reply.recycle();
1958 }
1959 public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
1960 Parcel data = Parcel.obtain();
1961 Parcel reply = Parcel.obtain();
1962 data.writeInterfaceToken(IActivityManager.descriptor);
1963 mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
1964 reply.readException();
1965 outInfo.readFromParcel(reply);
1966 data.recycle();
1967 reply.recycle();
1968 }
1969 public void unhandledBack() throws RemoteException
1970 {
1971 Parcel data = Parcel.obtain();
1972 Parcel reply = Parcel.obtain();
1973 data.writeInterfaceToken(IActivityManager.descriptor);
1974 mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
1975 reply.readException();
1976 data.recycle();
1977 reply.recycle();
1978 }
1979 public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
1980 {
1981 Parcel data = Parcel.obtain();
1982 Parcel reply = Parcel.obtain();
1983 data.writeInterfaceToken(IActivityManager.descriptor);
1984 mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
1985 reply.readException();
1986 ParcelFileDescriptor pfd = null;
1987 if (reply.readInt() != 0) {
1988 pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
1989 }
1990 data.recycle();
1991 reply.recycle();
1992 return pfd;
1993 }
1994 public void goingToSleep() throws RemoteException
1995 {
1996 Parcel data = Parcel.obtain();
1997 Parcel reply = Parcel.obtain();
1998 data.writeInterfaceToken(IActivityManager.descriptor);
1999 mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0);
2000 reply.readException();
2001 data.recycle();
2002 reply.recycle();
2003 }
2004 public void wakingUp() throws RemoteException
2005 {
2006 Parcel data = Parcel.obtain();
2007 Parcel reply = Parcel.obtain();
2008 data.writeInterfaceToken(IActivityManager.descriptor);
2009 mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0);
2010 reply.readException();
2011 data.recycle();
2012 reply.recycle();
2013 }
2014 public void setDebugApp(
2015 String packageName, boolean waitForDebugger, boolean persistent)
2016 throws RemoteException
2017 {
2018 Parcel data = Parcel.obtain();
2019 Parcel reply = Parcel.obtain();
2020 data.writeInterfaceToken(IActivityManager.descriptor);
2021 data.writeString(packageName);
2022 data.writeInt(waitForDebugger ? 1 : 0);
2023 data.writeInt(persistent ? 1 : 0);
2024 mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
2025 reply.readException();
2026 data.recycle();
2027 reply.recycle();
2028 }
2029 public void setAlwaysFinish(boolean enabled) throws RemoteException
2030 {
2031 Parcel data = Parcel.obtain();
2032 Parcel reply = Parcel.obtain();
2033 data.writeInterfaceToken(IActivityManager.descriptor);
2034 data.writeInt(enabled ? 1 : 0);
2035 mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
2036 reply.readException();
2037 data.recycle();
2038 reply.recycle();
2039 }
2040 public void setActivityWatcher(IActivityWatcher watcher) throws RemoteException
2041 {
2042 Parcel data = Parcel.obtain();
2043 Parcel reply = Parcel.obtain();
2044 data.writeInterfaceToken(IActivityManager.descriptor);
2045 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2046 mRemote.transact(SET_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2047 reply.readException();
2048 data.recycle();
2049 reply.recycle();
2050 }
2051 public void enterSafeMode() throws RemoteException {
2052 Parcel data = Parcel.obtain();
2053 data.writeInterfaceToken(IActivityManager.descriptor);
2054 mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
2055 data.recycle();
2056 }
2057 public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
2058 Parcel data = Parcel.obtain();
2059 data.writeStrongBinder(sender.asBinder());
2060 data.writeInterfaceToken(IActivityManager.descriptor);
2061 mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
2062 data.recycle();
2063 }
2064 public boolean killPidsForMemory(int[] pids) throws RemoteException {
2065 Parcel data = Parcel.obtain();
2066 Parcel reply = Parcel.obtain();
2067 data.writeInterfaceToken(IActivityManager.descriptor);
2068 data.writeIntArray(pids);
2069 mRemote.transact(KILL_PIDS_FOR_MEMORY_TRANSACTION, data, reply, 0);
2070 boolean res = reply.readInt() != 0;
2071 data.recycle();
2072 reply.recycle();
2073 return res;
2074 }
2075 public void reportPss(IApplicationThread caller, int pss) throws RemoteException {
2076 Parcel data = Parcel.obtain();
2077 data.writeInterfaceToken(IActivityManager.descriptor);
2078 data.writeStrongBinder(caller.asBinder());
2079 data.writeInt(pss);
2080 mRemote.transact(REPORT_PSS_TRANSACTION, data, null, 0);
2081 data.recycle();
2082 }
2083 public void startRunning(String pkg, String cls, String action,
2084 String indata) throws RemoteException {
2085 Parcel data = Parcel.obtain();
2086 Parcel reply = Parcel.obtain();
2087 data.writeInterfaceToken(IActivityManager.descriptor);
2088 data.writeString(pkg);
2089 data.writeString(cls);
2090 data.writeString(action);
2091 data.writeString(indata);
2092 mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0);
2093 reply.readException();
2094 data.recycle();
2095 reply.recycle();
2096 }
2097 public void systemReady() throws RemoteException
2098 {
2099 Parcel data = Parcel.obtain();
2100 Parcel reply = Parcel.obtain();
2101 data.writeInterfaceToken(IActivityManager.descriptor);
2102 mRemote.transact(SYSTEM_READY_TRANSACTION, data, reply, 0);
2103 reply.readException();
2104 data.recycle();
2105 reply.recycle();
2106 }
2107 public boolean testIsSystemReady()
2108 {
2109 /* this base class version is never called */
2110 return true;
2111 }
2112 public int handleApplicationError(IBinder app, int flags,
2113 String tag, String shortMsg, String longMsg,
2114 byte[] crashData) throws RemoteException
2115 {
2116 Parcel data = Parcel.obtain();
2117 Parcel reply = Parcel.obtain();
2118 data.writeInterfaceToken(IActivityManager.descriptor);
2119 data.writeStrongBinder(app);
2120 data.writeInt(flags);
2121 data.writeString(tag);
2122 data.writeString(shortMsg);
2123 data.writeString(longMsg);
2124 data.writeByteArray(crashData);
2125 mRemote.transact(HANDLE_APPLICATION_ERROR_TRANSACTION, data, reply, 0);
2126 reply.readException();
2127 int res = reply.readInt();
2128 reply.recycle();
2129 data.recycle();
2130 return res;
2131 }
2132
2133 public void signalPersistentProcesses(int sig) throws RemoteException {
2134 Parcel data = Parcel.obtain();
2135 Parcel reply = Parcel.obtain();
2136 data.writeInterfaceToken(IActivityManager.descriptor);
2137 data.writeInt(sig);
2138 mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
2139 reply.readException();
2140 data.recycle();
2141 reply.recycle();
2142 }
2143
2144 public void restartPackage(String packageName) throws RemoteException {
2145 Parcel data = Parcel.obtain();
2146 Parcel reply = Parcel.obtain();
2147 data.writeInterfaceToken(IActivityManager.descriptor);
2148 data.writeString(packageName);
2149 mRemote.transact(RESTART_PACKAGE_TRANSACTION, data, reply, 0);
2150 reply.readException();
2151 data.recycle();
2152 reply.recycle();
2153 }
2154
2155 public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
2156 {
2157 Parcel data = Parcel.obtain();
2158 Parcel reply = Parcel.obtain();
2159 data.writeInterfaceToken(IActivityManager.descriptor);
2160 mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
2161 reply.readException();
2162 ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
2163 reply.recycle();
2164 data.recycle();
2165 return res;
2166 }
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002167
2168 public boolean profileControl(String process, boolean start,
2169 String path) throws RemoteException
2170 {
2171 Parcel data = Parcel.obtain();
2172 Parcel reply = Parcel.obtain();
2173 data.writeInterfaceToken(IActivityManager.descriptor);
2174 data.writeString(process);
2175 data.writeInt(start ? 1 : 0);
2176 data.writeString(path);
2177 mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
2178 reply.readException();
2179 boolean res = reply.readInt() != 0;
2180 reply.recycle();
2181 data.recycle();
2182 return res;
2183 }
2184
Dianne Hackborn55280a92009-05-07 15:53:46 -07002185 public boolean shutdown(int timeout) throws RemoteException
2186 {
2187 Parcel data = Parcel.obtain();
2188 Parcel reply = Parcel.obtain();
2189 data.writeInterfaceToken(IActivityManager.descriptor);
2190 data.writeInt(timeout);
2191 mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
2192 reply.readException();
2193 boolean res = reply.readInt() != 0;
2194 reply.recycle();
2195 data.recycle();
2196 return res;
2197 }
2198
Dianne Hackborn95fc68f2009-05-19 18:37:45 -07002199 public void stopAppSwitches() throws RemoteException {
2200 Parcel data = Parcel.obtain();
2201 Parcel reply = Parcel.obtain();
2202 data.writeInterfaceToken(IActivityManager.descriptor);
2203 mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
2204 reply.readException();
2205 reply.recycle();
2206 data.recycle();
2207 }
2208
2209 public void resumeAppSwitches() throws RemoteException {
2210 Parcel data = Parcel.obtain();
2211 Parcel reply = Parcel.obtain();
2212 data.writeInterfaceToken(IActivityManager.descriptor);
2213 mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
2214 reply.readException();
2215 reply.recycle();
2216 data.recycle();
2217 }
2218
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002219 private IBinder mRemote;
2220}