Add associated function to physical keyboard
The function keys (HOME/BACK/DPAD...) may not always be virtual keys,
so we need provide a static input mapping mechanism to the physical
keyboard to make sure key events can dispatch to the corresponding
display.
- Find the associated viewport for keyboard when display info changed
and has an associated display port specified.
- Should disable the input device when an associated port specified but
no display viewport found.
- Changed getAssociatedDisplay -> getAssociatedDisplayId.
- Add test cases to test input device and keyboard associated mapping.
Bug: 137693244
Test: atest -a libinput_tests inputflinger_tests
Change-Id: If218f55645a78a4b50cec92b35b0dbae641dd1a1
diff --git a/services/inputflinger/InputReader.h b/services/inputflinger/InputReader.h
index b7f94c1..0666ca5 100644
--- a/services/inputflinger/InputReader.h
+++ b/services/inputflinger/InputReader.h
@@ -265,7 +265,9 @@
inline std::optional<uint8_t> getAssociatedDisplayPort() const {
return mAssociatedDisplayPort;
}
-
+ inline std::optional<DisplayViewport> getAssociatedViewport() const {
+ return mAssociatedViewport;
+ }
inline void setMic(bool hasMic) { mHasMic = hasMic; }
inline bool hasMic() const { return mHasMic; }
@@ -324,7 +326,8 @@
return value;
}
- std::optional<int32_t> getAssociatedDisplay();
+ std::optional<int32_t> getAssociatedDisplayId();
+
private:
InputReaderContext* mContext;
int32_t mId;
@@ -339,6 +342,7 @@
uint32_t mSources;
bool mIsExternal;
std::optional<uint8_t> mAssociatedDisplayPort;
+ std::optional<DisplayViewport> mAssociatedViewport;
bool mHasMic;
bool mDropUntilNextSync;
@@ -718,9 +722,8 @@
virtual void updateExternalStylusState(const StylusState& state);
virtual void fadePointer();
- virtual std::optional<int32_t> getAssociatedDisplay() {
- return std::nullopt;
- }
+ virtual std::optional<int32_t> getAssociatedDisplayId() { return std::nullopt; }
+
protected:
InputDevice* mDevice;
InputReaderContext* mContext;
@@ -802,6 +805,7 @@
virtual int32_t getMetaState();
virtual void updateMetaState(int32_t keyCode);
+ virtual std::optional<int32_t> getAssociatedDisplayId();
private:
// The current viewport.
@@ -855,6 +859,8 @@
void updateLedState(bool reset);
void updateLedStateForModifier(LedState& ledState, int32_t led,
int32_t modifier, bool reset);
+ std::optional<DisplayViewport> findViewport(nsecs_t when,
+ const InputReaderConfiguration* config);
};
@@ -874,7 +880,8 @@
virtual void fadePointer();
- virtual std::optional<int32_t> getAssociatedDisplay();
+ virtual std::optional<int32_t> getAssociatedDisplayId();
+
private:
// Amount that trackball needs to move in order to generate a key event.
static const int32_t TRACKBALL_MOVEMENT_THRESHOLD = 6;
@@ -968,7 +975,8 @@
virtual void cancelTouch(nsecs_t when);
virtual void timeoutExpired(nsecs_t when);
virtual void updateExternalStylusState(const StylusState& state);
- virtual std::optional<int32_t> getAssociatedDisplay();
+ virtual std::optional<int32_t> getAssociatedDisplayId();
+
protected:
CursorButtonAccumulator mCursorButtonAccumulator;
CursorScrollAccumulator mCursorScrollAccumulator;