diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk
index 970125b..a952f5f 100644
--- a/BoardConfigCommon.mk
+++ b/BoardConfigCommon.mk
@@ -197,6 +197,9 @@ BOARD_PLAT_PRIVATE_SEPOLICY_DIR += $(COMMON_PATH)/sepolicy/private
BOARD_PLAT_PUBLIC_SEPOLICY_DIR += $(COMMON_PATH)/sepolicy/public
BOARD_SEPOLICY_DIRS += $(COMMON_PATH)/sepolicy/vendor
+# Side FP key for InputDispatcher to skip
+TARGET_INPUTDISPATCHER_SKIP_EVENT_KEY := 96
+
# Verified Boot
BOARD_AVB_ENABLE := true
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --set_hashtree_disabled_flag
diff --git a/common.mk b/common.mk
index 3036e14..a8703e3 100644
--- a/common.mk
+++ b/common.mk
@@ -230,6 +230,10 @@ PRODUCT_PACKAGES += \
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.consumerir.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.consumerir.xml
+# KeyHandler
+PRODUCT_PACKAGES += \
+ KeyHandler
+
# Light
PRODUCT_PACKAGES += \
android.hardware.light@2.0-service.xiaomi_sm6250
diff --git a/keyhandler/Android.mk b/keyhandler/Android.mk
new file mode 100644
index 0000000..f01a9bd
--- /dev/null
+++ b/keyhandler/Android.mk
@@ -0,0 +1,21 @@
+#
+# Copyright (C) 2021 The LineageOS Project
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_PACKAGE_NAME := KeyHandler
+
+LOCAL_CERTIFICATE := platform
+LOCAL_PRIVATE_PLATFORM_APIS := true
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+
+include $(BUILD_PACKAGE)
diff --git a/keyhandler/AndroidManifest.xml b/keyhandler/AndroidManifest.xml
new file mode 100644
index 0000000..3cb928d
--- /dev/null
+++ b/keyhandler/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/keyhandler/proguard.flags b/keyhandler/proguard.flags
new file mode 100644
index 0000000..f3aa10b
--- /dev/null
+++ b/keyhandler/proguard.flags
@@ -0,0 +1,4 @@
+# Keep keyhandler constructor
+-keep public class * implements com.android.internal.os.DeviceKeyHandler {
+ public (android.content.Context);
+}
diff --git a/keyhandler/src/org/lineageos/keyhandler/KeyHandler.java b/keyhandler/src/org/lineageos/keyhandler/KeyHandler.java
new file mode 100644
index 0000000..691a0cd
--- /dev/null
+++ b/keyhandler/src/org/lineageos/keyhandler/KeyHandler.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package org.lineageos.keyhandler;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import com.android.internal.os.DeviceKeyHandler;
+
+public class KeyHandler implements DeviceKeyHandler {
+ private static final String TAG = "KeyHandler";
+ private static final int KEYCODE_SIDE_FP = 96;
+
+ public KeyHandler(Context context) {
+ Log.i(TAG, "KeyHandler constructor called");
+ }
+
+ public KeyEvent handleKeyEvent(KeyEvent event) {
+ int scanCode = event.getScanCode();
+ Log.i(TAG, "handleKeyEvent=" + scanCode);
+ switch (scanCode) {
+ case KEYCODE_SIDE_FP:
+ return null;
+ default:
+ return event;
+ }
+ }
+}