Favor a predefined "click" over system vibration

This commit is contained in:
Abandoned Cart 2022-11-25 19:43:51 -05:00 committed by Billy Laws
parent cfd3bfecba
commit b08fcd7027
3 changed files with 10 additions and 12 deletions

View File

@ -91,7 +91,7 @@ class ControllerActivity : AppCompatActivity() {
adapter.notifyItemChanged(position)
})
items.add(ControllerCheckBoxViewItem(getString(R.string.osc_feedback), "", preferenceSettings.onScreenControlFeedback) { item, position ->
items.add(ControllerCheckBoxViewItem(getString(R.string.osc_feedback), getString(R.string.osc_feedback_description), preferenceSettings.onScreenControlFeedback) { item, position ->
preferenceSettings.onScreenControlFeedback = item.checked
adapter.notifyItemChanged(position)
})

View File

@ -66,6 +66,13 @@ class OnScreenControllerView @JvmOverloads constructor(context : Context, attrs
field = value
(controls.circularButtons + controls.rectangularButtons + controls.triggerButtons).forEach { it.hapticFeedback = hapticFeedback }
}
private val vibrator: Vibrator =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
(context.getSystemService(VIBRATOR_MANAGER_SERVICE) as VibratorManager).defaultVibrator
} else {
@Suppress("DEPRECATION") (context.getSystemService(VIBRATOR_SERVICE) as Vibrator)
}
private val effectClick = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK)
override fun onDraw(canvas : Canvas) {
super.onDraw(canvas)
@ -84,16 +91,6 @@ class OnScreenControllerView @JvmOverloads constructor(context : Context, attrs
}
}
private val vibrationEffect = VibrationEffect.createOneShot(20, VibrationEffect.DEFAULT_AMPLITUDE)
private val vibrate = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
(context.getSystemService(VIBRATOR_MANAGER_SERVICE) as VibratorManager).defaultVibrator.vibrate(vibrationEffect)
} else {
@Suppress("DEPRECATION")
(context.getSystemService(VIBRATOR_SERVICE) as Vibrator).vibrate(vibrationEffect)
}
}
private val playingTouchHandler = OnTouchListener { _, event ->
var handled = false
val actionIndex = event.actionIndex
@ -123,7 +120,7 @@ class OnScreenControllerView @JvmOverloads constructor(context : Context, attrs
if (button.config.enabled && button.isTouched(x, y)) {
button.touchPointerId = pointerId
button.onFingerDown(x, y)
if (hapticFeedback) vibrate()
if (hapticFeedback) vibrator.vibrate(effectClick)
performClick()
onButtonStateChangedListener?.invoke(button.buttonId, ButtonState.Pressed)
handled = true

View File

@ -111,6 +111,7 @@
<string name="osc_not_shown">On-Screen Controls won\'t be shown</string>
<string name="osc_shown">On-Screen Controls will be shown</string>
<string name="osc_feedback">Enable Haptic Feedback</string>
<string name="osc_feedback_description">Excludes joysticks and hardware controls</string>
<string name="osc_edit">Edit On-Screen Controls layout</string>
<string name="setup_guide">Setup Guide</string>
<string name="setup_guide_description">Sequentially map every stick and button</string>