diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index ff80d5bd3f64ef993183bfe7aee146b1654b9fc2..068173acbc37499b645d800a91d80f600af47056 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10364,6 +10364,12 @@ public final class Settings { */ public static final String DOUBLE_TAP_SLEEP_GESTURE = "double_tap_sleep_gesture"; + /** + * Whether key swap is enabled on supported hardware + * @hide + */ + public static final String SWAP_CAPACITIVE_KEYS = "swap_capacitive_keys"; + /** * These entries are considered common between the personal and the managed profile, * since the managed profile doesn't get to change them. diff --git a/core/java/com/android/internal/libremobileos/hardware/LineageHardwareManager.java b/core/java/com/android/internal/libremobileos/hardware/LineageHardwareManager.java index f0e54639f223a46ef795472df5212aeeddfe5f17..190c5cd29ecdd9b40480eb0c41329d7d12d87c82 100644 --- a/core/java/com/android/internal/libremobileos/hardware/LineageHardwareManager.java +++ b/core/java/com/android/internal/libremobileos/hardware/LineageHardwareManager.java @@ -30,6 +30,7 @@ import com.android.internal.libremobileos.hardware.HIDLHelper; import vendor.lineage.touch.V1_0.IGloveMode; import vendor.lineage.touch.V1_0.IKeyDisabler; +import vendor.lineage.touch.V1_0.IKeySwapper; import vendor.lineage.touch.V1_0.IStylusMode; import vendor.lineage.touch.V1_0.ITouchscreenGesture; @@ -68,6 +69,12 @@ public final class LineageHardwareManager { @VisibleForTesting public static final int FEATURE_KEY_DISABLE = 0x20; + /** + * Hardware navigation key swapping + */ + @VisibleForTesting + public static final int FEATURE_KEY_SWAP = 0x40; + /** * Touchscreen hovering */ @@ -83,6 +90,7 @@ public final class LineageHardwareManager { private static final List<Integer> BOOLEAN_FEATURES = Arrays.asList( FEATURE_HIGH_TOUCH_SENSITIVITY, FEATURE_KEY_DISABLE, + FEATURE_KEY_SWAP, FEATURE_TOUCH_HOVERING ); @@ -173,6 +181,8 @@ public final class LineageHardwareManager { return IGloveMode.getService(true); case FEATURE_KEY_DISABLE: return IKeyDisabler.getService(true); + case FEATURE_KEY_SWAP: + return IKeySwapper.getService(true); case FEATURE_TOUCH_HOVERING: return IStylusMode.getService(true); case FEATURE_TOUCHSCREEN_GESTURES: @@ -227,6 +237,9 @@ public final class LineageHardwareManager { case FEATURE_KEY_DISABLE: IKeyDisabler keyDisabler = (IKeyDisabler) obj; return keyDisabler.isEnabled(); + case FEATURE_KEY_SWAP: + IKeySwapper keySwapper = (IKeySwapper) obj; + return keySwapper.isEnabled(); case FEATURE_TOUCH_HOVERING: IStylusMode stylusMode = (IStylusMode) obj; return stylusMode.isEnabled(); @@ -264,6 +277,9 @@ public final class LineageHardwareManager { case FEATURE_KEY_DISABLE: IKeyDisabler keyDisabler = (IKeyDisabler) obj; return keyDisabler.setEnabled(enable); + case FEATURE_KEY_SWAP: + IKeySwapper keySwapper = (IKeySwapper) obj; + return keySwapper.setEnabled(enable); case FEATURE_TOUCH_HOVERING: IStylusMode stylusMode = (IStylusMode) obj; return stylusMode.setEnabled(enable); diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index e5eb369c752a1eac217709a3fe31eee5beba4056..df96b4eedade2711e97d87da12678ab682c2fcb5 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -755,6 +755,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { resolver.registerContentObserver(Settings.Global.getUriFor( Settings.Global.POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE), false, this, UserHandle.USER_ALL); + if (mLineageHardware.isSupported(LineageHardwareManager.FEATURE_KEY_SWAP)) { + resolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.SWAP_CAPACITIVE_KEYS), false, this, + UserHandle.USER_ALL); + } updateSettings(); } @@ -2195,6 +2200,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (updateRotation) { updateRotation(true); } + updateKeySwapper(); + } + + private void updateKeySwapper(){ + if (!mLineageHardware.isSupported(LineageHardwareManager.FEATURE_KEY_SWAP)) { + return; + } + final boolean enabled = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.SWAP_CAPACITIVE_KEYS, 0) == 1; + mLineageHardware.set(LineageHardwareManager.FEATURE_KEY_SWAP, enabled); } private void updateWakeGestureListenerLp() {