NTP-62367 | Disable touch (#16140)
Co-authored-by: abhinav-g_navi <abhinav.g@navi.com>
This commit is contained in:
@@ -314,6 +314,14 @@ class NaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun homeClickDisabled() {
|
||||
NaviTrackEvent.trackEvent("NaviApp_HomePage_click_disabled")
|
||||
}
|
||||
|
||||
fun homeClickEnabled() {
|
||||
NaviTrackEvent.trackEvent("NaviApp_HomePage_click_enabled")
|
||||
}
|
||||
|
||||
fun onHomePageApiCall() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
"G_Homepage_Home_Api_Start",
|
||||
|
||||
@@ -13,6 +13,7 @@ import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.SystemBarStyle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
@@ -78,6 +79,7 @@ import com.navi.common.utils.getDeviceSignature
|
||||
import com.navi.common.utils.getLocalStorageLocation
|
||||
import com.navi.common.utils.getNetworkType
|
||||
import com.navi.common.utils.getScreenRefreshRate
|
||||
import com.navi.common.utils.getTotalRamMemory
|
||||
import com.navi.common.utils.isInstalledInProfile
|
||||
import com.navi.common.utils.logNaviPayGlanceWidgetClick
|
||||
import com.navi.common.utils.observeNonNull
|
||||
@@ -323,6 +325,7 @@ class HomePageActivity :
|
||||
}
|
||||
}
|
||||
initObservers()
|
||||
handleInitialTouchEventState()
|
||||
initErrors()
|
||||
fetchHomeData()
|
||||
trackLaunchEvents()
|
||||
@@ -338,6 +341,44 @@ class HomePageActivity :
|
||||
TraceManager.endAllTraces()
|
||||
}
|
||||
|
||||
private fun shouldDisableInitialTouchEvent(): Boolean {
|
||||
val isTouchDisabled =
|
||||
FirebaseRemoteConfigHelper.getBoolean(
|
||||
FirebaseRemoteConfigHelper.DISABLE_INITIAL_TOUCH_EVENT,
|
||||
false,
|
||||
)
|
||||
val maxRamThresholdGb =
|
||||
FirebaseRemoteConfigHelper.getDouble(
|
||||
FirebaseRemoteConfigHelper.DISABLE_INITIAL_TOUCH_EVENT_MAX_RAM
|
||||
)
|
||||
val deviceRamGb = getTotalRamMemory(this)?.toDoubleOrNull() ?: 0.0
|
||||
|
||||
return isTouchDisabled && deviceRamGb < maxRamThresholdGb
|
||||
}
|
||||
|
||||
private fun handleInitialTouchEventState() {
|
||||
lifecycleScope.launch {
|
||||
if (shouldDisableInitialTouchEvent()) {
|
||||
homeVM.isClickEnabled.collect { isEnabled ->
|
||||
when {
|
||||
!isEnabled -> {
|
||||
window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
|
||||
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
|
||||
)
|
||||
naviAnalyticsEventTracker.homeClickDisabled()
|
||||
}
|
||||
|
||||
else -> {
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
||||
naviAnalyticsEventTracker.homeClickEnabled()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkForAppLaunchEvent() {
|
||||
AppLoadTimerMapper.setAppLaunchEventStatus(intent.action != Intent.ACTION_MAIN)
|
||||
intent?.getStringExtra(NAVI_PAY_SECTION_GLANCE_WIDGET_SCREEN)?.let {
|
||||
|
||||
@@ -119,6 +119,18 @@ internal fun HomeScreenScaffoldRoot(
|
||||
)
|
||||
}
|
||||
}
|
||||
HandleClickOnHome(hpStates, homeVM)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HandleClickOnHome(hpStates: () -> HpStates, homeVM: () -> HomeViewModel) {
|
||||
LaunchedEffect(hpStates().isHomePageRendered) {
|
||||
homeVM().isClickEnabled.collect { enabled ->
|
||||
if (!enabled && hpStates().isHomePageRendered) {
|
||||
homeVM().updateClickEnabledState(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
|
||||
@@ -85,7 +85,6 @@ constructor(
|
||||
eventHandler: (HpEvents) -> Unit,
|
||||
) {
|
||||
trackEvent(TYPE_SYNC_START, mapOf(PARAM_IS_FIRST_TIME to isFirstTimeRender.toString()))
|
||||
|
||||
if (isFirstTimeRender) {
|
||||
initializeFirstTimeContentSync(
|
||||
fetchHomeContent,
|
||||
|
||||
@@ -62,8 +62,11 @@ import javax.inject.Inject
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.TimeoutCancellationException
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withTimeout
|
||||
@@ -105,6 +108,19 @@ constructor(
|
||||
viewModelScope.safeLaunch((Dispatchers.IO)) { observeInternetConnectivity() }
|
||||
}
|
||||
|
||||
private val _isClickEnabled: MutableStateFlow<Boolean> = MutableStateFlow(false)
|
||||
val isClickEnabled: StateFlow<Boolean> = _isClickEnabled
|
||||
|
||||
fun updateClickEnabledState(isClickEnabled: Boolean) {
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
_isClickEnabled.value = isClickEnabled
|
||||
delay(10_000)
|
||||
if (_isClickEnabled.value.not()) {
|
||||
updateClickEnabledState(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun observeActionCallback() {
|
||||
getActionCallback().collect { action ->
|
||||
ctaHandler.onActionTriggered(
|
||||
|
||||
@@ -247,6 +247,9 @@ object FirebaseRemoteConfigHelper {
|
||||
|
||||
const val ROOT_CA_ADDITION_TARGET_SDK = "ROOT_CA_ADDITION_TARGET_SDK"
|
||||
|
||||
const val DISABLE_INITIAL_TOUCH_EVENT = "DISABLE_INITIAL_TOUCH_EVENT"
|
||||
const val DISABLE_INITIAL_TOUCH_EVENT_MAX_RAM = "DISABLE_INITIAL_TOUCH_EVENT_MAX_RAM"
|
||||
|
||||
// Api Retry constants
|
||||
const val RETRY_INTERCEPTOR_ENABLED = "RETRY_INTERCEPTOR_ENABLED"
|
||||
const val UPI_RETRY_INTERCEPTOR_ENABLED = "UPI_RETRY_INTERCEPTOR_ENABLED"
|
||||
|
||||
Reference in New Issue
Block a user