Prevent false touch when folding device (1/2)
This CL will add new api to cancel current touch when fold transition
started.
Bug: 203549969
Test: atest inputflinger_tests
Change-Id: Ic62bfc04fc126d9d766cc028c53c6d1f60ff5544
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp
index c9397c3..69d9048 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.cpp
+++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -6299,4 +6299,19 @@
mDispatcher.onWindowInfosChanged(windowInfos, displayInfos);
}
+void InputDispatcher::cancelCurrentTouch() {
+ {
+ std::scoped_lock _l(mLock);
+ ALOGD("Canceling all ongoing pointer gestures on all displays.");
+ CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
+ "cancel current touch");
+ synthesizeCancelationEventsForAllConnectionsLocked(options);
+
+ mTouchStatesByDisplay.clear();
+ mLastHoverWindowHandle.clear();
+ }
+ // Wake up poll loop since there might be work to do.
+ mLooper->wake();
+}
+
} // namespace android::inputdispatcher
diff --git a/services/inputflinger/dispatcher/InputDispatcher.h b/services/inputflinger/dispatcher/InputDispatcher.h
index 8a551cf..e9591e4 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.h
+++ b/services/inputflinger/dispatcher/InputDispatcher.h
@@ -146,6 +146,8 @@
void onWindowInfosChanged(const std::vector<android::gui::WindowInfo>& windowInfos,
const std::vector<android::gui::DisplayInfo>& displayInfos);
+ void cancelCurrentTouch() override;
+
private:
enum class DropReason {
NOT_DROPPED,
diff --git a/services/inputflinger/dispatcher/include/InputDispatcherInterface.h b/services/inputflinger/dispatcher/include/InputDispatcherInterface.h
index 714e7a0..c469ec3 100644
--- a/services/inputflinger/dispatcher/include/InputDispatcherInterface.h
+++ b/services/inputflinger/dispatcher/include/InputDispatcherInterface.h
@@ -211,6 +211,11 @@
* Called when a display has been removed from the system.
*/
virtual void displayRemoved(int32_t displayId) = 0;
+
+ /*
+ * Abort the current touch stream.
+ */
+ virtual void cancelCurrentTouch() = 0;
};
} // namespace android