Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a66d3954 authored by Amith Yamasani's avatar Amith Yamasani Committed by Android (Google) Code Review
Browse files

Merge "Fix multi-window assiststructure trashing" into nyc-dev

parents a7ad6e91 4f128e4d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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;
+16 −7
Original line number Diff line number Diff line
@@ -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,11 +2789,16 @@ public final class ActivityThread {
    }

    public void handleRequestAssistContextExtras(RequestAssistContextExtras cmd) {
        if (mLastAssistStructure != null) {
            AssistStructure structure = mLastAssistStructure.get();
        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();
        AssistStructure structure = null;
@@ -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);
+4 −2
Original line number Diff line number Diff line
@@ -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();
+1 −1
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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)
Loading