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