Skip to content

Commit

Permalink
Refactor Input pref fragment
Browse files Browse the repository at this point in the history
Streamlined tests for preference states.
  • Loading branch information
gujjwal00 committed Jan 29, 2025
1 parent 85f5b2f commit 20b3a8e
Showing 1 changed file with 36 additions and 19 deletions.
55 changes: 36 additions & 19 deletions app/src/main/java/com/gaurav/avnc/ui/prefs/PrefsActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -97,42 +97,59 @@ class PrefsActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreference
}

@Keep class Input : PrefFragment(R.xml.pref_input) {
private var invertScrollingUpdater: OnSharedPreferenceChangeListener? = null
private val visibilityTests = mutableMapOf<Preference, (Map<String, Any?>) -> Boolean>()
private val enablementTests = mutableMapOf<Preference, (Map<String, Any?>) -> Boolean>()
private val prefChangeListener = OnSharedPreferenceChangeListener { _, _ -> applyTests() }

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener(prefChangeListener)

val canChangePtrIcon = Build.VERSION.SDK_INT >= 24

if (!canChangePtrIcon) {
findPreference<SwitchPreference>("hide_local_cursor")!!.apply {
isEnabled = false
summary = getString(R.string.msg_ptr_hiding_not_supported)
}
}

val style = findPreference<ListPreferenceEx>("gesture_style")!!
val swipe1 = findPreference<ListPreferenceEx>("gesture_swipe1")!!
val longPressSwipe = findPreference<ListPreferenceEx>("gesture_long_press_swipe")!!

swipe1.disabledStateSummary = getString(R.string.pref_gesture_action_move_pointer)
longPressSwipe.helpMessage = getText(R.string.msg_drag_gesture_help)

swipe1.isEnabled = style.value != "touchpad"
style.setOnPreferenceChangeListener { _, value -> swipe1.isEnabled = value != "touchpad"; true }

style.helpMessage = getText(R.string.msg_gesture_style_help)
findPreference<ListPreferenceEx>("gesture_style")!!.apply {
helpMessage = getText(R.string.msg_gesture_style_help)
}
findPreference<ListPreferenceEx>("gesture_swipe1")!!.apply {
enableIf { it["gesture_style"] != "touchpad" }
disabledStateSummary = getString(R.string.pref_gesture_action_move_pointer)
}
findPreference<ListPreferenceEx>("gesture_long_press_swipe")!!.apply {
helpMessage = getText(R.string.msg_drag_gesture_help)
}

// To reduce clutter & avoid 'UI overload', pref to invert vertical scrolling is
// only visible when 'Scroll remote content' option is used.
invertScrollingUpdater = OnSharedPreferenceChangeListener { prefs, _ ->
findPreference<SwitchPreference>("invert_vertical_scrolling")!!.apply {
isVisible = prefs.all.values.contains("remote-scroll")
}
findPreference<SwitchPreference>("invert_vertical_scrolling")!!.apply {
showIf { it.values.contains("remote-scroll") }
}
invertScrollingUpdater?.onSharedPreferenceChanged(swipe1.sharedPreferences, null) //Initial update
swipe1.sharedPreferences?.registerOnSharedPreferenceChangeListener(invertScrollingUpdater)
}

override fun onDestroy() {
super.onDestroy()
preferenceManager.sharedPreferences?.unregisterOnSharedPreferenceChangeListener(prefChangeListener)
}

private fun Preference.enableIf(test: (Map<String, Any?>) -> Boolean) {
enablementTests += this to test
applyTests()
}

private fun Preference.showIf(test: (Map<String, Any?>) -> Boolean) {
visibilityTests += this to test
applyTests()
}

private fun applyTests() {
val prefs = preferenceManager.sharedPreferences?.all ?: return
visibilityTests.forEach { it.key.isVisible = it.value(prefs) }
enablementTests.forEach { it.key.isEnabled = it.value(prefs) }
}
}

Expand Down

0 comments on commit 20b3a8e

Please sign in to comment.