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