68 lines
No EOL
2.1 KiB
Kotlin
68 lines
No EOL
2.1 KiB
Kotlin
package com.tangem.tap
|
|
|
|
import android.os.Build
|
|
import android.view.MotionEvent
|
|
import androidx.lifecycle.DefaultLifecycleObserver
|
|
import androidx.lifecycle.LifecycleOwner
|
|
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
|
import com.tangem.core.analytics.models.event.TechAnalyticsEvent
|
|
import com.tangem.core.analytics.models.event.TechAnalyticsEvent.WindowObscured.ObscuredState
|
|
import timber.log.Timber
|
|
|
|
internal object WindowObscurationObserver : DefaultLifecycleObserver {
|
|
|
|
private var isWindowPartiallyObscuredAlreadySent: Boolean = false
|
|
private var isWindowFullyObscuredAlreadySent: Boolean = false
|
|
|
|
private var isReadyToProxy = false
|
|
|
|
override fun onResume(owner: LifecycleOwner) {
|
|
super.onResume(owner)
|
|
isReadyToProxy = true
|
|
}
|
|
|
|
override fun onPause(owner: LifecycleOwner) {
|
|
super.onPause(owner)
|
|
isReadyToProxy = false
|
|
}
|
|
|
|
fun dispatchTouchEvent(event: MotionEvent, analyticsEventHandler: AnalyticsEventHandler): Boolean {
|
|
if (!isReadyToProxy) return true
|
|
|
|
val isPartiallyObscured = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
event.flags and MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED != 0
|
|
} else {
|
|
false
|
|
}
|
|
|
|
if (isPartiallyObscured) {
|
|
Timber.d("Window is partially obscured")
|
|
|
|
if (!isWindowPartiallyObscuredAlreadySent) {
|
|
analyticsEventHandler.send(
|
|
event = TechAnalyticsEvent.WindowObscured(state = ObscuredState.PARTIALLY),
|
|
)
|
|
|
|
isWindowPartiallyObscuredAlreadySent = true
|
|
}
|
|
}
|
|
|
|
val isFullyObscured = event.flags and MotionEvent.FLAG_WINDOW_IS_OBSCURED != 0
|
|
|
|
if (isFullyObscured) {
|
|
Timber.d("Window is partially or fully obscured")
|
|
|
|
if (!isWindowFullyObscuredAlreadySent) {
|
|
analyticsEventHandler.send(
|
|
event = TechAnalyticsEvent.WindowObscured(state = ObscuredState.FULLY),
|
|
)
|
|
|
|
isWindowFullyObscuredAlreadySent = true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
} |