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