tangem-app-android-audited/app/src/main/java/com/tangem/tap/WindowObscurationObserver.kt
2024-12-23 13:54:35 +04:00

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
}
}