1717package com.ichi2.ui
1818
1919import android.content.Context
20+ import android.hardware.SensorManager
2021import android.util.AttributeSet
2122import android.view.LayoutInflater
2223import android.view.View
2324import android.widget.AdapterView
2425import android.widget.ArrayAdapter
2526import android.widget.Spinner
2627import androidx.constraintlayout.widget.ConstraintLayout
28+ import androidx.core.content.ContextCompat
2729import com.ichi2.anki.R
2830import com.ichi2.anki.cardviewer.Gesture
2931import com.ichi2.anki.cardviewer.GestureListener
3032import com.ichi2.anki.dialogs.WarningDisplay
3133import com.ichi2.utils.UiUtil.setSelectedValue
34+ import com.squareup.seismic.ShakeDetector
3235import timber.log.Timber
3336
3437// This class exists as elements resized when adding in the spinner to GestureDisplay.kt
@@ -44,12 +47,16 @@ class GesturePicker(
4447 attributeSet : AttributeSet ? = null ,
4548 defStyleAttr : Int = 0 ,
4649) : ConstraintLayout(ctx, attributeSet, defStyleAttr),
47- WarningDisplay {
50+ WarningDisplay ,
51+ ShakeDetector .Listener {
4852 private val gestureSpinner: Spinner
4953 private val gestureDisplay: GestureDisplay
5054 override val warningTextView: FixedTextView
5155
5256 private var onGestureListener: GestureListener ? = null
57+ private var shakeDetector: ShakeDetector ? = null
58+ private val sensorManager get() = ContextCompat .getSystemService(context, SensorManager ::class .java)
59+ private var shakeEnabled = true
5360
5461 init {
5562 val inflater = LayoutInflater .from(ctx)
@@ -121,4 +128,26 @@ class GesturePicker(
121128 override fun onNothingSelected (parent : AdapterView <* >? ) {
122129 }
123130 }
131+
132+ override fun onAttachedToWindow () {
133+ super .onAttachedToWindow()
134+ startShakeDetector()
135+ }
136+
137+ override fun onDetachedFromWindow () {
138+ super .onDetachedFromWindow()
139+ shakeDetector?.stop()
140+ }
141+
142+ private fun startShakeDetector () {
143+ shakeDetector =
144+ ShakeDetector (this ).also {
145+ it.start(sensorManager, SensorManager .SENSOR_DELAY_UI )
146+ }
147+ }
148+
149+ override fun hearShake () {
150+ Timber .d(" Shake detected in GesturePicker" )
151+ onGesture(Gesture .SHAKE )
152+ }
124153}
0 commit comments