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