From dfc7fd7818cda46b914c8a9d69d1ba00443ffe5b Mon Sep 17 00:00:00 2001 From: Adam Skory Date: Mon, 5 Aug 2013 19:23:41 -0700 Subject: Extend assist context to foreground services Add Service.onProvideAssistData(Bundle) which will be called on foreground Services that have the new attr in their manifest of provideAssistData = true; Rename private reference to e.g. "getTopActivityExtras" as "getAssistContextExtras" - do not rename the relevant permission, since it is already public. In ActivityManagerService, request extras both from the top activity and from any foreground services with the above attribute. Extend PendingActivityExtras as PendingAssistExtras with a list of Services from which extras are expected. Reduce the timeout to or reporting extras from 4 sec to just 500 ms. Bug: 9526331 Change-Id: Ia03b96e8189033a68ae9c514c8cea0199a19bce8 --- core/java/android/app/ActivityThread.java | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'core/java/android/app/ActivityThread.java') diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index d9f9d61..64653cd 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -529,10 +529,11 @@ public final class ActivityThread { CompatibilityInfo info; } - static final class RequestActivityExtras { + static final class RequestAssistContextExtras { IBinder activityToken; IBinder requestToken; int requestType; + int index; } private native void dumpGraphicsInfo(FileDescriptor fd); @@ -1197,13 +1198,14 @@ public final class ActivityThread { } @Override - public void requestActivityExtras(IBinder activityToken, IBinder requestToken, - int requestType) { - RequestActivityExtras cmd = new RequestActivityExtras(); + public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, + int requestType, int index) { + RequestAssistContextExtras cmd = new RequestAssistContextExtras(); cmd.activityToken = activityToken; cmd.requestToken = requestToken; cmd.requestType = requestType; - queueOrSendMessage(H.REQUEST_ACTIVITY_EXTRAS, cmd); + cmd.index = index; + queueOrSendMessage(H.REQUEST_ASSIST_CONTEXT_EXTRAS, cmd); } private void printRow(PrintWriter pw, String format, Object...objs) { @@ -1292,7 +1294,7 @@ public final class ActivityThread { public static final int TRIM_MEMORY = 140; public static final int DUMP_PROVIDER = 141; public static final int UNSTABLE_PROVIDER_DIED = 142; - public static final int REQUEST_ACTIVITY_EXTRAS = 143; + public static final int REQUEST_ASSIST_CONTEXT_EXTRAS = 143; public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144; String codeToString(int code) { if (DEBUG_MESSAGES) { @@ -1340,7 +1342,7 @@ public final class ActivityThread { case TRIM_MEMORY: return "TRIM_MEMORY"; case DUMP_PROVIDER: return "DUMP_PROVIDER"; case UNSTABLE_PROVIDER_DIED: return "UNSTABLE_PROVIDER_DIED"; - case REQUEST_ACTIVITY_EXTRAS: return "REQUEST_ACTIVITY_EXTRAS"; + case REQUEST_ASSIST_CONTEXT_EXTRAS: return "REQUEST_ASSIST_CONTEXT_EXTRAS"; case TRANSLUCENT_CONVERSION_COMPLETE: return "TRANSLUCENT_CONVERSION_COMPLETE"; } } @@ -1553,8 +1555,8 @@ public final class ActivityThread { case UNSTABLE_PROVIDER_DIED: handleUnstableProviderDied((IBinder)msg.obj, false); break; - case REQUEST_ACTIVITY_EXTRAS: - handleRequestActivityExtras((RequestActivityExtras)msg.obj); + case REQUEST_ASSIST_CONTEXT_EXTRAS: + handleRequestAssistContextExtras((RequestAssistContextExtras)msg.obj); break; case TRANSLUCENT_CONVERSION_COMPLETE: handleTranslucentConversionComplete((IBinder)msg.obj, msg.arg1 == 1); @@ -2275,19 +2277,24 @@ public final class ActivityThread { performNewIntents(data.token, data.intents); } - public void handleRequestActivityExtras(RequestActivityExtras cmd) { + public void handleRequestAssistContextExtras(RequestAssistContextExtras cmd) { Bundle data = new Bundle(); ActivityClientRecord r = mActivities.get(cmd.activityToken); if (r != null) { r.activity.getApplication().dispatchOnProvideAssistData(r.activity, data); r.activity.onProvideAssistData(data); + } else { + Service service = mServices.get(cmd.activityToken); + if (service != null) { + service.onProvideAssistData(data); + } } if (data.isEmpty()) { data = null; } IActivityManager mgr = ActivityManagerNative.getDefault(); try { - mgr.reportTopActivityExtras(cmd.requestToken, data); + mgr.reportAssistContextExtras(cmd.requestToken, data, cmd.index); } catch (RemoteException e) { } } -- cgit v1.1