2 * Copyright (C) 2006 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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.os.Binder;
29 import android.os.Bundle;
30 import android.os.Debug;
31 import android.os.Parcelable;
32 import android.os.RemoteException;
33 import android.os.IBinder;
34 import android.os.Parcel;
35 import android.os.ParcelFileDescriptor;
37 import java.io.FileDescriptor;
38 import java.io.IOException;
39 import java.util.HashMap;
40 import java.util.List;
44 public abstract class ApplicationThreadNative extends Binder
45 implements IApplicationThread {
47 * Cast a Binder object into an application thread interface, generating
50 static public IApplicationThread asInterface(IBinder obj) {
54 IApplicationThread in =
55 (IApplicationThread)obj.queryLocalInterface(descriptor);
60 return new ApplicationThreadProxy(obj);
63 public ApplicationThreadNative() {
64 attachInterface(this, descriptor);
68 public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
69 throws RemoteException {
71 case SCHEDULE_PAUSE_ACTIVITY_TRANSACTION:
73 data.enforceInterface(IApplicationThread.descriptor);
74 IBinder b = data.readStrongBinder();
75 boolean finished = data.readInt() != 0;
76 boolean userLeaving = data.readInt() != 0;
77 int configChanges = data.readInt();
78 schedulePauseActivity(b, finished, userLeaving, configChanges);
82 case SCHEDULE_STOP_ACTIVITY_TRANSACTION:
84 data.enforceInterface(IApplicationThread.descriptor);
85 IBinder b = data.readStrongBinder();
86 boolean show = data.readInt() != 0;
87 int configChanges = data.readInt();
88 scheduleStopActivity(b, show, configChanges);
92 case SCHEDULE_WINDOW_VISIBILITY_TRANSACTION:
94 data.enforceInterface(IApplicationThread.descriptor);
95 IBinder b = data.readStrongBinder();
96 boolean show = data.readInt() != 0;
97 scheduleWindowVisibility(b, show);
101 case SCHEDULE_SLEEPING_TRANSACTION:
103 data.enforceInterface(IApplicationThread.descriptor);
104 IBinder b = data.readStrongBinder();
105 boolean sleeping = data.readInt() != 0;
106 scheduleSleeping(b, sleeping);
110 case SCHEDULE_RESUME_ACTIVITY_TRANSACTION:
112 data.enforceInterface(IApplicationThread.descriptor);
113 IBinder b = data.readStrongBinder();
114 int procState = data.readInt();
115 boolean isForward = data.readInt() != 0;
116 scheduleResumeActivity(b, procState, isForward);
120 case SCHEDULE_SEND_RESULT_TRANSACTION:
122 data.enforceInterface(IApplicationThread.descriptor);
123 IBinder b = data.readStrongBinder();
124 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
125 scheduleSendResult(b, ri);
129 case SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION:
131 data.enforceInterface(IApplicationThread.descriptor);
132 Intent intent = Intent.CREATOR.createFromParcel(data);
133 IBinder b = data.readStrongBinder();
134 int ident = data.readInt();
135 ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
136 Configuration curConfig = Configuration.CREATOR.createFromParcel(data);
137 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
138 int procState = data.readInt();
139 Bundle state = data.readBundle();
140 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
141 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
142 boolean notResumed = data.readInt() != 0;
143 boolean isForward = data.readInt() != 0;
144 String profileName = data.readString();
145 ParcelFileDescriptor profileFd = data.readInt() != 0
146 ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
147 boolean autoStopProfiler = data.readInt() != 0;
148 scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, procState, state,
149 ri, pi, notResumed, isForward, profileName, profileFd, autoStopProfiler);
153 case SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION:
155 data.enforceInterface(IApplicationThread.descriptor);
156 IBinder b = data.readStrongBinder();
157 List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
158 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
159 int configChanges = data.readInt();
160 boolean notResumed = data.readInt() != 0;
161 Configuration config = null;
162 if (data.readInt() != 0) {
163 config = Configuration.CREATOR.createFromParcel(data);
165 scheduleRelaunchActivity(b, ri, pi, configChanges, notResumed, config);
169 case SCHEDULE_NEW_INTENT_TRANSACTION:
171 data.enforceInterface(IApplicationThread.descriptor);
172 List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
173 IBinder b = data.readStrongBinder();
174 scheduleNewIntent(pi, b);
178 case SCHEDULE_FINISH_ACTIVITY_TRANSACTION:
180 data.enforceInterface(IApplicationThread.descriptor);
181 IBinder b = data.readStrongBinder();
182 boolean finishing = data.readInt() != 0;
183 int configChanges = data.readInt();
184 scheduleDestroyActivity(b, finishing, configChanges);
188 case SCHEDULE_RECEIVER_TRANSACTION:
190 data.enforceInterface(IApplicationThread.descriptor);
191 Intent intent = Intent.CREATOR.createFromParcel(data);
192 ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
193 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
194 int resultCode = data.readInt();
195 String resultData = data.readString();
196 Bundle resultExtras = data.readBundle();
197 boolean sync = data.readInt() != 0;
198 int sendingUser = data.readInt();
199 int processState = data.readInt();
200 scheduleReceiver(intent, info, compatInfo, resultCode, resultData,
201 resultExtras, sync, sendingUser, processState);
205 case SCHEDULE_CREATE_SERVICE_TRANSACTION: {
206 data.enforceInterface(IApplicationThread.descriptor);
207 IBinder token = data.readStrongBinder();
208 ServiceInfo info = ServiceInfo.CREATOR.createFromParcel(data);
209 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
210 int processState = data.readInt();
211 scheduleCreateService(token, info, compatInfo, processState);
215 case SCHEDULE_BIND_SERVICE_TRANSACTION: {
216 data.enforceInterface(IApplicationThread.descriptor);
217 IBinder token = data.readStrongBinder();
218 Intent intent = Intent.CREATOR.createFromParcel(data);
219 boolean rebind = data.readInt() != 0;
220 int processState = data.readInt();
221 scheduleBindService(token, intent, rebind, processState);
225 case SCHEDULE_UNBIND_SERVICE_TRANSACTION: {
226 data.enforceInterface(IApplicationThread.descriptor);
227 IBinder token = data.readStrongBinder();
228 Intent intent = Intent.CREATOR.createFromParcel(data);
229 scheduleUnbindService(token, intent);
233 case SCHEDULE_SERVICE_ARGS_TRANSACTION:
235 data.enforceInterface(IApplicationThread.descriptor);
236 IBinder token = data.readStrongBinder();
237 boolean taskRemoved = data.readInt() != 0;
238 int startId = data.readInt();
239 int fl = data.readInt();
241 if (data.readInt() != 0) {
242 args = Intent.CREATOR.createFromParcel(data);
246 scheduleServiceArgs(token, taskRemoved, startId, fl, args);
250 case SCHEDULE_STOP_SERVICE_TRANSACTION:
252 data.enforceInterface(IApplicationThread.descriptor);
253 IBinder token = data.readStrongBinder();
254 scheduleStopService(token);
258 case BIND_APPLICATION_TRANSACTION:
260 data.enforceInterface(IApplicationThread.descriptor);
261 String packageName = data.readString();
262 ApplicationInfo info =
263 ApplicationInfo.CREATOR.createFromParcel(data);
264 List<ProviderInfo> providers =
265 data.createTypedArrayList(ProviderInfo.CREATOR);
266 ComponentName testName = (data.readInt() != 0)
267 ? new ComponentName(data) : null;
268 String profileName = data.readString();
269 ParcelFileDescriptor profileFd = data.readInt() != 0
270 ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
271 boolean autoStopProfiler = data.readInt() != 0;
272 Bundle testArgs = data.readBundle();
273 IBinder binder = data.readStrongBinder();
274 IInstrumentationWatcher testWatcher = IInstrumentationWatcher.Stub.asInterface(binder);
275 binder = data.readStrongBinder();
276 IUiAutomationConnection uiAutomationConnection =
277 IUiAutomationConnection.Stub.asInterface(binder);
278 int testMode = data.readInt();
279 boolean openGlTrace = data.readInt() != 0;
280 boolean restrictedBackupMode = (data.readInt() != 0);
281 boolean persistent = (data.readInt() != 0);
282 Configuration config = Configuration.CREATOR.createFromParcel(data);
283 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
284 HashMap<String, IBinder> services = data.readHashMap(null);
285 Bundle coreSettings = data.readBundle();
286 bindApplication(packageName, info,
287 providers, testName, profileName, profileFd, autoStopProfiler,
288 testArgs, testWatcher, uiAutomationConnection, testMode,
289 openGlTrace, restrictedBackupMode, persistent, config, compatInfo,
290 services, coreSettings);
294 case SCHEDULE_EXIT_TRANSACTION:
296 data.enforceInterface(IApplicationThread.descriptor);
301 case SCHEDULE_SUICIDE_TRANSACTION:
303 data.enforceInterface(IApplicationThread.descriptor);
308 case REQUEST_THUMBNAIL_TRANSACTION:
310 data.enforceInterface(IApplicationThread.descriptor);
311 IBinder b = data.readStrongBinder();
316 case SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION:
318 data.enforceInterface(IApplicationThread.descriptor);
319 Configuration config = Configuration.CREATOR.createFromParcel(data);
320 scheduleConfigurationChanged(config);
324 case UPDATE_TIME_ZONE_TRANSACTION: {
325 data.enforceInterface(IApplicationThread.descriptor);
330 case CLEAR_DNS_CACHE_TRANSACTION: {
331 data.enforceInterface(IApplicationThread.descriptor);
336 case SET_HTTP_PROXY_TRANSACTION: {
337 data.enforceInterface(IApplicationThread.descriptor);
338 final String proxy = data.readString();
339 final String port = data.readString();
340 final String exclList = data.readString();
341 final String pacFileUrl = data.readString();
342 setHttpProxy(proxy, port, exclList, pacFileUrl);
346 case PROCESS_IN_BACKGROUND_TRANSACTION: {
347 data.enforceInterface(IApplicationThread.descriptor);
348 processInBackground();
352 case DUMP_SERVICE_TRANSACTION: {
353 data.enforceInterface(IApplicationThread.descriptor);
354 ParcelFileDescriptor fd = data.readFileDescriptor();
355 final IBinder service = data.readStrongBinder();
356 final String[] args = data.readStringArray();
358 dumpService(fd.getFileDescriptor(), service, args);
361 } catch (IOException e) {
367 case DUMP_PROVIDER_TRANSACTION: {
368 data.enforceInterface(IApplicationThread.descriptor);
369 ParcelFileDescriptor fd = data.readFileDescriptor();
370 final IBinder service = data.readStrongBinder();
371 final String[] args = data.readStringArray();
373 dumpProvider(fd.getFileDescriptor(), service, args);
376 } catch (IOException e) {
382 case SCHEDULE_REGISTERED_RECEIVER_TRANSACTION: {
383 data.enforceInterface(IApplicationThread.descriptor);
384 IIntentReceiver receiver = IIntentReceiver.Stub.asInterface(
385 data.readStrongBinder());
386 Intent intent = Intent.CREATOR.createFromParcel(data);
387 int resultCode = data.readInt();
388 String dataStr = data.readString();
389 Bundle extras = data.readBundle();
390 boolean ordered = data.readInt() != 0;
391 boolean sticky = data.readInt() != 0;
392 int sendingUser = data.readInt();
393 int processState = data.readInt();
394 scheduleRegisteredReceiver(receiver, intent,
395 resultCode, dataStr, extras, ordered, sticky, sendingUser, processState);
399 case SCHEDULE_LOW_MEMORY_TRANSACTION:
401 data.enforceInterface(IApplicationThread.descriptor);
406 case SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION:
408 data.enforceInterface(IApplicationThread.descriptor);
409 IBinder b = data.readStrongBinder();
410 scheduleActivityConfigurationChanged(b);
414 case PROFILER_CONTROL_TRANSACTION:
416 data.enforceInterface(IApplicationThread.descriptor);
417 boolean start = data.readInt() != 0;
418 int profileType = data.readInt();
419 String path = data.readString();
420 ParcelFileDescriptor fd = data.readInt() != 0
421 ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
422 profilerControl(start, path, fd, profileType);
426 case SET_SCHEDULING_GROUP_TRANSACTION:
428 data.enforceInterface(IApplicationThread.descriptor);
429 int group = data.readInt();
430 setSchedulingGroup(group);
434 case SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION:
436 data.enforceInterface(IApplicationThread.descriptor);
437 ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data);
438 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
439 int backupMode = data.readInt();
440 scheduleCreateBackupAgent(appInfo, compatInfo, backupMode);
444 case SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION:
446 data.enforceInterface(IApplicationThread.descriptor);
447 ApplicationInfo appInfo = ApplicationInfo.CREATOR.createFromParcel(data);
448 CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
449 scheduleDestroyBackupAgent(appInfo, compatInfo);
453 case DISPATCH_PACKAGE_BROADCAST_TRANSACTION:
455 data.enforceInterface(IApplicationThread.descriptor);
456 int cmd = data.readInt();
457 String[] packages = data.readStringArray();
458 dispatchPackageBroadcast(cmd, packages);
462 case SCHEDULE_CRASH_TRANSACTION:
464 data.enforceInterface(IApplicationThread.descriptor);
465 String msg = data.readString();
470 case DUMP_HEAP_TRANSACTION:
472 data.enforceInterface(IApplicationThread.descriptor);
473 boolean managed = data.readInt() != 0;
474 String path = data.readString();
475 ParcelFileDescriptor fd = data.readInt() != 0
476 ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
477 dumpHeap(managed, path, fd);
481 case DUMP_ACTIVITY_TRANSACTION: {
482 data.enforceInterface(IApplicationThread.descriptor);
483 ParcelFileDescriptor fd = data.readFileDescriptor();
484 final IBinder activity = data.readStrongBinder();
485 final String prefix = data.readString();
486 final String[] args = data.readStringArray();
488 dumpActivity(fd.getFileDescriptor(), activity, prefix, args);
491 } catch (IOException e) {
497 case SET_CORE_SETTINGS_TRANSACTION: {
498 data.enforceInterface(IApplicationThread.descriptor);
499 Bundle settings = data.readBundle();
500 setCoreSettings(settings);
504 case UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION: {
505 data.enforceInterface(IApplicationThread.descriptor);
506 String pkg = data.readString();
507 CompatibilityInfo compat = CompatibilityInfo.CREATOR.createFromParcel(data);
508 updatePackageCompatibilityInfo(pkg, compat);
512 case SCHEDULE_TRIM_MEMORY_TRANSACTION: {
513 data.enforceInterface(IApplicationThread.descriptor);
514 int level = data.readInt();
515 scheduleTrimMemory(level);
519 case DUMP_MEM_INFO_TRANSACTION:
521 data.enforceInterface(IApplicationThread.descriptor);
522 ParcelFileDescriptor fd = data.readFileDescriptor();
523 Debug.MemoryInfo mi = Debug.MemoryInfo.CREATOR.createFromParcel(data);
524 boolean checkin = data.readInt() != 0;
525 boolean dumpInfo = data.readInt() != 0;
526 boolean dumpDalvik = data.readInt() != 0;
527 String[] args = data.readStringArray();
530 dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args);
534 } catch (IOException e) {
535 // swallowed, not propagated back to the caller
539 reply.writeNoException();
543 case DUMP_GFX_INFO_TRANSACTION:
545 data.enforceInterface(IApplicationThread.descriptor);
546 ParcelFileDescriptor fd = data.readFileDescriptor();
547 String[] args = data.readStringArray();
550 dumpGfxInfo(fd.getFileDescriptor(), args);
554 } catch (IOException e) {
555 // swallowed, not propagated back to the caller
559 reply.writeNoException();
563 case DUMP_DB_INFO_TRANSACTION:
565 data.enforceInterface(IApplicationThread.descriptor);
566 ParcelFileDescriptor fd = data.readFileDescriptor();
567 String[] args = data.readStringArray();
570 dumpDbInfo(fd.getFileDescriptor(), args);
574 } catch (IOException e) {
575 // swallowed, not propagated back to the caller
579 reply.writeNoException();
583 case UNSTABLE_PROVIDER_DIED_TRANSACTION:
585 data.enforceInterface(IApplicationThread.descriptor);
586 IBinder provider = data.readStrongBinder();
587 unstableProviderDied(provider);
588 reply.writeNoException();
592 case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION:
594 data.enforceInterface(IApplicationThread.descriptor);
595 IBinder activityToken = data.readStrongBinder();
596 IBinder requestToken = data.readStrongBinder();
597 int requestType = data.readInt();
598 requestAssistContextExtras(activityToken, requestToken, requestType);
599 reply.writeNoException();
603 case SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION:
605 data.enforceInterface(IApplicationThread.descriptor);
606 IBinder token = data.readStrongBinder();
607 boolean timeout = data.readInt() == 1;
608 scheduleTranslucentConversionComplete(token, timeout);
609 reply.writeNoException();
613 case SET_PROCESS_STATE_TRANSACTION:
615 data.enforceInterface(IApplicationThread.descriptor);
616 int state = data.readInt();
617 setProcessState(state);
618 reply.writeNoException();
623 return super.onTransact(code, data, reply, flags);
626 public IBinder asBinder()
632 class ApplicationThreadProxy implements IApplicationThread {
633 private final IBinder mRemote;
635 public ApplicationThreadProxy(IBinder remote) {
639 public final IBinder asBinder() {
643 public final void schedulePauseActivity(IBinder token, boolean finished,
644 boolean userLeaving, int configChanges) throws RemoteException {
645 Parcel data = Parcel.obtain();
646 data.writeInterfaceToken(IApplicationThread.descriptor);
647 data.writeStrongBinder(token);
648 data.writeInt(finished ? 1 : 0);
649 data.writeInt(userLeaving ? 1 :0);
650 data.writeInt(configChanges);
651 mRemote.transact(SCHEDULE_PAUSE_ACTIVITY_TRANSACTION, data, null,
652 IBinder.FLAG_ONEWAY);
656 public final void scheduleStopActivity(IBinder token, boolean showWindow,
657 int configChanges) throws RemoteException {
658 Parcel data = Parcel.obtain();
659 data.writeInterfaceToken(IApplicationThread.descriptor);
660 data.writeStrongBinder(token);
661 data.writeInt(showWindow ? 1 : 0);
662 data.writeInt(configChanges);
663 mRemote.transact(SCHEDULE_STOP_ACTIVITY_TRANSACTION, data, null,
664 IBinder.FLAG_ONEWAY);
668 public final void scheduleWindowVisibility(IBinder token,
669 boolean showWindow) throws RemoteException {
670 Parcel data = Parcel.obtain();
671 data.writeInterfaceToken(IApplicationThread.descriptor);
672 data.writeStrongBinder(token);
673 data.writeInt(showWindow ? 1 : 0);
674 mRemote.transact(SCHEDULE_WINDOW_VISIBILITY_TRANSACTION, data, null,
675 IBinder.FLAG_ONEWAY);
679 public final void scheduleSleeping(IBinder token,
680 boolean sleeping) throws RemoteException {
681 Parcel data = Parcel.obtain();
682 data.writeInterfaceToken(IApplicationThread.descriptor);
683 data.writeStrongBinder(token);
684 data.writeInt(sleeping ? 1 : 0);
685 mRemote.transact(SCHEDULE_SLEEPING_TRANSACTION, data, null,
686 IBinder.FLAG_ONEWAY);
690 public final void scheduleResumeActivity(IBinder token, int procState, boolean isForward)
691 throws RemoteException {
692 Parcel data = Parcel.obtain();
693 data.writeInterfaceToken(IApplicationThread.descriptor);
694 data.writeStrongBinder(token);
695 data.writeInt(procState);
696 data.writeInt(isForward ? 1 : 0);
697 mRemote.transact(SCHEDULE_RESUME_ACTIVITY_TRANSACTION, data, null,
698 IBinder.FLAG_ONEWAY);
702 public final void scheduleSendResult(IBinder token, List<ResultInfo> results)
703 throws RemoteException {
704 Parcel data = Parcel.obtain();
705 data.writeInterfaceToken(IApplicationThread.descriptor);
706 data.writeStrongBinder(token);
707 data.writeTypedList(results);
708 mRemote.transact(SCHEDULE_SEND_RESULT_TRANSACTION, data, null,
709 IBinder.FLAG_ONEWAY);
713 public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
714 ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
715 int procState, Bundle state, List<ResultInfo> pendingResults,
716 List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
717 String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
718 throws RemoteException {
719 Parcel data = Parcel.obtain();
720 data.writeInterfaceToken(IApplicationThread.descriptor);
721 intent.writeToParcel(data, 0);
722 data.writeStrongBinder(token);
723 data.writeInt(ident);
724 info.writeToParcel(data, 0);
725 curConfig.writeToParcel(data, 0);
726 compatInfo.writeToParcel(data, 0);
727 data.writeInt(procState);
728 data.writeBundle(state);
729 data.writeTypedList(pendingResults);
730 data.writeTypedList(pendingNewIntents);
731 data.writeInt(notResumed ? 1 : 0);
732 data.writeInt(isForward ? 1 : 0);
733 data.writeString(profileName);
734 if (profileFd != null) {
736 profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
740 data.writeInt(autoStopProfiler ? 1 : 0);
741 mRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null,
742 IBinder.FLAG_ONEWAY);
746 public final void scheduleRelaunchActivity(IBinder token,
747 List<ResultInfo> pendingResults, List<Intent> pendingNewIntents,
748 int configChanges, boolean notResumed, Configuration config)
749 throws RemoteException {
750 Parcel data = Parcel.obtain();
751 data.writeInterfaceToken(IApplicationThread.descriptor);
752 data.writeStrongBinder(token);
753 data.writeTypedList(pendingResults);
754 data.writeTypedList(pendingNewIntents);
755 data.writeInt(configChanges);
756 data.writeInt(notResumed ? 1 : 0);
757 if (config != null) {
759 config.writeToParcel(data, 0);
763 mRemote.transact(SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION, data, null,
764 IBinder.FLAG_ONEWAY);
768 public void scheduleNewIntent(List<Intent> intents, IBinder token)
769 throws RemoteException {
770 Parcel data = Parcel.obtain();
771 data.writeInterfaceToken(IApplicationThread.descriptor);
772 data.writeTypedList(intents);
773 data.writeStrongBinder(token);
774 mRemote.transact(SCHEDULE_NEW_INTENT_TRANSACTION, data, null,
775 IBinder.FLAG_ONEWAY);
779 public final void scheduleDestroyActivity(IBinder token, boolean finishing,
780 int configChanges) throws RemoteException {
781 Parcel data = Parcel.obtain();
782 data.writeInterfaceToken(IApplicationThread.descriptor);
783 data.writeStrongBinder(token);
784 data.writeInt(finishing ? 1 : 0);
785 data.writeInt(configChanges);
786 mRemote.transact(SCHEDULE_FINISH_ACTIVITY_TRANSACTION, data, null,
787 IBinder.FLAG_ONEWAY);
791 public final void scheduleReceiver(Intent intent, ActivityInfo info,
792 CompatibilityInfo compatInfo, int resultCode, String resultData,
793 Bundle map, boolean sync, int sendingUser, int processState) throws RemoteException {
794 Parcel data = Parcel.obtain();
795 data.writeInterfaceToken(IApplicationThread.descriptor);
796 intent.writeToParcel(data, 0);
797 info.writeToParcel(data, 0);
798 compatInfo.writeToParcel(data, 0);
799 data.writeInt(resultCode);
800 data.writeString(resultData);
801 data.writeBundle(map);
802 data.writeInt(sync ? 1 : 0);
803 data.writeInt(sendingUser);
804 data.writeInt(processState);
805 mRemote.transact(SCHEDULE_RECEIVER_TRANSACTION, data, null,
806 IBinder.FLAG_ONEWAY);
810 public final void scheduleCreateBackupAgent(ApplicationInfo app,
811 CompatibilityInfo compatInfo, int backupMode) throws RemoteException {
812 Parcel data = Parcel.obtain();
813 data.writeInterfaceToken(IApplicationThread.descriptor);
814 app.writeToParcel(data, 0);
815 compatInfo.writeToParcel(data, 0);
816 data.writeInt(backupMode);
817 mRemote.transact(SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION, data, null,
818 IBinder.FLAG_ONEWAY);
822 public final void scheduleDestroyBackupAgent(ApplicationInfo app,
823 CompatibilityInfo compatInfo) throws RemoteException {
824 Parcel data = Parcel.obtain();
825 data.writeInterfaceToken(IApplicationThread.descriptor);
826 app.writeToParcel(data, 0);
827 compatInfo.writeToParcel(data, 0);
828 mRemote.transact(SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION, data, null,
829 IBinder.FLAG_ONEWAY);
833 public final void scheduleCreateService(IBinder token, ServiceInfo info,
834 CompatibilityInfo compatInfo, int processState) throws RemoteException {
835 Parcel data = Parcel.obtain();
836 data.writeInterfaceToken(IApplicationThread.descriptor);
837 data.writeStrongBinder(token);
838 info.writeToParcel(data, 0);
839 compatInfo.writeToParcel(data, 0);
840 data.writeInt(processState);
841 mRemote.transact(SCHEDULE_CREATE_SERVICE_TRANSACTION, data, null,
842 IBinder.FLAG_ONEWAY);
846 public final void scheduleBindService(IBinder token, Intent intent, boolean rebind,
847 int processState) throws RemoteException {
848 Parcel data = Parcel.obtain();
849 data.writeInterfaceToken(IApplicationThread.descriptor);
850 data.writeStrongBinder(token);
851 intent.writeToParcel(data, 0);
852 data.writeInt(rebind ? 1 : 0);
853 data.writeInt(processState);
854 mRemote.transact(SCHEDULE_BIND_SERVICE_TRANSACTION, data, null,
855 IBinder.FLAG_ONEWAY);
859 public final void scheduleUnbindService(IBinder token, Intent intent)
860 throws RemoteException {
861 Parcel data = Parcel.obtain();
862 data.writeInterfaceToken(IApplicationThread.descriptor);
863 data.writeStrongBinder(token);
864 intent.writeToParcel(data, 0);
865 mRemote.transact(SCHEDULE_UNBIND_SERVICE_TRANSACTION, data, null,
866 IBinder.FLAG_ONEWAY);
870 public final void scheduleServiceArgs(IBinder token, boolean taskRemoved, int startId,
871 int flags, Intent args) throws RemoteException {
872 Parcel data = Parcel.obtain();
873 data.writeInterfaceToken(IApplicationThread.descriptor);
874 data.writeStrongBinder(token);
875 data.writeInt(taskRemoved ? 1 : 0);
876 data.writeInt(startId);
877 data.writeInt(flags);
880 args.writeToParcel(data, 0);
884 mRemote.transact(SCHEDULE_SERVICE_ARGS_TRANSACTION, data, null,
885 IBinder.FLAG_ONEWAY);
889 public final void scheduleStopService(IBinder token)
890 throws RemoteException {
891 Parcel data = Parcel.obtain();
892 data.writeInterfaceToken(IApplicationThread.descriptor);
893 data.writeStrongBinder(token);
894 mRemote.transact(SCHEDULE_STOP_SERVICE_TRANSACTION, data, null,
895 IBinder.FLAG_ONEWAY);
899 public final void bindApplication(String packageName, ApplicationInfo info,
900 List<ProviderInfo> providers, ComponentName testName, String profileName,
901 ParcelFileDescriptor profileFd, boolean autoStopProfiler, Bundle testArgs,
902 IInstrumentationWatcher testWatcher,
903 IUiAutomationConnection uiAutomationConnection, int debugMode,
904 boolean openGlTrace, boolean restrictedBackupMode, boolean persistent,
905 Configuration config, CompatibilityInfo compatInfo, Map<String, IBinder> services,
906 Bundle coreSettings) throws RemoteException {
907 Parcel data = Parcel.obtain();
908 data.writeInterfaceToken(IApplicationThread.descriptor);
909 data.writeString(packageName);
910 info.writeToParcel(data, 0);
911 data.writeTypedList(providers);
912 if (testName == null) {
916 testName.writeToParcel(data, 0);
918 data.writeString(profileName);
919 if (profileFd != null) {
921 profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
925 data.writeInt(autoStopProfiler ? 1 : 0);
926 data.writeBundle(testArgs);
927 data.writeStrongInterface(testWatcher);
928 data.writeStrongInterface(uiAutomationConnection);
929 data.writeInt(debugMode);
930 data.writeInt(openGlTrace ? 1 : 0);
931 data.writeInt(restrictedBackupMode ? 1 : 0);
932 data.writeInt(persistent ? 1 : 0);
933 config.writeToParcel(data, 0);
934 compatInfo.writeToParcel(data, 0);
935 data.writeMap(services);
936 data.writeBundle(coreSettings);
937 mRemote.transact(BIND_APPLICATION_TRANSACTION, data, null,
938 IBinder.FLAG_ONEWAY);
942 public final void scheduleExit() throws RemoteException {
943 Parcel data = Parcel.obtain();
944 data.writeInterfaceToken(IApplicationThread.descriptor);
945 mRemote.transact(SCHEDULE_EXIT_TRANSACTION, data, null,
946 IBinder.FLAG_ONEWAY);
950 public final void scheduleSuicide() throws RemoteException {
951 Parcel data = Parcel.obtain();
952 data.writeInterfaceToken(IApplicationThread.descriptor);
953 mRemote.transact(SCHEDULE_SUICIDE_TRANSACTION, data, null,
954 IBinder.FLAG_ONEWAY);
958 public final void requestThumbnail(IBinder token)
959 throws RemoteException {
960 Parcel data = Parcel.obtain();
961 data.writeInterfaceToken(IApplicationThread.descriptor);
962 data.writeStrongBinder(token);
963 mRemote.transact(REQUEST_THUMBNAIL_TRANSACTION, data, null,
964 IBinder.FLAG_ONEWAY);
968 public final void scheduleConfigurationChanged(Configuration config)
969 throws RemoteException {
970 Parcel data = Parcel.obtain();
971 data.writeInterfaceToken(IApplicationThread.descriptor);
972 config.writeToParcel(data, 0);
973 mRemote.transact(SCHEDULE_CONFIGURATION_CHANGED_TRANSACTION, data, null,
974 IBinder.FLAG_ONEWAY);
978 public void updateTimeZone() throws RemoteException {
979 Parcel data = Parcel.obtain();
980 data.writeInterfaceToken(IApplicationThread.descriptor);
981 mRemote.transact(UPDATE_TIME_ZONE_TRANSACTION, data, null,
982 IBinder.FLAG_ONEWAY);
986 public void clearDnsCache() throws RemoteException {
987 Parcel data = Parcel.obtain();
988 data.writeInterfaceToken(IApplicationThread.descriptor);
989 mRemote.transact(CLEAR_DNS_CACHE_TRANSACTION, data, null,
990 IBinder.FLAG_ONEWAY);
994 public void setHttpProxy(String proxy, String port, String exclList,
995 String pacFileUrl) throws RemoteException {
996 Parcel data = Parcel.obtain();
997 data.writeInterfaceToken(IApplicationThread.descriptor);
998 data.writeString(proxy);
999 data.writeString(port);
1000 data.writeString(exclList);
1001 data.writeString(pacFileUrl);
1002 mRemote.transact(SET_HTTP_PROXY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1006 public void processInBackground() throws RemoteException {
1007 Parcel data = Parcel.obtain();
1008 data.writeInterfaceToken(IApplicationThread.descriptor);
1009 mRemote.transact(PROCESS_IN_BACKGROUND_TRANSACTION, data, null,
1010 IBinder.FLAG_ONEWAY);
1014 public void dumpService(FileDescriptor fd, IBinder token, String[] args)
1015 throws RemoteException {
1016 Parcel data = Parcel.obtain();
1017 data.writeInterfaceToken(IApplicationThread.descriptor);
1018 data.writeFileDescriptor(fd);
1019 data.writeStrongBinder(token);
1020 data.writeStringArray(args);
1021 mRemote.transact(DUMP_SERVICE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1025 public void dumpProvider(FileDescriptor fd, IBinder token, String[] args)
1026 throws RemoteException {
1027 Parcel data = Parcel.obtain();
1028 data.writeInterfaceToken(IApplicationThread.descriptor);
1029 data.writeFileDescriptor(fd);
1030 data.writeStrongBinder(token);
1031 data.writeStringArray(args);
1032 mRemote.transact(DUMP_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1036 public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent,
1037 int resultCode, String dataStr, Bundle extras, boolean ordered,
1038 boolean sticky, int sendingUser, int processState) throws RemoteException {
1039 Parcel data = Parcel.obtain();
1040 data.writeInterfaceToken(IApplicationThread.descriptor);
1041 data.writeStrongBinder(receiver.asBinder());
1042 intent.writeToParcel(data, 0);
1043 data.writeInt(resultCode);
1044 data.writeString(dataStr);
1045 data.writeBundle(extras);
1046 data.writeInt(ordered ? 1 : 0);
1047 data.writeInt(sticky ? 1 : 0);
1048 data.writeInt(sendingUser);
1049 data.writeInt(processState);
1050 mRemote.transact(SCHEDULE_REGISTERED_RECEIVER_TRANSACTION, data, null,
1051 IBinder.FLAG_ONEWAY);
1055 public final void scheduleLowMemory() throws RemoteException {
1056 Parcel data = Parcel.obtain();
1057 data.writeInterfaceToken(IApplicationThread.descriptor);
1058 mRemote.transact(SCHEDULE_LOW_MEMORY_TRANSACTION, data, null,
1059 IBinder.FLAG_ONEWAY);
1063 public final void scheduleActivityConfigurationChanged(
1064 IBinder token) throws RemoteException {
1065 Parcel data = Parcel.obtain();
1066 data.writeInterfaceToken(IApplicationThread.descriptor);
1067 data.writeStrongBinder(token);
1068 mRemote.transact(SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION, data, null,
1069 IBinder.FLAG_ONEWAY);
1073 public void profilerControl(boolean start, String path,
1074 ParcelFileDescriptor fd, int profileType) throws RemoteException {
1075 Parcel data = Parcel.obtain();
1076 data.writeInterfaceToken(IApplicationThread.descriptor);
1077 data.writeInt(start ? 1 : 0);
1078 data.writeInt(profileType);
1079 data.writeString(path);
1082 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1086 mRemote.transact(PROFILER_CONTROL_TRANSACTION, data, null,
1087 IBinder.FLAG_ONEWAY);
1091 public void setSchedulingGroup(int group) throws RemoteException {
1092 Parcel data = Parcel.obtain();
1093 data.writeInterfaceToken(IApplicationThread.descriptor);
1094 data.writeInt(group);
1095 mRemote.transact(SET_SCHEDULING_GROUP_TRANSACTION, data, null,
1096 IBinder.FLAG_ONEWAY);
1100 public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException {
1101 Parcel data = Parcel.obtain();
1102 data.writeInterfaceToken(IApplicationThread.descriptor);
1104 data.writeStringArray(packages);
1105 mRemote.transact(DISPATCH_PACKAGE_BROADCAST_TRANSACTION, data, null,
1106 IBinder.FLAG_ONEWAY);
1111 public void scheduleCrash(String msg) throws RemoteException {
1112 Parcel data = Parcel.obtain();
1113 data.writeInterfaceToken(IApplicationThread.descriptor);
1114 data.writeString(msg);
1115 mRemote.transact(SCHEDULE_CRASH_TRANSACTION, data, null,
1116 IBinder.FLAG_ONEWAY);
1121 public void dumpHeap(boolean managed, String path,
1122 ParcelFileDescriptor fd) throws RemoteException {
1123 Parcel data = Parcel.obtain();
1124 data.writeInterfaceToken(IApplicationThread.descriptor);
1125 data.writeInt(managed ? 1 : 0);
1126 data.writeString(path);
1129 fd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
1133 mRemote.transact(DUMP_HEAP_TRANSACTION, data, null,
1134 IBinder.FLAG_ONEWAY);
1138 public void dumpActivity(FileDescriptor fd, IBinder token, String prefix, String[] args)
1139 throws RemoteException {
1140 Parcel data = Parcel.obtain();
1141 data.writeInterfaceToken(IApplicationThread.descriptor);
1142 data.writeFileDescriptor(fd);
1143 data.writeStrongBinder(token);
1144 data.writeString(prefix);
1145 data.writeStringArray(args);
1146 mRemote.transact(DUMP_ACTIVITY_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1150 public void setCoreSettings(Bundle coreSettings) throws RemoteException {
1151 Parcel data = Parcel.obtain();
1152 data.writeInterfaceToken(IApplicationThread.descriptor);
1153 data.writeBundle(coreSettings);
1154 mRemote.transact(SET_CORE_SETTINGS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1157 public void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info)
1158 throws RemoteException {
1159 Parcel data = Parcel.obtain();
1160 data.writeInterfaceToken(IApplicationThread.descriptor);
1161 data.writeString(pkg);
1162 info.writeToParcel(data, 0);
1163 mRemote.transact(UPDATE_PACKAGE_COMPATIBILITY_INFO_TRANSACTION, data, null,
1164 IBinder.FLAG_ONEWAY);
1167 public void scheduleTrimMemory(int level) throws RemoteException {
1168 Parcel data = Parcel.obtain();
1169 data.writeInterfaceToken(IApplicationThread.descriptor);
1170 data.writeInt(level);
1171 mRemote.transact(SCHEDULE_TRIM_MEMORY_TRANSACTION, data, null,
1172 IBinder.FLAG_ONEWAY);
1175 public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin,
1176 boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException {
1177 Parcel data = Parcel.obtain();
1178 Parcel reply = Parcel.obtain();
1179 data.writeInterfaceToken(IApplicationThread.descriptor);
1180 data.writeFileDescriptor(fd);
1181 mem.writeToParcel(data, 0);
1182 data.writeInt(checkin ? 1 : 0);
1183 data.writeInt(dumpInfo ? 1 : 0);
1184 data.writeInt(dumpDalvik ? 1 : 0);
1185 data.writeStringArray(args);
1186 mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0);
1187 reply.readException();
1192 public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException {
1193 Parcel data = Parcel.obtain();
1194 data.writeInterfaceToken(IApplicationThread.descriptor);
1195 data.writeFileDescriptor(fd);
1196 data.writeStringArray(args);
1197 mRemote.transact(DUMP_GFX_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1201 public void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException {
1202 Parcel data = Parcel.obtain();
1203 data.writeInterfaceToken(IApplicationThread.descriptor);
1204 data.writeFileDescriptor(fd);
1205 data.writeStringArray(args);
1206 mRemote.transact(DUMP_DB_INFO_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1211 public void unstableProviderDied(IBinder provider) throws RemoteException {
1212 Parcel data = Parcel.obtain();
1213 data.writeInterfaceToken(IApplicationThread.descriptor);
1214 data.writeStrongBinder(provider);
1215 mRemote.transact(UNSTABLE_PROVIDER_DIED_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1220 public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken,
1221 int requestType) throws RemoteException {
1222 Parcel data = Parcel.obtain();
1223 data.writeInterfaceToken(IApplicationThread.descriptor);
1224 data.writeStrongBinder(activityToken);
1225 data.writeStrongBinder(requestToken);
1226 data.writeInt(requestType);
1227 mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, null,
1228 IBinder.FLAG_ONEWAY);
1233 public void scheduleTranslucentConversionComplete(IBinder token, boolean timeout)
1234 throws RemoteException {
1235 Parcel data = Parcel.obtain();
1236 data.writeInterfaceToken(IApplicationThread.descriptor);
1237 data.writeStrongBinder(token);
1238 data.writeInt(timeout ? 1 : 0);
1239 mRemote.transact(SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
1244 public void setProcessState(int state) throws RemoteException {
1245 Parcel data = Parcel.obtain();
1246 data.writeInterfaceToken(IApplicationThread.descriptor);
1247 data.writeInt(state);
1248 mRemote.transact(SET_PROCESS_STATE_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);