summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2016-05-10 22:29:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-05-10 22:29:20 +0000
commita66d395490fc0797fb7b24ad8148c510a6e2cff3 (patch)
tree7122d317b058079d80fc61e8bc0c1567bbe94236 /core/java/android
parenta7ad6e912f82124b9a7e6f2d14a2ccbae79d16f2 (diff)
parent4f128e4d968b376bb7c3fa209d27b0a30202e604 (diff)
Merge "Fix multi-window assiststructure trashing" into nyc-dev
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/ActivityManagerNative.java6
-rw-r--r--core/java/android/app/ActivityThread.java23
-rw-r--r--core/java/android/app/ApplicationThreadNative.java6
-rw-r--r--core/java/android/app/IActivityManager.java2
-rw-r--r--core/java/android/app/IApplicationThread.java4
5 files changed, 27 insertions, 14 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 6b628370ba28..a4f404f18ed6 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2418,8 +2418,9 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
Bundle receiverExtras = data.readBundle();
IBinder activityToken = data.readStrongBinder();
boolean focused = data.readInt() == 1;
+ boolean newSessionId = data.readInt() == 1;
boolean res = requestAssistContextExtras(requestType, receiver, receiverExtras,
- activityToken, focused);
+ activityToken, focused, newSessionId);
reply.writeNoException();
reply.writeInt(res ? 1 : 0);
return true;
@@ -6104,7 +6105,7 @@ class ActivityManagerProxy implements IActivityManager
public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
Bundle receiverExtras,
- IBinder activityToken, boolean focused) throws RemoteException {
+ IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
@@ -6113,6 +6114,7 @@ class ActivityManagerProxy implements IActivityManager
data.writeBundle(receiverExtras);
data.writeStrongBinder(activityToken);
data.writeInt(focused ? 1 : 0);
+ data.writeInt(newSessionId ? 1 : 0);
mRemote.transact(REQUEST_ASSIST_CONTEXT_EXTRAS_TRANSACTION, data, reply, 0);
reply.readException();
boolean res = reply.readInt() != 0;
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 7105e4df7396..061d924fa529 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -206,7 +206,8 @@ public final class ActivityThread {
ActivityClientRecord mNewActivities = null;
// Number of activities that are currently visible on-screen.
int mNumVisibleActivities = 0;
- WeakReference<AssistStructure> mLastAssistStructure;
+ ArrayList<WeakReference<AssistStructure>> mLastAssistStructures = new ArrayList<>();
+ private int mLastSessionId;
final ArrayMap<IBinder, Service> mServices = new ArrayMap<>();
AppBindData mBoundApplication;
Profiler mProfiler;
@@ -622,6 +623,7 @@ public final class ActivityThread {
IBinder activityToken;
IBinder requestToken;
int requestType;
+ int sessionId;
}
static final class ActivityConfigChangeData {
@@ -1183,11 +1185,12 @@ public final class ActivityThread {
@Override
public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken,
- int requestType) {
+ int requestType, int sessionId) {
RequestAssistContextExtras cmd = new RequestAssistContextExtras();
cmd.activityToken = activityToken;
cmd.requestToken = requestToken;
cmd.requestType = requestType;
+ cmd.sessionId = sessionId;
sendMessage(H.REQUEST_ASSIST_CONTEXT_EXTRAS, cmd);
}
@@ -1804,6 +1807,7 @@ public final class ActivityThread {
}
private Configuration mMainThreadConfig = new Configuration();
+
Configuration applyConfigCompatMainThread(int displayDensity, Configuration config,
CompatibilityInfo compat) {
if (config == null) {
@@ -2785,10 +2789,15 @@ public final class ActivityThread {
}
public void handleRequestAssistContextExtras(RequestAssistContextExtras cmd) {
- if (mLastAssistStructure != null) {
- AssistStructure structure = mLastAssistStructure.get();
- if (structure != null) {
- structure.clearSendChannel();
+ if (mLastSessionId != cmd.sessionId) {
+ // Clear the existing structures
+ mLastSessionId = cmd.sessionId;
+ for (int i = mLastAssistStructures.size() - 1; i >= 0; i--) {
+ AssistStructure structure = mLastAssistStructures.get(i).get();
+ if (structure != null) {
+ structure.clearSendChannel();
+ }
+ mLastAssistStructures.remove(i);
}
}
Bundle data = new Bundle();
@@ -2820,7 +2829,7 @@ public final class ActivityThread {
if (structure == null) {
structure = new AssistStructure();
}
- mLastAssistStructure = new WeakReference<>(structure);
+ mLastAssistStructures.add(new WeakReference<>(structure));
IActivityManager mgr = ActivityManagerNative.getDefault();
try {
mgr.reportAssistContextExtras(cmd.requestToken, data, structure, content, referrer);
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index ea86dd0558d6..d6da3f44f4a0 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -621,7 +621,8 @@ public abstract class ApplicationThreadNative extends Binder
IBinder activityToken = data.readStrongBinder();
IBinder requestToken = data.readStrongBinder();
int requestType = data.readInt();
- requestAssistContextExtras(activityToken, requestToken, requestType);
+ int sessionId = data.readInt();
+ requestAssistContextExtras(activityToken, requestToken, requestType, sessionId);
reply.writeNoException();
return true;
}
@@ -1377,12 +1378,13 @@ class ApplicationThreadProxy implements IApplicationThread {
@Override
public void requestAssistContextExtras(IBinder activityToken, IBinder requestToken,
- int requestType) throws RemoteException {
+ int requestType, int sessionId) throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeStrongBinder(activityToken);
data.writeStrongBinder(requestToken);
data.writeInt(requestType);
+ data.writeInt(sessionId);
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 849fcec5a01a..2fcad0d3ced0 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -524,7 +524,7 @@ public interface IActivityManager extends IInterface {
public boolean requestAssistContextExtras(int requestType, IResultReceiver receiver,
Bundle receiverExtras,
- IBinder activityToken, boolean focused) throws RemoteException;
+ IBinder activityToken, boolean focused, boolean newSessionId) throws RemoteException;
public void reportAssistContextExtras(IBinder token, Bundle extras,
AssistStructure structure, AssistContent content, Uri referrer) throws RemoteException;
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index a3b263876725..559f69fc2aec 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -143,8 +143,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 requestAssistContextExtras(IBinder activityToken, IBinder requestToken, int requestType)
- throws RemoteException;
+ void requestAssistContextExtras(IBinder activityToken, IBinder requestToken, int requestType,
+ int sessionId) throws RemoteException;
void scheduleTranslucentConversionComplete(IBinder token, boolean timeout)
throws RemoteException;
void scheduleOnNewActivityOptions(IBinder token, ActivityOptions options)