summaryrefslogtreecommitdiffstats
path: root/core/java/android/app
diff options
context:
space:
mode:
authorAdam Skory <skory@google.com>2013-08-05 19:23:41 -0700
committerAdam Skory <skory@google.com>2013-08-07 02:20:44 +0100
commitdfc7fd7818cda46b914c8a9d69d1ba00443ffe5b (patch)
treebb6f5ca2baf7b31d89725be061db4dc40aa2ca3d /core/java/android/app
parent94fa8956b02f307912746d9ac87be7798dc3464e (diff)
downloadframeworks_base-dfc7fd7818cda46b914c8a9d69d1ba00443ffe5b.zip
frameworks_base-dfc7fd7818cda46b914c8a9d69d1ba00443ffe5b.tar.gz
frameworks_base-dfc7fd7818cda46b914c8a9d69d1ba00443ffe5b.tar.bz2
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
Diffstat (limited to 'core/java/android/app')
-rw-r--r--core/java/android/app/ActivityManagerNative.java19
-rw-r--r--core/java/android/app/ActivityThread.java29
-rw-r--r--core/java/android/app/ApplicationThreadNative.java13
-rw-r--r--core/java/android/app/IActivityManager.java9
-rw-r--r--core/java/android/app/IApplicationThread.java6
-rw-r--r--core/java/android/app/SearchManager.java2
-rw-r--r--core/java/android/app/Service.java13
7 files changed, 59 insertions, 32 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 404f6aa..cc964c2 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1921,20 +1921,21 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
return true;
}
- case GET_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
+ case GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
int requestType = data.readInt();
- Bundle res = getTopActivityExtras(requestType);
+ Bundle res = getAssistContextExtras(requestType);
reply.writeNoException();
reply.writeBundle(res);
return true;
}
- case REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION: {
+ case REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
IBinder token = data.readStrongBinder();
Bundle extras = data.readBundle();
- reportTopActivityExtras(token, extras);
+ int index = data.readInt();
+ reportAssistContextExtras(token, extras, index);
reply.writeNoException();
return true;
}
@@ -4456,12 +4457,12 @@ class ActivityManagerProxy implements IActivityManager
return res;
}
- public Bundle getTopActivityExtras(int requestType) throws RemoteException {
+ public Bundle getAssistContextExtras(int requestType) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeInt(requestType);
- mRemote.transact(GET_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
+ mRemote.transact(GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
reply.readException();
Bundle res = reply.readBundle();
data.recycle();
@@ -4469,13 +4470,15 @@ class ActivityManagerProxy implements IActivityManager
return res;
}
- public void reportTopActivityExtras(IBinder token, Bundle extras) throws RemoteException {
+ public void reportAssistContextExtras(IBinder token, Bundle extras, int index)
+ throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeStrongBinder(token);
data.writeBundle(extras);
- mRemote.transact(REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION, data, reply, 0);
+ data.writeInt(index);
+ mRemote.transact(REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
reply.recycle();
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) {
}
}
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index 6f18e84..df5b476 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -599,13 +599,14 @@ public abstract class ApplicationThreadNative extends Binder
return true;
}
- case REQUEST_ACTIVITY_EXTRAS_TRANSACTION:
+ case REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION:
{
data.enforceInterface(IApplicationThread.descriptor);
IBinder activityToken = data.readStrongBinder();
IBinder requestToken = data.readStrongBinder();
int requestType = data.readInt();
- requestActivityExtras(activityToken, requestToken, requestType);
+ int index = data.readInt();
+ requestAssistContextExtras(activityToken, requestToken, requestType, index);
reply.writeNoException();
return true;
}
@@ -1238,14 +1239,16 @@ class ApplicationThreadProxy implements IApplicationThread {
}
@Override
- public void requestActivityExtras(IBinder activityToken, IBinder requestToken, int requestType)
- throws RemoteException {
+ public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken,
+ int requestType, int index) throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeStrongBinder(activityToken);
data.writeStrongBinder(requestToken);
data.writeInt(requestType);
- mRemote.transact(REQUEST_ACTIVITY_EXTRAS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
+ data.writeInt(index);
+ mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, null,
+ IBinder.FLAG_ONEWAY);
data.recycle();
}
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 3eda58c..3851eb3 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -386,9 +386,10 @@ public interface IActivityManager extends IInterface {
public long inputDispatchingTimedOut(int pid, boolean aboveSystem) throws RemoteException;
- public Bundle getTopActivityExtras(int requestType) throws RemoteException;
+ public Bundle getAssistContextExtras(int requestType) throws RemoteException;
- public void reportTopActivityExtras(IBinder token, Bundle extras) throws RemoteException;
+ public void reportAssistContextExtras(IBinder token, Bundle extras, int index)
+ throws RemoteException;
public void killUid(int uid, String reason) throws RemoteException;
@@ -662,8 +663,8 @@ public interface IActivityManager extends IInterface {
int INPUT_DISPATCHING_TIMED_OUT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+158;
int CLEAR_PENDING_BACKUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+159;
int GET_INTENT_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+160;
- int GET_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+161;
- int REPORT_TOP_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+162;
+ int GET_ASSIST_CONTEXT_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+161;
+ int REPORT_ASSIST_CONTEXT_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+162;
int GET_LAUNCHED_FROM_PACKAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+163;
int KILL_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+164;
int SET_USER_IS_MONKEY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+165;
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 8e882df..4b46544 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -132,8 +132,8 @@ public interface IApplicationThread extends IInterface {
void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException;
void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException;
void unstableProviderDied(IBinder provider) throws RemoteException;
- void requestActivityExtras(IBinder activityToken, IBinder requestToken, int requestType)
- throws RemoteException;
+ void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, int requestType,
+ int index) throws RemoteException;
void scheduleTranslucentConversionComplete(IBinder token, boolean timeout)
throws RemoteException;
void setProcessState(int state) throws RemoteException;
@@ -186,7 +186,7 @@ public interface IApplicationThread extends IInterface {
int DUMP_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+44;
int DUMP_DB_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+45;
int UNSTABLE_PROVIDER_DIED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+46;
- int REQUEST_ACTIVITY_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+47;
+ int REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+47;
int SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+48;
int SET_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+49;
}
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index 7dfc589..f9c245e 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -869,7 +869,7 @@ public class SearchManager
intent.setComponent(comp);
if (inclContext) {
IActivityManager am = ActivityManagerNative.getDefault();
- Bundle extras = am.getTopActivityExtras(0);
+ Bundle extras = am.getAssistContextExtras(0);
if (extras != null) {
intent.replaceExtras(extras);
}
diff --git a/core/java/android/app/Service.java b/core/java/android/app/Service.java
index 3967740..7f8ddfd 100644
--- a/core/java/android/app/Service.java
+++ b/core/java/android/app/Service.java
@@ -23,6 +23,7 @@ import android.content.ContextWrapper;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
+import android.os.Bundle;
import android.os.RemoteException;
import android.os.IBinder;
import android.util.Log;
@@ -307,6 +308,18 @@ public abstract class Service extends ContextWrapper implements ComponentCallbac
}
/**
+ * This is called on foreground services when the user is requesting an assist, to build a
+ * full {@link Intent#ACTION_ASSIST} Intent with all of the context of the current
+ * running foreground services. You can override this method to place into the bundle
+ * anything you would like to appear as an item in the
+ * {@link Intent#EXTRA_SERVICES_ASSIST_CONTEXT} part of the assist Intent.
+ * This method will not be called if this service is not in the foreground.
+ * The default implementation does nothing.
+ */
+ public void onProvideAssistData(Bundle data) {
+ }
+
+ /**
* @deprecated Implement {@link #onStartCommand(Intent, int, int)} instead.
*/
@Deprecated