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

Commit f64a382e authored by Lucas Silva's avatar Lucas Silva Committed by Android (Google) Code Review
Browse files

Merge "Remove event listeners when touch session ends" into udc-dev

parents 886d308f df23b348
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.google.common.util.concurrent.ListenableFuture;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -195,7 +196,14 @@ public class DreamOverlayTouchMonitor {
         * Called by the monitor when this session is removed.
         */
        private void onRemoved() {
            mCallbacks.forEach(callback -> callback.onRemoved());
            mEventListeners.clear();
            mGestureListeners.clear();
            final Iterator<Callback> iter = mCallbacks.iterator();
            while (iter.hasNext()) {
                final Callback callback = iter.next();
                callback.onRemoved();
                iter.remove();
            }
        }

        @Override
+24 −0
Original line number Diff line number Diff line
@@ -268,6 +268,30 @@ public class DreamOverlayTouchMonitorTest extends SysuiTestCase {
        verify(eventListener).onInputEvent(eq(event));
    }

    @Test
    public void testInputEventPropagationAfterRemoval() {
        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);

        final Environment environment = new Environment(Stream.of(touchHandler)
                .collect(Collectors.toCollection(HashSet::new)));

        final InputEvent initialEvent = Mockito.mock(InputEvent.class);
        environment.publishInputEvent(initialEvent);

        // Ensure session started
        final DreamTouchHandler.TouchSession session = captureSession(touchHandler);
        final InputChannelCompat.InputEventListener eventListener =
                registerInputEventListener(session);

        session.pop();
        environment.executeAll();

        final InputEvent event = Mockito.mock(InputEvent.class);
        environment.publishInputEvent(event);

        verify(eventListener, never()).onInputEvent(eq(event));
    }

    @Test
    public void testInputGesturePropagation() {
        final DreamTouchHandler touchHandler = Mockito.mock(DreamTouchHandler.class);