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