Hide pointer while typing on a physical keyboard

In this change we will hide the mouse pointer  while user is typing on a
physical keyboard for a better typing experiance.

Test: Manual test and atest inputflinger_tests
Bug: 275616121
Change-Id: I68192af2769ff0795664ecd2c8d737d69e97e73b
diff --git a/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp b/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp
index 7388752..d51ec45 100644
--- a/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp
+++ b/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp
@@ -242,6 +242,7 @@
             keyDown.downTime = when;
             mKeyDowns.push_back(keyDown);
         }
+        tryHideCursorOnKeyDown();
     } else {
         // Remove key down.
         if (keyDownIndex) {
@@ -419,4 +420,13 @@
     return out;
 }
 
+void KeyboardInputMapper::tryHideCursorOnKeyDown() {
+    // Hide the cursor while user is inputting text, ignoring meta keys or multiple simultaneous
+    // down keys as they are likely to be shortcuts
+    const bool shouldHideCursor = mKeyDowns.size() == 1 && !isMetaKey(mKeyDowns[0].keyCode);
+    if (shouldHideCursor && getContext()->getPolicy()->isInputMethodConnectionActive()) {
+        getContext()->fadePointer();
+    }
+}
+
 } // namespace android