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