From 3f3c736f4b09c1ce84caa63e3829443e707a88f1 Mon Sep 17 00:00:00 2001 From: Sebastiano Barezzi Date: Thu, 5 Sep 2024 15:49:10 +0200 Subject: [PATCH] Aperture: SettingsActivity: Only two-way gestures can invert buttons Change-Id: I05b31ccf1a458d1051b09d51fd6f34c8e7c349ab --- .../lineageos/aperture/SettingsActivity.kt | 26 +++++++++++++++++++ .../aperture/ext/SharedPreferences.kt | 12 ++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/lineageos/aperture/SettingsActivity.kt b/app/src/main/java/org/lineageos/aperture/SettingsActivity.kt index 1f658d8a..3fcb96e6 100644 --- a/app/src/main/java/org/lineageos/aperture/SettingsActivity.kt +++ b/app/src/main/java/org/lineageos/aperture/SettingsActivity.kt @@ -7,6 +7,7 @@ package org.lineageos.aperture import android.hardware.input.InputManager import android.os.Bundle +import android.util.Log import android.view.KeyCharacterMap import android.view.LayoutInflater import android.view.MenuItem @@ -32,6 +33,7 @@ import com.google.android.material.appbar.AppBarLayout import com.google.android.material.appbar.MaterialToolbar import org.lineageos.aperture.ext.gestureActionToString import org.lineageos.aperture.ext.setOffset +import org.lineageos.aperture.ext.stringToGestureAction import org.lineageos.aperture.models.HardwareKey import org.lineageos.aperture.utils.CameraSoundsUtils import org.lineageos.aperture.utils.PermissionsUtils @@ -276,6 +278,26 @@ class SettingsActivity : AppCompatActivity(R.layout.activity_settings) { keyCategory.addPreference(actionPreference) keyCategory.addPreference(invertPreference) + + actionPreference.setOnPreferenceChangeListener { _, newValue -> + val value = newValue as String + val gestureAction = stringToGestureAction(value) ?: run { + Log.wtf(LOG_TAG, "Got invalid gesture action $value") + null + } + + val enableInvert = gestureAction?.isTwoWayAction ?: true + + invertPreference.isEnabled = enableInvert + if (!enableInvert) { + invertPreference.isChecked = false + } + + true + } + actionPreference.onPreferenceChangeListener!!.onPreferenceChange( + actionPreference, actionPreference.value + ) } } @@ -340,4 +362,8 @@ class SettingsActivity : AppCompatActivity(R.layout.activity_settings) { } class ProcessingSettingsFragment : SettingsFragment(R.xml.processing_preferences) + + companion object { + private val LOG_TAG = SettingsActivity::class.simpleName!! + } } diff --git a/app/src/main/java/org/lineageos/aperture/ext/SharedPreferences.kt b/app/src/main/java/org/lineageos/aperture/ext/SharedPreferences.kt index 2961b749..40800aea 100644 --- a/app/src/main/java/org/lineageos/aperture/ext/SharedPreferences.kt +++ b/app/src/main/java/org/lineageos/aperture/ext/SharedPreferences.kt @@ -465,18 +465,22 @@ internal val SharedPreferences.videoMirrorMode: VideoMirrorMode } // Hardware key preferences -internal fun SharedPreferences.getHardwareKeyAction( - hardwareKey: HardwareKey -) = when (getString("${hardwareKey.sharedPreferencesKeyPrefix}_action", null)) { +internal fun stringToGestureAction(string: String?) = when (string) { "shutter" -> GestureAction.SHUTTER "focus" -> GestureAction.FOCUS "mic_mute" -> GestureAction.MIC_MUTE "zoom" -> GestureAction.ZOOM "volume", "default" -> GestureAction.DEFAULT // volume for compat "nothing" -> GestureAction.NOTHING - else -> hardwareKey.defaultAction + else -> null } +internal fun SharedPreferences.getHardwareKeyAction( + hardwareKey: HardwareKey +) = stringToGestureAction( + getString("${hardwareKey.sharedPreferencesKeyPrefix}_action", null) +) ?: hardwareKey.defaultAction + internal fun SharedPreferences.getHardwareKeyInvert( hardwareKey: HardwareKey ) = hardwareKey.isTwoWayKey && getBoolean(