ActivityManagerNative.java revision 90f4aafa336d9f2f07281ead3c846d323a710015
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 CHECK_GRANT_URI_PERMISSION_TRANSACTION: { 1345 data.enforceInterface(IActivityManager.descriptor); 1346 int callingUid = data.readInt(); 1347 String targetPkg = data.readString(); 1348 Uri uri = Uri.CREATOR.createFromParcel(data); 1349 int modeFlags = data.readInt(); 1350 int res = checkGrantUriPermission(callingUid, targetPkg, uri, modeFlags); 1351 reply.writeNoException(); 1352 reply.writeInt(res); 1353 return true; 1354 } 1355 1356 case DUMP_HEAP_TRANSACTION: { 1357 data.enforceInterface(IActivityManager.descriptor); 1358 String process = data.readString(); 1359 boolean managed = data.readInt() != 0; 1360 String path = data.readString(); 1361 ParcelFileDescriptor fd = data.readInt() != 0 1362 ? data.readFileDescriptor() : null; 1363 boolean res = dumpHeap(process, managed, path, fd); 1364 reply.writeNoException(); 1365 reply.writeInt(res ? 1 : 0); 1366 return true; 1367 } 1368 1369 } 1370 1371 return super.onTransact(code, data, reply, flags); 1372 } 1373 1374 public IBinder asBinder() 1375 { 1376 return this; 1377 } 1378 1379 private static IActivityManager gDefault; 1380} 1381 1382class ActivityManagerProxy implements IActivityManager 1383{ 1384 public ActivityManagerProxy(IBinder remote) 1385 { 1386 mRemote = remote; 1387 } 1388 1389 public IBinder asBinder() 1390 { 1391 return mRemote; 1392 } 1393 1394 public int startActivity(IApplicationThread caller, Intent intent, 1395 String resolvedType, Uri[] grantedUriPermissions, int grantedMode, 1396 IBinder resultTo, String resultWho, 1397 int requestCode, boolean onlyIfNeeded, 1398 boolean debug) throws RemoteException { 1399 Parcel data = Parcel.obtain(); 1400 Parcel reply = Parcel.obtain(); 1401 data.writeInterfaceToken(IActivityManager.descriptor); 1402 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1403 intent.writeToParcel(data, 0); 1404 data.writeString(resolvedType); 1405 data.writeTypedArray(grantedUriPermissions, 0); 1406 data.writeInt(grantedMode); 1407 data.writeStrongBinder(resultTo); 1408 data.writeString(resultWho); 1409 data.writeInt(requestCode); 1410 data.writeInt(onlyIfNeeded ? 1 : 0); 1411 data.writeInt(debug ? 1 : 0); 1412 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0); 1413 reply.readException(); 1414 int result = reply.readInt(); 1415 reply.recycle(); 1416 data.recycle(); 1417 return result; 1418 } 1419 public WaitResult startActivityAndWait(IApplicationThread caller, Intent intent, 1420 String resolvedType, Uri[] grantedUriPermissions, int grantedMode, 1421 IBinder resultTo, String resultWho, 1422 int requestCode, boolean onlyIfNeeded, 1423 boolean debug) throws RemoteException { 1424 Parcel data = Parcel.obtain(); 1425 Parcel reply = Parcel.obtain(); 1426 data.writeInterfaceToken(IActivityManager.descriptor); 1427 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1428 intent.writeToParcel(data, 0); 1429 data.writeString(resolvedType); 1430 data.writeTypedArray(grantedUriPermissions, 0); 1431 data.writeInt(grantedMode); 1432 data.writeStrongBinder(resultTo); 1433 data.writeString(resultWho); 1434 data.writeInt(requestCode); 1435 data.writeInt(onlyIfNeeded ? 1 : 0); 1436 data.writeInt(debug ? 1 : 0); 1437 mRemote.transact(START_ACTIVITY_AND_WAIT_TRANSACTION, data, reply, 0); 1438 reply.readException(); 1439 WaitResult result = WaitResult.CREATOR.createFromParcel(reply); 1440 reply.recycle(); 1441 data.recycle(); 1442 return result; 1443 } 1444 public int startActivityWithConfig(IApplicationThread caller, Intent intent, 1445 String resolvedType, Uri[] grantedUriPermissions, int grantedMode, 1446 IBinder resultTo, String resultWho, 1447 int requestCode, boolean onlyIfNeeded, 1448 boolean debug, Configuration config) throws RemoteException { 1449 Parcel data = Parcel.obtain(); 1450 Parcel reply = Parcel.obtain(); 1451 data.writeInterfaceToken(IActivityManager.descriptor); 1452 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1453 intent.writeToParcel(data, 0); 1454 data.writeString(resolvedType); 1455 data.writeTypedArray(grantedUriPermissions, 0); 1456 data.writeInt(grantedMode); 1457 data.writeStrongBinder(resultTo); 1458 data.writeString(resultWho); 1459 data.writeInt(requestCode); 1460 data.writeInt(onlyIfNeeded ? 1 : 0); 1461 data.writeInt(debug ? 1 : 0); 1462 config.writeToParcel(data, 0); 1463 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0); 1464 reply.readException(); 1465 int result = reply.readInt(); 1466 reply.recycle(); 1467 data.recycle(); 1468 return result; 1469 } 1470 public int startActivityIntentSender(IApplicationThread caller, 1471 IntentSender intent, Intent fillInIntent, String resolvedType, 1472 IBinder resultTo, String resultWho, int requestCode, 1473 int flagsMask, int flagsValues) throws RemoteException { 1474 Parcel data = Parcel.obtain(); 1475 Parcel reply = Parcel.obtain(); 1476 data.writeInterfaceToken(IActivityManager.descriptor); 1477 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1478 intent.writeToParcel(data, 0); 1479 if (fillInIntent != null) { 1480 data.writeInt(1); 1481 fillInIntent.writeToParcel(data, 0); 1482 } else { 1483 data.writeInt(0); 1484 } 1485 data.writeString(resolvedType); 1486 data.writeStrongBinder(resultTo); 1487 data.writeString(resultWho); 1488 data.writeInt(requestCode); 1489 data.writeInt(flagsMask); 1490 data.writeInt(flagsValues); 1491 mRemote.transact(START_ACTIVITY_INTENT_SENDER_TRANSACTION, data, reply, 0); 1492 reply.readException(); 1493 int result = reply.readInt(); 1494 reply.recycle(); 1495 data.recycle(); 1496 return result; 1497 } 1498 public boolean startNextMatchingActivity(IBinder callingActivity, 1499 Intent intent) throws RemoteException { 1500 Parcel data = Parcel.obtain(); 1501 Parcel reply = Parcel.obtain(); 1502 data.writeInterfaceToken(IActivityManager.descriptor); 1503 data.writeStrongBinder(callingActivity); 1504 intent.writeToParcel(data, 0); 1505 mRemote.transact(START_NEXT_MATCHING_ACTIVITY_TRANSACTION, data, reply, 0); 1506 reply.readException(); 1507 int result = reply.readInt(); 1508 reply.recycle(); 1509 data.recycle(); 1510 return result != 0; 1511 } 1512 public boolean finishActivity(IBinder token, int resultCode, Intent resultData) 1513 throws RemoteException { 1514 Parcel data = Parcel.obtain(); 1515 Parcel reply = Parcel.obtain(); 1516 data.writeInterfaceToken(IActivityManager.descriptor); 1517 data.writeStrongBinder(token); 1518 data.writeInt(resultCode); 1519 if (resultData != null) { 1520 data.writeInt(1); 1521 resultData.writeToParcel(data, 0); 1522 } else { 1523 data.writeInt(0); 1524 } 1525 mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0); 1526 reply.readException(); 1527 boolean res = reply.readInt() != 0; 1528 data.recycle(); 1529 reply.recycle(); 1530 return res; 1531 } 1532 public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException 1533 { 1534 Parcel data = Parcel.obtain(); 1535 Parcel reply = Parcel.obtain(); 1536 data.writeInterfaceToken(IActivityManager.descriptor); 1537 data.writeStrongBinder(token); 1538 data.writeString(resultWho); 1539 data.writeInt(requestCode); 1540 mRemote.transact(FINISH_SUB_ACTIVITY_TRANSACTION, data, reply, 0); 1541 reply.readException(); 1542 data.recycle(); 1543 reply.recycle(); 1544 } 1545 public boolean willActivityBeVisible(IBinder token) throws RemoteException { 1546 Parcel data = Parcel.obtain(); 1547 Parcel reply = Parcel.obtain(); 1548 data.writeInterfaceToken(IActivityManager.descriptor); 1549 data.writeStrongBinder(token); 1550 mRemote.transact(WILL_ACTIVITY_BE_VISIBLE_TRANSACTION, data, reply, 0); 1551 reply.readException(); 1552 boolean res = reply.readInt() != 0; 1553 data.recycle(); 1554 reply.recycle(); 1555 return res; 1556 } 1557 public Intent registerReceiver(IApplicationThread caller, 1558 IIntentReceiver receiver, 1559 IntentFilter filter, String perm) throws RemoteException 1560 { 1561 Parcel data = Parcel.obtain(); 1562 Parcel reply = Parcel.obtain(); 1563 data.writeInterfaceToken(IActivityManager.descriptor); 1564 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1565 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null); 1566 filter.writeToParcel(data, 0); 1567 data.writeString(perm); 1568 mRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0); 1569 reply.readException(); 1570 Intent intent = null; 1571 int haveIntent = reply.readInt(); 1572 if (haveIntent != 0) { 1573 intent = Intent.CREATOR.createFromParcel(reply); 1574 } 1575 reply.recycle(); 1576 data.recycle(); 1577 return intent; 1578 } 1579 public void unregisterReceiver(IIntentReceiver receiver) throws RemoteException 1580 { 1581 Parcel data = Parcel.obtain(); 1582 Parcel reply = Parcel.obtain(); 1583 data.writeInterfaceToken(IActivityManager.descriptor); 1584 data.writeStrongBinder(receiver.asBinder()); 1585 mRemote.transact(UNREGISTER_RECEIVER_TRANSACTION, data, reply, 0); 1586 reply.readException(); 1587 data.recycle(); 1588 reply.recycle(); 1589 } 1590 public int broadcastIntent(IApplicationThread caller, 1591 Intent intent, String resolvedType, IIntentReceiver resultTo, 1592 int resultCode, String resultData, Bundle map, 1593 String requiredPermission, boolean serialized, 1594 boolean sticky) throws RemoteException 1595 { 1596 Parcel data = Parcel.obtain(); 1597 Parcel reply = Parcel.obtain(); 1598 data.writeInterfaceToken(IActivityManager.descriptor); 1599 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1600 intent.writeToParcel(data, 0); 1601 data.writeString(resolvedType); 1602 data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null); 1603 data.writeInt(resultCode); 1604 data.writeString(resultData); 1605 data.writeBundle(map); 1606 data.writeString(requiredPermission); 1607 data.writeInt(serialized ? 1 : 0); 1608 data.writeInt(sticky ? 1 : 0); 1609 mRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0); 1610 reply.readException(); 1611 int res = reply.readInt(); 1612 reply.recycle(); 1613 data.recycle(); 1614 return res; 1615 } 1616 public void unbroadcastIntent(IApplicationThread caller, Intent intent) throws RemoteException 1617 { 1618 Parcel data = Parcel.obtain(); 1619 Parcel reply = Parcel.obtain(); 1620 data.writeInterfaceToken(IActivityManager.descriptor); 1621 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1622 intent.writeToParcel(data, 0); 1623 mRemote.transact(UNBROADCAST_INTENT_TRANSACTION, data, reply, 0); 1624 reply.readException(); 1625 data.recycle(); 1626 reply.recycle(); 1627 } 1628 public void finishReceiver(IBinder who, int resultCode, String resultData, Bundle map, boolean abortBroadcast) throws RemoteException 1629 { 1630 Parcel data = Parcel.obtain(); 1631 Parcel reply = Parcel.obtain(); 1632 data.writeInterfaceToken(IActivityManager.descriptor); 1633 data.writeStrongBinder(who); 1634 data.writeInt(resultCode); 1635 data.writeString(resultData); 1636 data.writeBundle(map); 1637 data.writeInt(abortBroadcast ? 1 : 0); 1638 mRemote.transact(FINISH_RECEIVER_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 1639 reply.readException(); 1640 data.recycle(); 1641 reply.recycle(); 1642 } 1643 public void setPersistent(IBinder token, boolean isPersistent) throws RemoteException 1644 { 1645 Parcel data = Parcel.obtain(); 1646 Parcel reply = Parcel.obtain(); 1647 data.writeInterfaceToken(IActivityManager.descriptor); 1648 data.writeStrongBinder(token); 1649 data.writeInt(isPersistent ? 1 : 0); 1650 mRemote.transact(SET_PERSISTENT_TRANSACTION, data, reply, 0); 1651 reply.readException(); 1652 data.recycle(); 1653 reply.recycle(); 1654 } 1655 public void attachApplication(IApplicationThread app) throws RemoteException 1656 { 1657 Parcel data = Parcel.obtain(); 1658 Parcel reply = Parcel.obtain(); 1659 data.writeInterfaceToken(IActivityManager.descriptor); 1660 data.writeStrongBinder(app.asBinder()); 1661 mRemote.transact(ATTACH_APPLICATION_TRANSACTION, data, reply, 0); 1662 reply.readException(); 1663 data.recycle(); 1664 reply.recycle(); 1665 } 1666 public void activityIdle(IBinder token, Configuration config) throws RemoteException 1667 { 1668 Parcel data = Parcel.obtain(); 1669 Parcel reply = Parcel.obtain(); 1670 data.writeInterfaceToken(IActivityManager.descriptor); 1671 data.writeStrongBinder(token); 1672 if (config != null) { 1673 data.writeInt(1); 1674 config.writeToParcel(data, 0); 1675 } else { 1676 data.writeInt(0); 1677 } 1678 mRemote.transact(ACTIVITY_IDLE_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 1679 reply.readException(); 1680 data.recycle(); 1681 reply.recycle(); 1682 } 1683 public void activityPaused(IBinder token, Bundle state) throws RemoteException 1684 { 1685 Parcel data = Parcel.obtain(); 1686 Parcel reply = Parcel.obtain(); 1687 data.writeInterfaceToken(IActivityManager.descriptor); 1688 data.writeStrongBinder(token); 1689 data.writeBundle(state); 1690 mRemote.transact(ACTIVITY_PAUSED_TRANSACTION, data, reply, 0); 1691 reply.readException(); 1692 data.recycle(); 1693 reply.recycle(); 1694 } 1695 public void activityStopped(IBinder token, 1696 Bitmap thumbnail, CharSequence description) throws RemoteException 1697 { 1698 Parcel data = Parcel.obtain(); 1699 Parcel reply = Parcel.obtain(); 1700 data.writeInterfaceToken(IActivityManager.descriptor); 1701 data.writeStrongBinder(token); 1702 if (thumbnail != null) { 1703 data.writeInt(1); 1704 thumbnail.writeToParcel(data, 0); 1705 } else { 1706 data.writeInt(0); 1707 } 1708 TextUtils.writeToParcel(description, data, 0); 1709 mRemote.transact(ACTIVITY_STOPPED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 1710 reply.readException(); 1711 data.recycle(); 1712 reply.recycle(); 1713 } 1714 public void activityDestroyed(IBinder token) throws RemoteException 1715 { 1716 Parcel data = Parcel.obtain(); 1717 Parcel reply = Parcel.obtain(); 1718 data.writeInterfaceToken(IActivityManager.descriptor); 1719 data.writeStrongBinder(token); 1720 mRemote.transact(ACTIVITY_DESTROYED_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 1721 reply.readException(); 1722 data.recycle(); 1723 reply.recycle(); 1724 } 1725 public String getCallingPackage(IBinder token) throws RemoteException 1726 { 1727 Parcel data = Parcel.obtain(); 1728 Parcel reply = Parcel.obtain(); 1729 data.writeInterfaceToken(IActivityManager.descriptor); 1730 data.writeStrongBinder(token); 1731 mRemote.transact(GET_CALLING_PACKAGE_TRANSACTION, data, reply, 0); 1732 reply.readException(); 1733 String res = reply.readString(); 1734 data.recycle(); 1735 reply.recycle(); 1736 return res; 1737 } 1738 public ComponentName getCallingActivity(IBinder token) 1739 throws RemoteException { 1740 Parcel data = Parcel.obtain(); 1741 Parcel reply = Parcel.obtain(); 1742 data.writeInterfaceToken(IActivityManager.descriptor); 1743 data.writeStrongBinder(token); 1744 mRemote.transact(GET_CALLING_ACTIVITY_TRANSACTION, data, reply, 0); 1745 reply.readException(); 1746 ComponentName res = ComponentName.readFromParcel(reply); 1747 data.recycle(); 1748 reply.recycle(); 1749 return res; 1750 } 1751 public List getTasks(int maxNum, int flags, 1752 IThumbnailReceiver receiver) throws RemoteException { 1753 Parcel data = Parcel.obtain(); 1754 Parcel reply = Parcel.obtain(); 1755 data.writeInterfaceToken(IActivityManager.descriptor); 1756 data.writeInt(maxNum); 1757 data.writeInt(flags); 1758 data.writeStrongBinder(receiver != null ? receiver.asBinder() : null); 1759 mRemote.transact(GET_TASKS_TRANSACTION, data, reply, 0); 1760 reply.readException(); 1761 ArrayList list = null; 1762 int N = reply.readInt(); 1763 if (N >= 0) { 1764 list = new ArrayList(); 1765 while (N > 0) { 1766 ActivityManager.RunningTaskInfo info = 1767 ActivityManager.RunningTaskInfo.CREATOR 1768 .createFromParcel(reply); 1769 list.add(info); 1770 N--; 1771 } 1772 } 1773 data.recycle(); 1774 reply.recycle(); 1775 return list; 1776 } 1777 public List<ActivityManager.RecentTaskInfo> getRecentTasks(int maxNum, 1778 int flags) throws RemoteException { 1779 Parcel data = Parcel.obtain(); 1780 Parcel reply = Parcel.obtain(); 1781 data.writeInterfaceToken(IActivityManager.descriptor); 1782 data.writeInt(maxNum); 1783 data.writeInt(flags); 1784 mRemote.transact(GET_RECENT_TASKS_TRANSACTION, data, reply, 0); 1785 reply.readException(); 1786 ArrayList<ActivityManager.RecentTaskInfo> list 1787 = reply.createTypedArrayList(ActivityManager.RecentTaskInfo.CREATOR); 1788 data.recycle(); 1789 reply.recycle(); 1790 return list; 1791 } 1792 public List getServices(int maxNum, int flags) throws RemoteException { 1793 Parcel data = Parcel.obtain(); 1794 Parcel reply = Parcel.obtain(); 1795 data.writeInterfaceToken(IActivityManager.descriptor); 1796 data.writeInt(maxNum); 1797 data.writeInt(flags); 1798 mRemote.transact(GET_SERVICES_TRANSACTION, data, reply, 0); 1799 reply.readException(); 1800 ArrayList list = null; 1801 int N = reply.readInt(); 1802 if (N >= 0) { 1803 list = new ArrayList(); 1804 while (N > 0) { 1805 ActivityManager.RunningServiceInfo info = 1806 ActivityManager.RunningServiceInfo.CREATOR 1807 .createFromParcel(reply); 1808 list.add(info); 1809 N--; 1810 } 1811 } 1812 data.recycle(); 1813 reply.recycle(); 1814 return list; 1815 } 1816 public List<ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState() 1817 throws RemoteException { 1818 Parcel data = Parcel.obtain(); 1819 Parcel reply = Parcel.obtain(); 1820 data.writeInterfaceToken(IActivityManager.descriptor); 1821 mRemote.transact(GET_PROCESSES_IN_ERROR_STATE_TRANSACTION, data, reply, 0); 1822 reply.readException(); 1823 ArrayList<ActivityManager.ProcessErrorStateInfo> list 1824 = reply.createTypedArrayList(ActivityManager.ProcessErrorStateInfo.CREATOR); 1825 data.recycle(); 1826 reply.recycle(); 1827 return list; 1828 } 1829 public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses() 1830 throws RemoteException { 1831 Parcel data = Parcel.obtain(); 1832 Parcel reply = Parcel.obtain(); 1833 data.writeInterfaceToken(IActivityManager.descriptor); 1834 mRemote.transact(GET_RUNNING_APP_PROCESSES_TRANSACTION, data, reply, 0); 1835 reply.readException(); 1836 ArrayList<ActivityManager.RunningAppProcessInfo> list 1837 = reply.createTypedArrayList(ActivityManager.RunningAppProcessInfo.CREATOR); 1838 data.recycle(); 1839 reply.recycle(); 1840 return list; 1841 } 1842 public List<ApplicationInfo> getRunningExternalApplications() 1843 throws RemoteException { 1844 Parcel data = Parcel.obtain(); 1845 Parcel reply = Parcel.obtain(); 1846 data.writeInterfaceToken(IActivityManager.descriptor); 1847 mRemote.transact(GET_RUNNING_EXTERNAL_APPLICATIONS_TRANSACTION, data, reply, 0); 1848 reply.readException(); 1849 ArrayList<ApplicationInfo> list 1850 = reply.createTypedArrayList(ApplicationInfo.CREATOR); 1851 data.recycle(); 1852 reply.recycle(); 1853 return list; 1854 } 1855 public void moveTaskToFront(int task) throws RemoteException 1856 { 1857 Parcel data = Parcel.obtain(); 1858 Parcel reply = Parcel.obtain(); 1859 data.writeInterfaceToken(IActivityManager.descriptor); 1860 data.writeInt(task); 1861 mRemote.transact(MOVE_TASK_TO_FRONT_TRANSACTION, data, reply, 0); 1862 reply.readException(); 1863 data.recycle(); 1864 reply.recycle(); 1865 } 1866 public void moveTaskToBack(int task) throws RemoteException 1867 { 1868 Parcel data = Parcel.obtain(); 1869 Parcel reply = Parcel.obtain(); 1870 data.writeInterfaceToken(IActivityManager.descriptor); 1871 data.writeInt(task); 1872 mRemote.transact(MOVE_TASK_TO_BACK_TRANSACTION, data, reply, 0); 1873 reply.readException(); 1874 data.recycle(); 1875 reply.recycle(); 1876 } 1877 public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) 1878 throws RemoteException { 1879 Parcel data = Parcel.obtain(); 1880 Parcel reply = Parcel.obtain(); 1881 data.writeInterfaceToken(IActivityManager.descriptor); 1882 data.writeStrongBinder(token); 1883 data.writeInt(nonRoot ? 1 : 0); 1884 mRemote.transact(MOVE_ACTIVITY_TASK_TO_BACK_TRANSACTION, data, reply, 0); 1885 reply.readException(); 1886 boolean res = reply.readInt() != 0; 1887 data.recycle(); 1888 reply.recycle(); 1889 return res; 1890 } 1891 public void moveTaskBackwards(int task) throws RemoteException 1892 { 1893 Parcel data = Parcel.obtain(); 1894 Parcel reply = Parcel.obtain(); 1895 data.writeInterfaceToken(IActivityManager.descriptor); 1896 data.writeInt(task); 1897 mRemote.transact(MOVE_TASK_BACKWARDS_TRANSACTION, data, reply, 0); 1898 reply.readException(); 1899 data.recycle(); 1900 reply.recycle(); 1901 } 1902 public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException 1903 { 1904 Parcel data = Parcel.obtain(); 1905 Parcel reply = Parcel.obtain(); 1906 data.writeInterfaceToken(IActivityManager.descriptor); 1907 data.writeStrongBinder(token); 1908 data.writeInt(onlyRoot ? 1 : 0); 1909 mRemote.transact(GET_TASK_FOR_ACTIVITY_TRANSACTION, data, reply, 0); 1910 reply.readException(); 1911 int res = reply.readInt(); 1912 data.recycle(); 1913 reply.recycle(); 1914 return res; 1915 } 1916 public void finishOtherInstances(IBinder token, ComponentName className) throws RemoteException 1917 { 1918 Parcel data = Parcel.obtain(); 1919 Parcel reply = Parcel.obtain(); 1920 data.writeInterfaceToken(IActivityManager.descriptor); 1921 data.writeStrongBinder(token); 1922 ComponentName.writeToParcel(className, data); 1923 mRemote.transact(FINISH_OTHER_INSTANCES_TRANSACTION, data, reply, 0); 1924 reply.readException(); 1925 data.recycle(); 1926 reply.recycle(); 1927 } 1928 public void reportThumbnail(IBinder token, 1929 Bitmap thumbnail, CharSequence description) throws RemoteException 1930 { 1931 Parcel data = Parcel.obtain(); 1932 Parcel reply = Parcel.obtain(); 1933 data.writeInterfaceToken(IActivityManager.descriptor); 1934 data.writeStrongBinder(token); 1935 if (thumbnail != null) { 1936 data.writeInt(1); 1937 thumbnail.writeToParcel(data, 0); 1938 } else { 1939 data.writeInt(0); 1940 } 1941 TextUtils.writeToParcel(description, data, 0); 1942 mRemote.transact(REPORT_THUMBNAIL_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 1943 reply.readException(); 1944 data.recycle(); 1945 reply.recycle(); 1946 } 1947 public ContentProviderHolder getContentProvider(IApplicationThread caller, 1948 String name) throws RemoteException 1949 { 1950 Parcel data = Parcel.obtain(); 1951 Parcel reply = Parcel.obtain(); 1952 data.writeInterfaceToken(IActivityManager.descriptor); 1953 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1954 data.writeString(name); 1955 mRemote.transact(GET_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); 1956 reply.readException(); 1957 int res = reply.readInt(); 1958 ContentProviderHolder cph = null; 1959 if (res != 0) { 1960 cph = ContentProviderHolder.CREATOR.createFromParcel(reply); 1961 } 1962 data.recycle(); 1963 reply.recycle(); 1964 return cph; 1965 } 1966 public void publishContentProviders(IApplicationThread caller, 1967 List<ContentProviderHolder> providers) throws RemoteException 1968 { 1969 Parcel data = Parcel.obtain(); 1970 Parcel reply = Parcel.obtain(); 1971 data.writeInterfaceToken(IActivityManager.descriptor); 1972 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1973 data.writeTypedList(providers); 1974 mRemote.transact(PUBLISH_CONTENT_PROVIDERS_TRANSACTION, data, reply, 0); 1975 reply.readException(); 1976 data.recycle(); 1977 reply.recycle(); 1978 } 1979 1980 public void removeContentProvider(IApplicationThread caller, 1981 String name) throws RemoteException { 1982 Parcel data = Parcel.obtain(); 1983 Parcel reply = Parcel.obtain(); 1984 data.writeInterfaceToken(IActivityManager.descriptor); 1985 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 1986 data.writeString(name); 1987 mRemote.transact(REMOVE_CONTENT_PROVIDER_TRANSACTION, data, reply, 0); 1988 reply.readException(); 1989 data.recycle(); 1990 reply.recycle(); 1991 } 1992 1993 public PendingIntent getRunningServiceControlPanel(ComponentName service) 1994 throws RemoteException 1995 { 1996 Parcel data = Parcel.obtain(); 1997 Parcel reply = Parcel.obtain(); 1998 data.writeInterfaceToken(IActivityManager.descriptor); 1999 service.writeToParcel(data, 0); 2000 mRemote.transact(GET_RUNNING_SERVICE_CONTROL_PANEL_TRANSACTION, data, reply, 0); 2001 reply.readException(); 2002 PendingIntent res = PendingIntent.readPendingIntentOrNullFromParcel(reply); 2003 data.recycle(); 2004 reply.recycle(); 2005 return res; 2006 } 2007 2008 public ComponentName startService(IApplicationThread caller, Intent service, 2009 String resolvedType) throws RemoteException 2010 { 2011 Parcel data = Parcel.obtain(); 2012 Parcel reply = Parcel.obtain(); 2013 data.writeInterfaceToken(IActivityManager.descriptor); 2014 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 2015 service.writeToParcel(data, 0); 2016 data.writeString(resolvedType); 2017 mRemote.transact(START_SERVICE_TRANSACTION, data, reply, 0); 2018 reply.readException(); 2019 ComponentName res = ComponentName.readFromParcel(reply); 2020 data.recycle(); 2021 reply.recycle(); 2022 return res; 2023 } 2024 public int stopService(IApplicationThread caller, Intent service, 2025 String resolvedType) throws RemoteException 2026 { 2027 Parcel data = Parcel.obtain(); 2028 Parcel reply = Parcel.obtain(); 2029 data.writeInterfaceToken(IActivityManager.descriptor); 2030 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 2031 service.writeToParcel(data, 0); 2032 data.writeString(resolvedType); 2033 mRemote.transact(STOP_SERVICE_TRANSACTION, data, reply, 0); 2034 reply.readException(); 2035 int res = reply.readInt(); 2036 reply.recycle(); 2037 data.recycle(); 2038 return res; 2039 } 2040 public boolean stopServiceToken(ComponentName className, IBinder token, 2041 int startId) throws RemoteException { 2042 Parcel data = Parcel.obtain(); 2043 Parcel reply = Parcel.obtain(); 2044 data.writeInterfaceToken(IActivityManager.descriptor); 2045 ComponentName.writeToParcel(className, data); 2046 data.writeStrongBinder(token); 2047 data.writeInt(startId); 2048 mRemote.transact(STOP_SERVICE_TOKEN_TRANSACTION, data, reply, 0); 2049 reply.readException(); 2050 boolean res = reply.readInt() != 0; 2051 data.recycle(); 2052 reply.recycle(); 2053 return res; 2054 } 2055 public void setServiceForeground(ComponentName className, IBinder token, 2056 int id, Notification notification, boolean removeNotification) throws RemoteException { 2057 Parcel data = Parcel.obtain(); 2058 Parcel reply = Parcel.obtain(); 2059 data.writeInterfaceToken(IActivityManager.descriptor); 2060 ComponentName.writeToParcel(className, data); 2061 data.writeStrongBinder(token); 2062 data.writeInt(id); 2063 if (notification != null) { 2064 data.writeInt(1); 2065 notification.writeToParcel(data, 0); 2066 } else { 2067 data.writeInt(0); 2068 } 2069 data.writeInt(removeNotification ? 1 : 0); 2070 mRemote.transact(SET_SERVICE_FOREGROUND_TRANSACTION, data, reply, 0); 2071 reply.readException(); 2072 data.recycle(); 2073 reply.recycle(); 2074 } 2075 public int bindService(IApplicationThread caller, IBinder token, 2076 Intent service, String resolvedType, IServiceConnection connection, 2077 int flags) throws RemoteException { 2078 Parcel data = Parcel.obtain(); 2079 Parcel reply = Parcel.obtain(); 2080 data.writeInterfaceToken(IActivityManager.descriptor); 2081 data.writeStrongBinder(caller != null ? caller.asBinder() : null); 2082 data.writeStrongBinder(token); 2083 service.writeToParcel(data, 0); 2084 data.writeString(resolvedType); 2085 data.writeStrongBinder(connection.asBinder()); 2086 data.writeInt(flags); 2087 mRemote.transact(BIND_SERVICE_TRANSACTION, data, reply, 0); 2088 reply.readException(); 2089 int res = reply.readInt(); 2090 data.recycle(); 2091 reply.recycle(); 2092 return res; 2093 } 2094 public boolean unbindService(IServiceConnection connection) throws RemoteException 2095 { 2096 Parcel data = Parcel.obtain(); 2097 Parcel reply = Parcel.obtain(); 2098 data.writeInterfaceToken(IActivityManager.descriptor); 2099 data.writeStrongBinder(connection.asBinder()); 2100 mRemote.transact(UNBIND_SERVICE_TRANSACTION, data, reply, 0); 2101 reply.readException(); 2102 boolean res = reply.readInt() != 0; 2103 data.recycle(); 2104 reply.recycle(); 2105 return res; 2106 } 2107 2108 public void publishService(IBinder token, 2109 Intent intent, IBinder service) throws RemoteException { 2110 Parcel data = Parcel.obtain(); 2111 Parcel reply = Parcel.obtain(); 2112 data.writeInterfaceToken(IActivityManager.descriptor); 2113 data.writeStrongBinder(token); 2114 intent.writeToParcel(data, 0); 2115 data.writeStrongBinder(service); 2116 mRemote.transact(PUBLISH_SERVICE_TRANSACTION, data, reply, 0); 2117 reply.readException(); 2118 data.recycle(); 2119 reply.recycle(); 2120 } 2121 2122 public void unbindFinished(IBinder token, Intent intent, boolean doRebind) 2123 throws RemoteException { 2124 Parcel data = Parcel.obtain(); 2125 Parcel reply = Parcel.obtain(); 2126 data.writeInterfaceToken(IActivityManager.descriptor); 2127 data.writeStrongBinder(token); 2128 intent.writeToParcel(data, 0); 2129 data.writeInt(doRebind ? 1 : 0); 2130 mRemote.transact(UNBIND_FINISHED_TRANSACTION, data, reply, 0); 2131 reply.readException(); 2132 data.recycle(); 2133 reply.recycle(); 2134 } 2135 2136 public void serviceDoneExecuting(IBinder token, int type, int startId, 2137 int res) throws RemoteException { 2138 Parcel data = Parcel.obtain(); 2139 Parcel reply = Parcel.obtain(); 2140 data.writeInterfaceToken(IActivityManager.descriptor); 2141 data.writeStrongBinder(token); 2142 data.writeInt(type); 2143 data.writeInt(startId); 2144 data.writeInt(res); 2145 mRemote.transact(SERVICE_DONE_EXECUTING_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY); 2146 reply.readException(); 2147 data.recycle(); 2148 reply.recycle(); 2149 } 2150 2151 public IBinder peekService(Intent service, String resolvedType) throws RemoteException { 2152 Parcel data = Parcel.obtain(); 2153 Parcel reply = Parcel.obtain(); 2154 data.writeInterfaceToken(IActivityManager.descriptor); 2155 service.writeToParcel(data, 0); 2156 data.writeString(resolvedType); 2157 mRemote.transact(PEEK_SERVICE_TRANSACTION, data, reply, 0); 2158 reply.readException(); 2159 IBinder binder = reply.readStrongBinder(); 2160 reply.recycle(); 2161 data.recycle(); 2162 return binder; 2163 } 2164 2165 public boolean bindBackupAgent(ApplicationInfo app, int backupRestoreMode) 2166 throws RemoteException { 2167 Parcel data = Parcel.obtain(); 2168 Parcel reply = Parcel.obtain(); 2169 data.writeInterfaceToken(IActivityManager.descriptor); 2170 app.writeToParcel(data, 0); 2171 data.writeInt(backupRestoreMode); 2172 mRemote.transact(START_BACKUP_AGENT_TRANSACTION, data, reply, 0); 2173 reply.readException(); 2174 boolean success = reply.readInt() != 0; 2175 reply.recycle(); 2176 data.recycle(); 2177 return success; 2178 } 2179 2180 public void backupAgentCreated(String packageName, IBinder agent) throws RemoteException { 2181 Parcel data = Parcel.obtain(); 2182 Parcel reply = Parcel.obtain(); 2183 data.writeInterfaceToken(IActivityManager.descriptor); 2184 data.writeString(packageName); 2185 data.writeStrongBinder(agent); 2186 mRemote.transact(BACKUP_AGENT_CREATED_TRANSACTION, data, reply, 0); 2187 reply.recycle(); 2188 data.recycle(); 2189 } 2190 2191 public void unbindBackupAgent(ApplicationInfo app) throws RemoteException { 2192 Parcel data = Parcel.obtain(); 2193 Parcel reply = Parcel.obtain(); 2194 data.writeInterfaceToken(IActivityManager.descriptor); 2195 app.writeToParcel(data, 0); 2196 mRemote.transact(UNBIND_BACKUP_AGENT_TRANSACTION, data, reply, 0); 2197 reply.readException(); 2198 reply.recycle(); 2199 data.recycle(); 2200 } 2201 2202 public boolean startInstrumentation(ComponentName className, String profileFile, 2203 int flags, Bundle arguments, IInstrumentationWatcher watcher) 2204 throws RemoteException { 2205 Parcel data = Parcel.obtain(); 2206 Parcel reply = Parcel.obtain(); 2207 data.writeInterfaceToken(IActivityManager.descriptor); 2208 ComponentName.writeToParcel(className, data); 2209 data.writeString(profileFile); 2210 data.writeInt(flags); 2211 data.writeBundle(arguments); 2212 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null); 2213 mRemote.transact(START_INSTRUMENTATION_TRANSACTION, data, reply, 0); 2214 reply.readException(); 2215 boolean res = reply.readInt() != 0; 2216 reply.recycle(); 2217 data.recycle(); 2218 return res; 2219 } 2220 2221 public void finishInstrumentation(IApplicationThread target, 2222 int resultCode, Bundle results) throws RemoteException { 2223 Parcel data = Parcel.obtain(); 2224 Parcel reply = Parcel.obtain(); 2225 data.writeInterfaceToken(IActivityManager.descriptor); 2226 data.writeStrongBinder(target != null ? target.asBinder() : null); 2227 data.writeInt(resultCode); 2228 data.writeBundle(results); 2229 mRemote.transact(FINISH_INSTRUMENTATION_TRANSACTION, data, reply, 0); 2230 reply.readException(); 2231 data.recycle(); 2232 reply.recycle(); 2233 } 2234 public Configuration getConfiguration() throws RemoteException 2235 { 2236 Parcel data = Parcel.obtain(); 2237 Parcel reply = Parcel.obtain(); 2238 data.writeInterfaceToken(IActivityManager.descriptor); 2239 mRemote.transact(GET_CONFIGURATION_TRANSACTION, data, reply, 0); 2240 reply.readException(); 2241 Configuration res = Configuration.CREATOR.createFromParcel(reply); 2242 reply.recycle(); 2243 data.recycle(); 2244 return res; 2245 } 2246 public void updateConfiguration(Configuration values) throws RemoteException 2247 { 2248 Parcel data = Parcel.obtain(); 2249 Parcel reply = Parcel.obtain(); 2250 data.writeInterfaceToken(IActivityManager.descriptor); 2251 values.writeToParcel(data, 0); 2252 mRemote.transact(UPDATE_CONFIGURATION_TRANSACTION, data, reply, 0); 2253 reply.readException(); 2254 data.recycle(); 2255 reply.recycle(); 2256 } 2257 public void setRequestedOrientation(IBinder token, int requestedOrientation) 2258 throws RemoteException { 2259 Parcel data = Parcel.obtain(); 2260 Parcel reply = Parcel.obtain(); 2261 data.writeInterfaceToken(IActivityManager.descriptor); 2262 data.writeStrongBinder(token); 2263 data.writeInt(requestedOrientation); 2264 mRemote.transact(SET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0); 2265 reply.readException(); 2266 data.recycle(); 2267 reply.recycle(); 2268 } 2269 public int getRequestedOrientation(IBinder token) throws RemoteException { 2270 Parcel data = Parcel.obtain(); 2271 Parcel reply = Parcel.obtain(); 2272 data.writeInterfaceToken(IActivityManager.descriptor); 2273 data.writeStrongBinder(token); 2274 mRemote.transact(GET_REQUESTED_ORIENTATION_TRANSACTION, data, reply, 0); 2275 reply.readException(); 2276 int res = reply.readInt(); 2277 data.recycle(); 2278 reply.recycle(); 2279 return res; 2280 } 2281 public ComponentName getActivityClassForToken(IBinder token) 2282 throws RemoteException { 2283 Parcel data = Parcel.obtain(); 2284 Parcel reply = Parcel.obtain(); 2285 data.writeInterfaceToken(IActivityManager.descriptor); 2286 data.writeStrongBinder(token); 2287 mRemote.transact(GET_ACTIVITY_CLASS_FOR_TOKEN_TRANSACTION, data, reply, 0); 2288 reply.readException(); 2289 ComponentName res = ComponentName.readFromParcel(reply); 2290 data.recycle(); 2291 reply.recycle(); 2292 return res; 2293 } 2294 public String getPackageForToken(IBinder token) throws RemoteException 2295 { 2296 Parcel data = Parcel.obtain(); 2297 Parcel reply = Parcel.obtain(); 2298 data.writeInterfaceToken(IActivityManager.descriptor); 2299 data.writeStrongBinder(token); 2300 mRemote.transact(GET_PACKAGE_FOR_TOKEN_TRANSACTION, data, reply, 0); 2301 reply.readException(); 2302 String res = reply.readString(); 2303 data.recycle(); 2304 reply.recycle(); 2305 return res; 2306 } 2307 public IIntentSender getIntentSender(int type, 2308 String packageName, IBinder token, String resultWho, 2309 int requestCode, Intent intent, String resolvedType, int flags) 2310 throws RemoteException { 2311 Parcel data = Parcel.obtain(); 2312 Parcel reply = Parcel.obtain(); 2313 data.writeInterfaceToken(IActivityManager.descriptor); 2314 data.writeInt(type); 2315 data.writeString(packageName); 2316 data.writeStrongBinder(token); 2317 data.writeString(resultWho); 2318 data.writeInt(requestCode); 2319 if (intent != null) { 2320 data.writeInt(1); 2321 intent.writeToParcel(data, 0); 2322 } else { 2323 data.writeInt(0); 2324 } 2325 data.writeString(resolvedType); 2326 data.writeInt(flags); 2327 mRemote.transact(GET_INTENT_SENDER_TRANSACTION, data, reply, 0); 2328 reply.readException(); 2329 IIntentSender res = IIntentSender.Stub.asInterface( 2330 reply.readStrongBinder()); 2331 data.recycle(); 2332 reply.recycle(); 2333 return res; 2334 } 2335 public void cancelIntentSender(IIntentSender sender) throws RemoteException { 2336 Parcel data = Parcel.obtain(); 2337 Parcel reply = Parcel.obtain(); 2338 data.writeInterfaceToken(IActivityManager.descriptor); 2339 data.writeStrongBinder(sender.asBinder()); 2340 mRemote.transact(CANCEL_INTENT_SENDER_TRANSACTION, data, reply, 0); 2341 reply.readException(); 2342 data.recycle(); 2343 reply.recycle(); 2344 } 2345 public String getPackageForIntentSender(IIntentSender sender) throws RemoteException { 2346 Parcel data = Parcel.obtain(); 2347 Parcel reply = Parcel.obtain(); 2348 data.writeInterfaceToken(IActivityManager.descriptor); 2349 data.writeStrongBinder(sender.asBinder()); 2350 mRemote.transact(GET_PACKAGE_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0); 2351 reply.readException(); 2352 String res = reply.readString(); 2353 data.recycle(); 2354 reply.recycle(); 2355 return res; 2356 } 2357 public void setProcessLimit(int max) throws RemoteException 2358 { 2359 Parcel data = Parcel.obtain(); 2360 Parcel reply = Parcel.obtain(); 2361 data.writeInterfaceToken(IActivityManager.descriptor); 2362 data.writeInt(max); 2363 mRemote.transact(SET_PROCESS_LIMIT_TRANSACTION, data, reply, 0); 2364 reply.readException(); 2365 data.recycle(); 2366 reply.recycle(); 2367 } 2368 public int getProcessLimit() throws RemoteException 2369 { 2370 Parcel data = Parcel.obtain(); 2371 Parcel reply = Parcel.obtain(); 2372 data.writeInterfaceToken(IActivityManager.descriptor); 2373 mRemote.transact(GET_PROCESS_LIMIT_TRANSACTION, data, reply, 0); 2374 reply.readException(); 2375 int res = reply.readInt(); 2376 data.recycle(); 2377 reply.recycle(); 2378 return res; 2379 } 2380 public void setProcessForeground(IBinder token, int pid, 2381 boolean isForeground) throws RemoteException { 2382 Parcel data = Parcel.obtain(); 2383 Parcel reply = Parcel.obtain(); 2384 data.writeInterfaceToken(IActivityManager.descriptor); 2385 data.writeStrongBinder(token); 2386 data.writeInt(pid); 2387 data.writeInt(isForeground ? 1 : 0); 2388 mRemote.transact(SET_PROCESS_FOREGROUND_TRANSACTION, data, reply, 0); 2389 reply.readException(); 2390 data.recycle(); 2391 reply.recycle(); 2392 } 2393 public int checkPermission(String permission, int pid, int uid) 2394 throws RemoteException { 2395 Parcel data = Parcel.obtain(); 2396 Parcel reply = Parcel.obtain(); 2397 data.writeInterfaceToken(IActivityManager.descriptor); 2398 data.writeString(permission); 2399 data.writeInt(pid); 2400 data.writeInt(uid); 2401 mRemote.transact(CHECK_PERMISSION_TRANSACTION, data, reply, 0); 2402 reply.readException(); 2403 int res = reply.readInt(); 2404 data.recycle(); 2405 reply.recycle(); 2406 return res; 2407 } 2408 public boolean clearApplicationUserData(final String packageName, 2409 final IPackageDataObserver observer) throws RemoteException { 2410 Parcel data = Parcel.obtain(); 2411 Parcel reply = Parcel.obtain(); 2412 data.writeInterfaceToken(IActivityManager.descriptor); 2413 data.writeString(packageName); 2414 data.writeStrongBinder(observer.asBinder()); 2415 mRemote.transact(CLEAR_APP_DATA_TRANSACTION, data, reply, 0); 2416 reply.readException(); 2417 boolean res = reply.readInt() != 0; 2418 data.recycle(); 2419 reply.recycle(); 2420 return res; 2421 } 2422 public int checkUriPermission(Uri uri, int pid, int uid, int mode) 2423 throws RemoteException { 2424 Parcel data = Parcel.obtain(); 2425 Parcel reply = Parcel.obtain(); 2426 data.writeInterfaceToken(IActivityManager.descriptor); 2427 uri.writeToParcel(data, 0); 2428 data.writeInt(pid); 2429 data.writeInt(uid); 2430 data.writeInt(mode); 2431 mRemote.transact(CHECK_URI_PERMISSION_TRANSACTION, data, reply, 0); 2432 reply.readException(); 2433 int res = reply.readInt(); 2434 data.recycle(); 2435 reply.recycle(); 2436 return res; 2437 } 2438 public void grantUriPermission(IApplicationThread caller, String targetPkg, 2439 Uri uri, int mode) throws RemoteException { 2440 Parcel data = Parcel.obtain(); 2441 Parcel reply = Parcel.obtain(); 2442 data.writeInterfaceToken(IActivityManager.descriptor); 2443 data.writeStrongBinder(caller.asBinder()); 2444 data.writeString(targetPkg); 2445 uri.writeToParcel(data, 0); 2446 data.writeInt(mode); 2447 mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0); 2448 reply.readException(); 2449 data.recycle(); 2450 reply.recycle(); 2451 } 2452 public void revokeUriPermission(IApplicationThread caller, Uri uri, 2453 int mode) throws RemoteException { 2454 Parcel data = Parcel.obtain(); 2455 Parcel reply = Parcel.obtain(); 2456 data.writeInterfaceToken(IActivityManager.descriptor); 2457 data.writeStrongBinder(caller.asBinder()); 2458 uri.writeToParcel(data, 0); 2459 data.writeInt(mode); 2460 mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0); 2461 reply.readException(); 2462 data.recycle(); 2463 reply.recycle(); 2464 } 2465 public void showWaitingForDebugger(IApplicationThread who, boolean waiting) 2466 throws RemoteException { 2467 Parcel data = Parcel.obtain(); 2468 Parcel reply = Parcel.obtain(); 2469 data.writeInterfaceToken(IActivityManager.descriptor); 2470 data.writeStrongBinder(who.asBinder()); 2471 data.writeInt(waiting ? 1 : 0); 2472 mRemote.transact(SHOW_WAITING_FOR_DEBUGGER_TRANSACTION, data, reply, 0); 2473 reply.readException(); 2474 data.recycle(); 2475 reply.recycle(); 2476 } 2477 public void getMemoryInfo(ActivityManager.MemoryInfo outInfo) throws RemoteException { 2478 Parcel data = Parcel.obtain(); 2479 Parcel reply = Parcel.obtain(); 2480 data.writeInterfaceToken(IActivityManager.descriptor); 2481 mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0); 2482 reply.readException(); 2483 outInfo.readFromParcel(reply); 2484 data.recycle(); 2485 reply.recycle(); 2486 } 2487 public void unhandledBack() throws RemoteException 2488 { 2489 Parcel data = Parcel.obtain(); 2490 Parcel reply = Parcel.obtain(); 2491 data.writeInterfaceToken(IActivityManager.descriptor); 2492 mRemote.transact(UNHANDLED_BACK_TRANSACTION, data, reply, 0); 2493 reply.readException(); 2494 data.recycle(); 2495 reply.recycle(); 2496 } 2497 public ParcelFileDescriptor openContentUri(Uri uri) throws RemoteException 2498 { 2499 Parcel data = Parcel.obtain(); 2500 Parcel reply = Parcel.obtain(); 2501 data.writeInterfaceToken(IActivityManager.descriptor); 2502 mRemote.transact(OPEN_CONTENT_URI_TRANSACTION, data, reply, 0); 2503 reply.readException(); 2504 ParcelFileDescriptor pfd = null; 2505 if (reply.readInt() != 0) { 2506 pfd = ParcelFileDescriptor.CREATOR.createFromParcel(reply); 2507 } 2508 data.recycle(); 2509 reply.recycle(); 2510 return pfd; 2511 } 2512 public void goingToSleep() throws RemoteException 2513 { 2514 Parcel data = Parcel.obtain(); 2515 Parcel reply = Parcel.obtain(); 2516 data.writeInterfaceToken(IActivityManager.descriptor); 2517 mRemote.transact(GOING_TO_SLEEP_TRANSACTION, data, reply, 0); 2518 reply.readException(); 2519 data.recycle(); 2520 reply.recycle(); 2521 } 2522 public void wakingUp() throws RemoteException 2523 { 2524 Parcel data = Parcel.obtain(); 2525 Parcel reply = Parcel.obtain(); 2526 data.writeInterfaceToken(IActivityManager.descriptor); 2527 mRemote.transact(WAKING_UP_TRANSACTION, data, reply, 0); 2528 reply.readException(); 2529 data.recycle(); 2530 reply.recycle(); 2531 } 2532 public void setDebugApp( 2533 String packageName, boolean waitForDebugger, boolean persistent) 2534 throws RemoteException 2535 { 2536 Parcel data = Parcel.obtain(); 2537 Parcel reply = Parcel.obtain(); 2538 data.writeInterfaceToken(IActivityManager.descriptor); 2539 data.writeString(packageName); 2540 data.writeInt(waitForDebugger ? 1 : 0); 2541 data.writeInt(persistent ? 1 : 0); 2542 mRemote.transact(SET_DEBUG_APP_TRANSACTION, data, reply, 0); 2543 reply.readException(); 2544 data.recycle(); 2545 reply.recycle(); 2546 } 2547 public void setAlwaysFinish(boolean enabled) throws RemoteException 2548 { 2549 Parcel data = Parcel.obtain(); 2550 Parcel reply = Parcel.obtain(); 2551 data.writeInterfaceToken(IActivityManager.descriptor); 2552 data.writeInt(enabled ? 1 : 0); 2553 mRemote.transact(SET_ALWAYS_FINISH_TRANSACTION, data, reply, 0); 2554 reply.readException(); 2555 data.recycle(); 2556 reply.recycle(); 2557 } 2558 public void setActivityController(IActivityController watcher) throws RemoteException 2559 { 2560 Parcel data = Parcel.obtain(); 2561 Parcel reply = Parcel.obtain(); 2562 data.writeInterfaceToken(IActivityManager.descriptor); 2563 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null); 2564 mRemote.transact(SET_ACTIVITY_CONTROLLER_TRANSACTION, data, reply, 0); 2565 reply.readException(); 2566 data.recycle(); 2567 reply.recycle(); 2568 } 2569 public void enterSafeMode() throws RemoteException { 2570 Parcel data = Parcel.obtain(); 2571 data.writeInterfaceToken(IActivityManager.descriptor); 2572 mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0); 2573 data.recycle(); 2574 } 2575 public void noteWakeupAlarm(IIntentSender sender) throws RemoteException { 2576 Parcel data = Parcel.obtain(); 2577 data.writeStrongBinder(sender.asBinder()); 2578 data.writeInterfaceToken(IActivityManager.descriptor); 2579 mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0); 2580 data.recycle(); 2581 } 2582 public boolean killPids(int[] pids, String reason) throws RemoteException { 2583 Parcel data = Parcel.obtain(); 2584 Parcel reply = Parcel.obtain(); 2585 data.writeInterfaceToken(IActivityManager.descriptor); 2586 data.writeIntArray(pids); 2587 data.writeString(reason); 2588 mRemote.transact(KILL_PIDS_TRANSACTION, data, reply, 0); 2589 boolean res = reply.readInt() != 0; 2590 data.recycle(); 2591 reply.recycle(); 2592 return res; 2593 } 2594 public void startRunning(String pkg, String cls, String action, 2595 String indata) throws RemoteException { 2596 Parcel data = Parcel.obtain(); 2597 Parcel reply = Parcel.obtain(); 2598 data.writeInterfaceToken(IActivityManager.descriptor); 2599 data.writeString(pkg); 2600 data.writeString(cls); 2601 data.writeString(action); 2602 data.writeString(indata); 2603 mRemote.transact(START_RUNNING_TRANSACTION, data, reply, 0); 2604 reply.readException(); 2605 data.recycle(); 2606 reply.recycle(); 2607 } 2608 public boolean testIsSystemReady() 2609 { 2610 /* this base class version is never called */ 2611 return true; 2612 } 2613 public void handleApplicationCrash(IBinder app, 2614 ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException 2615 { 2616 Parcel data = Parcel.obtain(); 2617 Parcel reply = Parcel.obtain(); 2618 data.writeInterfaceToken(IActivityManager.descriptor); 2619 data.writeStrongBinder(app); 2620 crashInfo.writeToParcel(data, 0); 2621 mRemote.transact(HANDLE_APPLICATION_CRASH_TRANSACTION, data, reply, 0); 2622 reply.readException(); 2623 reply.recycle(); 2624 data.recycle(); 2625 } 2626 2627 public boolean handleApplicationWtf(IBinder app, String tag, 2628 ApplicationErrorReport.CrashInfo crashInfo) throws RemoteException 2629 { 2630 Parcel data = Parcel.obtain(); 2631 Parcel reply = Parcel.obtain(); 2632 data.writeInterfaceToken(IActivityManager.descriptor); 2633 data.writeStrongBinder(app); 2634 data.writeString(tag); 2635 crashInfo.writeToParcel(data, 0); 2636 mRemote.transact(HANDLE_APPLICATION_WTF_TRANSACTION, data, reply, 0); 2637 reply.readException(); 2638 boolean res = reply.readInt() != 0; 2639 reply.recycle(); 2640 data.recycle(); 2641 return res; 2642 } 2643 2644 public void handleApplicationStrictModeViolation(IBinder app, 2645 int violationMask, 2646 StrictMode.ViolationInfo info) throws RemoteException 2647 { 2648 Parcel data = Parcel.obtain(); 2649 Parcel reply = Parcel.obtain(); 2650 data.writeInterfaceToken(IActivityManager.descriptor); 2651 data.writeStrongBinder(app); 2652 data.writeInt(violationMask); 2653 info.writeToParcel(data, 0); 2654 mRemote.transact(HANDLE_APPLICATION_STRICT_MODE_VIOLATION_TRANSACTION, data, reply, 0); 2655 reply.readException(); 2656 reply.recycle(); 2657 data.recycle(); 2658 } 2659 2660 public void signalPersistentProcesses(int sig) throws RemoteException { 2661 Parcel data = Parcel.obtain(); 2662 Parcel reply = Parcel.obtain(); 2663 data.writeInterfaceToken(IActivityManager.descriptor); 2664 data.writeInt(sig); 2665 mRemote.transact(SIGNAL_PERSISTENT_PROCESSES_TRANSACTION, data, reply, 0); 2666 reply.readException(); 2667 data.recycle(); 2668 reply.recycle(); 2669 } 2670 2671 public void killBackgroundProcesses(String packageName) throws RemoteException { 2672 Parcel data = Parcel.obtain(); 2673 Parcel reply = Parcel.obtain(); 2674 data.writeInterfaceToken(IActivityManager.descriptor); 2675 data.writeString(packageName); 2676 mRemote.transact(KILL_BACKGROUND_PROCESSES_TRANSACTION, data, reply, 0); 2677 reply.readException(); 2678 data.recycle(); 2679 reply.recycle(); 2680 } 2681 2682 public void forceStopPackage(String packageName) throws RemoteException { 2683 Parcel data = Parcel.obtain(); 2684 Parcel reply = Parcel.obtain(); 2685 data.writeInterfaceToken(IActivityManager.descriptor); 2686 data.writeString(packageName); 2687 mRemote.transact(FORCE_STOP_PACKAGE_TRANSACTION, data, reply, 0); 2688 reply.readException(); 2689 data.recycle(); 2690 reply.recycle(); 2691 } 2692 2693 public ConfigurationInfo getDeviceConfigurationInfo() throws RemoteException 2694 { 2695 Parcel data = Parcel.obtain(); 2696 Parcel reply = Parcel.obtain(); 2697 data.writeInterfaceToken(IActivityManager.descriptor); 2698 mRemote.transact(GET_DEVICE_CONFIGURATION_TRANSACTION, data, reply, 0); 2699 reply.readException(); 2700 ConfigurationInfo res = ConfigurationInfo.CREATOR.createFromParcel(reply); 2701 reply.recycle(); 2702 data.recycle(); 2703 return res; 2704 } 2705 2706 public boolean profileControl(String process, boolean start, 2707 String path, ParcelFileDescriptor fd) throws RemoteException 2708 { 2709 Parcel data = Parcel.obtain(); 2710 Parcel reply = Parcel.obtain(); 2711 data.writeInterfaceToken(IActivityManager.descriptor); 2712 data.writeString(process); 2713 data.writeInt(start ? 1 : 0); 2714 data.writeString(path); 2715 if (fd != null) { 2716 data.writeInt(1); 2717 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 2718 } else { 2719 data.writeInt(0); 2720 } 2721 mRemote.transact(PROFILE_CONTROL_TRANSACTION, data, reply, 0); 2722 reply.readException(); 2723 boolean res = reply.readInt() != 0; 2724 reply.recycle(); 2725 data.recycle(); 2726 return res; 2727 } 2728 2729 public boolean shutdown(int timeout) throws RemoteException 2730 { 2731 Parcel data = Parcel.obtain(); 2732 Parcel reply = Parcel.obtain(); 2733 data.writeInterfaceToken(IActivityManager.descriptor); 2734 data.writeInt(timeout); 2735 mRemote.transact(SHUTDOWN_TRANSACTION, data, reply, 0); 2736 reply.readException(); 2737 boolean res = reply.readInt() != 0; 2738 reply.recycle(); 2739 data.recycle(); 2740 return res; 2741 } 2742 2743 public void stopAppSwitches() throws RemoteException { 2744 Parcel data = Parcel.obtain(); 2745 Parcel reply = Parcel.obtain(); 2746 data.writeInterfaceToken(IActivityManager.descriptor); 2747 mRemote.transact(STOP_APP_SWITCHES_TRANSACTION, data, reply, 0); 2748 reply.readException(); 2749 reply.recycle(); 2750 data.recycle(); 2751 } 2752 2753 public void resumeAppSwitches() throws RemoteException { 2754 Parcel data = Parcel.obtain(); 2755 Parcel reply = Parcel.obtain(); 2756 data.writeInterfaceToken(IActivityManager.descriptor); 2757 mRemote.transact(RESUME_APP_SWITCHES_TRANSACTION, data, reply, 0); 2758 reply.readException(); 2759 reply.recycle(); 2760 data.recycle(); 2761 } 2762 2763 public void registerActivityWatcher(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(REGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0); 2770 reply.readException(); 2771 data.recycle(); 2772 reply.recycle(); 2773 } 2774 2775 public void unregisterActivityWatcher(IActivityWatcher watcher) 2776 throws RemoteException { 2777 Parcel data = Parcel.obtain(); 2778 Parcel reply = Parcel.obtain(); 2779 data.writeInterfaceToken(IActivityManager.descriptor); 2780 data.writeStrongBinder(watcher != null ? watcher.asBinder() : null); 2781 mRemote.transact(UNREGISTER_ACTIVITY_WATCHER_TRANSACTION, data, reply, 0); 2782 reply.readException(); 2783 data.recycle(); 2784 reply.recycle(); 2785 } 2786 2787 public int startActivityInPackage(int uid, 2788 Intent intent, String resolvedType, IBinder resultTo, 2789 String resultWho, int requestCode, boolean onlyIfNeeded) 2790 throws RemoteException { 2791 Parcel data = Parcel.obtain(); 2792 Parcel reply = Parcel.obtain(); 2793 data.writeInterfaceToken(IActivityManager.descriptor); 2794 data.writeInt(uid); 2795 intent.writeToParcel(data, 0); 2796 data.writeString(resolvedType); 2797 data.writeStrongBinder(resultTo); 2798 data.writeString(resultWho); 2799 data.writeInt(requestCode); 2800 data.writeInt(onlyIfNeeded ? 1 : 0); 2801 mRemote.transact(START_ACTIVITY_IN_PACKAGE_TRANSACTION, data, reply, 0); 2802 reply.readException(); 2803 int result = reply.readInt(); 2804 reply.recycle(); 2805 data.recycle(); 2806 return result; 2807 } 2808 2809 public void killApplicationWithUid(String pkg, int uid) throws RemoteException { 2810 Parcel data = Parcel.obtain(); 2811 Parcel reply = Parcel.obtain(); 2812 data.writeInterfaceToken(IActivityManager.descriptor); 2813 data.writeString(pkg); 2814 data.writeInt(uid); 2815 mRemote.transact(KILL_APPLICATION_WITH_UID_TRANSACTION, data, reply, 0); 2816 reply.readException(); 2817 data.recycle(); 2818 reply.recycle(); 2819 } 2820 2821 public void closeSystemDialogs(String reason) throws RemoteException { 2822 Parcel data = Parcel.obtain(); 2823 Parcel reply = Parcel.obtain(); 2824 data.writeInterfaceToken(IActivityManager.descriptor); 2825 data.writeString(reason); 2826 mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0); 2827 reply.readException(); 2828 data.recycle(); 2829 reply.recycle(); 2830 } 2831 2832 public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) 2833 throws RemoteException { 2834 Parcel data = Parcel.obtain(); 2835 Parcel reply = Parcel.obtain(); 2836 data.writeInterfaceToken(IActivityManager.descriptor); 2837 data.writeIntArray(pids); 2838 mRemote.transact(GET_PROCESS_MEMORY_INFO_TRANSACTION, data, reply, 0); 2839 reply.readException(); 2840 Debug.MemoryInfo[] res = reply.createTypedArray(Debug.MemoryInfo.CREATOR); 2841 data.recycle(); 2842 reply.recycle(); 2843 return res; 2844 } 2845 2846 public void killApplicationProcess(String processName, int uid) throws RemoteException { 2847 Parcel data = Parcel.obtain(); 2848 Parcel reply = Parcel.obtain(); 2849 data.writeInterfaceToken(IActivityManager.descriptor); 2850 data.writeString(processName); 2851 data.writeInt(uid); 2852 mRemote.transact(KILL_APPLICATION_PROCESS_TRANSACTION, data, reply, 0); 2853 reply.readException(); 2854 data.recycle(); 2855 reply.recycle(); 2856 } 2857 2858 public void overridePendingTransition(IBinder token, String packageName, 2859 int enterAnim, int exitAnim) throws RemoteException { 2860 Parcel data = Parcel.obtain(); 2861 Parcel reply = Parcel.obtain(); 2862 data.writeInterfaceToken(IActivityManager.descriptor); 2863 data.writeStrongBinder(token); 2864 data.writeString(packageName); 2865 data.writeInt(enterAnim); 2866 data.writeInt(exitAnim); 2867 mRemote.transact(OVERRIDE_PENDING_TRANSITION_TRANSACTION, data, reply, 0); 2868 reply.readException(); 2869 data.recycle(); 2870 reply.recycle(); 2871 } 2872 2873 public boolean isUserAMonkey() throws RemoteException { 2874 Parcel data = Parcel.obtain(); 2875 Parcel reply = Parcel.obtain(); 2876 data.writeInterfaceToken(IActivityManager.descriptor); 2877 mRemote.transact(IS_USER_A_MONKEY_TRANSACTION, data, reply, 0); 2878 reply.readException(); 2879 boolean res = reply.readInt() != 0; 2880 data.recycle(); 2881 reply.recycle(); 2882 return res; 2883 } 2884 2885 public void finishHeavyWeightApp() throws RemoteException { 2886 Parcel data = Parcel.obtain(); 2887 Parcel reply = Parcel.obtain(); 2888 data.writeInterfaceToken(IActivityManager.descriptor); 2889 mRemote.transact(FINISH_HEAVY_WEIGHT_APP_TRANSACTION, data, reply, 0); 2890 reply.readException(); 2891 data.recycle(); 2892 reply.recycle(); 2893 } 2894 2895 public void setImmersive(IBinder token, boolean immersive) 2896 throws RemoteException { 2897 Parcel data = Parcel.obtain(); 2898 Parcel reply = Parcel.obtain(); 2899 data.writeInterfaceToken(IActivityManager.descriptor); 2900 data.writeStrongBinder(token); 2901 data.writeInt(immersive ? 1 : 0); 2902 mRemote.transact(SET_IMMERSIVE_TRANSACTION, data, reply, 0); 2903 reply.readException(); 2904 data.recycle(); 2905 reply.recycle(); 2906 } 2907 2908 public boolean isImmersive(IBinder token) 2909 throws RemoteException { 2910 Parcel data = Parcel.obtain(); 2911 Parcel reply = Parcel.obtain(); 2912 data.writeInterfaceToken(IActivityManager.descriptor); 2913 data.writeStrongBinder(token); 2914 mRemote.transact(IS_IMMERSIVE_TRANSACTION, data, reply, 0); 2915 reply.readException(); 2916 boolean res = reply.readInt() == 1; 2917 data.recycle(); 2918 reply.recycle(); 2919 return res; 2920 } 2921 2922 public boolean isTopActivityImmersive() 2923 throws RemoteException { 2924 Parcel data = Parcel.obtain(); 2925 Parcel reply = Parcel.obtain(); 2926 data.writeInterfaceToken(IActivityManager.descriptor); 2927 mRemote.transact(IS_TOP_ACTIVITY_IMMERSIVE_TRANSACTION, data, reply, 0); 2928 reply.readException(); 2929 boolean res = reply.readInt() == 1; 2930 data.recycle(); 2931 reply.recycle(); 2932 return res; 2933 } 2934 2935 public void crashApplication(int uid, int initialPid, String packageName, 2936 String message) throws RemoteException { 2937 Parcel data = Parcel.obtain(); 2938 Parcel reply = Parcel.obtain(); 2939 data.writeInterfaceToken(IActivityManager.descriptor); 2940 data.writeInt(uid); 2941 data.writeInt(initialPid); 2942 data.writeString(packageName); 2943 data.writeString(message); 2944 mRemote.transact(CRASH_APPLICATION_TRANSACTION, data, reply, 0); 2945 reply.readException(); 2946 data.recycle(); 2947 reply.recycle(); 2948 } 2949 2950 public String getProviderMimeType(Uri uri) 2951 throws RemoteException { 2952 Parcel data = Parcel.obtain(); 2953 Parcel reply = Parcel.obtain(); 2954 data.writeInterfaceToken(IActivityManager.descriptor); 2955 uri.writeToParcel(data, 0); 2956 mRemote.transact(GET_PROVIDER_MIME_TYPE_TRANSACTION, data, reply, 0); 2957 reply.readException(); 2958 String res = reply.readString(); 2959 data.recycle(); 2960 reply.recycle(); 2961 return res; 2962 } 2963 2964 public IBinder newUriPermissionOwner(String name) 2965 throws RemoteException { 2966 Parcel data = Parcel.obtain(); 2967 Parcel reply = Parcel.obtain(); 2968 data.writeInterfaceToken(IActivityManager.descriptor); 2969 data.writeString(name); 2970 mRemote.transact(NEW_URI_PERMISSION_OWNER_TRANSACTION, data, reply, 0); 2971 reply.readException(); 2972 IBinder res = reply.readStrongBinder(); 2973 data.recycle(); 2974 reply.recycle(); 2975 return res; 2976 } 2977 2978 public void grantUriPermissionFromOwner(IBinder owner, int fromUid, String targetPkg, 2979 Uri uri, int mode) throws RemoteException { 2980 Parcel data = Parcel.obtain(); 2981 Parcel reply = Parcel.obtain(); 2982 data.writeInterfaceToken(IActivityManager.descriptor); 2983 data.writeStrongBinder(owner); 2984 data.writeInt(fromUid); 2985 data.writeString(targetPkg); 2986 uri.writeToParcel(data, 0); 2987 data.writeInt(mode); 2988 mRemote.transact(GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0); 2989 reply.readException(); 2990 data.recycle(); 2991 reply.recycle(); 2992 } 2993 2994 public void revokeUriPermissionFromOwner(IBinder owner, Uri uri, 2995 int mode) throws RemoteException { 2996 Parcel data = Parcel.obtain(); 2997 Parcel reply = Parcel.obtain(); 2998 data.writeInterfaceToken(IActivityManager.descriptor); 2999 data.writeStrongBinder(owner); 3000 if (uri != null) { 3001 data.writeInt(1); 3002 uri.writeToParcel(data, 0); 3003 } else { 3004 data.writeInt(0); 3005 } 3006 data.writeInt(mode); 3007 mRemote.transact(REVOKE_URI_PERMISSION_TRANSACTION, data, reply, 0); 3008 reply.readException(); 3009 data.recycle(); 3010 reply.recycle(); 3011 } 3012 3013 public int checkGrantUriPermission(int callingUid, String targetPkg, 3014 Uri uri, int modeFlags) throws RemoteException { 3015 Parcel data = Parcel.obtain(); 3016 Parcel reply = Parcel.obtain(); 3017 data.writeInterfaceToken(IActivityManager.descriptor); 3018 data.writeInt(callingUid); 3019 data.writeString(targetPkg); 3020 uri.writeToParcel(data, 0); 3021 data.writeInt(modeFlags); 3022 mRemote.transact(CHECK_GRANT_URI_PERMISSION_TRANSACTION, data, reply, 0); 3023 reply.readException(); 3024 int res = reply.readInt(); 3025 data.recycle(); 3026 reply.recycle(); 3027 return res; 3028 } 3029 3030 public boolean dumpHeap(String process, boolean managed, 3031 String path, ParcelFileDescriptor fd) throws RemoteException { 3032 Parcel data = Parcel.obtain(); 3033 Parcel reply = Parcel.obtain(); 3034 data.writeInterfaceToken(IActivityManager.descriptor); 3035 data.writeString(process); 3036 data.writeInt(managed ? 1 : 0); 3037 data.writeString(path); 3038 if (fd != null) { 3039 data.writeInt(1); 3040 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 3041 } else { 3042 data.writeInt(0); 3043 } 3044 mRemote.transact(DUMP_HEAP_TRANSACTION, data, reply, 0); 3045 reply.readException(); 3046 boolean res = reply.readInt() != 0; 3047 reply.recycle(); 3048 data.recycle(); 3049 return res; 3050 } 3051 3052 private IBinder mRemote; 3053} 3054