Skip to content

Commit 9ae6c9b

Browse files
sanjaysargamBrayanDSO
authored andcommitted
feat(gesture-picker): implement shake detection gesture
1 parent 7b8ed69 commit 9ae6c9b

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

AnkiDroid/src/main/java/com/ichi2/ui/GesturePicker.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,21 @@
1717
package com.ichi2.ui
1818

1919
import android.content.Context
20+
import android.hardware.SensorManager
2021
import android.util.AttributeSet
2122
import android.view.LayoutInflater
2223
import android.view.View
2324
import android.widget.AdapterView
2425
import android.widget.ArrayAdapter
2526
import android.widget.Spinner
2627
import androidx.constraintlayout.widget.ConstraintLayout
28+
import androidx.core.content.ContextCompat
2729
import com.ichi2.anki.R
2830
import com.ichi2.anki.cardviewer.Gesture
2931
import com.ichi2.anki.cardviewer.GestureListener
3032
import com.ichi2.anki.dialogs.WarningDisplay
3133
import com.ichi2.utils.UiUtil.setSelectedValue
34+
import com.squareup.seismic.ShakeDetector
3235
import 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

Comments
 (0)