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