blob: 722c75cd455ebe4c569fe9232444ba5fe7684f2d [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;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080020import android.content.Intent;
21import android.content.IntentFilter;
Suchi Amalapurapu1ccac752009-06-12 10:09:58 -070022import android.content.IIntentSender;
23import android.content.IIntentReceiver;
Christopher Tate181fafa2009-05-14 11:12:14 -070024import android.content.pm.ApplicationInfo;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080025import android.content.pm.ConfigurationInfo;
26import android.content.pm.IPackageDataObserver;
27import android.content.res.Configuration;
28import android.graphics.Bitmap;
29import android.net.Uri;
30import android.os.Binder;
31import android.os.Bundle;
Dianne Hackborn3025ef32009-08-31 21:31:47 -070032import android.os.Debug;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080033import android.os.Parcelable;
34import android.os.ParcelFileDescriptor;
35import android.os.RemoteException;
36import android.os.IBinder;
37import android.os.Parcel;
38import android.os.ServiceManager;
39import android.text.TextUtils;
40import android.util.Config;
41import android.util.Log;
42
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080043import 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 }
Dianne Hackbornbcbcaa72009-09-10 10:54:46 -0700147
148 case START_ACTIVITY_PENDING_INTENT_TRANSACTION:
149 {
150 data.enforceInterface(IActivityManager.descriptor);
151 IBinder b = data.readStrongBinder();
152 IApplicationThread app = ApplicationThreadNative.asInterface(b);
153 PendingIntent intent = PendingIntent.CREATOR.createFromParcel(data);
154 Intent fillInIntent = null;
155 if (data.readInt() != 0) {
156 fillInIntent = Intent.CREATOR.createFromParcel(data);
157 }
158 String resolvedType = data.readString();
159 IBinder resultTo = data.readStrongBinder();
160 String resultWho = data.readString();
161 int requestCode = data.readInt();
162 int flagsMask = data.readInt();
163 int flagsValues = data.readInt();
164 int result = startActivityPendingIntent(app, intent,
165 fillInIntent, resolvedType, resultTo, resultWho,
166 requestCode, flagsMask, flagsValues);
167 reply.writeNoException();
168 reply.writeInt(result);
169 return true;
170 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800171
172 case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
173 {
174 data.enforceInterface(IActivityManager.descriptor);
175 IBinder callingActivity = data.readStrongBinder();
176 Intent intent = Intent.CREATOR.createFromParcel(data);
177 boolean result = startNextMatchingActivity(callingActivity, intent);
178 reply.writeNoException();
179 reply.writeInt(result ? 1 : 0);
180 return true;
181 }
182
183 case FINISH_ACTIVITY_TRANSACTION: {
184 data.enforceInterface(IActivityManager.descriptor);
185 IBinder token = data.readStrongBinder();
186 Intent resultData = null;
187 int resultCode = data.readInt();
188 if (data.readInt() != 0) {
189 resultData = Intent.CREATOR.createFromParcel(data);
190 }
191 boolean res = finishActivity(token, resultCode, resultData);
192 reply.writeNoException();
193 reply.writeInt(res ? 1 : 0);
194 return true;
195 }
196
197 case FINISH_SUB_ACTIVITY_TRANSACTION: {
198 data.enforceInterface(IActivityManager.descriptor);
199 IBinder token = data.readStrongBinder();
200 String resultWho = data.readString();
201 int requestCode = data.readInt();
202 finishSubActivity(token, resultWho, requestCode);
203 reply.writeNoException();
204 return true;
205 }
206
207 case REGISTER_RECEIVER_TRANSACTION:
208 {
209 data.enforceInterface(IActivityManager.descriptor);
210 IBinder b = data.readStrongBinder();
211 IApplicationThread app =
212 b != null ? ApplicationThreadNative.asInterface(b) : null;
213 b = data.readStrongBinder();
214 IIntentReceiver rec
215 = b != null ? IIntentReceiver.Stub.asInterface(b) : null;
216 IntentFilter filter = IntentFilter.CREATOR.createFromParcel(data);
217 String perm = data.readString();
218 Intent intent = registerReceiver(app, rec, filter, perm);
219 reply.writeNoException();
220 if (intent != null) {
221 reply.writeInt(1);
222 intent.writeToParcel(reply, 0);
223 } else {
224 reply.writeInt(0);
225 }
226 return true;
227 }
228
229 case UNREGISTER_RECEIVER_TRANSACTION:
230 {
231 data.enforceInterface(IActivityManager.descriptor);
232 IBinder b = data.readStrongBinder();
233 if (b == null) {
234 return true;
235 }
236 IIntentReceiver rec = IIntentReceiver.Stub.asInterface(b);
237 unregisterReceiver(rec);
238 reply.writeNoException();
239 return true;
240 }
241
242 case BROADCAST_INTENT_TRANSACTION:
243 {
244 data.enforceInterface(IActivityManager.descriptor);
245 IBinder b = data.readStrongBinder();
246 IApplicationThread app =
247 b != null ? ApplicationThreadNative.asInterface(b) : null;
248 Intent intent = Intent.CREATOR.createFromParcel(data);
249 String resolvedType = data.readString();
250 b = data.readStrongBinder();
251 IIntentReceiver resultTo =
252 b != null ? IIntentReceiver.Stub.asInterface(b) : null;
253 int resultCode = data.readInt();
254 String resultData = data.readString();
255 Bundle resultExtras = data.readBundle();
256 String perm = data.readString();
257 boolean serialized = data.readInt() != 0;
258 boolean sticky = data.readInt() != 0;
259 int res = broadcastIntent(app, intent, resolvedType, resultTo,
260 resultCode, resultData, resultExtras, perm,
261 serialized, sticky);
262 reply.writeNoException();
263 reply.writeInt(res);
264 return true;
265 }
266
267 case UNBROADCAST_INTENT_TRANSACTION:
268 {
269 data.enforceInterface(IActivityManager.descriptor);
270 IBinder b = data.readStrongBinder();
271 IApplicationThread app = b != null ? ApplicationThreadNative.asInterface(b) : null;
272 Intent intent = Intent.CREATOR.createFromParcel(data);
273 unbroadcastIntent(app, intent);
274 reply.writeNoException();
275 return true;
276 }
277
278 case FINISH_RECEIVER_TRANSACTION: {
279 data.enforceInterface(IActivityManager.descriptor);
280 IBinder who = data.readStrongBinder();
281 int resultCode = data.readInt();
282 String resultData = data.readString();
283 Bundle resultExtras = data.readBundle();
284 boolean resultAbort = data.readInt() != 0;
285 if (who != null) {
286 finishReceiver(who, resultCode, resultData, resultExtras, resultAbort);
287 }
288 reply.writeNoException();
289 return true;
290 }
291
292 case SET_PERSISTENT_TRANSACTION: {
293 data.enforceInterface(IActivityManager.descriptor);
294 IBinder token = data.readStrongBinder();
295 boolean isPersistent = data.readInt() != 0;
296 if (token != null) {
297 setPersistent(token, isPersistent);
298 }
299 reply.writeNoException();
300 return true;
301 }
302
303 case ATTACH_APPLICATION_TRANSACTION: {
304 data.enforceInterface(IActivityManager.descriptor);
305 IApplicationThread app = ApplicationThreadNative.asInterface(
306 data.readStrongBinder());
307 if (app != null) {
308 attachApplication(app);
309 }
310 reply.writeNoException();
311 return true;
312 }
313
314 case ACTIVITY_IDLE_TRANSACTION: {
315 data.enforceInterface(IActivityManager.descriptor);
316 IBinder token = data.readStrongBinder();
317 if (token != null) {
318 activityIdle(token);
319 }
320 reply.writeNoException();
321 return true;
322 }
323
324 case ACTIVITY_PAUSED_TRANSACTION: {
325 data.enforceInterface(IActivityManager.descriptor);
326 IBinder token = data.readStrongBinder();
327 Bundle map = data.readBundle();
328 activityPaused(token, map);
329 reply.writeNoException();
330 return true;
331 }
332
333 case ACTIVITY_STOPPED_TRANSACTION: {
334 data.enforceInterface(IActivityManager.descriptor);
335 IBinder token = data.readStrongBinder();
336 Bitmap thumbnail = data.readInt() != 0
337 ? Bitmap.CREATOR.createFromParcel(data) : null;
338 CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
339 activityStopped(token, thumbnail, description);
340 reply.writeNoException();
341 return true;
342 }
343
344 case ACTIVITY_DESTROYED_TRANSACTION: {
345 data.enforceInterface(IActivityManager.descriptor);
346 IBinder token = data.readStrongBinder();
347 activityDestroyed(token);
348 reply.writeNoException();
349 return true;
350 }
351
352 case GET_CALLING_PACKAGE_TRANSACTION: {
353 data.enforceInterface(IActivityManager.descriptor);
354 IBinder token = data.readStrongBinder();
355 String res = token != null ? getCallingPackage(token) : null;
356 reply.writeNoException();
357 reply.writeString(res);
358 return true;
359 }
360
361 case GET_CALLING_ACTIVITY_TRANSACTION: {
362 data.enforceInterface(IActivityManager.descriptor);
363 IBinder token = data.readStrongBinder();
364 ComponentName cn = getCallingActivity(token);
365 reply.writeNoException();
366 ComponentName.writeToParcel(cn, reply);
367 return true;
368 }
369
370 case GET_TASKS_TRANSACTION: {
371 data.enforceInterface(IActivityManager.descriptor);
372 int maxNum = data.readInt();
373 int fl = data.readInt();
374 IBinder receiverBinder = data.readStrongBinder();
375 IThumbnailReceiver receiver = receiverBinder != null
376 ? IThumbnailReceiver.Stub.asInterface(receiverBinder)
377 : null;
378 List list = getTasks(maxNum, fl, receiver);
379 reply.writeNoException();
380 int N = list != null ? list.size() : -1;
381 reply.writeInt(N);
382 int i;
383 for (i=0; i<N; i++) {
384 ActivityManager.RunningTaskInfo info =
385 (ActivityManager.RunningTaskInfo)list.get(i);
386 info.writeToParcel(reply, 0);
387 }
388 return true;
389 }
390
391 case GET_RECENT_TASKS_TRANSACTION: {
392 data.enforceInterface(IActivityManager.descriptor);
393 int maxNum = data.readInt();
394 int fl = data.readInt();
395 List<ActivityManager.RecentTaskInfo> list = getRecentTasks(maxNum,
396 fl);
397 reply.writeNoException();
398 reply.writeTypedList(list);
399 return true;
400 }
401
402 case GET_SERVICES_TRANSACTION: {
403 data.enforceInterface(IActivityManager.descriptor);
404 int maxNum = data.readInt();
405 int fl = data.readInt();
406 List list = getServices(maxNum, fl);
407 reply.writeNoException();
408 int N = list != null ? list.size() : -1;
409 reply.writeInt(N);
410 int i;
411 for (i=0; i<N; i++) {
412 ActivityManager.RunningServiceInfo info =
413 (ActivityManager.RunningServiceInfo)list.get(i);
414 info.writeToParcel(reply, 0);
415 }
416 return true;
417 }
418
419 case GET_PROCESSES_IN_ERROR_STATE_TRANSACTION: {
420 data.enforceInterface(IActivityManager.descriptor);
421 List<ActivityManager.ProcessErrorStateInfo> list = getProcessesInErrorState();
422 reply.writeNoException();
423 reply.writeTypedList(list);
424 return true;
425 }
426
427 case GET_RUNNING_APP_PROCESSES_TRANSACTION: {
428 data.enforceInterface(IActivityManager.descriptor);
429 List<ActivityManager.RunningAppProcessInfo> list = getRunningAppProcesses();
430 reply.writeNoException();
431 reply.writeTypedList(list);
432 return true;
433 }
434
435 case MOVE_TASK_TO_FRONT_TRANSACTION: {
436 data.enforceInterface(IActivityManager.descriptor);
437 int task = data.readInt();
438 moveTaskToFront(task);
439 reply.writeNoException();
440 return true;
441 }
442
443 case MOVE_TASK_TO_BACK_TRANSACTION: {
444 data.enforceInterface(IActivityManager.descriptor);
445 int task = data.readInt();
446 moveTaskToBack(task);
447 reply.writeNoException();
448 return true;
449 }
450
451 case MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION: {
452 data.enforceInterface(IActivityManager.descriptor);
453 IBinder token = data.readStrongBinder();
454 boolean nonRoot = data.readInt() != 0;
455 boolean res = moveActivityTaskToBack(token, nonRoot);
456 reply.writeNoException();
457 reply.writeInt(res ? 1 : 0);
458 return true;
459 }
460
461 case MOVE_TASK_BACKWARDS_TRANSACTION: {
462 data.enforceInterface(IActivityManager.descriptor);
463 int task = data.readInt();
464 moveTaskBackwards(task);
465 reply.writeNoException();
466 return true;
467 }
468
469 case GET_TASK_FOR_ACTIVITY_TRANSACTION: {
470 data.enforceInterface(IActivityManager.descriptor);
471 IBinder token = data.readStrongBinder();
472 boolean onlyRoot = data.readInt() != 0;
473 int res = token != null
474 ? getTaskForActivity(token, onlyRoot) : -1;
475 reply.writeNoException();
476 reply.writeInt(res);
477 return true;
478 }
479
480 case FINISH_OTHER_INSTANCES_TRANSACTION: {
481 data.enforceInterface(IActivityManager.descriptor);
482 IBinder token = data.readStrongBinder();
483 ComponentName className = ComponentName.readFromParcel(data);
484 finishOtherInstances(token, className);
485 reply.writeNoException();
486 return true;
487 }
488
489 case REPORT_THUMBNAIL_TRANSACTION: {
490 data.enforceInterface(IActivityManager.descriptor);
491 IBinder token = data.readStrongBinder();
492 Bitmap thumbnail = data.readInt() != 0
493 ? Bitmap.CREATOR.createFromParcel(data) : null;
494 CharSequence description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
495 reportThumbnail(token, thumbnail, description);
496 reply.writeNoException();
497 return true;
498 }
499
500 case GET_CONTENT_PROVIDER_TRANSACTION: {
501 data.enforceInterface(IActivityManager.descriptor);
502 IBinder b = data.readStrongBinder();
503 IApplicationThread app = ApplicationThreadNative.asInterface(b);
504 String name = data.readString();
505 ContentProviderHolder cph = getContentProvider(app, name);
506 reply.writeNoException();
507 if (cph != null) {
508 reply.writeInt(1);
509 cph.writeToParcel(reply, 0);
510 } else {
511 reply.writeInt(0);
512 }
513 return true;
514 }
515
516 case PUBLISH_CONTENT_PROVIDERS_TRANSACTION: {
517 data.enforceInterface(IActivityManager.descriptor);
518 IBinder b = data.readStrongBinder();
519 IApplicationThread app = ApplicationThreadNative.asInterface(b);
520 ArrayList<ContentProviderHolder> providers =
521 data.createTypedArrayList(ContentProviderHolder.CREATOR);
522 publishContentProviders(app, providers);
523 reply.writeNoException();
524 return true;
525 }
526
527 case REMOVE_CONTENT_PROVIDER_TRANSACTION: {
528 data.enforceInterface(IActivityManager.descriptor);
529 IBinder b = data.readStrongBinder();
530 IApplicationThread app = ApplicationThreadNative.asInterface(b);
531 String name = data.readString();
532 removeContentProvider(app, name);
533 reply.writeNoException();
534 return true;
535 }
536
Dianne Hackborndd9b82c2009-09-03 00:18:47 -0700537 case GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION: {
538 data.enforceInterface(IActivityManager.descriptor);
539 ComponentName comp = ComponentName.CREATOR.createFromParcel(data);
540 PendingIntent pi = getRunningServiceControlPanel(comp);
541 reply.writeNoException();
542 PendingIntent.writePendingIntentOrNullToParcel(pi, reply);
543 return true;
544 }
545
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800546 case START_SERVICE_TRANSACTION: {
547 data.enforceInterface(IActivityManager.descriptor);
548 IBinder b = data.readStrongBinder();
549 IApplicationThread app = ApplicationThreadNative.asInterface(b);
550 Intent service = Intent.CREATOR.createFromParcel(data);
551 String resolvedType = data.readString();
552 ComponentName cn = startService(app, service, resolvedType);
553 reply.writeNoException();
554 ComponentName.writeToParcel(cn, reply);
555 return true;
556 }
557
558 case STOP_SERVICE_TRANSACTION: {
559 data.enforceInterface(IActivityManager.descriptor);
560 IBinder b = data.readStrongBinder();
561 IApplicationThread app = ApplicationThreadNative.asInterface(b);
562 Intent service = Intent.CREATOR.createFromParcel(data);
563 String resolvedType = data.readString();
564 int res = stopService(app, service, resolvedType);
565 reply.writeNoException();
566 reply.writeInt(res);
567 return true;
568 }
569
570 case STOP_SERVICE_TOKEN_TRANSACTION: {
571 data.enforceInterface(IActivityManager.descriptor);
572 ComponentName className = ComponentName.readFromParcel(data);
573 IBinder token = data.readStrongBinder();
574 int startId = data.readInt();
575 boolean res = stopServiceToken(className, token, startId);
576 reply.writeNoException();
577 reply.writeInt(res ? 1 : 0);
578 return true;
579 }
580
581 case SET_SERVICE_FOREGROUND_TRANSACTION: {
582 data.enforceInterface(IActivityManager.descriptor);
583 ComponentName className = ComponentName.readFromParcel(data);
584 IBinder token = data.readStrongBinder();
Dianne Hackbornd8a43f62009-08-17 23:33:56 -0700585 int id = data.readInt();
586 Notification notification = null;
587 if (data.readInt() != 0) {
588 notification = Notification.CREATOR.createFromParcel(data);
589 }
590 boolean removeNotification = data.readInt() != 0;
591 setServiceForeground(className, token, id, notification, removeNotification);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800592 reply.writeNoException();
593 return true;
594 }
595
596 case BIND_SERVICE_TRANSACTION: {
597 data.enforceInterface(IActivityManager.descriptor);
598 IBinder b = data.readStrongBinder();
599 IApplicationThread app = ApplicationThreadNative.asInterface(b);
600 IBinder token = data.readStrongBinder();
601 Intent service = Intent.CREATOR.createFromParcel(data);
602 String resolvedType = data.readString();
603 b = data.readStrongBinder();
604 int fl = data.readInt();
605 IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
606 int res = bindService(app, token, service, resolvedType, conn, fl);
607 reply.writeNoException();
608 reply.writeInt(res);
609 return true;
610 }
611
612 case UNBIND_SERVICE_TRANSACTION: {
613 data.enforceInterface(IActivityManager.descriptor);
614 IBinder b = data.readStrongBinder();
615 IServiceConnection conn = IServiceConnection.Stub.asInterface(b);
616 boolean res = unbindService(conn);
617 reply.writeNoException();
618 reply.writeInt(res ? 1 : 0);
619 return true;
620 }
621
622 case PUBLISH_SERVICE_TRANSACTION: {
623 data.enforceInterface(IActivityManager.descriptor);
624 IBinder token = data.readStrongBinder();
625 Intent intent = Intent.CREATOR.createFromParcel(data);
626 IBinder service = data.readStrongBinder();
627 publishService(token, intent, service);
628 reply.writeNoException();
629 return true;
630 }
631
632 case UNBIND_FINISHED_TRANSACTION: {
633 data.enforceInterface(IActivityManager.descriptor);
634 IBinder token = data.readStrongBinder();
635 Intent intent = Intent.CREATOR.createFromParcel(data);
636 boolean doRebind = data.readInt() != 0;
637 unbindFinished(token, intent, doRebind);
638 reply.writeNoException();
639 return true;
640 }
641
642 case SERVICE_DONE_EXECUTING_TRANSACTION: {
643 data.enforceInterface(IActivityManager.descriptor);
644 IBinder token = data.readStrongBinder();
Dianne Hackbornf6f9f2d2009-08-21 16:26:03 -0700645 int type = data.readInt();
646 int startId = data.readInt();
647 int res = data.readInt();
648 serviceDoneExecuting(token, type, startId, res);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800649 reply.writeNoException();
650 return true;
651 }
652
653 case START_INSTRUMENTATION_TRANSACTION: {
654 data.enforceInterface(IActivityManager.descriptor);
655 ComponentName className = ComponentName.readFromParcel(data);
656 String profileFile = data.readString();
657 int fl = data.readInt();
658 Bundle arguments = data.readBundle();
659 IBinder b = data.readStrongBinder();
660 IInstrumentationWatcher w = IInstrumentationWatcher.Stub.asInterface(b);
661 boolean res = startInstrumentation(className, profileFile, fl, arguments, w);
662 reply.writeNoException();
663 reply.writeInt(res ? 1 : 0);
664 return true;
665 }
666
667
668 case FINISH_INSTRUMENTATION_TRANSACTION: {
669 data.enforceInterface(IActivityManager.descriptor);
670 IBinder b = data.readStrongBinder();
671 IApplicationThread app = ApplicationThreadNative.asInterface(b);
672 int resultCode = data.readInt();
673 Bundle results = data.readBundle();
674 finishInstrumentation(app, resultCode, results);
675 reply.writeNoException();
676 return true;
677 }
678
679 case GET_CONFIGURATION_TRANSACTION: {
680 data.enforceInterface(IActivityManager.descriptor);
681 Configuration config = getConfiguration();
682 reply.writeNoException();
683 config.writeToParcel(reply, 0);
684 return true;
685 }
686
687 case UPDATE_CONFIGURATION_TRANSACTION: {
688 data.enforceInterface(IActivityManager.descriptor);
689 Configuration config = Configuration.CREATOR.createFromParcel(data);
690 updateConfiguration(config);
691 reply.writeNoException();
692 return true;
693 }
694
695 case SET_REQUESTED_ORIENTATION_TRANSACTION: {
696 data.enforceInterface(IActivityManager.descriptor);
697 IBinder token = data.readStrongBinder();
698 int requestedOrientation = data.readInt();
699 setRequestedOrientation(token, requestedOrientation);
700 reply.writeNoException();
701 return true;
702 }
703
704 case GET_REQUESTED_ORIENTATION_TRANSACTION: {
705 data.enforceInterface(IActivityManager.descriptor);
706 IBinder token = data.readStrongBinder();
707 int req = getRequestedOrientation(token);
708 reply.writeNoException();
709 reply.writeInt(req);
710 return true;
711 }
712
713 case GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION: {
714 data.enforceInterface(IActivityManager.descriptor);
715 IBinder token = data.readStrongBinder();
716 ComponentName cn = getActivityClassForToken(token);
717 reply.writeNoException();
718 ComponentName.writeToParcel(cn, reply);
719 return true;
720 }
721
722 case GET_PACKAGE_FOR_TOKEN_TRANSACTION: {
723 data.enforceInterface(IActivityManager.descriptor);
724 IBinder token = data.readStrongBinder();
725 reply.writeNoException();
726 reply.writeString(getPackageForToken(token));
727 return true;
728 }
729
730 case GET_INTENT_SENDER_TRANSACTION: {
731 data.enforceInterface(IActivityManager.descriptor);
732 int type = data.readInt();
733 String packageName = data.readString();
734 IBinder token = data.readStrongBinder();
735 String resultWho = data.readString();
736 int requestCode = data.readInt();
737 Intent requestIntent = data.readInt() != 0
738 ? Intent.CREATOR.createFromParcel(data) : null;
739 String requestResolvedType = data.readString();
740 int fl = data.readInt();
741 IIntentSender res = getIntentSender(type, packageName, token,
742 resultWho, requestCode, requestIntent,
743 requestResolvedType, fl);
744 reply.writeNoException();
745 reply.writeStrongBinder(res != null ? res.asBinder() : null);
746 return true;
747 }
748
749 case CANCEL_INTENT_SENDER_TRANSACTION: {
750 data.enforceInterface(IActivityManager.descriptor);
751 IIntentSender r = IIntentSender.Stub.asInterface(
752 data.readStrongBinder());
753 cancelIntentSender(r);
754 reply.writeNoException();
755 return true;
756 }
757
758 case GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION: {
759 data.enforceInterface(IActivityManager.descriptor);
760 IIntentSender r = IIntentSender.Stub.asInterface(
761 data.readStrongBinder());
762 String res = getPackageForIntentSender(r);
763 reply.writeNoException();
764 reply.writeString(res);
765 return true;
766 }
767
768 case SET_PROCESS_LIMIT_TRANSACTION: {
769 data.enforceInterface(IActivityManager.descriptor);
770 int max = data.readInt();
771 setProcessLimit(max);
772 reply.writeNoException();
773 return true;
774 }
775
776 case GET_PROCESS_LIMIT_TRANSACTION: {
777 data.enforceInterface(IActivityManager.descriptor);
778 int limit = getProcessLimit();
779 reply.writeNoException();
780 reply.writeInt(limit);
781 return true;
782 }
783
784 case SET_PROCESS_FOREGROUND_TRANSACTION: {
785 data.enforceInterface(IActivityManager.descriptor);
786 IBinder token = data.readStrongBinder();
787 int pid = data.readInt();
788 boolean isForeground = data.readInt() != 0;
789 setProcessForeground(token, pid, isForeground);
790 reply.writeNoException();
791 return true;
792 }
793
794 case CHECK_PERMISSION_TRANSACTION: {
795 data.enforceInterface(IActivityManager.descriptor);
796 String perm = data.readString();
797 int pid = data.readInt();
798 int uid = data.readInt();
799 int res = checkPermission(perm, pid, uid);
800 reply.writeNoException();
801 reply.writeInt(res);
802 return true;
803 }
804
805 case CHECK_URI_PERMISSION_TRANSACTION: {
806 data.enforceInterface(IActivityManager.descriptor);
807 Uri uri = Uri.CREATOR.createFromParcel(data);
808 int pid = data.readInt();
809 int uid = data.readInt();
810 int mode = data.readInt();
811 int res = checkUriPermission(uri, pid, uid, mode);
812 reply.writeNoException();
813 reply.writeInt(res);
814 return true;
815 }
816
817 case CLEAR_APP_DATA_TRANSACTION: {
818 data.enforceInterface(IActivityManager.descriptor);
819 String packageName = data.readString();
820 IPackageDataObserver observer = IPackageDataObserver.Stub.asInterface(
821 data.readStrongBinder());
822 boolean res = clearApplicationUserData(packageName, observer);
823 reply.writeNoException();
824 reply.writeInt(res ? 1 : 0);
825 return true;
826 }
827
828 case GRANT_URI_PERMISSION_TRANSACTION: {
829 data.enforceInterface(IActivityManager.descriptor);
830 IBinder b = data.readStrongBinder();
831 IApplicationThread app = ApplicationThreadNative.asInterface(b);
832 String targetPkg = data.readString();
833 Uri uri = Uri.CREATOR.createFromParcel(data);
834 int mode = data.readInt();
835 grantUriPermission(app, targetPkg, uri, mode);
836 reply.writeNoException();
837 return true;
838 }
839
840 case REVOKE_URI_PERMISSION_TRANSACTION: {
841 data.enforceInterface(IActivityManager.descriptor);
842 IBinder b = data.readStrongBinder();
843 IApplicationThread app = ApplicationThreadNative.asInterface(b);
844 Uri uri = Uri.CREATOR.createFromParcel(data);
845 int mode = data.readInt();
846 revokeUriPermission(app, uri, mode);
847 reply.writeNoException();
848 return true;
849 }
850
851 case SHOW_WAITING_FOR_DEBUGGER_TRANSACTION: {
852 data.enforceInterface(IActivityManager.descriptor);
853 IBinder b = data.readStrongBinder();
854 IApplicationThread app = ApplicationThreadNative.asInterface(b);
855 boolean waiting = data.readInt() != 0;
856 showWaitingForDebugger(app, waiting);
857 reply.writeNoException();
858 return true;
859 }
860
861 case GET_MEMORY_INFO_TRANSACTION: {
862 data.enforceInterface(IActivityManager.descriptor);
863 ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
864 getMemoryInfo(mi);
865 reply.writeNoException();
866 mi.writeToParcel(reply, 0);
867 return true;
868 }
869
870 case UNHANDLED_BACK_TRANSACTION: {
871 data.enforceInterface(IActivityManager.descriptor);
872 unhandledBack();
873 reply.writeNoException();
874 return true;
875 }
876
877 case OPEN_CONTENT_URI_TRANSACTION: {
878 data.enforceInterface(IActivityManager.descriptor);
879 Uri uri = Uri.parse(data.readString());
880 ParcelFileDescriptor pfd = openContentUri(uri);
881 reply.writeNoException();
882 if (pfd != null) {
883 reply.writeInt(1);
884 pfd.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
885 } else {
886 reply.writeInt(0);
887 }
888 return true;
889 }
890
891 case GOING_TO_SLEEP_TRANSACTION: {
892 data.enforceInterface(IActivityManager.descriptor);
893 goingToSleep();
894 reply.writeNoException();
895 return true;
896 }
897
898 case WAKING_UP_TRANSACTION: {
899 data.enforceInterface(IActivityManager.descriptor);
900 wakingUp();
901 reply.writeNoException();
902 return true;
903 }
904
905 case SET_DEBUG_APP_TRANSACTION: {
906 data.enforceInterface(IActivityManager.descriptor);
907 String pn = data.readString();
908 boolean wfd = data.readInt() != 0;
909 boolean per = data.readInt() != 0;
910 setDebugApp(pn, wfd, per);
911 reply.writeNoException();
912 return true;
913 }
914
915 case SET_ALWAYS_FINISH_TRANSACTION: {
916 data.enforceInterface(IActivityManager.descriptor);
917 boolean enabled = data.readInt() != 0;
918 setAlwaysFinish(enabled);
919 reply.writeNoException();
920 return true;
921 }
922
Dianne Hackbornb06ea702009-07-13 13:07:51 -0700923 case SET_ACTIVITY_CONTROLLER_TRANSACTION: {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800924 data.enforceInterface(IActivityManager.descriptor);
Dianne Hackbornb06ea702009-07-13 13:07:51 -0700925 IActivityController watcher = IActivityController.Stub.asInterface(
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800926 data.readStrongBinder());
Dianne Hackbornb06ea702009-07-13 13:07:51 -0700927 setActivityController(watcher);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800928 return true;
929 }
930
931 case ENTER_SAFE_MODE_TRANSACTION: {
932 data.enforceInterface(IActivityManager.descriptor);
933 enterSafeMode();
934 reply.writeNoException();
935 return true;
936 }
937
938 case NOTE_WAKEUP_ALARM_TRANSACTION: {
939 data.enforceInterface(IActivityManager.descriptor);
940 IIntentSender is = IIntentSender.Stub.asInterface(
941 data.readStrongBinder());
942 noteWakeupAlarm(is);
943 reply.writeNoException();
944 return true;
945 }
946
947 case KILL_PIDS_FOR_MEMORY_TRANSACTION: {
948 data.enforceInterface(IActivityManager.descriptor);
949 int[] pids = data.createIntArray();
950 boolean res = killPidsForMemory(pids);
951 reply.writeNoException();
952 reply.writeInt(res ? 1 : 0);
953 return true;
954 }
955
956 case REPORT_PSS_TRANSACTION: {
957 data.enforceInterface(IActivityManager.descriptor);
958 IBinder b = data.readStrongBinder();
959 IApplicationThread app = ApplicationThreadNative.asInterface(b);
960 int pss = data.readInt();
961 reportPss(app, pss);
962 reply.writeNoException();
963 return true;
964 }
965
966 case START_RUNNING_TRANSACTION: {
967 data.enforceInterface(IActivityManager.descriptor);
968 String pkg = data.readString();
969 String cls = data.readString();
970 String action = data.readString();
971 String indata = data.readString();
972 startRunning(pkg, cls, action, indata);
973 reply.writeNoException();
974 return true;
975 }
976
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800977 case HANDLE_APPLICATION_ERROR_TRANSACTION: {
978 data.enforceInterface(IActivityManager.descriptor);
979 IBinder app = data.readStrongBinder();
980 int fl = data.readInt();
981 String tag = data.readString();
982 String shortMsg = data.readString();
983 String longMsg = data.readString();
984 byte[] crashData = data.createByteArray();
985 int res = handleApplicationError(app, fl, tag, shortMsg, longMsg,
986 crashData);
987 reply.writeNoException();
988 reply.writeInt(res);
989 return true;
990 }
991
992 case SIGNAL_PERSISTENT_PROCESSES_TRANSACTION: {
993 data.enforceInterface(IActivityManager.descriptor);
994 int sig = data.readInt();
995 signalPersistentProcesses(sig);
996 reply.writeNoException();
997 return true;
998 }
999
1000 case RESTART_PACKAGE_TRANSACTION: {
1001 data.enforceInterface(IActivityManager.descriptor);
1002 String packageName = data.readString();
1003 restartPackage(packageName);
1004 reply.writeNoException();
1005 return true;
1006 }
1007
1008 case GET_DEVICE_CONFIGURATION_TRANSACTION: {
1009 data.enforceInterface(IActivityManager.descriptor);
1010 ConfigurationInfo config = getDeviceConfigurationInfo();
1011 reply.writeNoException();
1012 config.writeToParcel(reply, 0);
1013 return true;
1014 }
1015
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08001016 case PROFILE_CONTROL_TRANSACTION: {
1017 data.enforceInterface(IActivityManager.descriptor);
1018 String process = data.readString();
1019 boolean start = data.readInt() != 0;
1020 String path = data.readString();
Dianne Hackborn9c8dd552009-06-23 19:22:52 -07001021 ParcelFileDescriptor fd = data.readInt() != 0
1022 ? data.readFileDescriptor() : null;
1023 boolean res = profileControl(process, start, path, fd);
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08001024 reply.writeNoException();
1025 reply.writeInt(res ? 1 : 0);
1026 return true;
1027 }
1028
Dianne Hackborn55280a92009-05-07 15:53:46 -07001029 case SHUTDOWN_TRANSACTION: {
1030 data.enforceInterface(IActivityManager.descriptor);
1031 boolean res = shutdown(data.readInt());
1032 reply.writeNoException();
1033 reply.writeInt(res ? 1 : 0);
1034 return true;
1035 }
1036
Dianne Hackborn95fc68f2009-05-19 18:37:45 -07001037 case STOP_APP_SWITCHES_TRANSACTION: {
1038 data.enforceInterface(IActivityManager.descriptor);
1039 stopAppSwitches();
1040 reply.writeNoException();
1041 return true;
1042 }
1043
1044 case RESUME_APP_SWITCHES_TRANSACTION: {
1045 data.enforceInterface(IActivityManager.descriptor);
1046 resumeAppSwitches();
1047 reply.writeNoException();
1048 return true;
1049 }
1050
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001051 case PEEK_SERVICE_TRANSACTION: {
1052 data.enforceInterface(IActivityManager.descriptor);
1053 Intent service = Intent.CREATOR.createFromParcel(data);
1054 String resolvedType = data.readString();
1055 IBinder binder = peekService(service, resolvedType);
1056 reply.writeNoException();
1057 reply.writeStrongBinder(binder);
1058 return true;
1059 }
Christopher Tate181fafa2009-05-14 11:12:14 -07001060
1061 case START_BACKUP_AGENT_TRANSACTION: {
1062 data.enforceInterface(IActivityManager.descriptor);
1063 ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1064 int backupRestoreMode = data.readInt();
1065 boolean success = bindBackupAgent(info, backupRestoreMode);
1066 reply.writeNoException();
1067 reply.writeInt(success ? 1 : 0);
1068 return true;
1069 }
1070
1071 case BACKUP_AGENT_CREATED_TRANSACTION: {
1072 data.enforceInterface(IActivityManager.descriptor);
1073 String packageName = data.readString();
1074 IBinder agent = data.readStrongBinder();
1075 backupAgentCreated(packageName, agent);
1076 reply.writeNoException();
1077 return true;
1078 }
1079
1080 case UNBIND_BACKUP_AGENT_TRANSACTION: {
1081 data.enforceInterface(IActivityManager.descriptor);
1082 ApplicationInfo info = ApplicationInfo.CREATOR.createFromParcel(data);
1083 unbindBackupAgent(info);
1084 reply.writeNoException();
1085 return true;
1086 }
Dianne Hackbornb06ea702009-07-13 13:07:51 -07001087
1088 case REGISTER_ACTIVITY_WATCHER_TRANSACTION: {
1089 data.enforceInterface(IActivityManager.descriptor);
1090 IActivityWatcher watcher = IActivityWatcher.Stub.asInterface(
1091 data.readStrongBinder());
1092 registerActivityWatcher(watcher);
1093 return true;
1094 }
1095
1096 case UNREGISTER_ACTIVITY_WATCHER_TRANSACTION: {
1097 data.enforceInterface(IActivityManager.descriptor);
1098 IActivityWatcher watcher = IActivityWatcher.Stub.asInterface(
1099 data.readStrongBinder());
1100 unregisterActivityWatcher(watcher);
1101 return true;
1102 }
Dianne Hackborn2d91af02009-07-16 13:34:33 -07001103
1104 case START_ACTIVITY_IN_PACKAGE_TRANSACTION:
1105 {
1106 data.enforceInterface(IActivityManager.descriptor);
1107 int uid = data.readInt();
1108 Intent intent = Intent.CREATOR.createFromParcel(data);
1109 String resolvedType = data.readString();
1110 IBinder resultTo = data.readStrongBinder();
1111 String resultWho = data.readString();
1112 int requestCode = data.readInt();
1113 boolean onlyIfNeeded = data.readInt() != 0;
1114 int result = startActivityInPackage(uid, intent, resolvedType,
1115 resultTo, resultWho, requestCode, onlyIfNeeded);
1116 reply.writeNoException();
1117 reply.writeInt(result);
1118 return true;
1119 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07001120
Suchi Amalapurapu261e66a2009-07-27 15:21:34 -07001121 case KILL_APPLICATION_WITH_UID_TRANSACTION: {
1122 data.enforceInterface(IActivityManager.descriptor);
1123 String pkg = data.readString();
1124 int uid = data.readInt();
1125 killApplicationWithUid(pkg, uid);
1126 reply.writeNoException();
1127 return true;
1128 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07001129
1130 case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
1131 data.enforceInterface(IActivityManager.descriptor);
1132 String reason = data.readString();
1133 closeSystemDialogs(reason);
1134 reply.writeNoException();
1135 return true;
1136 }
Dianne Hackborn3025ef32009-08-31 21:31:47 -07001137
1138 case GET_PROCESS_MEMORY_INFO_TRANSACTION: {
1139 data.enforceInterface(IActivityManager.descriptor);
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07001140 int[] pids = data.createIntArray();
1141 Debug.MemoryInfo[] res = getProcessMemoryInfo(pids);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07001142 reply.writeNoException();
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07001143 reply.writeTypedArray(res, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07001144 return true;
1145 }
Christopher Tate5e1ab332009-09-01 20:32:49 -07001146
1147 case KILL_APPLICATION_PROCESS_TRANSACTION: {
1148 data.enforceInterface(IActivityManager.descriptor);
1149 String processName = data.readString();
1150 int uid = data.readInt();
1151 killApplicationProcess(processName, uid);
1152 reply.writeNoException();
1153 return true;
1154 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001155 }
1156
1157 return super.onTransact(code, data, reply, flags);
1158 }
1159
1160 public IBinder asBinder()
1161 {
1162 return this;
1163 }
1164
1165 private static IActivityManager gDefault;
1166}
1167
1168class ActivityManagerProxy implements IActivityManager
1169{
1170 public ActivityManagerProxy(IBinder remote)
1171 {
1172 mRemote = remote;
1173 }
1174
1175 public IBinder asBinder()
1176 {
1177 return mRemote;
1178 }
1179
1180 public int startActivity(IApplicationThread caller, Intent intent,
1181 String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1182 IBinder resultTo, String resultWho,
1183 int requestCode, boolean onlyIfNeeded,
1184 boolean debug) throws RemoteException {
1185 Parcel data = Parcel.obtain();
1186 Parcel reply = Parcel.obtain();
1187 data.writeInterfaceToken(IActivityManager.descriptor);
1188 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1189 intent.writeToParcel(data, 0);
1190 data.writeString(resolvedType);
1191 data.writeTypedArray(grantedUriPermissions, 0);
1192 data.writeInt(grantedMode);
1193 data.writeStrongBinder(resultTo);
1194 data.writeString(resultWho);
1195 data.writeInt(requestCode);
1196 data.writeInt(onlyIfNeeded ? 1 : 0);
1197 data.writeInt(debug ? 1 : 0);
1198 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1199 reply.readException();
1200 int result = reply.readInt();
1201 reply.recycle();
1202 data.recycle();
1203 return result;
1204 }
Dianne Hackbornbcbcaa72009-09-10 10:54:46 -07001205 public int startActivityPendingIntent(IApplicationThread caller,
1206 PendingIntent intent, Intent fillInIntent, String resolvedType,
1207 IBinder resultTo, String resultWho, int requestCode,
1208 int flagsMask, int flagsValues) throws RemoteException {
1209 Parcel data = Parcel.obtain();
1210 Parcel reply = Parcel.obtain();
1211 data.writeInterfaceToken(IActivityManager.descriptor);
1212 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1213 intent.writeToParcel(data, 0);
1214 if (fillInIntent != null) {
1215 data.writeInt(1);
1216 fillInIntent.writeToParcel(data, 0);
1217 } else {
1218 data.writeInt(0);
1219 }
1220 data.writeString(resolvedType);
1221 data.writeStrongBinder(resultTo);
1222 data.writeString(resultWho);
1223 data.writeInt(requestCode);
1224 data.writeInt(flagsMask);
1225 data.writeInt(flagsValues);
1226 mRemote.transact(START_ACTIVITY_PENDING_INTENT_TRANSACTION, data, reply, 0);
1227 reply.readException();
1228 int result = reply.readInt();
1229 reply.recycle();
1230 data.recycle();
1231 return result;
1232 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001233 public boolean startNextMatchingActivity(IBinder callingActivity,
1234 Intent intent) throws RemoteException {
1235 Parcel data = Parcel.obtain();
1236 Parcel reply = Parcel.obtain();
1237 data.writeInterfaceToken(IActivityManager.descriptor);
1238 data.writeStrongBinder(callingActivity);
1239 intent.writeToParcel(data, 0);
1240 mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
1241 reply.readException();
1242 int result = reply.readInt();
1243 reply.recycle();
1244 data.recycle();
1245 return result != 0;
1246 }
1247 public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
1248 throws RemoteException {
1249 Parcel data = Parcel.obtain();
1250 Parcel reply = Parcel.obtain();
1251 data.writeInterfaceToken(IActivityManager.descriptor);
1252 data.writeStrongBinder(token);
1253 data.writeInt(resultCode);
1254 if (resultData != null) {
1255 data.writeInt(1);
1256 resultData.writeToParcel(data, 0);
1257 } else {
1258 data.writeInt(0);
1259 }
1260 mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
1261 reply.readException();
1262 boolean res = reply.readInt() != 0;
1263 data.recycle();
1264 reply.recycle();
1265 return res;
1266 }
1267 public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
1268 {
1269 Parcel data = Parcel.obtain();
1270 Parcel reply = Parcel.obtain();
1271 data.writeInterfaceToken(IActivityManager.descriptor);
1272 data.writeStrongBinder(token);
1273 data.writeString(resultWho);
1274 data.writeInt(requestCode);
1275 mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
1276 reply.readException();
1277 data.recycle();
1278 reply.recycle();
1279 }
1280 public Intent registerReceiver(IApplicationThread caller,
1281 IIntentReceiver receiver,
1282 IntentFilter filter, String perm) throws RemoteException
1283 {
1284 Parcel data = Parcel.obtain();
1285 Parcel reply = Parcel.obtain();
1286 data.writeInterfaceToken(IActivityManager.descriptor);
1287 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1288 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1289 filter.writeToParcel(data, 0);
1290 data.writeString(perm);
1291 mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1292 reply.readException();
1293 Intent intent = null;
1294 int haveIntent = reply.readInt();
1295 if (haveIntent != 0) {
1296 intent = Intent.CREATOR.createFromParcel(reply);
1297 }
1298 reply.recycle();
1299 data.recycle();
1300 return intent;
1301 }
1302 public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
1303 {
1304 Parcel data = Parcel.obtain();
1305 Parcel reply = Parcel.obtain();
1306 data.writeInterfaceToken(IActivityManager.descriptor);
1307 data.writeStrongBinder(receiver.asBinder());
1308 mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1309 reply.readException();
1310 data.recycle();
1311 reply.recycle();
1312 }
1313 public int broadcastIntent(IApplicationThread caller,
1314 Intent intent, String resolvedType, IIntentReceiver resultTo,
1315 int resultCode, String resultData, Bundle map,
1316 String requiredPermission, boolean serialized,
1317 boolean sticky) throws RemoteException
1318 {
1319 Parcel data = Parcel.obtain();
1320 Parcel reply = Parcel.obtain();
1321 data.writeInterfaceToken(IActivityManager.descriptor);
1322 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1323 intent.writeToParcel(data, 0);
1324 data.writeString(resolvedType);
1325 data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
1326 data.writeInt(resultCode);
1327 data.writeString(resultData);
1328 data.writeBundle(map);
1329 data.writeString(requiredPermission);
1330 data.writeInt(serialized ? 1 : 0);
1331 data.writeInt(sticky ? 1 : 0);
1332 mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
1333 reply.readException();
1334 int res = reply.readInt();
1335 reply.recycle();
1336 data.recycle();
1337 return res;
1338 }
1339 public void unbroadcastIntent(IApplicationThread caller, Intent intent) throws RemoteException
1340 {
1341 Parcel data = Parcel.obtain();
1342 Parcel reply = Parcel.obtain();
1343 data.writeInterfaceToken(IActivityManager.descriptor);
1344 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1345 intent.writeToParcel(data, 0);
1346 mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
1347 reply.readException();
1348 data.recycle();
1349 reply.recycle();
1350 }
1351 public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
1352 {
1353 Parcel data = Parcel.obtain();
1354 Parcel reply = Parcel.obtain();
1355 data.writeInterfaceToken(IActivityManager.descriptor);
1356 data.writeStrongBinder(who);
1357 data.writeInt(resultCode);
1358 data.writeString(resultData);
1359 data.writeBundle(map);
1360 data.writeInt(abortBroadcast ? 1 : 0);
1361 mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1362 reply.readException();
1363 data.recycle();
1364 reply.recycle();
1365 }
1366 public void setPersistent(IBinder token, boolean isPersistent) throws RemoteException
1367 {
1368 Parcel data = Parcel.obtain();
1369 Parcel reply = Parcel.obtain();
1370 data.writeInterfaceToken(IActivityManager.descriptor);
1371 data.writeStrongBinder(token);
1372 data.writeInt(isPersistent ? 1 : 0);
1373 mRemote.transact(SET_PERSISTENT_TRANSACTION, data, reply, 0);
1374 reply.readException();
1375 data.recycle();
1376 reply.recycle();
1377 }
1378 public void attachApplication(IApplicationThread app) throws RemoteException
1379 {
1380 Parcel data = Parcel.obtain();
1381 Parcel reply = Parcel.obtain();
1382 data.writeInterfaceToken(IActivityManager.descriptor);
1383 data.writeStrongBinder(app.asBinder());
1384 mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
1385 reply.readException();
1386 data.recycle();
1387 reply.recycle();
1388 }
1389 public void activityIdle(IBinder token) throws RemoteException
1390 {
1391 Parcel data = Parcel.obtain();
1392 Parcel reply = Parcel.obtain();
1393 data.writeInterfaceToken(IActivityManager.descriptor);
1394 data.writeStrongBinder(token);
1395 mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1396 reply.readException();
1397 data.recycle();
1398 reply.recycle();
1399 }
1400 public void activityPaused(IBinder token, Bundle state) throws RemoteException
1401 {
1402 Parcel data = Parcel.obtain();
1403 Parcel reply = Parcel.obtain();
1404 data.writeInterfaceToken(IActivityManager.descriptor);
1405 data.writeStrongBinder(token);
1406 data.writeBundle(state);
1407 mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
1408 reply.readException();
1409 data.recycle();
1410 reply.recycle();
1411 }
1412 public void activityStopped(IBinder token,
1413 Bitmap thumbnail, CharSequence description) throws RemoteException
1414 {
1415 Parcel data = Parcel.obtain();
1416 Parcel reply = Parcel.obtain();
1417 data.writeInterfaceToken(IActivityManager.descriptor);
1418 data.writeStrongBinder(token);
1419 if (thumbnail != null) {
1420 data.writeInt(1);
1421 thumbnail.writeToParcel(data, 0);
1422 } else {
1423 data.writeInt(0);
1424 }
1425 TextUtils.writeToParcel(description, data, 0);
1426 mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1427 reply.readException();
1428 data.recycle();
1429 reply.recycle();
1430 }
1431 public void activityDestroyed(IBinder token) throws RemoteException
1432 {
1433 Parcel data = Parcel.obtain();
1434 Parcel reply = Parcel.obtain();
1435 data.writeInterfaceToken(IActivityManager.descriptor);
1436 data.writeStrongBinder(token);
1437 mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1438 reply.readException();
1439 data.recycle();
1440 reply.recycle();
1441 }
1442 public String getCallingPackage(IBinder token) throws RemoteException
1443 {
1444 Parcel data = Parcel.obtain();
1445 Parcel reply = Parcel.obtain();
1446 data.writeInterfaceToken(IActivityManager.descriptor);
1447 data.writeStrongBinder(token);
1448 mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
1449 reply.readException();
1450 String res = reply.readString();
1451 data.recycle();
1452 reply.recycle();
1453 return res;
1454 }
1455 public ComponentName getCallingActivity(IBinder token)
1456 throws RemoteException {
1457 Parcel data = Parcel.obtain();
1458 Parcel reply = Parcel.obtain();
1459 data.writeInterfaceToken(IActivityManager.descriptor);
1460 data.writeStrongBinder(token);
1461 mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
1462 reply.readException();
1463 ComponentName res = ComponentName.readFromParcel(reply);
1464 data.recycle();
1465 reply.recycle();
1466 return res;
1467 }
1468 public List getTasks(int maxNum, int flags,
1469 IThumbnailReceiver receiver) throws RemoteException {
1470 Parcel data = Parcel.obtain();
1471 Parcel reply = Parcel.obtain();
1472 data.writeInterfaceToken(IActivityManager.descriptor);
1473 data.writeInt(maxNum);
1474 data.writeInt(flags);
1475 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1476 mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
1477 reply.readException();
1478 ArrayList list = null;
1479 int N = reply.readInt();
1480 if (N >= 0) {
1481 list = new ArrayList();
1482 while (N > 0) {
1483 ActivityManager.RunningTaskInfo info =
1484 ActivityManager.RunningTaskInfo.CREATOR
1485 .createFromParcel(reply);
1486 list.add(info);
1487 N--;
1488 }
1489 }
1490 data.recycle();
1491 reply.recycle();
1492 return list;
1493 }
1494 public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
1495 int flags) throws RemoteException {
1496 Parcel data = Parcel.obtain();
1497 Parcel reply = Parcel.obtain();
1498 data.writeInterfaceToken(IActivityManager.descriptor);
1499 data.writeInt(maxNum);
1500 data.writeInt(flags);
1501 mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
1502 reply.readException();
1503 ArrayList<ActivityManager.RecentTaskInfo> list
1504 = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
1505 data.recycle();
1506 reply.recycle();
1507 return list;
1508 }
1509 public List getServices(int maxNum, int flags) throws RemoteException {
1510 Parcel data = Parcel.obtain();
1511 Parcel reply = Parcel.obtain();
1512 data.writeInterfaceToken(IActivityManager.descriptor);
1513 data.writeInt(maxNum);
1514 data.writeInt(flags);
1515 mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
1516 reply.readException();
1517 ArrayList list = null;
1518 int N = reply.readInt();
1519 if (N >= 0) {
1520 list = new ArrayList();
1521 while (N > 0) {
1522 ActivityManager.RunningServiceInfo info =
1523 ActivityManager.RunningServiceInfo.CREATOR
1524 .createFromParcel(reply);
1525 list.add(info);
1526 N--;
1527 }
1528 }
1529 data.recycle();
1530 reply.recycle();
1531 return list;
1532 }
1533 public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
1534 throws RemoteException {
1535 Parcel data = Parcel.obtain();
1536 Parcel reply = Parcel.obtain();
1537 data.writeInterfaceToken(IActivityManager.descriptor);
1538 mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
1539 reply.readException();
1540 ArrayList<ActivityManager.ProcessErrorStateInfo> list
1541 = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
1542 data.recycle();
1543 reply.recycle();
1544 return list;
1545 }
1546 public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
1547 throws RemoteException {
1548 Parcel data = Parcel.obtain();
1549 Parcel reply = Parcel.obtain();
1550 data.writeInterfaceToken(IActivityManager.descriptor);
1551 mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
1552 reply.readException();
1553 ArrayList<ActivityManager.RunningAppProcessInfo> list
1554 = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
1555 data.recycle();
1556 reply.recycle();
1557 return list;
1558 }
1559 public void moveTaskToFront(int task) throws RemoteException
1560 {
1561 Parcel data = Parcel.obtain();
1562 Parcel reply = Parcel.obtain();
1563 data.writeInterfaceToken(IActivityManager.descriptor);
1564 data.writeInt(task);
1565 mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
1566 reply.readException();
1567 data.recycle();
1568 reply.recycle();
1569 }
1570 public void moveTaskToBack(int task) throws RemoteException
1571 {
1572 Parcel data = Parcel.obtain();
1573 Parcel reply = Parcel.obtain();
1574 data.writeInterfaceToken(IActivityManager.descriptor);
1575 data.writeInt(task);
1576 mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1577 reply.readException();
1578 data.recycle();
1579 reply.recycle();
1580 }
1581 public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
1582 throws RemoteException {
1583 Parcel data = Parcel.obtain();
1584 Parcel reply = Parcel.obtain();
1585 data.writeInterfaceToken(IActivityManager.descriptor);
1586 data.writeStrongBinder(token);
1587 data.writeInt(nonRoot ? 1 : 0);
1588 mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1589 reply.readException();
1590 boolean res = reply.readInt() != 0;
1591 data.recycle();
1592 reply.recycle();
1593 return res;
1594 }
1595 public void moveTaskBackwards(int task) throws RemoteException
1596 {
1597 Parcel data = Parcel.obtain();
1598 Parcel reply = Parcel.obtain();
1599 data.writeInterfaceToken(IActivityManager.descriptor);
1600 data.writeInt(task);
1601 mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
1602 reply.readException();
1603 data.recycle();
1604 reply.recycle();
1605 }
1606 public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
1607 {
1608 Parcel data = Parcel.obtain();
1609 Parcel reply = Parcel.obtain();
1610 data.writeInterfaceToken(IActivityManager.descriptor);
1611 data.writeStrongBinder(token);
1612 data.writeInt(onlyRoot ? 1 : 0);
1613 mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
1614 reply.readException();
1615 int res = reply.readInt();
1616 data.recycle();
1617 reply.recycle();
1618 return res;
1619 }
1620 public void finishOtherInstances(IBinder token, ComponentName className) throws RemoteException
1621 {
1622 Parcel data = Parcel.obtain();
1623 Parcel reply = Parcel.obtain();
1624 data.writeInterfaceToken(IActivityManager.descriptor);
1625 data.writeStrongBinder(token);
1626 ComponentName.writeToParcel(className, data);
1627 mRemote.transact(FINISH_OTHER_INSTANCES_TRANSACTION, data, reply, 0);
1628 reply.readException();
1629 data.recycle();
1630 reply.recycle();
1631 }
1632 public void reportThumbnail(IBinder token,
1633 Bitmap thumbnail, CharSequence description) throws RemoteException
1634 {
1635 Parcel data = Parcel.obtain();
1636 Parcel reply = Parcel.obtain();
1637 data.writeInterfaceToken(IActivityManager.descriptor);
1638 data.writeStrongBinder(token);
1639 if (thumbnail != null) {
1640 data.writeInt(1);
1641 thumbnail.writeToParcel(data, 0);
1642 } else {
1643 data.writeInt(0);
1644 }
1645 TextUtils.writeToParcel(description, data, 0);
1646 mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1647 reply.readException();
1648 data.recycle();
1649 reply.recycle();
1650 }
1651 public ContentProviderHolder getContentProvider(IApplicationThread caller,
1652 String name) throws RemoteException
1653 {
1654 Parcel data = Parcel.obtain();
1655 Parcel reply = Parcel.obtain();
1656 data.writeInterfaceToken(IActivityManager.descriptor);
1657 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1658 data.writeString(name);
1659 mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1660 reply.readException();
1661 int res = reply.readInt();
1662 ContentProviderHolder cph = null;
1663 if (res != 0) {
1664 cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
1665 }
1666 data.recycle();
1667 reply.recycle();
1668 return cph;
1669 }
1670 public void publishContentProviders(IApplicationThread caller,
1671 List<ContentProviderHolder> providers) throws RemoteException
1672 {
1673 Parcel data = Parcel.obtain();
1674 Parcel reply = Parcel.obtain();
1675 data.writeInterfaceToken(IActivityManager.descriptor);
1676 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1677 data.writeTypedList(providers);
1678 mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
1679 reply.readException();
1680 data.recycle();
1681 reply.recycle();
1682 }
1683
1684 public void removeContentProvider(IApplicationThread caller,
1685 String name) throws RemoteException {
1686 Parcel data = Parcel.obtain();
1687 Parcel reply = Parcel.obtain();
1688 data.writeInterfaceToken(IActivityManager.descriptor);
1689 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1690 data.writeString(name);
1691 mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1692 reply.readException();
1693 data.recycle();
1694 reply.recycle();
1695 }
1696
Dianne Hackborndd9b82c2009-09-03 00:18:47 -07001697 public PendingIntent getRunningServiceControlPanel(ComponentName service)
1698 throws RemoteException
1699 {
1700 Parcel data = Parcel.obtain();
1701 Parcel reply = Parcel.obtain();
1702 data.writeInterfaceToken(IActivityManager.descriptor);
1703 service.writeToParcel(data, 0);
1704 mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
1705 reply.readException();
1706 PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
1707 data.recycle();
1708 reply.recycle();
1709 return res;
1710 }
1711
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001712 public ComponentName startService(IApplicationThread caller, Intent service,
1713 String resolvedType) throws RemoteException
1714 {
1715 Parcel data = Parcel.obtain();
1716 Parcel reply = Parcel.obtain();
1717 data.writeInterfaceToken(IActivityManager.descriptor);
1718 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1719 service.writeToParcel(data, 0);
1720 data.writeString(resolvedType);
1721 mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
1722 reply.readException();
1723 ComponentName res = ComponentName.readFromParcel(reply);
1724 data.recycle();
1725 reply.recycle();
1726 return res;
1727 }
1728 public int stopService(IApplicationThread caller, Intent service,
1729 String resolvedType) throws RemoteException
1730 {
1731 Parcel data = Parcel.obtain();
1732 Parcel reply = Parcel.obtain();
1733 data.writeInterfaceToken(IActivityManager.descriptor);
1734 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1735 service.writeToParcel(data, 0);
1736 data.writeString(resolvedType);
1737 mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
1738 reply.readException();
1739 int res = reply.readInt();
1740 reply.recycle();
1741 data.recycle();
1742 return res;
1743 }
1744 public boolean stopServiceToken(ComponentName className, IBinder token,
1745 int startId) throws RemoteException {
1746 Parcel data = Parcel.obtain();
1747 Parcel reply = Parcel.obtain();
1748 data.writeInterfaceToken(IActivityManager.descriptor);
1749 ComponentName.writeToParcel(className, data);
1750 data.writeStrongBinder(token);
1751 data.writeInt(startId);
1752 mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
1753 reply.readException();
1754 boolean res = reply.readInt() != 0;
1755 data.recycle();
1756 reply.recycle();
1757 return res;
1758 }
1759 public void setServiceForeground(ComponentName className, IBinder token,
Dianne Hackbornd8a43f62009-08-17 23:33:56 -07001760 int id, Notification notification, boolean removeNotification) throws RemoteException {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001761 Parcel data = Parcel.obtain();
1762 Parcel reply = Parcel.obtain();
1763 data.writeInterfaceToken(IActivityManager.descriptor);
1764 ComponentName.writeToParcel(className, data);
1765 data.writeStrongBinder(token);
Dianne Hackbornd8a43f62009-08-17 23:33:56 -07001766 data.writeInt(id);
1767 if (notification != null) {
1768 data.writeInt(1);
1769 notification.writeToParcel(data, 0);
1770 } else {
1771 data.writeInt(0);
1772 }
1773 data.writeInt(removeNotification ? 1 : 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001774 mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
1775 reply.readException();
1776 data.recycle();
1777 reply.recycle();
1778 }
1779 public int bindService(IApplicationThread caller, IBinder token,
1780 Intent service, String resolvedType, IServiceConnection connection,
1781 int flags) throws RemoteException {
1782 Parcel data = Parcel.obtain();
1783 Parcel reply = Parcel.obtain();
1784 data.writeInterfaceToken(IActivityManager.descriptor);
1785 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1786 data.writeStrongBinder(token);
1787 service.writeToParcel(data, 0);
1788 data.writeString(resolvedType);
1789 data.writeStrongBinder(connection.asBinder());
1790 data.writeInt(flags);
1791 mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
1792 reply.readException();
1793 int res = reply.readInt();
1794 data.recycle();
1795 reply.recycle();
1796 return res;
1797 }
1798 public boolean unbindService(IServiceConnection connection) throws RemoteException
1799 {
1800 Parcel data = Parcel.obtain();
1801 Parcel reply = Parcel.obtain();
1802 data.writeInterfaceToken(IActivityManager.descriptor);
1803 data.writeStrongBinder(connection.asBinder());
1804 mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
1805 reply.readException();
1806 boolean res = reply.readInt() != 0;
1807 data.recycle();
1808 reply.recycle();
1809 return res;
1810 }
1811
1812 public void publishService(IBinder token,
1813 Intent intent, IBinder service) throws RemoteException {
1814 Parcel data = Parcel.obtain();
1815 Parcel reply = Parcel.obtain();
1816 data.writeInterfaceToken(IActivityManager.descriptor);
1817 data.writeStrongBinder(token);
1818 intent.writeToParcel(data, 0);
1819 data.writeStrongBinder(service);
1820 mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
1821 reply.readException();
1822 data.recycle();
1823 reply.recycle();
1824 }
1825
1826 public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
1827 throws RemoteException {
1828 Parcel data = Parcel.obtain();
1829 Parcel reply = Parcel.obtain();
1830 data.writeInterfaceToken(IActivityManager.descriptor);
1831 data.writeStrongBinder(token);
1832 intent.writeToParcel(data, 0);
1833 data.writeInt(doRebind ? 1 : 0);
1834 mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
1835 reply.readException();
1836 data.recycle();
1837 reply.recycle();
1838 }
1839
Dianne Hackbornf6f9f2d2009-08-21 16:26:03 -07001840 public void serviceDoneExecuting(IBinder token, int type, int startId,
1841 int res) throws RemoteException {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001842 Parcel data = Parcel.obtain();
1843 Parcel reply = Parcel.obtain();
1844 data.writeInterfaceToken(IActivityManager.descriptor);
1845 data.writeStrongBinder(token);
Dianne Hackbornf6f9f2d2009-08-21 16:26:03 -07001846 data.writeInt(type);
1847 data.writeInt(startId);
1848 data.writeInt(res);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001849 mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1850 reply.readException();
1851 data.recycle();
1852 reply.recycle();
1853 }
1854
1855 public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
1856 Parcel data = Parcel.obtain();
1857 Parcel reply = Parcel.obtain();
1858 data.writeInterfaceToken(IActivityManager.descriptor);
1859 service.writeToParcel(data, 0);
1860 data.writeString(resolvedType);
1861 mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
1862 reply.readException();
1863 IBinder binder = reply.readStrongBinder();
1864 reply.recycle();
1865 data.recycle();
1866 return binder;
1867 }
1868
Christopher Tate181fafa2009-05-14 11:12:14 -07001869 public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
1870 throws RemoteException {
1871 Parcel data = Parcel.obtain();
1872 Parcel reply = Parcel.obtain();
1873 data.writeInterfaceToken(IActivityManager.descriptor);
1874 app.writeToParcel(data, 0);
1875 data.writeInt(backupRestoreMode);
1876 mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
1877 reply.readException();
1878 boolean success = reply.readInt() != 0;
1879 reply.recycle();
1880 data.recycle();
1881 return success;
1882 }
1883
1884 public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
1885 Parcel data = Parcel.obtain();
1886 Parcel reply = Parcel.obtain();
1887 data.writeInterfaceToken(IActivityManager.descriptor);
1888 data.writeString(packageName);
1889 data.writeStrongBinder(agent);
1890 mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
1891 reply.recycle();
1892 data.recycle();
1893 }
1894
1895 public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
1896 Parcel data = Parcel.obtain();
1897 Parcel reply = Parcel.obtain();
1898 data.writeInterfaceToken(IActivityManager.descriptor);
1899 app.writeToParcel(data, 0);
1900 mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
1901 reply.readException();
1902 reply.recycle();
1903 data.recycle();
1904 }
1905
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001906 public boolean startInstrumentation(ComponentName className, String profileFile,
1907 int flags, Bundle arguments, IInstrumentationWatcher watcher)
1908 throws RemoteException {
1909 Parcel data = Parcel.obtain();
1910 Parcel reply = Parcel.obtain();
1911 data.writeInterfaceToken(IActivityManager.descriptor);
1912 ComponentName.writeToParcel(className, data);
1913 data.writeString(profileFile);
1914 data.writeInt(flags);
1915 data.writeBundle(arguments);
1916 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
1917 mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1918 reply.readException();
1919 boolean res = reply.readInt() != 0;
1920 reply.recycle();
1921 data.recycle();
1922 return res;
1923 }
1924
1925 public void finishInstrumentation(IApplicationThread target,
1926 int resultCode, Bundle results) throws RemoteException {
1927 Parcel data = Parcel.obtain();
1928 Parcel reply = Parcel.obtain();
1929 data.writeInterfaceToken(IActivityManager.descriptor);
1930 data.writeStrongBinder(target != null ? target.asBinder() : null);
1931 data.writeInt(resultCode);
1932 data.writeBundle(results);
1933 mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1934 reply.readException();
1935 data.recycle();
1936 reply.recycle();
1937 }
1938 public Configuration getConfiguration() throws RemoteException
1939 {
1940 Parcel data = Parcel.obtain();
1941 Parcel reply = Parcel.obtain();
1942 data.writeInterfaceToken(IActivityManager.descriptor);
1943 mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
1944 reply.readException();
1945 Configuration res = Configuration.CREATOR.createFromParcel(reply);
1946 reply.recycle();
1947 data.recycle();
1948 return res;
1949 }
1950 public void updateConfiguration(Configuration values) throws RemoteException
1951 {
1952 Parcel data = Parcel.obtain();
1953 Parcel reply = Parcel.obtain();
1954 data.writeInterfaceToken(IActivityManager.descriptor);
1955 values.writeToParcel(data, 0);
1956 mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
1957 reply.readException();
1958 data.recycle();
1959 reply.recycle();
1960 }
1961 public void setRequestedOrientation(IBinder token, int requestedOrientation)
1962 throws RemoteException {
1963 Parcel data = Parcel.obtain();
1964 Parcel reply = Parcel.obtain();
1965 data.writeInterfaceToken(IActivityManager.descriptor);
1966 data.writeStrongBinder(token);
1967 data.writeInt(requestedOrientation);
1968 mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1969 reply.readException();
1970 data.recycle();
1971 reply.recycle();
1972 }
1973 public int getRequestedOrientation(IBinder token) throws RemoteException {
1974 Parcel data = Parcel.obtain();
1975 Parcel reply = Parcel.obtain();
1976 data.writeInterfaceToken(IActivityManager.descriptor);
1977 data.writeStrongBinder(token);
1978 mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1979 reply.readException();
1980 int res = reply.readInt();
1981 data.recycle();
1982 reply.recycle();
1983 return res;
1984 }
1985 public ComponentName getActivityClassForToken(IBinder token)
1986 throws RemoteException {
1987 Parcel data = Parcel.obtain();
1988 Parcel reply = Parcel.obtain();
1989 data.writeInterfaceToken(IActivityManager.descriptor);
1990 data.writeStrongBinder(token);
1991 mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
1992 reply.readException();
1993 ComponentName res = ComponentName.readFromParcel(reply);
1994 data.recycle();
1995 reply.recycle();
1996 return res;
1997 }
1998 public String getPackageForToken(IBinder token) throws RemoteException
1999 {
2000 Parcel data = Parcel.obtain();
2001 Parcel reply = Parcel.obtain();
2002 data.writeInterfaceToken(IActivityManager.descriptor);
2003 data.writeStrongBinder(token);
2004 mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
2005 reply.readException();
2006 String res = reply.readString();
2007 data.recycle();
2008 reply.recycle();
2009 return res;
2010 }
2011 public IIntentSender getIntentSender(int type,
2012 String packageName, IBinder token, String resultWho,
2013 int requestCode, Intent intent, String resolvedType, int flags)
2014 throws RemoteException {
2015 Parcel data = Parcel.obtain();
2016 Parcel reply = Parcel.obtain();
2017 data.writeInterfaceToken(IActivityManager.descriptor);
2018 data.writeInt(type);
2019 data.writeString(packageName);
2020 data.writeStrongBinder(token);
2021 data.writeString(resultWho);
2022 data.writeInt(requestCode);
2023 if (intent != null) {
2024 data.writeInt(1);
2025 intent.writeToParcel(data, 0);
2026 } else {
2027 data.writeInt(0);
2028 }
2029 data.writeString(resolvedType);
2030 data.writeInt(flags);
2031 mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
2032 reply.readException();
2033 IIntentSender res = IIntentSender.Stub.asInterface(
2034 reply.readStrongBinder());
2035 data.recycle();
2036 reply.recycle();
2037 return res;
2038 }
2039 public void cancelIntentSender(IIntentSender sender) throws RemoteException {
2040 Parcel data = Parcel.obtain();
2041 Parcel reply = Parcel.obtain();
2042 data.writeInterfaceToken(IActivityManager.descriptor);
2043 data.writeStrongBinder(sender.asBinder());
2044 mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
2045 reply.readException();
2046 data.recycle();
2047 reply.recycle();
2048 }
2049 public String getPackageForIntentSender(IIntentSender sender) throws RemoteException {
2050 Parcel data = Parcel.obtain();
2051 Parcel reply = Parcel.obtain();
2052 data.writeInterfaceToken(IActivityManager.descriptor);
2053 data.writeStrongBinder(sender.asBinder());
2054 mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
2055 reply.readException();
2056 String res = reply.readString();
2057 data.recycle();
2058 reply.recycle();
2059 return res;
2060 }
2061 public void setProcessLimit(int max) throws RemoteException
2062 {
2063 Parcel data = Parcel.obtain();
2064 Parcel reply = Parcel.obtain();
2065 data.writeInterfaceToken(IActivityManager.descriptor);
2066 data.writeInt(max);
2067 mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2068 reply.readException();
2069 data.recycle();
2070 reply.recycle();
2071 }
2072 public int getProcessLimit() throws RemoteException
2073 {
2074 Parcel data = Parcel.obtain();
2075 Parcel reply = Parcel.obtain();
2076 data.writeInterfaceToken(IActivityManager.descriptor);
2077 mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2078 reply.readException();
2079 int res = reply.readInt();
2080 data.recycle();
2081 reply.recycle();
2082 return res;
2083 }
2084 public void setProcessForeground(IBinder token, int pid,
2085 boolean isForeground) throws RemoteException {
2086 Parcel data = Parcel.obtain();
2087 Parcel reply = Parcel.obtain();
2088 data.writeInterfaceToken(IActivityManager.descriptor);
2089 data.writeStrongBinder(token);
2090 data.writeInt(pid);
2091 data.writeInt(isForeground ? 1 : 0);
2092 mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
2093 reply.readException();
2094 data.recycle();
2095 reply.recycle();
2096 }
2097 public int checkPermission(String permission, int pid, int uid)
2098 throws RemoteException {
2099 Parcel data = Parcel.obtain();
2100 Parcel reply = Parcel.obtain();
2101 data.writeInterfaceToken(IActivityManager.descriptor);
2102 data.writeString(permission);
2103 data.writeInt(pid);
2104 data.writeInt(uid);
2105 mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
2106 reply.readException();
2107 int res = reply.readInt();
2108 data.recycle();
2109 reply.recycle();
2110 return res;
2111 }
2112 public boolean clearApplicationUserData(final String packageName,
2113 final IPackageDataObserver observer) throws RemoteException {
2114 Parcel data = Parcel.obtain();
2115 Parcel reply = Parcel.obtain();
2116 data.writeInterfaceToken(IActivityManager.descriptor);
2117 data.writeString(packageName);
2118 data.writeStrongBinder(observer.asBinder());
2119 mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
2120 reply.readException();
2121 boolean res = reply.readInt() != 0;
2122 data.recycle();
2123 reply.recycle();
2124 return res;
2125 }
2126 public int checkUriPermission(Uri uri, int pid, int uid, int mode)
2127 throws RemoteException {
2128 Parcel data = Parcel.obtain();
2129 Parcel reply = Parcel.obtain();
2130 data.writeInterfaceToken(IActivityManager.descriptor);
2131 uri.writeToParcel(data, 0);
2132 data.writeInt(pid);
2133 data.writeInt(uid);
2134 data.writeInt(mode);
2135 mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
2136 reply.readException();
2137 int res = reply.readInt();
2138 data.recycle();
2139 reply.recycle();
2140 return res;
2141 }
2142 public void grantUriPermission(IApplicationThread caller, String targetPkg,
2143 Uri uri, int mode) throws RemoteException {
2144 Parcel data = Parcel.obtain();
2145 Parcel reply = Parcel.obtain();
2146 data.writeInterfaceToken(IActivityManager.descriptor);
2147 data.writeStrongBinder(caller.asBinder());
2148 data.writeString(targetPkg);
2149 uri.writeToParcel(data, 0);
2150 data.writeInt(mode);
2151 mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
2152 reply.readException();
2153 data.recycle();
2154 reply.recycle();
2155 }
2156 public void revokeUriPermission(IApplicationThread caller, Uri uri,
2157 int mode) throws RemoteException {
2158 Parcel data = Parcel.obtain();
2159 Parcel reply = Parcel.obtain();
2160 data.writeInterfaceToken(IActivityManager.descriptor);
2161 data.writeStrongBinder(caller.asBinder());
2162 uri.writeToParcel(data, 0);
2163 data.writeInt(mode);
2164 mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
2165 reply.readException();
2166 data.recycle();
2167 reply.recycle();
2168 }
2169 public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
2170 throws RemoteException {
2171 Parcel data = Parcel.obtain();
2172 Parcel reply = Parcel.obtain();
2173 data.writeInterfaceToken(IActivityManager.descriptor);
2174 data.writeStrongBinder(who.asBinder());
2175 data.writeInt(waiting ? 1 : 0);
2176 mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
2177 reply.readException();
2178 data.recycle();
2179 reply.recycle();
2180 }
2181 public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
2182 Parcel data = Parcel.obtain();
2183 Parcel reply = Parcel.obtain();
2184 data.writeInterfaceToken(IActivityManager.descriptor);
2185 mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
2186 reply.readException();
2187 outInfo.readFromParcel(reply);
2188 data.recycle();
2189 reply.recycle();
2190 }
2191 public void unhandledBack() throws RemoteException
2192 {
2193 Parcel data = Parcel.obtain();
2194 Parcel reply = Parcel.obtain();
2195 data.writeInterfaceToken(IActivityManager.descriptor);
2196 mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
2197 reply.readException();
2198 data.recycle();
2199 reply.recycle();
2200 }
2201 public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
2202 {
2203 Parcel data = Parcel.obtain();
2204 Parcel reply = Parcel.obtain();
2205 data.writeInterfaceToken(IActivityManager.descriptor);
2206 mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
2207 reply.readException();
2208 ParcelFileDescriptor pfd = null;
2209 if (reply.readInt() != 0) {
2210 pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
2211 }
2212 data.recycle();
2213 reply.recycle();
2214 return pfd;
2215 }
2216 public void goingToSleep() throws RemoteException
2217 {
2218 Parcel data = Parcel.obtain();
2219 Parcel reply = Parcel.obtain();
2220 data.writeInterfaceToken(IActivityManager.descriptor);
2221 mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0);
2222 reply.readException();
2223 data.recycle();
2224 reply.recycle();
2225 }
2226 public void wakingUp() throws RemoteException
2227 {
2228 Parcel data = Parcel.obtain();
2229 Parcel reply = Parcel.obtain();
2230 data.writeInterfaceToken(IActivityManager.descriptor);
2231 mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0);
2232 reply.readException();
2233 data.recycle();
2234 reply.recycle();
2235 }
2236 public void setDebugApp(
2237 String packageName, boolean waitForDebugger, boolean persistent)
2238 throws RemoteException
2239 {
2240 Parcel data = Parcel.obtain();
2241 Parcel reply = Parcel.obtain();
2242 data.writeInterfaceToken(IActivityManager.descriptor);
2243 data.writeString(packageName);
2244 data.writeInt(waitForDebugger ? 1 : 0);
2245 data.writeInt(persistent ? 1 : 0);
2246 mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
2247 reply.readException();
2248 data.recycle();
2249 reply.recycle();
2250 }
2251 public void setAlwaysFinish(boolean enabled) throws RemoteException
2252 {
2253 Parcel data = Parcel.obtain();
2254 Parcel reply = Parcel.obtain();
2255 data.writeInterfaceToken(IActivityManager.descriptor);
2256 data.writeInt(enabled ? 1 : 0);
2257 mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
2258 reply.readException();
2259 data.recycle();
2260 reply.recycle();
2261 }
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002262 public void setActivityController(IActivityController watcher) throws RemoteException
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002263 {
2264 Parcel data = Parcel.obtain();
2265 Parcel reply = Parcel.obtain();
2266 data.writeInterfaceToken(IActivityManager.descriptor);
2267 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002268 mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002269 reply.readException();
2270 data.recycle();
2271 reply.recycle();
2272 }
2273 public void enterSafeMode() throws RemoteException {
2274 Parcel data = Parcel.obtain();
2275 data.writeInterfaceToken(IActivityManager.descriptor);
2276 mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
2277 data.recycle();
2278 }
2279 public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
2280 Parcel data = Parcel.obtain();
2281 data.writeStrongBinder(sender.asBinder());
2282 data.writeInterfaceToken(IActivityManager.descriptor);
2283 mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
2284 data.recycle();
2285 }
2286 public boolean killPidsForMemory(int[] pids) throws RemoteException {
2287 Parcel data = Parcel.obtain();
2288 Parcel reply = Parcel.obtain();
2289 data.writeInterfaceToken(IActivityManager.descriptor);
2290 data.writeIntArray(pids);
2291 mRemote.transact(KILL_PIDS_FOR_MEMORY_TRANSACTION, data, reply, 0);
2292 boolean res = reply.readInt() != 0;
2293 data.recycle();
2294 reply.recycle();
2295 return res;
2296 }
2297 public void reportPss(IApplicationThread caller, int pss) throws RemoteException {
2298 Parcel data = Parcel.obtain();
2299 data.writeInterfaceToken(IActivityManager.descriptor);
2300 data.writeStrongBinder(caller.asBinder());
2301 data.writeInt(pss);
2302 mRemote.transact(REPORT_PSS_TRANSACTION, data, null, 0);
2303 data.recycle();
2304 }
2305 public void startRunning(String pkg, String cls, String action,
2306 String indata) throws RemoteException {
2307 Parcel data = Parcel.obtain();
2308 Parcel reply = Parcel.obtain();
2309 data.writeInterfaceToken(IActivityManager.descriptor);
2310 data.writeString(pkg);
2311 data.writeString(cls);
2312 data.writeString(action);
2313 data.writeString(indata);
2314 mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0);
2315 reply.readException();
2316 data.recycle();
2317 reply.recycle();
2318 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002319 public boolean testIsSystemReady()
2320 {
2321 /* this base class version is never called */
2322 return true;
2323 }
2324 public int handleApplicationError(IBinder app, int flags,
2325 String tag, String shortMsg, String longMsg,
2326 byte[] crashData) throws RemoteException
2327 {
2328 Parcel data = Parcel.obtain();
2329 Parcel reply = Parcel.obtain();
2330 data.writeInterfaceToken(IActivityManager.descriptor);
2331 data.writeStrongBinder(app);
2332 data.writeInt(flags);
2333 data.writeString(tag);
2334 data.writeString(shortMsg);
2335 data.writeString(longMsg);
2336 data.writeByteArray(crashData);
2337 mRemote.transact(HANDLE_APPLICATION_ERROR_TRANSACTION, data, reply, 0);
2338 reply.readException();
2339 int res = reply.readInt();
2340 reply.recycle();
2341 data.recycle();
2342 return res;
2343 }
2344
2345 public void signalPersistentProcesses(int sig) throws RemoteException {
2346 Parcel data = Parcel.obtain();
2347 Parcel reply = Parcel.obtain();
2348 data.writeInterfaceToken(IActivityManager.descriptor);
2349 data.writeInt(sig);
2350 mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
2351 reply.readException();
2352 data.recycle();
2353 reply.recycle();
2354 }
2355
2356 public void restartPackage(String packageName) throws RemoteException {
2357 Parcel data = Parcel.obtain();
2358 Parcel reply = Parcel.obtain();
2359 data.writeInterfaceToken(IActivityManager.descriptor);
2360 data.writeString(packageName);
2361 mRemote.transact(RESTART_PACKAGE_TRANSACTION, data, reply, 0);
2362 reply.readException();
2363 data.recycle();
2364 reply.recycle();
2365 }
2366
2367 public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
2368 {
2369 Parcel data = Parcel.obtain();
2370 Parcel reply = Parcel.obtain();
2371 data.writeInterfaceToken(IActivityManager.descriptor);
2372 mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
2373 reply.readException();
2374 ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
2375 reply.recycle();
2376 data.recycle();
2377 return res;
2378 }
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002379
2380 public boolean profileControl(String process, boolean start,
Dianne Hackborn9c8dd552009-06-23 19:22:52 -07002381 String path, ParcelFileDescriptor fd) throws RemoteException
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002382 {
2383 Parcel data = Parcel.obtain();
2384 Parcel reply = Parcel.obtain();
2385 data.writeInterfaceToken(IActivityManager.descriptor);
2386 data.writeString(process);
2387 data.writeInt(start ? 1 : 0);
2388 data.writeString(path);
Dianne Hackborn9c8dd552009-06-23 19:22:52 -07002389 if (fd != null) {
2390 data.writeInt(1);
2391 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2392 } else {
2393 data.writeInt(0);
2394 }
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002395 mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
2396 reply.readException();
2397 boolean res = reply.readInt() != 0;
2398 reply.recycle();
2399 data.recycle();
2400 return res;
2401 }
2402
Dianne Hackborn55280a92009-05-07 15:53:46 -07002403 public boolean shutdown(int timeout) throws RemoteException
2404 {
2405 Parcel data = Parcel.obtain();
2406 Parcel reply = Parcel.obtain();
2407 data.writeInterfaceToken(IActivityManager.descriptor);
2408 data.writeInt(timeout);
2409 mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
2410 reply.readException();
2411 boolean res = reply.readInt() != 0;
2412 reply.recycle();
2413 data.recycle();
2414 return res;
2415 }
2416
Dianne Hackborn95fc68f2009-05-19 18:37:45 -07002417 public void stopAppSwitches() throws RemoteException {
2418 Parcel data = Parcel.obtain();
2419 Parcel reply = Parcel.obtain();
2420 data.writeInterfaceToken(IActivityManager.descriptor);
2421 mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
2422 reply.readException();
2423 reply.recycle();
2424 data.recycle();
2425 }
2426
2427 public void resumeAppSwitches() throws RemoteException {
2428 Parcel data = Parcel.obtain();
2429 Parcel reply = Parcel.obtain();
2430 data.writeInterfaceToken(IActivityManager.descriptor);
2431 mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
2432 reply.readException();
2433 reply.recycle();
2434 data.recycle();
2435 }
2436
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002437 public void registerActivityWatcher(IActivityWatcher watcher)
2438 throws RemoteException {
2439 Parcel data = Parcel.obtain();
2440 Parcel reply = Parcel.obtain();
2441 data.writeInterfaceToken(IActivityManager.descriptor);
2442 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2443 mRemote.transact(REGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2444 reply.readException();
2445 data.recycle();
2446 reply.recycle();
2447 }
2448
2449 public void unregisterActivityWatcher(IActivityWatcher watcher)
2450 throws RemoteException {
2451 Parcel data = Parcel.obtain();
2452 Parcel reply = Parcel.obtain();
2453 data.writeInterfaceToken(IActivityManager.descriptor);
2454 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2455 mRemote.transact(UNREGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2456 reply.readException();
2457 data.recycle();
2458 reply.recycle();
2459 }
2460
Dianne Hackborn2d91af02009-07-16 13:34:33 -07002461 public int startActivityInPackage(int uid,
2462 Intent intent, String resolvedType, IBinder resultTo,
2463 String resultWho, int requestCode, boolean onlyIfNeeded)
2464 throws RemoteException {
2465 Parcel data = Parcel.obtain();
2466 Parcel reply = Parcel.obtain();
2467 data.writeInterfaceToken(IActivityManager.descriptor);
2468 data.writeInt(uid);
2469 intent.writeToParcel(data, 0);
2470 data.writeString(resolvedType);
2471 data.writeStrongBinder(resultTo);
2472 data.writeString(resultWho);
2473 data.writeInt(requestCode);
2474 data.writeInt(onlyIfNeeded ? 1 : 0);
2475 mRemote.transact(START_ACTIVITY_IN_PACKAGE_TRANSACTION, data, reply, 0);
2476 reply.readException();
2477 int result = reply.readInt();
2478 reply.recycle();
2479 data.recycle();
2480 return result;
2481 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07002482
Suchi Amalapurapu261e66a2009-07-27 15:21:34 -07002483 public void killApplicationWithUid(String pkg, int uid) throws RemoteException {
2484 Parcel data = Parcel.obtain();
2485 Parcel reply = Parcel.obtain();
2486 data.writeInterfaceToken(IActivityManager.descriptor);
2487 data.writeString(pkg);
2488 data.writeInt(uid);
2489 mRemote.transact(KILL_APPLICATION_WITH_UID_TRANSACTION, data, reply, 0);
2490 reply.readException();
2491 data.recycle();
2492 reply.recycle();
2493 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07002494
2495 public void closeSystemDialogs(String reason) throws RemoteException {
2496 Parcel data = Parcel.obtain();
2497 Parcel reply = Parcel.obtain();
2498 data.writeInterfaceToken(IActivityManager.descriptor);
2499 data.writeString(reason);
2500 mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
2501 reply.readException();
2502 data.recycle();
2503 reply.recycle();
2504 }
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002505
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002506 public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002507 throws RemoteException {
2508 Parcel data = Parcel.obtain();
2509 Parcel reply = Parcel.obtain();
2510 data.writeInterfaceToken(IActivityManager.descriptor);
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002511 data.writeIntArray(pids);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002512 mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
2513 reply.readException();
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002514 Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002515 data.recycle();
2516 reply.recycle();
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002517 return res;
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002518 }
Christopher Tate5e1ab332009-09-01 20:32:49 -07002519
2520 public void killApplicationProcess(String processName, int uid) throws RemoteException {
2521 Parcel data = Parcel.obtain();
2522 Parcel reply = Parcel.obtain();
2523 data.writeInterfaceToken(IActivityManager.descriptor);
2524 data.writeString(processName);
2525 data.writeInt(uid);
2526 mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
2527 reply.readException();
2528 data.recycle();
2529 reply.recycle();
2530 }
2531
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002532 private IBinder mRemote;
2533}