Updated on 2026-08-14
This commit is contained in:
parent
e6655aa40d
commit
e13cce2cf8
3 changed files with 73 additions and 39 deletions
|
|
@ -0,0 +1,68 @@
|
|||
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
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue