blob: 7ffb07aa77d006e8685ceeaeab40489685f74d36 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar.gesture
import android.content.Context
import android.view.GestureDetector
import android.view.InputEvent
import android.view.MotionEvent
import com.android.systemui.dagger.SysUISingleton
import javax.inject.Inject
/**
* A class to detect when a user taps the screen. To be notified when the tap is detected, add a
* callback via [addOnGestureDetectedCallback].
*/
@SysUISingleton
class TapGestureDetector @Inject constructor(
private val context: Context
) : GenericGestureDetector(TapGestureDetector::class.simpleName!!) {
private val gestureListener = object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent): Boolean {
onGestureDetected(e)
return true
}
}
private var gestureDetector: GestureDetector? = null
override fun onInputEvent(ev: InputEvent) {
if (ev !is MotionEvent) {
return
}
// Pass all events to [gestureDetector], which will then notify [gestureListener] when a tap
// is detected.
gestureDetector!!.onTouchEvent(ev)
}
/** Start listening for the tap gesture. */
override fun startGestureListening() {
super.startGestureListening()
gestureDetector = GestureDetector(context, gestureListener)
}
/** Stop listening for the swipe gesture. */
override fun stopGestureListening() {
super.stopGestureListening()
gestureDetector = null
}
}