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

Commit fbfc3abf authored by Tiger Huang's avatar Tiger Huang
Browse files

Prevent unnecessary updateRequestedState

If the client didn't change any insets, we don't need to update the
requested state while receiving controls. The requested state at the
server side can still be up-to-date for free.

This CL also sends the requested state to window manager if the local
state is not the same as the dispatched state.

Fix: 155752039
Test: atest InsetsControllerTest
Change-Id: I676a88d3ef823d8717d03e80261e6e7a5f7e8c5f
parent 28382c8f
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -667,7 +667,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
        if (hideTypes[0] != 0) {
            applyAnimation(hideTypes[0], false /* show */, false /* fromIme */);
        }
        if (hasControl) {
        if (hasControl && mRequestedState.getSourcesCount() > 0) {
            // We might have changed our requested visibilities while we don't have the control,
            // so we need to update our requested state once we have control. Otherwise, our
            // requested state at the server side might be incorrect.
@@ -1065,9 +1065,16 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
            if (consumer.getControl() != null) {
                final InsetsSource localSource = mState.getSource(type);
                if (!localSource.equals(mRequestedState.peekSource(type))) {
                    // Our requested state is stale. Update it here and send it to window manager.
                    mRequestedState.addSource(new InsetsSource(localSource));
                    changed = true;
                }
                if (!localSource.equals(mLastDispatchedState.peekSource(type))) {
                    // The server state is not what we expected. This can happen while we don't have
                    // the control. Since we have the control now, we need to send our request again
                    // to modify the server state.
                    changed = true;
                }
            }
        }
        if (!changed) {