1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.app; 18 19 import android.content.ComponentName; 20 import android.content.Intent; 21 import android.content.IIntentReceiver; 22 import android.content.pm.ActivityInfo; 23 import android.content.pm.ApplicationInfo; 24 import android.content.pm.ProviderInfo; 25 import android.content.pm.ServiceInfo; 26 import android.content.res.CompatibilityInfo; 27 import android.content.res.Configuration; 28 import android.net.Uri; 29 import android.os.Binder; 30 import android.os.Bundle; 31 import android.os.Debug; 32 import android.os.Parcelable; 33 import android.os.PersistableBundle; 34 import android.os.RemoteException; 35 import android.os.IBinder; 36 import android.os.Parcel; 37 import android.os.ParcelFileDescriptor; 38 import com.android.internal.app.IVoiceInteractor; 39 40 import java.io.FileDescriptor; 41 import java.io.IOException; 42 import java.util.HashMap; 43 import java.util.List; 44 import java.util.Map; 45 46 /** {@hide} */ 47 public abstract class ApplicationThreadNative extends Binder 48 implements IApplicationThread { 49 /** 50 * Cast a Binder object into an application thread interface, generating 51 * a proxy if needed. 52 */ 53 static public IApplicationThread asInterface(IBinder obj) { 54 if (obj == null) { 55 return null; 56 } 57 IApplicationThread in = 58 (IApplicationThread)obj.queryLocalInterface(descriptor); 59 if (in != null) { 60 return in; 61 } 62 63 return new ApplicationThreadProxy(obj); 64 } 65 66 public ApplicationThreadNative() { 67 attachInterface(this, descriptor); 68 } 69 70 @Override 71 public boolean onTransact(int code, Parcel data, Parcel reply, int flags) 72 throws RemoteException { 73 switch (code) { 74 case SCHEDULE_PAUSE_ACTIVITY_TRANSACTION: 75 { 76 data.enforceInterface(IApplicationThread.descriptor); 77 IBinder b = data.readStrongBinder(); 78 boolean finished = data.readInt() != 0; 79 boolean userLeaving = data.readInt() != 0; 80 int configChanges = data.readInt(); 81 boolean dontReport = data.readInt() != 0; 82 schedulePauseActivity(b, finished, userLeaving, configChanges, dontReport); 83 return true; 84 } 85 86 case SCHEDULE_STOP_ACTIVITY_TRANSACTION: 87 { 88 data.enforceInterface(IApplicationThread.descriptor); 89 IBinder b = data.readStrongBinder(); 90 boolean show = data.readInt() != 0; 91 int configChanges = data.readInt(); 92 scheduleStopActivity(b, show, configChanges); 93 return true; 94 } 95 96 case SCHEDULE_WINDOW_VISIBILITY_TRANSACTION: 97 { 98 data.enforceInterface(IApplicationThread.descriptor); 99 IBinder b = data.readStrongBinder(); 100 boolean show = data.readInt() != 0; 101 scheduleWindowVisibility(b, show); 102 return true; 103 } 104 105 case SCHEDULE_SLEEPING_TRANSACTION: 106 { 107 data.enforceInterface(IApplicationThread.descriptor); 108 IBinder b = data.readStrongBinder(); 109 boolean sleeping = data.readInt() != 0; 110 scheduleSleeping(b, sleeping); 111 return true; 112 } 113 114 case SCHEDULE_RESUME_ACTIVITY_TRANSACTION: 115 { 116 data.enforceInterface(IApplicationThread.descriptor); 117 IBinder b = data.readStrongBinder(); 118 int procState = data.readInt(); 119 boolean isForward = data.readInt() != 0; 120 Bundle resumeArgs = data.readBundle(); 121 scheduleResumeActivity(b, procState, isForward, resumeArgs); 122 return true; 123 } 124 125 case SCHEDULE_SEND_RESULT_TRANSACTION: 126 { 127 data.enforceInterface(IApplicationThread.descriptor); 128 IBinder b = data.readStrongBinder(); 129 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR); 130 scheduleSendResult(b, ri); 131 return true; 132 } 133 134 case SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION: 135 { 136 data.enforceInterface(IApplicationThread.descriptor); 137 Intent intent = Intent.CREATOR.createFromParcel(data); 138 IBinder b = data.readStrongBinder(); 139 int ident = data.readInt(); 140 ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data); 141 Configuration curConfig = Configuration.CREATOR.createFromParcel(data); 142 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 143 IVoiceInteractor voiceInteractor = IVoiceInteractor.Stub.asInterface( 144 data.readStrongBinder()); 145 int procState = data.readInt(); 146 Bundle state = data.readBundle(); 147 PersistableBundle persistentState = data.readPersistableBundle(); 148 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR); 149 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR); 150 boolean notResumed = data.readInt() != 0; 151 boolean isForward = data.readInt() != 0; 152 ProfilerInfo profilerInfo = data.readInt() != 0 153 ? ProfilerInfo.CREATOR.createFromParcel(data) : null; 154 scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, voiceInteractor, 155 procState, state, persistentState, ri, pi, notResumed, isForward, profilerInfo); 156 return true; 157 } 158 159 case SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION: 160 { 161 data.enforceInterface(IApplicationThread.descriptor); 162 IBinder b = data.readStrongBinder(); 163 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR); 164 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR); 165 int configChanges = data.readInt(); 166 boolean notResumed = data.readInt() != 0; 167 Configuration config = null; 168 if (data.readInt() != 0) { 169 config = Configuration.CREATOR.createFromParcel(data); 170 } 171 scheduleRelaunchActivity(b, ri, pi, configChanges, notResumed, config); 172 return true; 173 } 174 175 case SCHEDULE_NEW_INTENT_TRANSACTION: 176 { 177 data.enforceInterface(IApplicationThread.descriptor); 178 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR); 179 IBinder b = data.readStrongBinder(); 180 scheduleNewIntent(pi, b); 181 return true; 182 } 183 184 case SCHEDULE_FINISH_ACTIVITY_TRANSACTION: 185 { 186 data.enforceInterface(IApplicationThread.descriptor); 187 IBinder b = data.readStrongBinder(); 188 boolean finishing = data.readInt() != 0; 189 int configChanges = data.readInt(); 190 scheduleDestroyActivity(b, finishing, configChanges); 191 return true; 192 } 193 194 case SCHEDULE_RECEIVER_TRANSACTION: 195 { 196 data.enforceInterface(IApplicationThread.descriptor); 197 Intent intent = Intent.CREATOR.createFromParcel(data); 198 ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data); 199 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 200 int resultCode = data.readInt(); 201 String resultData = data.readString(); 202 Bundle resultExtras = data.readBundle(); 203 boolean sync = data.readInt() != 0; 204 int sendingUser = data.readInt(); 205 int processState = data.readInt(); 206 scheduleReceiver(intent, info, compatInfo, resultCode, resultData, 207 resultExtras, sync, sendingUser, processState); 208 return true; 209 } 210 211 case SCHEDULE_CREATE_SERVICE_TRANSACTION: { 212 data.enforceInterface(IApplicationThread.descriptor); 213 IBinder token = data.readStrongBinder(); 214 ServiceInfo info = ServiceInfo.CREATOR.createFromParcel(data); 215 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 216 int processState = data.readInt(); 217 scheduleCreateService(token, info, compatInfo, processState); 218 return true; 219 } 220 221 case SCHEDULE_BIND_SERVICE_TRANSACTION: { 222 data.enforceInterface(IApplicationThread.descriptor); 223 IBinder token = data.readStrongBinder(); 224 Intent intent = Intent.CREATOR.createFromParcel(data); 225 boolean rebind = data.readInt() != 0; 226 int processState = data.readInt(); 227 scheduleBindService(token, intent, rebind, processState); 228 return true; 229 } 230 231 case SCHEDULE_UNBIND_SERVICE_TRANSACTION: { 232 data.enforceInterface(IApplicationThread.descriptor); 233 IBinder token = data.readStrongBinder(); 234 Intent intent = Intent.CREATOR.createFromParcel(data); 235 scheduleUnbindService(token, intent); 236 return true; 237 } 238 239 case SCHEDULE_SERVICE_ARGS_TRANSACTION: 240 { 241 data.enforceInterface(IApplicationThread.descriptor); 242 IBinder token = data.readStrongBinder(); 243 boolean taskRemoved = data.readInt() != 0; 244 int startId = data.readInt(); 245 int fl = data.readInt(); 246 Intent args; 247 if (data.readInt() != 0) { 248 args = Intent.CREATOR.createFromParcel(data); 249 } else { 250 args = null; 251 } 252 scheduleServiceArgs(token, taskRemoved, startId, fl, args); 253 return true; 254 } 255 256 case SCHEDULE_STOP_SERVICE_TRANSACTION: 257 { 258 data.enforceInterface(IApplicationThread.descriptor); 259 IBinder token = data.readStrongBinder(); 260 scheduleStopService(token); 261 return true; 262 } 263 264 case BIND_APPLICATION_TRANSACTION: 265 { 266 data.enforceInterface(IApplicationThread.descriptor); 267 String packageName = data.readString(); 268 ApplicationInfo info = 269 ApplicationInfo.CREATOR.createFromParcel(data); 270 List<ProviderInfo> providers = 271 data.createTypedArrayList(ProviderInfo.CREATOR); 272 ComponentName testName = (data.readInt() != 0) 273 ? new ComponentName(data) : null; 274 ProfilerInfo profilerInfo = data.readInt() != 0 275 ? ProfilerInfo.CREATOR.createFromParcel(data) : null; 276 Bundle testArgs = data.readBundle(); 277 IBinder binder = data.readStrongBinder(); 278 IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder); 279 binder = data.readStrongBinder(); 280 IUiAutomationConnection uiAutomationConnection = 281 IUiAutomationConnection.Stub.asInterface(binder); 282 int testMode = data.readInt(); 283 boolean openGlTrace = data.readInt() != 0; 284 boolean restrictedBackupMode = (data.readInt() != 0); 285 boolean persistent = (data.readInt() != 0); 286 Configuration config = Configuration.CREATOR.createFromParcel(data); 287 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 288 HashMap<String, IBinder> services = data.readHashMap(null); 289 Bundle coreSettings = data.readBundle(); 290 bindApplication(packageName, info, providers, testName, profilerInfo, testArgs, 291 testWatcher, uiAutomationConnection, testMode, openGlTrace, 292 restrictedBackupMode, persistent, config, compatInfo, services, coreSettings); 293 return true; 294 } 295 296 case SCHEDULE_EXIT_TRANSACTION: 297 { 298 data.enforceInterface(IApplicationThread.descriptor); 299 scheduleExit(); 300 return true; 301 } 302 303 case SCHEDULE_SUICIDE_TRANSACTION: 304 { 305 data.enforceInterface(IApplicationThread.descriptor); 306 scheduleSuicide(); 307 return true; 308 } 309 310 case SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION: 311 { 312 data.enforceInterface(IApplicationThread.descriptor); 313 Configuration config = Configuration.CREATOR.createFromParcel(data); 314 scheduleConfigurationChanged(config); 315 return true; 316 } 317 318 case UPDATE_TIME_ZONE_TRANSACTION: { 319 data.enforceInterface(IApplicationThread.descriptor); 320 updateTimeZone(); 321 return true; 322 } 323 324 case CLEAR_DNS_CACHE_TRANSACTION: { 325 data.enforceInterface(IApplicationThread.descriptor); 326 clearDnsCache(); 327 return true; 328 } 329 330 case SET_HTTP_PROXY_TRANSACTION: { 331 data.enforceInterface(IApplicationThread.descriptor); 332 final String proxy = data.readString(); 333 final String port = data.readString(); 334 final String exclList = data.readString(); 335 final Uri pacFileUrl = Uri.CREATOR.createFromParcel(data); 336 setHttpProxy(proxy, port, exclList, pacFileUrl); 337 return true; 338 } 339 340 case PROCESS_IN_BACKGROUND_TRANSACTION: { 341 data.enforceInterface(IApplicationThread.descriptor); 342 processInBackground(); 343 return true; 344 } 345 346 case DUMP_SERVICE_TRANSACTION: { 347 data.enforceInterface(IApplicationThread.descriptor); 348 ParcelFileDescriptor fd = data.readFileDescriptor(); 349 final IBinder service = data.readStrongBinder(); 350 final String[] args = data.readStringArray(); 351 if (fd != null) { 352 dumpService(fd.getFileDescriptor(), service, args); 353 try { 354 fd.close(); 355 } catch (IOException e) { 356 } 357 } 358 return true; 359 } 360 361 case DUMP_PROVIDER_TRANSACTION: { 362 data.enforceInterface(IApplicationThread.descriptor); 363 ParcelFileDescriptor fd = data.readFileDescriptor(); 364 final IBinder service = data.readStrongBinder(); 365 final String[] args = data.readStringArray(); 366 if (fd != null) { 367 dumpProvider(fd.getFileDescriptor(), service, args); 368 try { 369 fd.close(); 370 } catch (IOException e) { 371 } 372 } 373 return true; 374 } 375 376 case SCHEDULE_REGISTERED_RECEIVER_TRANSACTION: { 377 data.enforceInterface(IApplicationThread.descriptor); 378 IIntentReceiver receiver = IIntentReceiver.Stub.asInterface( 379 data.readStrongBinder()); 380 Intent intent = Intent.CREATOR.createFromParcel(data); 381 int resultCode = data.readInt(); 382 String dataStr = data.readString(); 383 Bundle extras = data.readBundle(); 384 boolean ordered = data.readInt() != 0; 385 boolean sticky = data.readInt() != 0; 386 int sendingUser = data.readInt(); 387 int processState = data.readInt(); 388 scheduleRegisteredReceiver(receiver, intent, 389 resultCode, dataStr, extras, ordered, sticky, sendingUser, processState); 390 return true; 391 } 392 393 case SCHEDULE_LOW_MEMORY_TRANSACTION: 394 { 395 data.enforceInterface(IApplicationThread.descriptor); 396 scheduleLowMemory(); 397 return true; 398 } 399 400 case SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION: 401 { 402 data.enforceInterface(IApplicationThread.descriptor); 403 IBinder b = data.readStrongBinder(); 404 scheduleActivityConfigurationChanged(b); 405 return true; 406 } 407 408 case PROFILER_CONTROL_TRANSACTION: 409 { 410 data.enforceInterface(IApplicationThread.descriptor); 411 boolean start = data.readInt() != 0; 412 int profileType = data.readInt(); 413 ProfilerInfo profilerInfo = data.readInt() != 0 414 ? ProfilerInfo.CREATOR.createFromParcel(data) : null; 415 profilerControl(start, profilerInfo, profileType); 416 return true; 417 } 418 419 case SET_SCHEDULING_GROUP_TRANSACTION: 420 { 421 data.enforceInterface(IApplicationThread.descriptor); 422 int group = data.readInt(); 423 setSchedulingGroup(group); 424 return true; 425 } 426 427 case SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION: 428 { 429 data.enforceInterface(IApplicationThread.descriptor); 430 ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data); 431 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 432 int backupMode = data.readInt(); 433 scheduleCreateBackupAgent(appInfo, compatInfo, backupMode); 434 return true; 435 } 436 437 case SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION: 438 { 439 data.enforceInterface(IApplicationThread.descriptor); 440 ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data); 441 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data); 442 scheduleDestroyBackupAgent(appInfo, compatInfo); 443 return true; 444 } 445 446 case DISPATCH_PACKAGE_BROADCAST_TRANSACTION: 447 { 448 data.enforceInterface(IApplicationThread.descriptor); 449 int cmd = data.readInt(); 450 String[] packages = data.readStringArray(); 451 dispatchPackageBroadcast(cmd, packages); 452 return true; 453 } 454 455 case SCHEDULE_CRASH_TRANSACTION: 456 { 457 data.enforceInterface(IApplicationThread.descriptor); 458 String msg = data.readString(); 459 scheduleCrash(msg); 460 return true; 461 } 462 463 case DUMP_HEAP_TRANSACTION: 464 { 465 data.enforceInterface(IApplicationThread.descriptor); 466 boolean managed = data.readInt() != 0; 467 String path = data.readString(); 468 ParcelFileDescriptor fd = data.readInt() != 0 469 ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null; 470 dumpHeap(managed, path, fd); 471 return true; 472 } 473 474 case DUMP_ACTIVITY_TRANSACTION: { 475 data.enforceInterface(IApplicationThread.descriptor); 476 ParcelFileDescriptor fd = data.readFileDescriptor(); 477 final IBinder activity = data.readStrongBinder(); 478 final String prefix = data.readString(); 479 final String[] args = data.readStringArray(); 480 if (fd != null) { 481 dumpActivity(fd.getFileDescriptor(), activity, prefix, args); 482 try { 483 fd.close(); 484 } catch (IOException e) { 485 } 486 } 487 return true; 488 } 489 490 case SET_CORE_SETTINGS_TRANSACTION: { 491 data.enforceInterface(IApplicationThread.descriptor); 492 Bundle settings = data.readBundle(); 493 setCoreSettings(settings); 494 return true; 495 } 496 497 case UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION: { 498 data.enforceInterface(IApplicationThread.descriptor); 499 String pkg = data.readString(); 500 CompatibilityInfo compat = CompatibilityInfo.CREATOR.createFromParcel(data); 501 updatePackageCompatibilityInfo(pkg, compat); 502 return true; 503 } 504 505 case SCHEDULE_TRIM_MEMORY_TRANSACTION: { 506 data.enforceInterface(IApplicationThread.descriptor); 507 int level = data.readInt(); 508 scheduleTrimMemory(level); 509 return true; 510 } 511 512 case DUMP_MEM_INFO_TRANSACTION: 513 { 514 data.enforceInterface(IApplicationThread.descriptor); 515 ParcelFileDescriptor fd = data.readFileDescriptor(); 516 Debug.MemoryInfo mi = Debug.MemoryInfo.CREATOR.createFromParcel(data); 517 boolean checkin = data.readInt() != 0; 518 boolean dumpInfo = data.readInt() != 0; 519 boolean dumpDalvik = data.readInt() != 0; 520 String[] args = data.readStringArray(); 521 if (fd != null) { 522 try { 523 dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args); 524 } finally { 525 try { 526 fd.close(); 527 } catch (IOException e) { 528 // swallowed, not propagated back to the caller 529 } 530 } 531 } 532 reply.writeNoException(); 533 return true; 534 } 535 536 case DUMP_GFX_INFO_TRANSACTION: 537 { 538 data.enforceInterface(IApplicationThread.descriptor); 539 ParcelFileDescriptor fd = data.readFileDescriptor(); 540 String[] args = data.readStringArray(); 541 if (fd != null) { 542 try { 543 dumpGfxInfo(fd.getFileDescriptor(), args); 544 } finally { 545 try { 546 fd.close(); 547 } catch (IOException e) { 548 // swallowed, not propagated back to the caller 549 } 550 } 551 } 552 reply.writeNoException(); 553 return true; 554 } 555 556 case DUMP_DB_INFO_TRANSACTION: 557 { 558 data.enforceInterface(IApplicationThread.descriptor); 559 ParcelFileDescriptor fd = data.readFileDescriptor(); 560 String[] args = data.readStringArray(); 561 if (fd != null) { 562 try { 563 dumpDbInfo(fd.getFileDescriptor(), args); 564 } finally { 565 try { 566 fd.close(); 567 } catch (IOException e) { 568 // swallowed, not propagated back to the caller 569 } 570 } 571 } 572 reply.writeNoException(); 573 return true; 574 } 575 576 case UNSTABLE_PROVIDER_DIED_TRANSACTION: 577 { 578 data.enforceInterface(IApplicationThread.descriptor); 579 IBinder provider = data.readStrongBinder(); 580 unstableProviderDied(provider); 581 reply.writeNoException(); 582 return true; 583 } 584 585 case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION: 586 { 587 data.enforceInterface(IApplicationThread.descriptor); 588 IBinder activityToken = data.readStrongBinder(); 589 IBinder requestToken = data.readStrongBinder(); 590 int requestType = data.readInt(); 591 requestAssistContextExtras(activityToken, requestToken, requestType); 592 reply.writeNoException(); 593 return true; 594 } 595 596 case SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION: 597 { 598 data.enforceInterface(IApplicationThread.descriptor); 599 IBinder token = data.readStrongBinder(); 600 boolean timeout = data.readInt() == 1; 601 scheduleTranslucentConversionComplete(token, timeout); 602 reply.writeNoException(); 603 return true; 604 } 605 606 case SCHEDULE_ON_NEW_ACTIVITY_OPTIONS_TRANSACTION: 607 { 608 data.enforceInterface(IApplicationThread.descriptor); 609 IBinder token = data.readStrongBinder(); 610 ActivityOptions options = new ActivityOptions(data.readBundle()); 611 scheduleOnNewActivityOptions(token, options); 612 reply.writeNoException(); 613 return true; 614 } 615 616 case SET_PROCESS_STATE_TRANSACTION: 617 { 618 data.enforceInterface(IApplicationThread.descriptor); 619 int state = data.readInt(); 620 setProcessState(state); 621 reply.writeNoException(); 622 return true; 623 } 624 625 case SCHEDULE_INSTALL_PROVIDER_TRANSACTION: 626 { 627 data.enforceInterface(IApplicationThread.descriptor); 628 ProviderInfo provider = ProviderInfo.CREATOR.createFromParcel(data); 629 scheduleInstallProvider(provider); 630 reply.writeNoException(); 631 return true; 632 } 633 634 case UPDATE_TIME_PREFS_TRANSACTION: 635 { 636 data.enforceInterface(IApplicationThread.descriptor); 637 byte is24Hour = data.readByte(); 638 updateTimePrefs(is24Hour == (byte) 1); 639 reply.writeNoException(); 640 return true; 641 } 642 643 case CANCEL_VISIBLE_BEHIND_TRANSACTION: 644 { 645 data.enforceInterface(IApplicationThread.descriptor); 646 IBinder token = data.readStrongBinder(); 647 scheduleCancelVisibleBehind(token); 648 reply.writeNoException(); 649 return true; 650 } 651 652 case BACKGROUND_VISIBLE_BEHIND_CHANGED_TRANSACTION: 653 { 654 data.enforceInterface(IApplicationThread.descriptor); 655 IBinder token = data.readStrongBinder(); 656 boolean enabled = data.readInt() > 0; 657 scheduleBackgroundVisibleBehindChanged(token, enabled); 658 reply.writeNoException(); 659 return true; 660 } 661 662 case ENTER_ANIMATION_COMPLETE_TRANSACTION: 663 { 664 data.enforceInterface(IApplicationThread.descriptor); 665 IBinder token = data.readStrongBinder(); 666 scheduleEnterAnimationComplete(token); 667 reply.writeNoException(); 668 return true; 669 } 670 } 671 672 return super.onTransact(code, data, reply, flags); 673 } 674 675 public IBinder asBinder() 676 { 677 return this; 678 } 679 } 680 681 class ApplicationThreadProxy implements IApplicationThread { 682 private final IBinder mRemote; 683 684 public ApplicationThreadProxy(IBinder remote) { 685 mRemote = remote; 686 } 687 688 public final IBinder asBinder() { 689 return mRemote; 690 } 691 692 public final void schedulePauseActivity(IBinder token, boolean finished, 693 boolean userLeaving, int configChanges, boolean dontReport) throws RemoteException { 694 Parcel data = Parcel.obtain(); 695 data.writeInterfaceToken(IApplicationThread.descriptor); 696 data.writeStrongBinder(token); 697 data.writeInt(finished ? 1 : 0); 698 data.writeInt(userLeaving ? 1 :0); 699 data.writeInt(configChanges); 700 data.writeInt(dontReport ? 1 : 0); 701 mRemote.transact(SCHEDULE_PAUSE_ACTIVITY_TRANSACTION, data, null, 702 IBinder.FLAG_ONEWAY); 703 data.recycle(); 704 } 705 706 public final void scheduleStopActivity(IBinder token, boolean showWindow, 707 int configChanges) throws RemoteException { 708 Parcel data = Parcel.obtain(); 709 data.writeInterfaceToken(IApplicationThread.descriptor); 710 data.writeStrongBinder(token); 711 data.writeInt(showWindow ? 1 : 0); 712 data.writeInt(configChanges); 713 mRemote.transact(SCHEDULE_STOP_ACTIVITY_TRANSACTION, data, null, 714 IBinder.FLAG_ONEWAY); 715 data.recycle(); 716 } 717 718 public final void scheduleWindowVisibility(IBinder token, 719 boolean showWindow) throws RemoteException { 720 Parcel data = Parcel.obtain(); 721 data.writeInterfaceToken(IApplicationThread.descriptor); 722 data.writeStrongBinder(token); 723 data.writeInt(showWindow ? 1 : 0); 724 mRemote.transact(SCHEDULE_WINDOW_VISIBILITY_TRANSACTION, data, null, 725 IBinder.FLAG_ONEWAY); 726 data.recycle(); 727 } 728 729 public final void scheduleSleeping(IBinder token, 730 boolean sleeping) throws RemoteException { 731 Parcel data = Parcel.obtain(); 732 data.writeInterfaceToken(IApplicationThread.descriptor); 733 data.writeStrongBinder(token); 734 data.writeInt(sleeping ? 1 : 0); 735 mRemote.transact(SCHEDULE_SLEEPING_TRANSACTION, data, null, 736 IBinder.FLAG_ONEWAY); 737 data.recycle(); 738 } 739 740 public final void scheduleResumeActivity(IBinder token, int procState, boolean isForward, 741 Bundle resumeArgs) 742 throws RemoteException { 743 Parcel data = Parcel.obtain(); 744 data.writeInterfaceToken(IApplicationThread.descriptor); 745 data.writeStrongBinder(token); 746 data.writeInt(procState); 747 data.writeInt(isForward ? 1 : 0); 748 data.writeBundle(resumeArgs); 749 mRemote.transact(SCHEDULE_RESUME_ACTIVITY_TRANSACTION, data, null, 750 IBinder.FLAG_ONEWAY); 751 data.recycle(); 752 } 753 754 public final void scheduleSendResult(IBinder token, List<ResultInfo> results) 755 throws RemoteException { 756 Parcel data = Parcel.obtain(); 757 data.writeInterfaceToken(IApplicationThread.descriptor); 758 data.writeStrongBinder(token); 759 data.writeTypedList(results); 760 mRemote.transact(SCHEDULE_SEND_RESULT_TRANSACTION, data, null, 761 IBinder.FLAG_ONEWAY); 762 data.recycle(); 763 } 764 765 public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident, 766 ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo, 767 IVoiceInteractor voiceInteractor, int procState, Bundle state, 768 PersistableBundle persistentState, List<ResultInfo> pendingResults, 769 List<Intent> pendingNewIntents, boolean notResumed, boolean isForward, 770 ProfilerInfo profilerInfo) throws RemoteException { 771 Parcel data = Parcel.obtain(); 772 data.writeInterfaceToken(IApplicationThread.descriptor); 773 intent.writeToParcel(data, 0); 774 data.writeStrongBinder(token); 775 data.writeInt(ident); 776 info.writeToParcel(data, 0); 777 curConfig.writeToParcel(data, 0); 778 compatInfo.writeToParcel(data, 0); 779 data.writeStrongBinder(voiceInteractor != null ? voiceInteractor.asBinder() : null); 780 data.writeInt(procState); 781 data.writeBundle(state); 782 data.writePersistableBundle(persistentState); 783 data.writeTypedList(pendingResults); 784 data.writeTypedList(pendingNewIntents); 785 data.writeInt(notResumed ? 1 : 0); 786 data.writeInt(isForward ? 1 : 0); 787 if (profilerInfo != null) { 788 data.writeInt(1); 789 profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 790 } else { 791 data.writeInt(0); 792 } 793 mRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null, 794 IBinder.FLAG_ONEWAY); 795 data.recycle(); 796 } 797 798 public final void scheduleRelaunchActivity(IBinder token, 799 List<ResultInfo> pendingResults, List<Intent> pendingNewIntents, 800 int configChanges, boolean notResumed, Configuration config) 801 throws RemoteException { 802 Parcel data = Parcel.obtain(); 803 data.writeInterfaceToken(IApplicationThread.descriptor); 804 data.writeStrongBinder(token); 805 data.writeTypedList(pendingResults); 806 data.writeTypedList(pendingNewIntents); 807 data.writeInt(configChanges); 808 data.writeInt(notResumed ? 1 : 0); 809 if (config != null) { 810 data.writeInt(1); 811 config.writeToParcel(data, 0); 812 } else { 813 data.writeInt(0); 814 } 815 mRemote.transact(SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION, data, null, 816 IBinder.FLAG_ONEWAY); 817 data.recycle(); 818 } 819 820 public void scheduleNewIntent(List<Intent> intents, IBinder token) 821 throws RemoteException { 822 Parcel data = Parcel.obtain(); 823 data.writeInterfaceToken(IApplicationThread.descriptor); 824 data.writeTypedList(intents); 825 data.writeStrongBinder(token); 826 mRemote.transact(SCHEDULE_NEW_INTENT_TRANSACTION, data, null, 827 IBinder.FLAG_ONEWAY); 828 data.recycle(); 829 } 830 831 public final void scheduleDestroyActivity(IBinder token, boolean finishing, 832 int configChanges) throws RemoteException { 833 Parcel data = Parcel.obtain(); 834 data.writeInterfaceToken(IApplicationThread.descriptor); 835 data.writeStrongBinder(token); 836 data.writeInt(finishing ? 1 : 0); 837 data.writeInt(configChanges); 838 mRemote.transact(SCHEDULE_FINISH_ACTIVITY_TRANSACTION, data, null, 839 IBinder.FLAG_ONEWAY); 840 data.recycle(); 841 } 842 843 public final void scheduleReceiver(Intent intent, ActivityInfo info, 844 CompatibilityInfo compatInfo, int resultCode, String resultData, 845 Bundle map, boolean sync, int sendingUser, int processState) throws RemoteException { 846 Parcel data = Parcel.obtain(); 847 data.writeInterfaceToken(IApplicationThread.descriptor); 848 intent.writeToParcel(data, 0); 849 info.writeToParcel(data, 0); 850 compatInfo.writeToParcel(data, 0); 851 data.writeInt(resultCode); 852 data.writeString(resultData); 853 data.writeBundle(map); 854 data.writeInt(sync ? 1 : 0); 855 data.writeInt(sendingUser); 856 data.writeInt(processState); 857 mRemote.transact(SCHEDULE_RECEIVER_TRANSACTION, data, null, 858 IBinder.FLAG_ONEWAY); 859 data.recycle(); 860 } 861 862 public final void scheduleCreateBackupAgent(ApplicationInfo app, 863 CompatibilityInfo compatInfo, int backupMode) throws RemoteException { 864 Parcel data = Parcel.obtain(); 865 data.writeInterfaceToken(IApplicationThread.descriptor); 866 app.writeToParcel(data, 0); 867 compatInfo.writeToParcel(data, 0); 868 data.writeInt(backupMode); 869 mRemote.transact(SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION, data, null, 870 IBinder.FLAG_ONEWAY); 871 data.recycle(); 872 } 873 874 public final void scheduleDestroyBackupAgent(ApplicationInfo app, 875 CompatibilityInfo compatInfo) throws RemoteException { 876 Parcel data = Parcel.obtain(); 877 data.writeInterfaceToken(IApplicationThread.descriptor); 878 app.writeToParcel(data, 0); 879 compatInfo.writeToParcel(data, 0); 880 mRemote.transact(SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION, data, null, 881 IBinder.FLAG_ONEWAY); 882 data.recycle(); 883 } 884 885 public final void scheduleCreateService(IBinder token, ServiceInfo info, 886 CompatibilityInfo compatInfo, int processState) throws RemoteException { 887 Parcel data = Parcel.obtain(); 888 data.writeInterfaceToken(IApplicationThread.descriptor); 889 data.writeStrongBinder(token); 890 info.writeToParcel(data, 0); 891 compatInfo.writeToParcel(data, 0); 892 data.writeInt(processState); 893 mRemote.transact(SCHEDULE_CREATE_SERVICE_TRANSACTION, data, null, 894 IBinder.FLAG_ONEWAY); 895 data.recycle(); 896 } 897 898 public final void scheduleBindService(IBinder token, Intent intent, boolean rebind, 899 int processState) throws RemoteException { 900 Parcel data = Parcel.obtain(); 901 data.writeInterfaceToken(IApplicationThread.descriptor); 902 data.writeStrongBinder(token); 903 intent.writeToParcel(data, 0); 904 data.writeInt(rebind ? 1 : 0); 905 data.writeInt(processState); 906 mRemote.transact(SCHEDULE_BIND_SERVICE_TRANSACTION, data, null, 907 IBinder.FLAG_ONEWAY); 908 data.recycle(); 909 } 910 911 public final void scheduleUnbindService(IBinder token, Intent intent) 912 throws RemoteException { 913 Parcel data = Parcel.obtain(); 914 data.writeInterfaceToken(IApplicationThread.descriptor); 915 data.writeStrongBinder(token); 916 intent.writeToParcel(data, 0); 917 mRemote.transact(SCHEDULE_UNBIND_SERVICE_TRANSACTION, data, null, 918 IBinder.FLAG_ONEWAY); 919 data.recycle(); 920 } 921 922 public final void scheduleServiceArgs(IBinder token, boolean taskRemoved, int startId, 923 int flags, Intent args) throws RemoteException { 924 Parcel data = Parcel.obtain(); 925 data.writeInterfaceToken(IApplicationThread.descriptor); 926 data.writeStrongBinder(token); 927 data.writeInt(taskRemoved ? 1 : 0); 928 data.writeInt(startId); 929 data.writeInt(flags); 930 if (args != null) { 931 data.writeInt(1); 932 args.writeToParcel(data, 0); 933 } else { 934 data.writeInt(0); 935 } 936 mRemote.transact(SCHEDULE_SERVICE_ARGS_TRANSACTION, data, null, 937 IBinder.FLAG_ONEWAY); 938 data.recycle(); 939 } 940 941 public final void scheduleStopService(IBinder token) 942 throws RemoteException { 943 Parcel data = Parcel.obtain(); 944 data.writeInterfaceToken(IApplicationThread.descriptor); 945 data.writeStrongBinder(token); 946 mRemote.transact(SCHEDULE_STOP_SERVICE_TRANSACTION, data, null, 947 IBinder.FLAG_ONEWAY); 948 data.recycle(); 949 } 950 951 public final void bindApplication(String packageName, ApplicationInfo info, 952 List<ProviderInfo> providers, ComponentName testName, ProfilerInfo profilerInfo, 953 Bundle testArgs, IInstrumentationWatcher testWatcher, 954 IUiAutomationConnection uiAutomationConnection, int debugMode, 955 boolean openGlTrace, boolean restrictedBackupMode, boolean persistent, 956 Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services, 957 Bundle coreSettings) throws RemoteException { 958 Parcel data = Parcel.obtain(); 959 data.writeInterfaceToken(IApplicationThread.descriptor); 960 data.writeString(packageName); 961 info.writeToParcel(data, 0); 962 data.writeTypedList(providers); 963 if (testName == null) { 964 data.writeInt(0); 965 } else { 966 data.writeInt(1); 967 testName.writeToParcel(data, 0); 968 } 969 if (profilerInfo != null) { 970 data.writeInt(1); 971 profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 972 } else { 973 data.writeInt(0); 974 } 975 data.writeBundle(testArgs); 976 data.writeStrongInterface(testWatcher); 977 data.writeStrongInterface(uiAutomationConnection); 978 data.writeInt(debugMode); 979 data.writeInt(openGlTrace ? 1 : 0); 980 data.writeInt(restrictedBackupMode ? 1 : 0); 981 data.writeInt(persistent ? 1 : 0); 982 config.writeToParcel(data, 0); 983 compatInfo.writeToParcel(data, 0); 984 data.writeMap(services); 985 data.writeBundle(coreSettings); 986 mRemote.transact(BIND_APPLICATION_TRANSACTION, data, null, 987 IBinder.FLAG_ONEWAY); 988 data.recycle(); 989 } 990 991 public final void scheduleExit() throws RemoteException { 992 Parcel data = Parcel.obtain(); 993 data.writeInterfaceToken(IApplicationThread.descriptor); 994 mRemote.transact(SCHEDULE_EXIT_TRANSACTION, data, null, 995 IBinder.FLAG_ONEWAY); 996 data.recycle(); 997 } 998 999 public final void scheduleSuicide() throws RemoteException { 1000 Parcel data = Parcel.obtain(); 1001 data.writeInterfaceToken(IApplicationThread.descriptor); 1002 mRemote.transact(SCHEDULE_SUICIDE_TRANSACTION, data, null, 1003 IBinder.FLAG_ONEWAY); 1004 data.recycle(); 1005 } 1006 1007 public final void scheduleConfigurationChanged(Configuration config) 1008 throws RemoteException { 1009 Parcel data = Parcel.obtain(); 1010 data.writeInterfaceToken(IApplicationThread.descriptor); 1011 config.writeToParcel(data, 0); 1012 mRemote.transact(SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION, data, null, 1013 IBinder.FLAG_ONEWAY); 1014 data.recycle(); 1015 } 1016 1017 public void updateTimeZone() throws RemoteException { 1018 Parcel data = Parcel.obtain(); 1019 data.writeInterfaceToken(IApplicationThread.descriptor); 1020 mRemote.transact(UPDATE_TIME_ZONE_TRANSACTION, data, null, 1021 IBinder.FLAG_ONEWAY); 1022 data.recycle(); 1023 } 1024 1025 public void clearDnsCache() throws RemoteException { 1026 Parcel data = Parcel.obtain(); 1027 data.writeInterfaceToken(IApplicationThread.descriptor); 1028 mRemote.transact(CLEAR_DNS_CACHE_TRANSACTION, data, null, 1029 IBinder.FLAG_ONEWAY); 1030 data.recycle(); 1031 } 1032 1033 public void setHttpProxy(String proxy, String port, String exclList, 1034 Uri pacFileUrl) throws RemoteException { 1035 Parcel data = Parcel.obtain(); 1036 data.writeInterfaceToken(IApplicationThread.descriptor); 1037 data.writeString(proxy); 1038 data.writeString(port); 1039 data.writeString(exclList); 1040 pacFileUrl.writeToParcel(data, 0); 1041 mRemote.transact(SET_HTTP_PROXY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1042 data.recycle(); 1043 } 1044 1045 public void processInBackground() throws RemoteException { 1046 Parcel data = Parcel.obtain(); 1047 data.writeInterfaceToken(IApplicationThread.descriptor); 1048 mRemote.transact(PROCESS_IN_BACKGROUND_TRANSACTION, data, null, 1049 IBinder.FLAG_ONEWAY); 1050 data.recycle(); 1051 } 1052 1053 public void dumpService(FileDescriptor fd, IBinder token, String[] args) 1054 throws RemoteException { 1055 Parcel data = Parcel.obtain(); 1056 data.writeInterfaceToken(IApplicationThread.descriptor); 1057 data.writeFileDescriptor(fd); 1058 data.writeStrongBinder(token); 1059 data.writeStringArray(args); 1060 mRemote.transact(DUMP_SERVICE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1061 data.recycle(); 1062 } 1063 1064 public void dumpProvider(FileDescriptor fd, IBinder token, String[] args) 1065 throws RemoteException { 1066 Parcel data = Parcel.obtain(); 1067 data.writeInterfaceToken(IApplicationThread.descriptor); 1068 data.writeFileDescriptor(fd); 1069 data.writeStrongBinder(token); 1070 data.writeStringArray(args); 1071 mRemote.transact(DUMP_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1072 data.recycle(); 1073 } 1074 1075 public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent, 1076 int resultCode, String dataStr, Bundle extras, boolean ordered, 1077 boolean sticky, int sendingUser, int processState) throws RemoteException { 1078 Parcel data = Parcel.obtain(); 1079 data.writeInterfaceToken(IApplicationThread.descriptor); 1080 data.writeStrongBinder(receiver.asBinder()); 1081 intent.writeToParcel(data, 0); 1082 data.writeInt(resultCode); 1083 data.writeString(dataStr); 1084 data.writeBundle(extras); 1085 data.writeInt(ordered ? 1 : 0); 1086 data.writeInt(sticky ? 1 : 0); 1087 data.writeInt(sendingUser); 1088 data.writeInt(processState); 1089 mRemote.transact(SCHEDULE_REGISTERED_RECEIVER_TRANSACTION, data, null, 1090 IBinder.FLAG_ONEWAY); 1091 data.recycle(); 1092 } 1093 1094 public final void scheduleLowMemory() throws RemoteException { 1095 Parcel data = Parcel.obtain(); 1096 data.writeInterfaceToken(IApplicationThread.descriptor); 1097 mRemote.transact(SCHEDULE_LOW_MEMORY_TRANSACTION, data, null, 1098 IBinder.FLAG_ONEWAY); 1099 data.recycle(); 1100 } 1101 1102 public final void scheduleActivityConfigurationChanged( 1103 IBinder token) throws RemoteException { 1104 Parcel data = Parcel.obtain(); 1105 data.writeInterfaceToken(IApplicationThread.descriptor); 1106 data.writeStrongBinder(token); 1107 mRemote.transact(SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION, data, null, 1108 IBinder.FLAG_ONEWAY); 1109 data.recycle(); 1110 } 1111 1112 public void profilerControl(boolean start, ProfilerInfo profilerInfo, int profileType) 1113 throws RemoteException { 1114 Parcel data = Parcel.obtain(); 1115 data.writeInterfaceToken(IApplicationThread.descriptor); 1116 data.writeInt(start ? 1 : 0); 1117 data.writeInt(profileType); 1118 if (profilerInfo != null) { 1119 data.writeInt(1); 1120 profilerInfo.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 1121 } else { 1122 data.writeInt(0); 1123 } 1124 mRemote.transact(PROFILER_CONTROL_TRANSACTION, data, null, 1125 IBinder.FLAG_ONEWAY); 1126 data.recycle(); 1127 } 1128 1129 public void setSchedulingGroup(int group) throws RemoteException { 1130 Parcel data = Parcel.obtain(); 1131 data.writeInterfaceToken(IApplicationThread.descriptor); 1132 data.writeInt(group); 1133 mRemote.transact(SET_SCHEDULING_GROUP_TRANSACTION, data, null, 1134 IBinder.FLAG_ONEWAY); 1135 data.recycle(); 1136 } 1137 1138 public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException { 1139 Parcel data = Parcel.obtain(); 1140 data.writeInterfaceToken(IApplicationThread.descriptor); 1141 data.writeInt(cmd); 1142 data.writeStringArray(packages); 1143 mRemote.transact(DISPATCH_PACKAGE_BROADCAST_TRANSACTION, data, null, 1144 IBinder.FLAG_ONEWAY); 1145 data.recycle(); 1146 } 1147 1148 public void scheduleCrash(String msg) throws RemoteException { 1149 Parcel data = Parcel.obtain(); 1150 data.writeInterfaceToken(IApplicationThread.descriptor); 1151 data.writeString(msg); 1152 mRemote.transact(SCHEDULE_CRASH_TRANSACTION, data, null, 1153 IBinder.FLAG_ONEWAY); 1154 data.recycle(); 1155 } 1156 1157 public void dumpHeap(boolean managed, String path, 1158 ParcelFileDescriptor fd) throws RemoteException { 1159 Parcel data = Parcel.obtain(); 1160 data.writeInterfaceToken(IApplicationThread.descriptor); 1161 data.writeInt(managed ? 1 : 0); 1162 data.writeString(path); 1163 if (fd != null) { 1164 data.writeInt(1); 1165 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 1166 } else { 1167 data.writeInt(0); 1168 } 1169 mRemote.transact(DUMP_HEAP_TRANSACTION, data, null, 1170 IBinder.FLAG_ONEWAY); 1171 data.recycle(); 1172 } 1173 1174 public void dumpActivity(FileDescriptor fd, IBinder token, String prefix, String[] args) 1175 throws RemoteException { 1176 Parcel data = Parcel.obtain(); 1177 data.writeInterfaceToken(IApplicationThread.descriptor); 1178 data.writeFileDescriptor(fd); 1179 data.writeStrongBinder(token); 1180 data.writeString(prefix); 1181 data.writeStringArray(args); 1182 mRemote.transact(DUMP_ACTIVITY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1183 data.recycle(); 1184 } 1185 1186 public void setCoreSettings(Bundle coreSettings) throws RemoteException { 1187 Parcel data = Parcel.obtain(); 1188 data.writeInterfaceToken(IApplicationThread.descriptor); 1189 data.writeBundle(coreSettings); 1190 mRemote.transact(SET_CORE_SETTINGS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1191 } 1192 1193 public void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info) 1194 throws RemoteException { 1195 Parcel data = Parcel.obtain(); 1196 data.writeInterfaceToken(IApplicationThread.descriptor); 1197 data.writeString(pkg); 1198 info.writeToParcel(data, 0); 1199 mRemote.transact(UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION, data, null, 1200 IBinder.FLAG_ONEWAY); 1201 } 1202 1203 public void scheduleTrimMemory(int level) throws RemoteException { 1204 Parcel data = Parcel.obtain(); 1205 data.writeInterfaceToken(IApplicationThread.descriptor); 1206 data.writeInt(level); 1207 mRemote.transact(SCHEDULE_TRIM_MEMORY_TRANSACTION, data, null, 1208 IBinder.FLAG_ONEWAY); 1209 data.recycle(); 1210 } 1211 1212 public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, 1213 boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException { 1214 Parcel data = Parcel.obtain(); 1215 Parcel reply = Parcel.obtain(); 1216 data.writeInterfaceToken(IApplicationThread.descriptor); 1217 data.writeFileDescriptor(fd); 1218 mem.writeToParcel(data, 0); 1219 data.writeInt(checkin ? 1 : 0); 1220 data.writeInt(dumpInfo ? 1 : 0); 1221 data.writeInt(dumpDalvik ? 1 : 0); 1222 data.writeStringArray(args); 1223 mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0); 1224 reply.readException(); 1225 data.recycle(); 1226 reply.recycle(); 1227 } 1228 1229 public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException { 1230 Parcel data = Parcel.obtain(); 1231 data.writeInterfaceToken(IApplicationThread.descriptor); 1232 data.writeFileDescriptor(fd); 1233 data.writeStringArray(args); 1234 mRemote.transact(DUMP_GFX_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1235 data.recycle(); 1236 } 1237 1238 public void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException { 1239 Parcel data = Parcel.obtain(); 1240 data.writeInterfaceToken(IApplicationThread.descriptor); 1241 data.writeFileDescriptor(fd); 1242 data.writeStringArray(args); 1243 mRemote.transact(DUMP_DB_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1244 data.recycle(); 1245 } 1246 1247 @Override 1248 public void unstableProviderDied(IBinder provider) throws RemoteException { 1249 Parcel data = Parcel.obtain(); 1250 data.writeInterfaceToken(IApplicationThread.descriptor); 1251 data.writeStrongBinder(provider); 1252 mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1253 data.recycle(); 1254 } 1255 1256 @Override 1257 public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, 1258 int requestType) throws RemoteException { 1259 Parcel data = Parcel.obtain(); 1260 data.writeInterfaceToken(IApplicationThread.descriptor); 1261 data.writeStrongBinder(activityToken); 1262 data.writeStrongBinder(requestToken); 1263 data.writeInt(requestType); 1264 mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, null, 1265 IBinder.FLAG_ONEWAY); 1266 data.recycle(); 1267 } 1268 1269 @Override 1270 public void scheduleTranslucentConversionComplete(IBinder token, boolean timeout) 1271 throws RemoteException { 1272 Parcel data = Parcel.obtain(); 1273 data.writeInterfaceToken(IApplicationThread.descriptor); 1274 data.writeStrongBinder(token); 1275 data.writeInt(timeout ? 1 : 0); 1276 mRemote.transact(SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION, data, null, 1277 IBinder.FLAG_ONEWAY); 1278 data.recycle(); 1279 } 1280 1281 @Override 1282 public void scheduleOnNewActivityOptions(IBinder token, ActivityOptions options) 1283 throws RemoteException { 1284 Parcel data = Parcel.obtain(); 1285 data.writeInterfaceToken(IApplicationThread.descriptor); 1286 data.writeStrongBinder(token); 1287 data.writeBundle(options == null ? null : options.toBundle()); 1288 mRemote.transact(SCHEDULE_ON_NEW_ACTIVITY_OPTIONS_TRANSACTION, data, null, 1289 IBinder.FLAG_ONEWAY); 1290 data.recycle(); 1291 } 1292 1293 @Override 1294 public void setProcessState(int state) throws RemoteException { 1295 Parcel data = Parcel.obtain(); 1296 data.writeInterfaceToken(IApplicationThread.descriptor); 1297 data.writeInt(state); 1298 mRemote.transact(SET_PROCESS_STATE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1299 data.recycle(); 1300 } 1301 1302 @Override 1303 public void scheduleInstallProvider(ProviderInfo provider) throws RemoteException { 1304 Parcel data = Parcel.obtain(); 1305 data.writeInterfaceToken(IApplicationThread.descriptor); 1306 provider.writeToParcel(data, 0); 1307 mRemote.transact(SCHEDULE_INSTALL_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1308 data.recycle(); 1309 } 1310 1311 @Override 1312 public void updateTimePrefs(boolean is24Hour) throws RemoteException { 1313 Parcel data = Parcel.obtain(); 1314 data.writeInterfaceToken(IApplicationThread.descriptor); 1315 data.writeByte(is24Hour ? (byte) 1 : (byte) 0); 1316 mRemote.transact(UPDATE_TIME_PREFS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1317 data.recycle(); 1318 } 1319 1320 @Override 1321 public void scheduleCancelVisibleBehind(IBinder token) throws RemoteException { 1322 Parcel data = Parcel.obtain(); 1323 data.writeInterfaceToken(IApplicationThread.descriptor); 1324 data.writeStrongBinder(token); 1325 mRemote.transact(CANCEL_VISIBLE_BEHIND_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1326 data.recycle(); 1327 } 1328 1329 @Override 1330 public void scheduleBackgroundVisibleBehindChanged(IBinder token, boolean enabled) 1331 throws RemoteException { 1332 Parcel data = Parcel.obtain(); 1333 data.writeInterfaceToken(IApplicationThread.descriptor); 1334 data.writeStrongBinder(token); 1335 data.writeInt(enabled ? 1 : 0); 1336 mRemote.transact(BACKGROUND_VISIBLE_BEHIND_CHANGED_TRANSACTION, data, null, 1337 IBinder.FLAG_ONEWAY); 1338 data.recycle(); 1339 } 1340 1341 @Override 1342 public void scheduleEnterAnimationComplete(IBinder token) throws RemoteException { 1343 Parcel data = Parcel.obtain(); 1344 data.writeInterfaceToken(IApplicationThread.descriptor); 1345 data.writeStrongBinder(token); 1346 mRemote.transact(ENTER_ANIMATION_COMPLETE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY); 1347 data.recycle(); 1348 } 1349 } 1350