blob: ea066471a802aa67e917515ec6d35b10df332dbd [file] [log] [blame]
package com.android.systemui.statusbar.gesture
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.InputEvent
import android.view.MotionEvent
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidTestingRunner::class)
@TestableLooper.RunWithLooper
class GenericGestureDetectorTest : SysuiTestCase() {
private lateinit var gestureDetector: TestGestureDetector
@Before
fun setUp() {
gestureDetector = TestGestureDetector()
}
@Test
fun noCallbacksRegistered_notGestureListening() {
assertThat(gestureDetector.isGestureListening).isFalse()
}
@Test
fun callbackRegistered_isGestureListening() {
gestureDetector.addOnGestureDetectedCallback("tag"){}
assertThat(gestureDetector.isGestureListening).isTrue()
}
@Test
fun multipleCallbacksRegistered_isGestureListening() {
gestureDetector.addOnGestureDetectedCallback("tag"){}
gestureDetector.addOnGestureDetectedCallback("tag2"){}
assertThat(gestureDetector.isGestureListening).isTrue()
}
@Test
fun allCallbacksUnregistered_notGestureListening() {
gestureDetector.addOnGestureDetectedCallback("tag"){}
gestureDetector.addOnGestureDetectedCallback("tag2"){}
gestureDetector.removeOnGestureDetectedCallback("tag")
gestureDetector.removeOnGestureDetectedCallback("tag2")
assertThat(gestureDetector.isGestureListening).isFalse()
}
@Test
fun someButNotAllCallbacksUnregistered_isGestureListening() {
gestureDetector.addOnGestureDetectedCallback("tag"){}
gestureDetector.addOnGestureDetectedCallback("tag2"){}
gestureDetector.removeOnGestureDetectedCallback("tag2")
assertThat(gestureDetector.isGestureListening).isTrue()
}
@Test
fun onInputEvent_meetsGestureCriteria_allCallbacksNotified() {
var callbackNotified = false
gestureDetector.addOnGestureDetectedCallback("tag"){
callbackNotified = true
}
gestureDetector.onInputEvent(
MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, CORRECT_X, 0f, 0)
)
assertThat(callbackNotified).isTrue()
}
@Test
fun onInputEvent_doesNotMeetGestureCriteria_callbackNotNotified() {
var callbackNotified = false
gestureDetector.addOnGestureDetectedCallback("tag"){
callbackNotified = true
}
gestureDetector.onInputEvent(
MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, CORRECT_X - 5, 0f, 0)
)
assertThat(callbackNotified).isFalse()
}
@Test
fun callbackUnregisteredThenGestureDetected_oldCallbackNotNotified() {
var oldCallbackNotified = false
gestureDetector.addOnGestureDetectedCallback("tag"){
oldCallbackNotified = true
}
gestureDetector.addOnGestureDetectedCallback("tag2"){}
gestureDetector.removeOnGestureDetectedCallback("tag")
gestureDetector.onInputEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, CORRECT_X, 0f, 0))
assertThat(oldCallbackNotified).isFalse()
}
inner class TestGestureDetector : GenericGestureDetector("fakeTag") {
var isGestureListening = false
override fun onInputEvent(ev: InputEvent) {
if (ev is MotionEvent && ev.x == CORRECT_X) {
onGestureDetected(ev)
}
}
override fun startGestureListening() {
super.startGestureListening()
isGestureListening = true
}
override fun stopGestureListening() {
super.stopGestureListening()
isGestureListening = false
}
}
}
private const val CORRECT_X = 1234f