From e88fb271e8cdd12c6acde178c351993f5ad53859 Mon Sep 17 00:00:00 2001 From: Naman Khurmi Date: Mon, 5 May 2025 17:04:00 +0530 Subject: [PATCH] NTP-58543 | Naman Khurmi | GPS popup on exp. (#16007) --- .../naviapp/analytics/utils/NaviAnalytics.kt | 9 +++++++ .../home/compose/activity/HomePageActivity.kt | 15 +++++++++-- .../FirebaseRemoteConfigHelper.kt | 3 +++ .../common/managers/NaviLocationManager.kt | 18 +++++++++---- .../navi/common/ui/activity/BaseActivity.kt | 25 +++++++++++++------ 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt index 66577643fa..5305d3bbb9 100644 --- a/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt +++ b/android/app/src/main/java/com/naviapp/analytics/utils/NaviAnalytics.kt @@ -273,6 +273,13 @@ class NaviAnalytics private constructor() { inner class Home { + fun sendGpsPopupStatus(isGpsPopupEnabled: Boolean) { + NaviTrackEvent.trackEventOnClickStream( + HOME_GPS_EVENT, + mapOf(Pair(IS_GPS_ENABLED, isGpsPopupEnabled.toString())), + ) + } + fun onHomePageLand() { NaviTrackEvent.trackEvent(NEW_HOME) } @@ -1228,6 +1235,8 @@ class NaviAnalytics private constructor() { const val BANK_DETAILS = "bank_details" const val HOME = "home" const val NEW_HOME = "NaviApp_HomePage_Lands" + const val IS_GPS_ENABLED = "is_gps_enabled" + const val HOME_GPS_EVENT = "NaviApp_HomePage_Gps_Event" const val NEW_DASHBOARD = "NaviApp_Dashboard_Lands" const val POSITION = "position" const val NEW_HOME_CLICKED = "NaviApp_Nav_HomePage_Clicked" diff --git a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt index 0be1d81fa3..811ad362c9 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/activity/HomePageActivity.kt @@ -281,6 +281,10 @@ class HomePageActivity : } } + private val shouldTriggerGpsIntentOnFailure by lazy { + FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.IS_GPS_POPUP_ENABLED) + } + override val screenName: String get() = NaviAnalytics.NEW_HOME_ACTIVITY @@ -452,7 +456,15 @@ class HomePageActivity : bottomNavBarVM.setBottomNudge(false) } } - sendLocationUpdates(postLocation = false, shouldSkipLastUpdatedAtCheck = false) + } + + override fun postLocationData() { + locationManager.postLocationData(this, shouldTriggerGpsIntentOnFailure) + } + + override fun handleLocationUpdates() { + naviAnalyticsEventTracker.sendGpsPopupStatus(shouldTriggerGpsIntentOnFailure) + sendLocationUpdates(false, false, shouldTriggerGpsIntentOnFailure) } override fun onStop() { @@ -807,7 +819,6 @@ class HomePageActivity : if (BaseUtils.isUserLoggedIn()) { naviAnalyticsEventTracker.onHomePageCreated() sendFCEvent() - sendLocationUpdates() } } diff --git a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt index eec1abbb72..a63024cca7 100644 --- a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt +++ b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt @@ -306,6 +306,9 @@ object FirebaseRemoteConfigHelper { // FESTIVE THEME const val FESTIVE_RESOURCE_URL_LIST = "FESTIVE_RESOURCE_URL_LIST" + // HOME + const val IS_GPS_POPUP_ENABLED = "GPS_POPUP_VISIBILITY" + private fun getFirebaseRemoteConfig(): FirebaseRemoteConfig { val remoteConfig = Firebase.remoteConfig val configSettings = remoteConfigSettings { diff --git a/android/navi-common/src/main/java/com/navi/common/managers/NaviLocationManager.kt b/android/navi-common/src/main/java/com/navi/common/managers/NaviLocationManager.kt index 42a5bf7fa3..c418c80812 100644 --- a/android/navi-common/src/main/java/com/navi/common/managers/NaviLocationManager.kt +++ b/android/navi-common/src/main/java/com/navi/common/managers/NaviLocationManager.kt @@ -42,6 +42,7 @@ import com.navi.base.sharedpref.CommonPrefConstants.IS_MOCK_LOCATION import com.navi.base.sharedpref.CommonPrefConstants.LOCATION_UPDATE_ENABLED import com.navi.base.sharedpref.PreferenceManager import com.navi.base.utils.BaseUtils +import com.navi.base.utils.TrustedTimeAccessor import com.navi.base.utils.orElse import com.navi.base.utils.orFalse import com.navi.base.utils.orZero @@ -294,6 +295,7 @@ class NaviLocationManager( activity: Activity, postLocation: Boolean = false, shouldSkipLastUpdatedAtCheck: Boolean = true, + shouldTriggerGpsIntentOnFailure: Boolean = true, ) { coroutineScope.launch { if (!shouldSkipLastUpdatedAtCheck) { @@ -331,7 +333,9 @@ class NaviLocationManager( onSuccessLocationSettingsResponse(locationSettingsResponseTask, locationRequest) - onFailureLocationSettingsResponse(locationSettingsResponseTask, activity) + if (shouldTriggerGpsIntentOnFailure) { + onFailureLocationSettingsResponse(locationSettingsResponseTask, activity) + } } PreferenceManager.setLongPreference( @@ -385,10 +389,14 @@ class NaviLocationManager( } } - fun postLocationData(activity: Activity) { + fun postLocationData(activity: Activity, shouldTriggerGpsIntentOnFailure: Boolean = true) { if (isLocationNeedToUpdate()) { analyticsTracker.onRequestAndSendLocation() - requestLocationUpdates(activity, true) + requestLocationUpdates( + activity = activity, + postLocation = true, + shouldTriggerGpsIntentOnFailure = shouldTriggerGpsIntentOnFailure, + ) } else analyticsTracker.onLocationNotSentThreshold() } @@ -408,8 +416,8 @@ class NaviLocationManager( if (locationFetchDuration.orZero() > 0) (locationFetchDuration.orZero().toLong()) * 60 * 60 * 1000 else LOCATION_UPDATE_PERIOD - if (System.currentTimeMillis() - lastUpdatedTime > locationFetchDurInMilliSec) return true - return false + return TrustedTimeAccessor.getCurrentTimeMillis() - lastUpdatedTime > + locationFetchDurInMilliSec } fun isLocationOn(context: Context): Boolean { diff --git a/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt b/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt index ef6d6447a0..ed2ee789db 100644 --- a/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt +++ b/android/navi-common/src/main/java/com/navi/common/ui/activity/BaseActivity.kt @@ -131,7 +131,7 @@ abstract class BaseActivity : private var permissionsManager: PermissionsManager? = null private val locationPermission = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION) - private val locationManager by lazy { NaviLocationManager(applicationContext) } + protected val locationManager by lazy { NaviLocationManager(applicationContext) } private val analyticsErrorEventTracker = CommonNaviAnalytics.naviAnalytics.Errors() private var layoutView: View? = null @@ -170,6 +170,18 @@ abstract class BaseActivity : layoutView = view } + open fun postLocationData() { + locationManager.postLocationData(this) + } + + open fun handleLocationUpdates() { + sendLocationUpdates( + postLocation = false, + shouldSkipLastUpdatedAtCheck = false, + shouldTriggerGpsIntentOnFailure = true, + ) + } + private fun initUiTronSdkManager() { if (!UiTronSdkManager.isInitialized()) { UiTronSdkManager.init(UiTronDependencyProvider(applicationContext)) @@ -267,8 +279,7 @@ abstract class BaseActivity : NaviTrackEvent.setSessionId(getSessionId().orEmpty()) } timeStamp = System.currentTimeMillis() - - sendLocationUpdates(postLocation = false, shouldSkipLastUpdatedAtCheck = false) + handleLocationUpdates() } override fun onPause() { @@ -276,10 +287,6 @@ abstract class BaseActivity : timeStamp = System.currentTimeMillis() } - fun initV2Loader() { - showNewLoader = true - } - fun setupQueryMap(extras: Bundle?) { queryMap.clear() extras?.keySet()?.forEach { key -> queryMap[key] = "${extras.get(key)}" } @@ -294,19 +301,21 @@ abstract class BaseActivity : locationManager.setEventName(eventName) locationManager.setBusinessVertical(businessVertical) locationManager.setScreenName(screenName) - locationManager.postLocationData(this) + postLocationData() } } fun sendLocationUpdates( postLocation: Boolean = true, shouldSkipLastUpdatedAtCheck: Boolean = true, + shouldTriggerGpsIntentOnFailure: Boolean = true, ) { if (permissionsManager?.hasLocationPermissionAny().orFalse()) { locationManager.requestLocationUpdates( this, postLocation = postLocation, shouldSkipLastUpdatedAtCheck = shouldSkipLastUpdatedAtCheck, + shouldTriggerGpsIntentOnFailure = shouldTriggerGpsIntentOnFailure, ) } }