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