diff options
| author | Amith Yamasani <yamasani@google.com> | 2016-05-10 22:29:18 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-05-10 22:29:20 +0000 |
| commit | a66d395490fc0797fb7b24ad8148c510a6e2cff3 (patch) | |
| tree | 7122d317b058079d80fc61e8bc0c1567bbe94236 /core/java/android | |
| parent | a7ad6e912f82124b9a7e6f2d14a2ccbae79d16f2 (diff) | |
| parent | 4f128e4d968b376bb7c3fa209d27b0a30202e604 (diff) | |
Merge "Fix multi-window assiststructure trashing" into nyc-dev
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ActivityManagerNative.java | 6 | ||||
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 23 | ||||
| -rw-r--r-- | core/java/android/app/ApplicationThreadNative.java | 6 | ||||
| -rw-r--r-- | core/java/android/app/IActivityManager.java | 2 | ||||
| -rw-r--r-- | core/java/android/app/IApplicationThread.java | 4 |
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) |
