diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8981d0a0b1..fbb777f36c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index e0a2bf62d7..469ab5c092 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -32,6 +32,8 @@ import com.google.android.material.snackbar.Snackbar import com.tangem.common.routing.AppRoute import com.tangem.common.routing.entity.SerializableIntent 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 com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.di.RootAppComponentContext import com.tangem.core.deeplink.DeepLinksRegistry @@ -222,6 +224,9 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac private val onActivityResultCallbacks = mutableListOf() + private var isWindowPartiallyObscuredAlreadySent: Boolean = false + private var isWindowFullyObscuredAlreadySent: Boolean = false + override fun onCreate(savedInstanceState: Bundle?) { // We need to call it before onCreate to prevent unnecessary activity recreation installAppTheme() @@ -246,9 +251,9 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - window.setHideOverlayWindows(true) - } + // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + // window.setHideOverlayWindows(true) + // } splashScreen.setKeepOnScreenCondition { viewModel.isSplashScreenShown } @@ -530,10 +535,31 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac false } + if (isPartiallyObscured) { + Timber.d("Window is partially obscured") + + if (!isWindowPartiallyObscuredAlreadySent) { + analyticsEventsHandler.send( + event = TechAnalyticsEvent.WindowObscured(state = ObscuredState.PARTIALLY), + ) + + isWindowPartiallyObscuredAlreadySent = true + } + } + val isFullyObscured = event.flags and MotionEvent.FLAG_WINDOW_IS_OBSCURED != 0 - if (isPartiallyObscured || isFullyObscured) { - Timber.e("Window is partially or fully obscured") + if (isFullyObscured) { + Timber.d("Window is partially or fully obscured") + + if (!isWindowFullyObscuredAlreadySent) { + analyticsEventsHandler.send( + event = TechAnalyticsEvent.WindowObscured(state = ObscuredState.FULLY), + ) + + isWindowFullyObscuredAlreadySent = true + } + return false } diff --git a/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/TechAnalyticsEvent.kt b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/TechAnalyticsEvent.kt new file mode 100644 index 0000000000..7d7460a633 --- /dev/null +++ b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/TechAnalyticsEvent.kt @@ -0,0 +1,26 @@ +package com.tangem.core.analytics.models.event + +import com.tangem.core.analytics.models.AnalyticsEvent + +/** + * Tech analytics event + * + * @param event event name + * @param params params + */ +sealed class TechAnalyticsEvent( + event: String, + params: Map = mapOf(), +) : AnalyticsEvent(category = "Tech", event = event, params = params) { + + class WindowObscured(state: ObscuredState) : TechAnalyticsEvent( + event = "Window Obscured", + params = mapOf("State" to state.name), + ) { + + enum class ObscuredState { + PARTIALLY, + FULLY, + } + } +} \ No newline at end of file diff --git a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt index 1fcc978ace..7ffb017cfa 100644 --- a/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt +++ b/features/disclaimer/impl/src/main/java/com/tangem/features/disclaimer/impl/ui/DisclaimerScreen.kt @@ -47,11 +47,16 @@ import java.nio.charset.StandardCharsets @Composable internal fun DisclaimerScreen(state: DisclaimerUM) { val bottomBarHeight = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() } - val bottomPadding = bottomBarHeight + TangemTheme.dimens.size16 - + val bottomPadding = if (state.isTosAccepted) { + bottomBarHeight + TangemTheme.dimens.size16 + } else { + bottomBarHeight + TangemTheme.dimens.size64 + } + val backgroundColor = TangemTheme.colors.background.primary + val (textColor, iconColor) = TangemTheme.colors.text.primary1 to TangemTheme.colors.icon.primary1 Box( modifier = Modifier - .background(TangemTheme.colors.background.primary) + .background(backgroundColor) .statusBarsPadding() .testTag(DISCLAIMER_SCREEN_CONTAINER), ) { @@ -67,6 +72,8 @@ internal fun DisclaimerScreen(state: DisclaimerUM) { onIconClicked = state.popBack, ).takeIf { state.isTosAccepted }, titleAlignment = Alignment.CenterHorizontally, + textColor = textColor, + iconTint = iconColor, ) DisclaimerContent(state.url) } @@ -74,7 +81,7 @@ internal fun DisclaimerScreen(state: DisclaimerUM) { if (!state.isTosAccepted) { BottomFade( modifier = Modifier.align(Alignment.BottomCenter), - backgroundColor = TangemTheme.colors.background.primary, + backgroundColor = backgroundColor, ) DisclaimerButton(state.onAccept) } else { @@ -85,6 +92,8 @@ internal fun DisclaimerScreen(state: DisclaimerUM) { @Composable private fun DisclaimerContent(url: String) { + val backgroundColor = TangemTheme.colors.background.primary + val webViewStateUrl = rememberWebViewState(url) val webViewStateData = rememberWebViewStateWithHTMLData( data = localTermsOfServices, @@ -119,12 +128,12 @@ private fun DisclaimerContent(url: String) { exit = fadeOut(), modifier = Modifier .fillMaxSize() - .background(TangemTheme.colors.background.primary), + .background(backgroundColor), ) { Box( modifier = Modifier .fillMaxSize() - .background(TangemTheme.colors.background.primary), + .background(backgroundColor), ) { CircularProgressIndicator( color = TangemTheme.colors.icon.informative,