blob: 82d49e3b45dd20d23b4b50741ed718a9fd85ce78 [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 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001156 }
1157
1158 return super.onTransact(code, data, reply, flags);
1159 }
1160
1161 public IBinder asBinder()
1162 {
1163 return this;
1164 }
1165
1166 private static IActivityManager gDefault;
1167}
1168
1169class ActivityManagerProxy implements IActivityManager
1170{
1171 public ActivityManagerProxy(IBinder remote)
1172 {
1173 mRemote = remote;
1174 }
1175
1176 public IBinder asBinder()
1177 {
1178 return mRemote;
1179 }
1180
1181 public int startActivity(IApplicationThread caller, Intent intent,
1182 String resolvedType, Uri[] grantedUriPermissions, int grantedMode,
1183 IBinder resultTo, String resultWho,
1184 int requestCode, boolean onlyIfNeeded,
1185 boolean debug) throws RemoteException {
1186 Parcel data = Parcel.obtain();
1187 Parcel reply = Parcel.obtain();
1188 data.writeInterfaceToken(IActivityManager.descriptor);
1189 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1190 intent.writeToParcel(data, 0);
1191 data.writeString(resolvedType);
1192 data.writeTypedArray(grantedUriPermissions, 0);
1193 data.writeInt(grantedMode);
1194 data.writeStrongBinder(resultTo);
1195 data.writeString(resultWho);
1196 data.writeInt(requestCode);
1197 data.writeInt(onlyIfNeeded ? 1 : 0);
1198 data.writeInt(debug ? 1 : 0);
1199 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
1200 reply.readException();
1201 int result = reply.readInt();
1202 reply.recycle();
1203 data.recycle();
1204 return result;
1205 }
Dianne Hackbornfa82f222009-09-17 15:14:12 -07001206 public int startActivityIntentSender(IApplicationThread caller,
1207 IntentSender intent, Intent fillInIntent, String resolvedType,
Dianne Hackbornbcbcaa72009-09-10 10:54:46 -07001208 IBinder resultTo, String resultWho, int requestCode,
1209 int flagsMask, int flagsValues) throws RemoteException {
1210 Parcel data = Parcel.obtain();
1211 Parcel reply = Parcel.obtain();
1212 data.writeInterfaceToken(IActivityManager.descriptor);
1213 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1214 intent.writeToParcel(data, 0);
1215 if (fillInIntent != null) {
1216 data.writeInt(1);
1217 fillInIntent.writeToParcel(data, 0);
1218 } else {
1219 data.writeInt(0);
1220 }
1221 data.writeString(resolvedType);
1222 data.writeStrongBinder(resultTo);
1223 data.writeString(resultWho);
1224 data.writeInt(requestCode);
1225 data.writeInt(flagsMask);
1226 data.writeInt(flagsValues);
Dianne Hackbornfa82f222009-09-17 15:14:12 -07001227 mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0);
Dianne Hackbornbcbcaa72009-09-10 10:54:46 -07001228 reply.readException();
1229 int result = reply.readInt();
1230 reply.recycle();
1231 data.recycle();
1232 return result;
1233 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001234 public boolean startNextMatchingActivity(IBinder callingActivity,
1235 Intent intent) throws RemoteException {
1236 Parcel data = Parcel.obtain();
1237 Parcel reply = Parcel.obtain();
1238 data.writeInterfaceToken(IActivityManager.descriptor);
1239 data.writeStrongBinder(callingActivity);
1240 intent.writeToParcel(data, 0);
1241 mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0);
1242 reply.readException();
1243 int result = reply.readInt();
1244 reply.recycle();
1245 data.recycle();
1246 return result != 0;
1247 }
1248 public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
1249 throws RemoteException {
1250 Parcel data = Parcel.obtain();
1251 Parcel reply = Parcel.obtain();
1252 data.writeInterfaceToken(IActivityManager.descriptor);
1253 data.writeStrongBinder(token);
1254 data.writeInt(resultCode);
1255 if (resultData != null) {
1256 data.writeInt(1);
1257 resultData.writeToParcel(data, 0);
1258 } else {
1259 data.writeInt(0);
1260 }
1261 mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
1262 reply.readException();
1263 boolean res = reply.readInt() != 0;
1264 data.recycle();
1265 reply.recycle();
1266 return res;
1267 }
1268 public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException
1269 {
1270 Parcel data = Parcel.obtain();
1271 Parcel reply = Parcel.obtain();
1272 data.writeInterfaceToken(IActivityManager.descriptor);
1273 data.writeStrongBinder(token);
1274 data.writeString(resultWho);
1275 data.writeInt(requestCode);
1276 mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0);
1277 reply.readException();
1278 data.recycle();
1279 reply.recycle();
1280 }
1281 public Intent registerReceiver(IApplicationThread caller,
1282 IIntentReceiver receiver,
1283 IntentFilter filter, String perm) throws RemoteException
1284 {
1285 Parcel data = Parcel.obtain();
1286 Parcel reply = Parcel.obtain();
1287 data.writeInterfaceToken(IActivityManager.descriptor);
1288 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1289 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1290 filter.writeToParcel(data, 0);
1291 data.writeString(perm);
1292 mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1293 reply.readException();
1294 Intent intent = null;
1295 int haveIntent = reply.readInt();
1296 if (haveIntent != 0) {
1297 intent = Intent.CREATOR.createFromParcel(reply);
1298 }
1299 reply.recycle();
1300 data.recycle();
1301 return intent;
1302 }
1303 public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException
1304 {
1305 Parcel data = Parcel.obtain();
1306 Parcel reply = Parcel.obtain();
1307 data.writeInterfaceToken(IActivityManager.descriptor);
1308 data.writeStrongBinder(receiver.asBinder());
1309 mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0);
1310 reply.readException();
1311 data.recycle();
1312 reply.recycle();
1313 }
1314 public int broadcastIntent(IApplicationThread caller,
1315 Intent intent, String resolvedType, IIntentReceiver resultTo,
1316 int resultCode, String resultData, Bundle map,
1317 String requiredPermission, boolean serialized,
1318 boolean sticky) throws RemoteException
1319 {
1320 Parcel data = Parcel.obtain();
1321 Parcel reply = Parcel.obtain();
1322 data.writeInterfaceToken(IActivityManager.descriptor);
1323 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1324 intent.writeToParcel(data, 0);
1325 data.writeString(resolvedType);
1326 data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);
1327 data.writeInt(resultCode);
1328 data.writeString(resultData);
1329 data.writeBundle(map);
1330 data.writeString(requiredPermission);
1331 data.writeInt(serialized ? 1 : 0);
1332 data.writeInt(sticky ? 1 : 0);
1333 mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);
1334 reply.readException();
1335 int res = reply.readInt();
1336 reply.recycle();
1337 data.recycle();
1338 return res;
1339 }
1340 public void unbroadcastIntent(IApplicationThread caller, Intent intent) throws RemoteException
1341 {
1342 Parcel data = Parcel.obtain();
1343 Parcel reply = Parcel.obtain();
1344 data.writeInterfaceToken(IActivityManager.descriptor);
1345 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1346 intent.writeToParcel(data, 0);
1347 mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0);
1348 reply.readException();
1349 data.recycle();
1350 reply.recycle();
1351 }
1352 public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException
1353 {
1354 Parcel data = Parcel.obtain();
1355 Parcel reply = Parcel.obtain();
1356 data.writeInterfaceToken(IActivityManager.descriptor);
1357 data.writeStrongBinder(who);
1358 data.writeInt(resultCode);
1359 data.writeString(resultData);
1360 data.writeBundle(map);
1361 data.writeInt(abortBroadcast ? 1 : 0);
1362 mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1363 reply.readException();
1364 data.recycle();
1365 reply.recycle();
1366 }
1367 public void setPersistent(IBinder token, boolean isPersistent) throws RemoteException
1368 {
1369 Parcel data = Parcel.obtain();
1370 Parcel reply = Parcel.obtain();
1371 data.writeInterfaceToken(IActivityManager.descriptor);
1372 data.writeStrongBinder(token);
1373 data.writeInt(isPersistent ? 1 : 0);
1374 mRemote.transact(SET_PERSISTENT_TRANSACTION, data, reply, 0);
1375 reply.readException();
1376 data.recycle();
1377 reply.recycle();
1378 }
1379 public void attachApplication(IApplicationThread app) throws RemoteException
1380 {
1381 Parcel data = Parcel.obtain();
1382 Parcel reply = Parcel.obtain();
1383 data.writeInterfaceToken(IActivityManager.descriptor);
1384 data.writeStrongBinder(app.asBinder());
1385 mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0);
1386 reply.readException();
1387 data.recycle();
1388 reply.recycle();
1389 }
1390 public void activityIdle(IBinder token) throws RemoteException
1391 {
1392 Parcel data = Parcel.obtain();
1393 Parcel reply = Parcel.obtain();
1394 data.writeInterfaceToken(IActivityManager.descriptor);
1395 data.writeStrongBinder(token);
1396 mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1397 reply.readException();
1398 data.recycle();
1399 reply.recycle();
1400 }
1401 public void activityPaused(IBinder token, Bundle state) throws RemoteException
1402 {
1403 Parcel data = Parcel.obtain();
1404 Parcel reply = Parcel.obtain();
1405 data.writeInterfaceToken(IActivityManager.descriptor);
1406 data.writeStrongBinder(token);
1407 data.writeBundle(state);
1408 mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0);
1409 reply.readException();
1410 data.recycle();
1411 reply.recycle();
1412 }
1413 public void activityStopped(IBinder token,
1414 Bitmap thumbnail, CharSequence description) throws RemoteException
1415 {
1416 Parcel data = Parcel.obtain();
1417 Parcel reply = Parcel.obtain();
1418 data.writeInterfaceToken(IActivityManager.descriptor);
1419 data.writeStrongBinder(token);
1420 if (thumbnail != null) {
1421 data.writeInt(1);
1422 thumbnail.writeToParcel(data, 0);
1423 } else {
1424 data.writeInt(0);
1425 }
1426 TextUtils.writeToParcel(description, data, 0);
1427 mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1428 reply.readException();
1429 data.recycle();
1430 reply.recycle();
1431 }
1432 public void activityDestroyed(IBinder token) throws RemoteException
1433 {
1434 Parcel data = Parcel.obtain();
1435 Parcel reply = Parcel.obtain();
1436 data.writeInterfaceToken(IActivityManager.descriptor);
1437 data.writeStrongBinder(token);
1438 mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1439 reply.readException();
1440 data.recycle();
1441 reply.recycle();
1442 }
1443 public String getCallingPackage(IBinder token) throws RemoteException
1444 {
1445 Parcel data = Parcel.obtain();
1446 Parcel reply = Parcel.obtain();
1447 data.writeInterfaceToken(IActivityManager.descriptor);
1448 data.writeStrongBinder(token);
1449 mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0);
1450 reply.readException();
1451 String res = reply.readString();
1452 data.recycle();
1453 reply.recycle();
1454 return res;
1455 }
1456 public ComponentName getCallingActivity(IBinder token)
1457 throws RemoteException {
1458 Parcel data = Parcel.obtain();
1459 Parcel reply = Parcel.obtain();
1460 data.writeInterfaceToken(IActivityManager.descriptor);
1461 data.writeStrongBinder(token);
1462 mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0);
1463 reply.readException();
1464 ComponentName res = ComponentName.readFromParcel(reply);
1465 data.recycle();
1466 reply.recycle();
1467 return res;
1468 }
1469 public List getTasks(int maxNum, int flags,
1470 IThumbnailReceiver receiver) throws RemoteException {
1471 Parcel data = Parcel.obtain();
1472 Parcel reply = Parcel.obtain();
1473 data.writeInterfaceToken(IActivityManager.descriptor);
1474 data.writeInt(maxNum);
1475 data.writeInt(flags);
1476 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);
1477 mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0);
1478 reply.readException();
1479 ArrayList list = null;
1480 int N = reply.readInt();
1481 if (N >= 0) {
1482 list = new ArrayList();
1483 while (N > 0) {
1484 ActivityManager.RunningTaskInfo info =
1485 ActivityManager.RunningTaskInfo.CREATOR
1486 .createFromParcel(reply);
1487 list.add(info);
1488 N--;
1489 }
1490 }
1491 data.recycle();
1492 reply.recycle();
1493 return list;
1494 }
1495 public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum,
1496 int flags) throws RemoteException {
1497 Parcel data = Parcel.obtain();
1498 Parcel reply = Parcel.obtain();
1499 data.writeInterfaceToken(IActivityManager.descriptor);
1500 data.writeInt(maxNum);
1501 data.writeInt(flags);
1502 mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0);
1503 reply.readException();
1504 ArrayList<ActivityManager.RecentTaskInfo> list
1505 = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR);
1506 data.recycle();
1507 reply.recycle();
1508 return list;
1509 }
1510 public List getServices(int maxNum, int flags) throws RemoteException {
1511 Parcel data = Parcel.obtain();
1512 Parcel reply = Parcel.obtain();
1513 data.writeInterfaceToken(IActivityManager.descriptor);
1514 data.writeInt(maxNum);
1515 data.writeInt(flags);
1516 mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0);
1517 reply.readException();
1518 ArrayList list = null;
1519 int N = reply.readInt();
1520 if (N >= 0) {
1521 list = new ArrayList();
1522 while (N > 0) {
1523 ActivityManager.RunningServiceInfo info =
1524 ActivityManager.RunningServiceInfo.CREATOR
1525 .createFromParcel(reply);
1526 list.add(info);
1527 N--;
1528 }
1529 }
1530 data.recycle();
1531 reply.recycle();
1532 return list;
1533 }
1534 public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState()
1535 throws RemoteException {
1536 Parcel data = Parcel.obtain();
1537 Parcel reply = Parcel.obtain();
1538 data.writeInterfaceToken(IActivityManager.descriptor);
1539 mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0);
1540 reply.readException();
1541 ArrayList<ActivityManager.ProcessErrorStateInfo> list
1542 = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR);
1543 data.recycle();
1544 reply.recycle();
1545 return list;
1546 }
1547 public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses()
1548 throws RemoteException {
1549 Parcel data = Parcel.obtain();
1550 Parcel reply = Parcel.obtain();
1551 data.writeInterfaceToken(IActivityManager.descriptor);
1552 mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0);
1553 reply.readException();
1554 ArrayList<ActivityManager.RunningAppProcessInfo> list
1555 = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR);
1556 data.recycle();
1557 reply.recycle();
1558 return list;
1559 }
1560 public void moveTaskToFront(int task) throws RemoteException
1561 {
1562 Parcel data = Parcel.obtain();
1563 Parcel reply = Parcel.obtain();
1564 data.writeInterfaceToken(IActivityManager.descriptor);
1565 data.writeInt(task);
1566 mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0);
1567 reply.readException();
1568 data.recycle();
1569 reply.recycle();
1570 }
1571 public void moveTaskToBack(int task) throws RemoteException
1572 {
1573 Parcel data = Parcel.obtain();
1574 Parcel reply = Parcel.obtain();
1575 data.writeInterfaceToken(IActivityManager.descriptor);
1576 data.writeInt(task);
1577 mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1578 reply.readException();
1579 data.recycle();
1580 reply.recycle();
1581 }
1582 public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot)
1583 throws RemoteException {
1584 Parcel data = Parcel.obtain();
1585 Parcel reply = Parcel.obtain();
1586 data.writeInterfaceToken(IActivityManager.descriptor);
1587 data.writeStrongBinder(token);
1588 data.writeInt(nonRoot ? 1 : 0);
1589 mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0);
1590 reply.readException();
1591 boolean res = reply.readInt() != 0;
1592 data.recycle();
1593 reply.recycle();
1594 return res;
1595 }
1596 public void moveTaskBackwards(int task) throws RemoteException
1597 {
1598 Parcel data = Parcel.obtain();
1599 Parcel reply = Parcel.obtain();
1600 data.writeInterfaceToken(IActivityManager.descriptor);
1601 data.writeInt(task);
1602 mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0);
1603 reply.readException();
1604 data.recycle();
1605 reply.recycle();
1606 }
1607 public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException
1608 {
1609 Parcel data = Parcel.obtain();
1610 Parcel reply = Parcel.obtain();
1611 data.writeInterfaceToken(IActivityManager.descriptor);
1612 data.writeStrongBinder(token);
1613 data.writeInt(onlyRoot ? 1 : 0);
1614 mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0);
1615 reply.readException();
1616 int res = reply.readInt();
1617 data.recycle();
1618 reply.recycle();
1619 return res;
1620 }
1621 public void finishOtherInstances(IBinder token, ComponentName className) throws RemoteException
1622 {
1623 Parcel data = Parcel.obtain();
1624 Parcel reply = Parcel.obtain();
1625 data.writeInterfaceToken(IActivityManager.descriptor);
1626 data.writeStrongBinder(token);
1627 ComponentName.writeToParcel(className, data);
1628 mRemote.transact(FINISH_OTHER_INSTANCES_TRANSACTION, data, reply, 0);
1629 reply.readException();
1630 data.recycle();
1631 reply.recycle();
1632 }
1633 public void reportThumbnail(IBinder token,
1634 Bitmap thumbnail, CharSequence description) throws RemoteException
1635 {
1636 Parcel data = Parcel.obtain();
1637 Parcel reply = Parcel.obtain();
1638 data.writeInterfaceToken(IActivityManager.descriptor);
1639 data.writeStrongBinder(token);
1640 if (thumbnail != null) {
1641 data.writeInt(1);
1642 thumbnail.writeToParcel(data, 0);
1643 } else {
1644 data.writeInt(0);
1645 }
1646 TextUtils.writeToParcel(description, data, 0);
1647 mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1648 reply.readException();
1649 data.recycle();
1650 reply.recycle();
1651 }
1652 public ContentProviderHolder getContentProvider(IApplicationThread caller,
1653 String name) throws RemoteException
1654 {
1655 Parcel data = Parcel.obtain();
1656 Parcel reply = Parcel.obtain();
1657 data.writeInterfaceToken(IActivityManager.descriptor);
1658 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1659 data.writeString(name);
1660 mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1661 reply.readException();
1662 int res = reply.readInt();
1663 ContentProviderHolder cph = null;
1664 if (res != 0) {
1665 cph = ContentProviderHolder.CREATOR.createFromParcel(reply);
1666 }
1667 data.recycle();
1668 reply.recycle();
1669 return cph;
1670 }
1671 public void publishContentProviders(IApplicationThread caller,
1672 List<ContentProviderHolder> providers) throws RemoteException
1673 {
1674 Parcel data = Parcel.obtain();
1675 Parcel reply = Parcel.obtain();
1676 data.writeInterfaceToken(IActivityManager.descriptor);
1677 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1678 data.writeTypedList(providers);
1679 mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0);
1680 reply.readException();
1681 data.recycle();
1682 reply.recycle();
1683 }
1684
1685 public void removeContentProvider(IApplicationThread caller,
1686 String name) throws RemoteException {
1687 Parcel data = Parcel.obtain();
1688 Parcel reply = Parcel.obtain();
1689 data.writeInterfaceToken(IActivityManager.descriptor);
1690 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1691 data.writeString(name);
1692 mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0);
1693 reply.readException();
1694 data.recycle();
1695 reply.recycle();
1696 }
1697
Dianne Hackborndd9b82c2009-09-03 00:18:47 -07001698 public PendingIntent getRunningServiceControlPanel(ComponentName service)
1699 throws RemoteException
1700 {
1701 Parcel data = Parcel.obtain();
1702 Parcel reply = Parcel.obtain();
1703 data.writeInterfaceToken(IActivityManager.descriptor);
1704 service.writeToParcel(data, 0);
1705 mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0);
1706 reply.readException();
1707 PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply);
1708 data.recycle();
1709 reply.recycle();
1710 return res;
1711 }
1712
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001713 public ComponentName startService(IApplicationThread caller, Intent service,
1714 String resolvedType) throws RemoteException
1715 {
1716 Parcel data = Parcel.obtain();
1717 Parcel reply = Parcel.obtain();
1718 data.writeInterfaceToken(IActivityManager.descriptor);
1719 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1720 service.writeToParcel(data, 0);
1721 data.writeString(resolvedType);
1722 mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0);
1723 reply.readException();
1724 ComponentName res = ComponentName.readFromParcel(reply);
1725 data.recycle();
1726 reply.recycle();
1727 return res;
1728 }
1729 public int stopService(IApplicationThread caller, Intent service,
1730 String resolvedType) throws RemoteException
1731 {
1732 Parcel data = Parcel.obtain();
1733 Parcel reply = Parcel.obtain();
1734 data.writeInterfaceToken(IActivityManager.descriptor);
1735 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1736 service.writeToParcel(data, 0);
1737 data.writeString(resolvedType);
1738 mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0);
1739 reply.readException();
1740 int res = reply.readInt();
1741 reply.recycle();
1742 data.recycle();
1743 return res;
1744 }
1745 public boolean stopServiceToken(ComponentName className, IBinder token,
1746 int startId) throws RemoteException {
1747 Parcel data = Parcel.obtain();
1748 Parcel reply = Parcel.obtain();
1749 data.writeInterfaceToken(IActivityManager.descriptor);
1750 ComponentName.writeToParcel(className, data);
1751 data.writeStrongBinder(token);
1752 data.writeInt(startId);
1753 mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0);
1754 reply.readException();
1755 boolean res = reply.readInt() != 0;
1756 data.recycle();
1757 reply.recycle();
1758 return res;
1759 }
1760 public void setServiceForeground(ComponentName className, IBinder token,
Dianne Hackbornd8a43f62009-08-17 23:33:56 -07001761 int id, Notification notification, boolean removeNotification) throws RemoteException {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001762 Parcel data = Parcel.obtain();
1763 Parcel reply = Parcel.obtain();
1764 data.writeInterfaceToken(IActivityManager.descriptor);
1765 ComponentName.writeToParcel(className, data);
1766 data.writeStrongBinder(token);
Dianne Hackbornd8a43f62009-08-17 23:33:56 -07001767 data.writeInt(id);
1768 if (notification != null) {
1769 data.writeInt(1);
1770 notification.writeToParcel(data, 0);
1771 } else {
1772 data.writeInt(0);
1773 }
1774 data.writeInt(removeNotification ? 1 : 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001775 mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0);
1776 reply.readException();
1777 data.recycle();
1778 reply.recycle();
1779 }
1780 public int bindService(IApplicationThread caller, IBinder token,
1781 Intent service, String resolvedType, IServiceConnection connection,
1782 int flags) throws RemoteException {
1783 Parcel data = Parcel.obtain();
1784 Parcel reply = Parcel.obtain();
1785 data.writeInterfaceToken(IActivityManager.descriptor);
1786 data.writeStrongBinder(caller != null ? caller.asBinder() : null);
1787 data.writeStrongBinder(token);
1788 service.writeToParcel(data, 0);
1789 data.writeString(resolvedType);
1790 data.writeStrongBinder(connection.asBinder());
1791 data.writeInt(flags);
1792 mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0);
1793 reply.readException();
1794 int res = reply.readInt();
1795 data.recycle();
1796 reply.recycle();
1797 return res;
1798 }
1799 public boolean unbindService(IServiceConnection connection) throws RemoteException
1800 {
1801 Parcel data = Parcel.obtain();
1802 Parcel reply = Parcel.obtain();
1803 data.writeInterfaceToken(IActivityManager.descriptor);
1804 data.writeStrongBinder(connection.asBinder());
1805 mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0);
1806 reply.readException();
1807 boolean res = reply.readInt() != 0;
1808 data.recycle();
1809 reply.recycle();
1810 return res;
1811 }
1812
1813 public void publishService(IBinder token,
1814 Intent intent, IBinder service) throws RemoteException {
1815 Parcel data = Parcel.obtain();
1816 Parcel reply = Parcel.obtain();
1817 data.writeInterfaceToken(IActivityManager.descriptor);
1818 data.writeStrongBinder(token);
1819 intent.writeToParcel(data, 0);
1820 data.writeStrongBinder(service);
1821 mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0);
1822 reply.readException();
1823 data.recycle();
1824 reply.recycle();
1825 }
1826
1827 public void unbindFinished(IBinder token, Intent intent, boolean doRebind)
1828 throws RemoteException {
1829 Parcel data = Parcel.obtain();
1830 Parcel reply = Parcel.obtain();
1831 data.writeInterfaceToken(IActivityManager.descriptor);
1832 data.writeStrongBinder(token);
1833 intent.writeToParcel(data, 0);
1834 data.writeInt(doRebind ? 1 : 0);
1835 mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0);
1836 reply.readException();
1837 data.recycle();
1838 reply.recycle();
1839 }
1840
Dianne Hackbornf6f9f2d2009-08-21 16:26:03 -07001841 public void serviceDoneExecuting(IBinder token, int type, int startId,
1842 int res) throws RemoteException {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001843 Parcel data = Parcel.obtain();
1844 Parcel reply = Parcel.obtain();
1845 data.writeInterfaceToken(IActivityManager.descriptor);
1846 data.writeStrongBinder(token);
Dianne Hackbornf6f9f2d2009-08-21 16:26:03 -07001847 data.writeInt(type);
1848 data.writeInt(startId);
1849 data.writeInt(res);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001850 mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
1851 reply.readException();
1852 data.recycle();
1853 reply.recycle();
1854 }
1855
1856 public IBinder peekService(Intent service, String resolvedType) throws RemoteException {
1857 Parcel data = Parcel.obtain();
1858 Parcel reply = Parcel.obtain();
1859 data.writeInterfaceToken(IActivityManager.descriptor);
1860 service.writeToParcel(data, 0);
1861 data.writeString(resolvedType);
1862 mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0);
1863 reply.readException();
1864 IBinder binder = reply.readStrongBinder();
1865 reply.recycle();
1866 data.recycle();
1867 return binder;
1868 }
1869
Christopher Tate181fafa2009-05-14 11:12:14 -07001870 public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode)
1871 throws RemoteException {
1872 Parcel data = Parcel.obtain();
1873 Parcel reply = Parcel.obtain();
1874 data.writeInterfaceToken(IActivityManager.descriptor);
1875 app.writeToParcel(data, 0);
1876 data.writeInt(backupRestoreMode);
1877 mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0);
1878 reply.readException();
1879 boolean success = reply.readInt() != 0;
1880 reply.recycle();
1881 data.recycle();
1882 return success;
1883 }
1884
1885 public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException {
1886 Parcel data = Parcel.obtain();
1887 Parcel reply = Parcel.obtain();
1888 data.writeInterfaceToken(IActivityManager.descriptor);
1889 data.writeString(packageName);
1890 data.writeStrongBinder(agent);
1891 mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0);
1892 reply.recycle();
1893 data.recycle();
1894 }
1895
1896 public void unbindBackupAgent(ApplicationInfo app) throws RemoteException {
1897 Parcel data = Parcel.obtain();
1898 Parcel reply = Parcel.obtain();
1899 data.writeInterfaceToken(IActivityManager.descriptor);
1900 app.writeToParcel(data, 0);
1901 mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0);
1902 reply.readException();
1903 reply.recycle();
1904 data.recycle();
1905 }
1906
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001907 public boolean startInstrumentation(ComponentName className, String profileFile,
1908 int flags, Bundle arguments, IInstrumentationWatcher watcher)
1909 throws RemoteException {
1910 Parcel data = Parcel.obtain();
1911 Parcel reply = Parcel.obtain();
1912 data.writeInterfaceToken(IActivityManager.descriptor);
1913 ComponentName.writeToParcel(className, data);
1914 data.writeString(profileFile);
1915 data.writeInt(flags);
1916 data.writeBundle(arguments);
1917 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
1918 mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1919 reply.readException();
1920 boolean res = reply.readInt() != 0;
1921 reply.recycle();
1922 data.recycle();
1923 return res;
1924 }
1925
1926 public void finishInstrumentation(IApplicationThread target,
1927 int resultCode, Bundle results) throws RemoteException {
1928 Parcel data = Parcel.obtain();
1929 Parcel reply = Parcel.obtain();
1930 data.writeInterfaceToken(IActivityManager.descriptor);
1931 data.writeStrongBinder(target != null ? target.asBinder() : null);
1932 data.writeInt(resultCode);
1933 data.writeBundle(results);
1934 mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0);
1935 reply.readException();
1936 data.recycle();
1937 reply.recycle();
1938 }
1939 public Configuration getConfiguration() throws RemoteException
1940 {
1941 Parcel data = Parcel.obtain();
1942 Parcel reply = Parcel.obtain();
1943 data.writeInterfaceToken(IActivityManager.descriptor);
1944 mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0);
1945 reply.readException();
1946 Configuration res = Configuration.CREATOR.createFromParcel(reply);
1947 reply.recycle();
1948 data.recycle();
1949 return res;
1950 }
1951 public void updateConfiguration(Configuration values) throws RemoteException
1952 {
1953 Parcel data = Parcel.obtain();
1954 Parcel reply = Parcel.obtain();
1955 data.writeInterfaceToken(IActivityManager.descriptor);
1956 values.writeToParcel(data, 0);
1957 mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0);
1958 reply.readException();
1959 data.recycle();
1960 reply.recycle();
1961 }
1962 public void setRequestedOrientation(IBinder token, int requestedOrientation)
1963 throws RemoteException {
1964 Parcel data = Parcel.obtain();
1965 Parcel reply = Parcel.obtain();
1966 data.writeInterfaceToken(IActivityManager.descriptor);
1967 data.writeStrongBinder(token);
1968 data.writeInt(requestedOrientation);
1969 mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1970 reply.readException();
1971 data.recycle();
1972 reply.recycle();
1973 }
1974 public int getRequestedOrientation(IBinder token) throws RemoteException {
1975 Parcel data = Parcel.obtain();
1976 Parcel reply = Parcel.obtain();
1977 data.writeInterfaceToken(IActivityManager.descriptor);
1978 data.writeStrongBinder(token);
1979 mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0);
1980 reply.readException();
1981 int res = reply.readInt();
1982 data.recycle();
1983 reply.recycle();
1984 return res;
1985 }
1986 public ComponentName getActivityClassForToken(IBinder token)
1987 throws RemoteException {
1988 Parcel data = Parcel.obtain();
1989 Parcel reply = Parcel.obtain();
1990 data.writeInterfaceToken(IActivityManager.descriptor);
1991 data.writeStrongBinder(token);
1992 mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0);
1993 reply.readException();
1994 ComponentName res = ComponentName.readFromParcel(reply);
1995 data.recycle();
1996 reply.recycle();
1997 return res;
1998 }
1999 public String getPackageForToken(IBinder token) throws RemoteException
2000 {
2001 Parcel data = Parcel.obtain();
2002 Parcel reply = Parcel.obtain();
2003 data.writeInterfaceToken(IActivityManager.descriptor);
2004 data.writeStrongBinder(token);
2005 mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0);
2006 reply.readException();
2007 String res = reply.readString();
2008 data.recycle();
2009 reply.recycle();
2010 return res;
2011 }
2012 public IIntentSender getIntentSender(int type,
2013 String packageName, IBinder token, String resultWho,
2014 int requestCode, Intent intent, String resolvedType, int flags)
2015 throws RemoteException {
2016 Parcel data = Parcel.obtain();
2017 Parcel reply = Parcel.obtain();
2018 data.writeInterfaceToken(IActivityManager.descriptor);
2019 data.writeInt(type);
2020 data.writeString(packageName);
2021 data.writeStrongBinder(token);
2022 data.writeString(resultWho);
2023 data.writeInt(requestCode);
2024 if (intent != null) {
2025 data.writeInt(1);
2026 intent.writeToParcel(data, 0);
2027 } else {
2028 data.writeInt(0);
2029 }
2030 data.writeString(resolvedType);
2031 data.writeInt(flags);
2032 mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0);
2033 reply.readException();
2034 IIntentSender res = IIntentSender.Stub.asInterface(
2035 reply.readStrongBinder());
2036 data.recycle();
2037 reply.recycle();
2038 return res;
2039 }
2040 public void cancelIntentSender(IIntentSender sender) throws RemoteException {
2041 Parcel data = Parcel.obtain();
2042 Parcel reply = Parcel.obtain();
2043 data.writeInterfaceToken(IActivityManager.descriptor);
2044 data.writeStrongBinder(sender.asBinder());
2045 mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0);
2046 reply.readException();
2047 data.recycle();
2048 reply.recycle();
2049 }
2050 public String getPackageForIntentSender(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(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
2056 reply.readException();
2057 String res = reply.readString();
2058 data.recycle();
2059 reply.recycle();
2060 return res;
2061 }
2062 public void setProcessLimit(int max) throws RemoteException
2063 {
2064 Parcel data = Parcel.obtain();
2065 Parcel reply = Parcel.obtain();
2066 data.writeInterfaceToken(IActivityManager.descriptor);
2067 data.writeInt(max);
2068 mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2069 reply.readException();
2070 data.recycle();
2071 reply.recycle();
2072 }
2073 public int getProcessLimit() throws RemoteException
2074 {
2075 Parcel data = Parcel.obtain();
2076 Parcel reply = Parcel.obtain();
2077 data.writeInterfaceToken(IActivityManager.descriptor);
2078 mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0);
2079 reply.readException();
2080 int res = reply.readInt();
2081 data.recycle();
2082 reply.recycle();
2083 return res;
2084 }
2085 public void setProcessForeground(IBinder token, int pid,
2086 boolean isForeground) throws RemoteException {
2087 Parcel data = Parcel.obtain();
2088 Parcel reply = Parcel.obtain();
2089 data.writeInterfaceToken(IActivityManager.descriptor);
2090 data.writeStrongBinder(token);
2091 data.writeInt(pid);
2092 data.writeInt(isForeground ? 1 : 0);
2093 mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0);
2094 reply.readException();
2095 data.recycle();
2096 reply.recycle();
2097 }
2098 public int checkPermission(String permission, int pid, int uid)
2099 throws RemoteException {
2100 Parcel data = Parcel.obtain();
2101 Parcel reply = Parcel.obtain();
2102 data.writeInterfaceToken(IActivityManager.descriptor);
2103 data.writeString(permission);
2104 data.writeInt(pid);
2105 data.writeInt(uid);
2106 mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0);
2107 reply.readException();
2108 int res = reply.readInt();
2109 data.recycle();
2110 reply.recycle();
2111 return res;
2112 }
2113 public boolean clearApplicationUserData(final String packageName,
2114 final IPackageDataObserver observer) throws RemoteException {
2115 Parcel data = Parcel.obtain();
2116 Parcel reply = Parcel.obtain();
2117 data.writeInterfaceToken(IActivityManager.descriptor);
2118 data.writeString(packageName);
2119 data.writeStrongBinder(observer.asBinder());
2120 mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0);
2121 reply.readException();
2122 boolean res = reply.readInt() != 0;
2123 data.recycle();
2124 reply.recycle();
2125 return res;
2126 }
2127 public int checkUriPermission(Uri uri, int pid, int uid, int mode)
2128 throws RemoteException {
2129 Parcel data = Parcel.obtain();
2130 Parcel reply = Parcel.obtain();
2131 data.writeInterfaceToken(IActivityManager.descriptor);
2132 uri.writeToParcel(data, 0);
2133 data.writeInt(pid);
2134 data.writeInt(uid);
2135 data.writeInt(mode);
2136 mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0);
2137 reply.readException();
2138 int res = reply.readInt();
2139 data.recycle();
2140 reply.recycle();
2141 return res;
2142 }
2143 public void grantUriPermission(IApplicationThread caller, String targetPkg,
2144 Uri uri, int mode) throws RemoteException {
2145 Parcel data = Parcel.obtain();
2146 Parcel reply = Parcel.obtain();
2147 data.writeInterfaceToken(IActivityManager.descriptor);
2148 data.writeStrongBinder(caller.asBinder());
2149 data.writeString(targetPkg);
2150 uri.writeToParcel(data, 0);
2151 data.writeInt(mode);
2152 mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0);
2153 reply.readException();
2154 data.recycle();
2155 reply.recycle();
2156 }
2157 public void revokeUriPermission(IApplicationThread caller, Uri uri,
2158 int mode) throws RemoteException {
2159 Parcel data = Parcel.obtain();
2160 Parcel reply = Parcel.obtain();
2161 data.writeInterfaceToken(IActivityManager.descriptor);
2162 data.writeStrongBinder(caller.asBinder());
2163 uri.writeToParcel(data, 0);
2164 data.writeInt(mode);
2165 mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0);
2166 reply.readException();
2167 data.recycle();
2168 reply.recycle();
2169 }
2170 public void showWaitingForDebugger(IApplicationThread who, boolean waiting)
2171 throws RemoteException {
2172 Parcel data = Parcel.obtain();
2173 Parcel reply = Parcel.obtain();
2174 data.writeInterfaceToken(IActivityManager.descriptor);
2175 data.writeStrongBinder(who.asBinder());
2176 data.writeInt(waiting ? 1 : 0);
2177 mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0);
2178 reply.readException();
2179 data.recycle();
2180 reply.recycle();
2181 }
2182 public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException {
2183 Parcel data = Parcel.obtain();
2184 Parcel reply = Parcel.obtain();
2185 data.writeInterfaceToken(IActivityManager.descriptor);
2186 mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0);
2187 reply.readException();
2188 outInfo.readFromParcel(reply);
2189 data.recycle();
2190 reply.recycle();
2191 }
2192 public void unhandledBack() throws RemoteException
2193 {
2194 Parcel data = Parcel.obtain();
2195 Parcel reply = Parcel.obtain();
2196 data.writeInterfaceToken(IActivityManager.descriptor);
2197 mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0);
2198 reply.readException();
2199 data.recycle();
2200 reply.recycle();
2201 }
2202 public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException
2203 {
2204 Parcel data = Parcel.obtain();
2205 Parcel reply = Parcel.obtain();
2206 data.writeInterfaceToken(IActivityManager.descriptor);
2207 mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0);
2208 reply.readException();
2209 ParcelFileDescriptor pfd = null;
2210 if (reply.readInt() != 0) {
2211 pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply);
2212 }
2213 data.recycle();
2214 reply.recycle();
2215 return pfd;
2216 }
2217 public void goingToSleep() throws RemoteException
2218 {
2219 Parcel data = Parcel.obtain();
2220 Parcel reply = Parcel.obtain();
2221 data.writeInterfaceToken(IActivityManager.descriptor);
2222 mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0);
2223 reply.readException();
2224 data.recycle();
2225 reply.recycle();
2226 }
2227 public void wakingUp() throws RemoteException
2228 {
2229 Parcel data = Parcel.obtain();
2230 Parcel reply = Parcel.obtain();
2231 data.writeInterfaceToken(IActivityManager.descriptor);
2232 mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0);
2233 reply.readException();
2234 data.recycle();
2235 reply.recycle();
2236 }
2237 public void setDebugApp(
2238 String packageName, boolean waitForDebugger, boolean persistent)
2239 throws RemoteException
2240 {
2241 Parcel data = Parcel.obtain();
2242 Parcel reply = Parcel.obtain();
2243 data.writeInterfaceToken(IActivityManager.descriptor);
2244 data.writeString(packageName);
2245 data.writeInt(waitForDebugger ? 1 : 0);
2246 data.writeInt(persistent ? 1 : 0);
2247 mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0);
2248 reply.readException();
2249 data.recycle();
2250 reply.recycle();
2251 }
2252 public void setAlwaysFinish(boolean enabled) throws RemoteException
2253 {
2254 Parcel data = Parcel.obtain();
2255 Parcel reply = Parcel.obtain();
2256 data.writeInterfaceToken(IActivityManager.descriptor);
2257 data.writeInt(enabled ? 1 : 0);
2258 mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0);
2259 reply.readException();
2260 data.recycle();
2261 reply.recycle();
2262 }
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002263 public void setActivityController(IActivityController watcher) throws RemoteException
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002264 {
2265 Parcel data = Parcel.obtain();
2266 Parcel reply = Parcel.obtain();
2267 data.writeInterfaceToken(IActivityManager.descriptor);
2268 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002269 mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002270 reply.readException();
2271 data.recycle();
2272 reply.recycle();
2273 }
2274 public void enterSafeMode() throws RemoteException {
2275 Parcel data = Parcel.obtain();
2276 data.writeInterfaceToken(IActivityManager.descriptor);
2277 mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
2278 data.recycle();
2279 }
2280 public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
2281 Parcel data = Parcel.obtain();
2282 data.writeStrongBinder(sender.asBinder());
2283 data.writeInterfaceToken(IActivityManager.descriptor);
2284 mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
2285 data.recycle();
2286 }
2287 public boolean killPidsForMemory(int[] pids) throws RemoteException {
2288 Parcel data = Parcel.obtain();
2289 Parcel reply = Parcel.obtain();
2290 data.writeInterfaceToken(IActivityManager.descriptor);
2291 data.writeIntArray(pids);
2292 mRemote.transact(KILL_PIDS_FOR_MEMORY_TRANSACTION, data, reply, 0);
2293 boolean res = reply.readInt() != 0;
2294 data.recycle();
2295 reply.recycle();
2296 return res;
2297 }
2298 public void reportPss(IApplicationThread caller, int pss) throws RemoteException {
2299 Parcel data = Parcel.obtain();
2300 data.writeInterfaceToken(IActivityManager.descriptor);
2301 data.writeStrongBinder(caller.asBinder());
2302 data.writeInt(pss);
2303 mRemote.transact(REPORT_PSS_TRANSACTION, data, null, 0);
2304 data.recycle();
2305 }
2306 public void startRunning(String pkg, String cls, String action,
2307 String indata) throws RemoteException {
2308 Parcel data = Parcel.obtain();
2309 Parcel reply = Parcel.obtain();
2310 data.writeInterfaceToken(IActivityManager.descriptor);
2311 data.writeString(pkg);
2312 data.writeString(cls);
2313 data.writeString(action);
2314 data.writeString(indata);
2315 mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0);
2316 reply.readException();
2317 data.recycle();
2318 reply.recycle();
2319 }
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002320 public boolean testIsSystemReady()
2321 {
2322 /* this base class version is never called */
2323 return true;
2324 }
2325 public int handleApplicationError(IBinder app, int flags,
2326 String tag, String shortMsg, String longMsg,
2327 byte[] crashData) throws RemoteException
2328 {
2329 Parcel data = Parcel.obtain();
2330 Parcel reply = Parcel.obtain();
2331 data.writeInterfaceToken(IActivityManager.descriptor);
2332 data.writeStrongBinder(app);
2333 data.writeInt(flags);
2334 data.writeString(tag);
2335 data.writeString(shortMsg);
2336 data.writeString(longMsg);
2337 data.writeByteArray(crashData);
2338 mRemote.transact(HANDLE_APPLICATION_ERROR_TRANSACTION, data, reply, 0);
2339 reply.readException();
2340 int res = reply.readInt();
2341 reply.recycle();
2342 data.recycle();
2343 return res;
2344 }
2345
2346 public void signalPersistentProcesses(int sig) throws RemoteException {
2347 Parcel data = Parcel.obtain();
2348 Parcel reply = Parcel.obtain();
2349 data.writeInterfaceToken(IActivityManager.descriptor);
2350 data.writeInt(sig);
2351 mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0);
2352 reply.readException();
2353 data.recycle();
2354 reply.recycle();
2355 }
2356
2357 public void restartPackage(String packageName) throws RemoteException {
2358 Parcel data = Parcel.obtain();
2359 Parcel reply = Parcel.obtain();
2360 data.writeInterfaceToken(IActivityManager.descriptor);
2361 data.writeString(packageName);
2362 mRemote.transact(RESTART_PACKAGE_TRANSACTION, data, reply, 0);
2363 reply.readException();
2364 data.recycle();
2365 reply.recycle();
2366 }
2367
2368 public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException
2369 {
2370 Parcel data = Parcel.obtain();
2371 Parcel reply = Parcel.obtain();
2372 data.writeInterfaceToken(IActivityManager.descriptor);
2373 mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0);
2374 reply.readException();
2375 ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply);
2376 reply.recycle();
2377 data.recycle();
2378 return res;
2379 }
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002380
2381 public boolean profileControl(String process, boolean start,
Dianne Hackborn9c8dd552009-06-23 19:22:52 -07002382 String path, ParcelFileDescriptor fd) throws RemoteException
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002383 {
2384 Parcel data = Parcel.obtain();
2385 Parcel reply = Parcel.obtain();
2386 data.writeInterfaceToken(IActivityManager.descriptor);
2387 data.writeString(process);
2388 data.writeInt(start ? 1 : 0);
2389 data.writeString(path);
Dianne Hackborn9c8dd552009-06-23 19:22:52 -07002390 if (fd != null) {
2391 data.writeInt(1);
2392 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
2393 } else {
2394 data.writeInt(0);
2395 }
The Android Open Source Projectf5b4b982009-03-05 20:00:43 -08002396 mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0);
2397 reply.readException();
2398 boolean res = reply.readInt() != 0;
2399 reply.recycle();
2400 data.recycle();
2401 return res;
2402 }
2403
Dianne Hackborn55280a92009-05-07 15:53:46 -07002404 public boolean shutdown(int timeout) throws RemoteException
2405 {
2406 Parcel data = Parcel.obtain();
2407 Parcel reply = Parcel.obtain();
2408 data.writeInterfaceToken(IActivityManager.descriptor);
2409 data.writeInt(timeout);
2410 mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0);
2411 reply.readException();
2412 boolean res = reply.readInt() != 0;
2413 reply.recycle();
2414 data.recycle();
2415 return res;
2416 }
2417
Dianne Hackborn95fc68f2009-05-19 18:37:45 -07002418 public void stopAppSwitches() throws RemoteException {
2419 Parcel data = Parcel.obtain();
2420 Parcel reply = Parcel.obtain();
2421 data.writeInterfaceToken(IActivityManager.descriptor);
2422 mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0);
2423 reply.readException();
2424 reply.recycle();
2425 data.recycle();
2426 }
2427
2428 public void resumeAppSwitches() throws RemoteException {
2429 Parcel data = Parcel.obtain();
2430 Parcel reply = Parcel.obtain();
2431 data.writeInterfaceToken(IActivityManager.descriptor);
2432 mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0);
2433 reply.readException();
2434 reply.recycle();
2435 data.recycle();
2436 }
2437
Dianne Hackbornb06ea702009-07-13 13:07:51 -07002438 public void registerActivityWatcher(IActivityWatcher watcher)
2439 throws RemoteException {
2440 Parcel data = Parcel.obtain();
2441 Parcel reply = Parcel.obtain();
2442 data.writeInterfaceToken(IActivityManager.descriptor);
2443 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2444 mRemote.transact(REGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2445 reply.readException();
2446 data.recycle();
2447 reply.recycle();
2448 }
2449
2450 public void unregisterActivityWatcher(IActivityWatcher watcher)
2451 throws RemoteException {
2452 Parcel data = Parcel.obtain();
2453 Parcel reply = Parcel.obtain();
2454 data.writeInterfaceToken(IActivityManager.descriptor);
2455 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null);
2456 mRemote.transact(UNREGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0);
2457 reply.readException();
2458 data.recycle();
2459 reply.recycle();
2460 }
2461
Dianne Hackborn2d91af02009-07-16 13:34:33 -07002462 public int startActivityInPackage(int uid,
2463 Intent intent, String resolvedType, IBinder resultTo,
2464 String resultWho, int requestCode, boolean onlyIfNeeded)
2465 throws RemoteException {
2466 Parcel data = Parcel.obtain();
2467 Parcel reply = Parcel.obtain();
2468 data.writeInterfaceToken(IActivityManager.descriptor);
2469 data.writeInt(uid);
2470 intent.writeToParcel(data, 0);
2471 data.writeString(resolvedType);
2472 data.writeStrongBinder(resultTo);
2473 data.writeString(resultWho);
2474 data.writeInt(requestCode);
2475 data.writeInt(onlyIfNeeded ? 1 : 0);
2476 mRemote.transact(START_ACTIVITY_IN_PACKAGE_TRANSACTION, data, reply, 0);
2477 reply.readException();
2478 int result = reply.readInt();
2479 reply.recycle();
2480 data.recycle();
2481 return result;
2482 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07002483
Suchi Amalapurapu261e66a2009-07-27 15:21:34 -07002484 public void killApplicationWithUid(String pkg, int uid) throws RemoteException {
2485 Parcel data = Parcel.obtain();
2486 Parcel reply = Parcel.obtain();
2487 data.writeInterfaceToken(IActivityManager.descriptor);
2488 data.writeString(pkg);
2489 data.writeInt(uid);
2490 mRemote.transact(KILL_APPLICATION_WITH_UID_TRANSACTION, data, reply, 0);
2491 reply.readException();
2492 data.recycle();
2493 reply.recycle();
2494 }
Dianne Hackborna6ddc8a2009-07-28 17:49:55 -07002495
2496 public void closeSystemDialogs(String reason) throws RemoteException {
2497 Parcel data = Parcel.obtain();
2498 Parcel reply = Parcel.obtain();
2499 data.writeInterfaceToken(IActivityManager.descriptor);
2500 data.writeString(reason);
2501 mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
2502 reply.readException();
2503 data.recycle();
2504 reply.recycle();
2505 }
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002506
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002507 public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002508 throws RemoteException {
2509 Parcel data = Parcel.obtain();
2510 Parcel reply = Parcel.obtain();
2511 data.writeInterfaceToken(IActivityManager.descriptor);
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002512 data.writeIntArray(pids);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002513 mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0);
2514 reply.readException();
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002515 Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR);
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002516 data.recycle();
2517 reply.recycle();
Dianne Hackborn4f21c4c2009-09-17 10:24:05 -07002518 return res;
Dianne Hackborn3025ef32009-08-31 21:31:47 -07002519 }
Christopher Tate5e1ab332009-09-01 20:32:49 -07002520
2521 public void killApplicationProcess(String processName, int uid) throws RemoteException {
2522 Parcel data = Parcel.obtain();
2523 Parcel reply = Parcel.obtain();
2524 data.writeInterfaceToken(IActivityManager.descriptor);
2525 data.writeString(processName);
2526 data.writeInt(uid);
2527 mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0);
2528 reply.readException();
2529 data.recycle();
2530 reply.recycle();
2531 }
2532
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08002533 private IBinder mRemote;
2534}