Merge "Remove event listeners when touch session ends" into udc-dev
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user