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