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

Commit bb01f911 authored by Lucas Silva's avatar Lucas Silva Committed by Automerger Merge Worker
Browse files

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

parents 1be2623b f64a382e
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);