NTP-67103 | Signal strength helper cleanup (#16503)

This commit is contained in:
Shaurya Rehan
2025-06-10 14:23:33 +05:30
committed by GitHub
parent 904e7a5b46
commit 0a50b0e1de
8 changed files with 0 additions and 267 deletions

View File

@@ -1,54 +0,0 @@
/*
*
* * Copyright © 2024-2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.naviapp.app.initializers
import android.app.Activity
import com.navi.common.NaviActivityLifecycleCallbacks
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.SIGNAL_INFO_TRACKING_DISABLED
import com.navi.common.network.SignalStrengthManager
import com.naviapp.app.NaviApplication
import dagger.Lazy
import javax.inject.Inject
class SignalManagerInitializer @Inject constructor() : ComponentInitializer {
@Inject lateinit var signalStrengthManager: Lazy<SignalStrengthManager>
private var isInitialized = false
private var foregroundActivitiesCount = 0
private val isSignalInfoTrackingDisabled: Boolean by lazy {
FirebaseRemoteConfigHelper.getBoolean(SIGNAL_INFO_TRACKING_DISABLED)
}
override fun initialize(application: NaviApplication) {
application.registerActivityLifecycleCallbacks(activityLifecycleCallback)
}
private val activityLifecycleCallback =
object : NaviActivityLifecycleCallbacks() {
override fun onActivityStarted(activity: Activity) {
foregroundActivitiesCount++
// attach listener
if (!isInitialized && !isSignalInfoTrackingDisabled) {
isInitialized = true
signalStrengthManager.get().startTracking()
}
}
override fun onActivityStopped(activity: Activity) {
foregroundActivitiesCount--
// remove listener
if (foregroundActivitiesCount == 0 && !isSignalInfoTrackingDisabled) {
isInitialized = false
signalStrengthManager.get().stopTracking()
}
}
}
}

View File

@@ -8,8 +8,6 @@
package com.naviapp.common.di
import com.navi.common.dbcleaner.ModuleDatabaseCleanerExecutor
import com.navi.common.network.SignalStrengthManager
import com.navi.common.network.SignalStrengthManagerImpl
import com.naviapp.app.db.NaviModuleDatabaseCleanerExecutor
import com.naviapp.app.image.CoilImageLibraryHandler
import com.naviapp.app.image.ImageLibraryHandler
@@ -34,9 +32,4 @@ interface AppBindingModule {
fun bindModuleDatabaseCleanerDelegate(
naviModuleDatabaseCleanerDelegate: NaviModuleDatabaseCleanerExecutor
): ModuleDatabaseCleanerExecutor
@Binds
fun bindSignalStrengthHelper(
signalStrengthHelperImpl: SignalStrengthManagerImpl
): SignalStrengthManager
}

View File

@@ -19,7 +19,6 @@ import com.naviapp.app.initializers.CrashHandlerInitializer
import com.naviapp.app.initializers.LottieInitializer
import com.naviapp.app.initializers.NetworkConfigurationInitializer
import com.naviapp.app.initializers.SdkInitializer
import com.naviapp.app.initializers.SignalManagerInitializer
import com.naviapp.app.initializers.TrustedTimeClientInitializer
import com.naviapp.network.di.CoroutineScopeIO
import dagger.Module
@@ -60,7 +59,6 @@ object AppModule {
crashHandlerInitializer: CrashHandlerInitializer,
appLifecycleManagerInitializer: AppLifecycleManagerInitializer,
networkConfigurationInitializer: NetworkConfigurationInitializer,
signalManagerInitializer: SignalManagerInitializer,
lottieInitializer: LottieInitializer,
trustedTimeClientInitializer: TrustedTimeClientInitializer,
): List<ComponentInitializer> {
@@ -70,7 +68,6 @@ object AppModule {
crashHandlerInitializer,
appLifecycleManagerInitializer,
networkConfigurationInitializer,
signalManagerInitializer,
lottieInitializer,
trustedTimeClientInitializer,
)

View File

@@ -1,16 +0,0 @@
/*
*
* * Copyright © 2024-2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.analytics.model
data class SignalInfo(val level: Int, val type: SignalType)
enum class SignalType {
WIFI,
CELLULAR,
UNKNOWN,
}

View File

@@ -15,8 +15,6 @@ import com.navi.analytics.BuildConfig
import com.navi.analytics.appsflyer.AppsFlyerUtil
import com.navi.analytics.firebase.FcmAnalyticsUtil
import com.navi.analytics.model.AnalyticsConfiguration
import com.navi.analytics.model.SignalInfo
import com.navi.analytics.model.SignalType
import com.navi.analytics.utils.NaviAnalyticsHelper.addBasePropertiesToScreenLandEvent
import com.navi.analytics.utils.NaviAnalyticsHelper.isEventWhiteListedForAppsflyer
import com.navi.base.model.AnalyticsEvent
@@ -35,7 +33,6 @@ object NaviTrackEvent {
var currentScreenName: String? = null
var foregroundScreen: String? = null
var foregroundVertical: String? = null
var signalInfo: SignalInfo = SignalInfo(level = -1, type = SignalType.UNKNOWN)
fun appInit(appContext: Application, analyticsConfiguration: AnalyticsConfiguration) {
applicationContext = appContext

View File

@@ -85,8 +85,6 @@ object CheckMateManager {
"errorCode" to errorCode,
"exception" to exception,
"alfredSessionId" to AlfredFacade.getAlfredSessionId(),
"signalLevel" to NaviTrackEvent.signalInfo.level.toString(),
"signalType" to NaviTrackEvent.signalInfo.type.name,
"isNae" to
getIsNae(isNae = isNae, statusCode = statusCode, exception = exception)
.toString(),

View File

@@ -81,7 +81,6 @@ object FirebaseRemoteConfigHelper {
const val PAN_VERIFICATION_HPC_PAN_SCREEN_NAME = "PAN_VERIFICATION_HPC_PAN_SCREEN_NAME"
const val ONE_TIME_DATA_UPLOAD_DISABLED = "ONE_TIME_DATA_UPLOAD_DISABLED"
const val ENABLE_UI_TRON_MODIFIER_BUILDER = "ENABLE_UI_TRON_MODIFIER_BUILDER"
const val SIGNAL_INFO_TRACKING_DISABLED = "SIGNAL_INFO_TRACKING_DISABLED"
// NAVI_PAY
const val NAVI_PAY_MINIMUM_APP_VERSION_ALLOWED_FOR_ONBOARDING =

View File

@@ -1,181 +0,0 @@
/*
*
* * Copyright © 2024-2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.network
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.wifi.WifiManager
import android.telephony.PhoneStateListener
import android.telephony.SignalStrength
import android.telephony.TelephonyManager
import com.navi.analytics.model.SignalInfo
import com.navi.analytics.model.SignalType
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.base.utils.orZero
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
interface SignalStrengthManager {
fun startTracking()
fun stopTracking()
}
class SignalStrengthManagerImpl
@Inject
constructor(@ApplicationContext private val context: Context) : SignalStrengthManager {
private val connectivityManager: ConnectivityManager by lazy {
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
}
private val telephonyManager: TelephonyManager by lazy {
context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
}
private val wifiSignalStrengthReceiver: BroadcastReceiver by lazy {
object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == WifiManager.RSSI_CHANGED_ACTION) {
getWifiSignalStrength()
}
}
}
}
private val cellularSignalStrengthListener: PhoneStateListener by lazy {
object : PhoneStateListener() {
override fun onSignalStrengthsChanged(signalStrength: SignalStrength?) {
super.onSignalStrengthsChanged(signalStrength)
if (isCellularNetworkActive()) {
signalStrength?.let {
NaviTrackEvent.signalInfo =
SignalInfo(
level = signalStrength.level.orZero(),
type = SignalType.CELLULAR,
)
}
}
}
}
}
private val networkCallback: ConnectivityManager.NetworkCallback by lazy {
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
if (networkCapabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true) {
if (isWifiNetworkActive()) {
getWifiSignalStrength()
}
} else if (
networkCapabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) ==
true
) {
if (isCellularNetworkActive()) {
startTrackingCellularSignalStrength()
}
}
}
override fun onLost(network: Network) {
resetSignalStrengthInfo()
}
override fun onUnavailable() {
resetSignalStrengthInfo()
}
override fun onLosing(network: Network, maxMsToLive: Int) {
resetSignalStrengthInfo()
}
}
}
private fun resetSignalStrengthInfo() {
NaviTrackEvent.signalInfo = SignalInfo(level = -1, type = SignalType.UNKNOWN)
}
override fun startTracking() {
startTrackingWifiSignalStrength()
startTrackingCellularSignalStrength()
monitorActiveNetworkType()
}
override fun stopTracking() {
stopTrackingWifiSignalStrength()
stopTrackingCellularSignalStrength()
unregisterNetworkCallback()
}
private fun startTrackingWifiSignalStrength() {
val intentFilter = IntentFilter(WifiManager.RSSI_CHANGED_ACTION)
context.registerReceiver(wifiSignalStrengthReceiver, intentFilter)
}
private fun stopTrackingWifiSignalStrength() {
context.unregisterReceiver(wifiSignalStrengthReceiver)
}
private fun startTrackingCellularSignalStrength() {
telephonyManager.listen(
cellularSignalStrengthListener,
PhoneStateListener.LISTEN_SIGNAL_STRENGTHS,
)
}
private fun stopTrackingCellularSignalStrength() {
telephonyManager.listen(cellularSignalStrengthListener, PhoneStateListener.LISTEN_NONE)
}
private fun monitorActiveNetworkType() {
connectivityManager.registerDefaultNetworkCallback(networkCallback)
}
private fun unregisterNetworkCallback() {
connectivityManager.unregisterNetworkCallback(networkCallback)
}
private fun getWifiSignalStrength() {
val wifiManager =
context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiInfo = wifiManager.connectionInfo
val rssi = wifiInfo.rssi
val level = mapRssiToSignalLevel(rssi)
if (isWifiNetworkActive()) {
NaviTrackEvent.signalInfo = SignalInfo(level = level, type = SignalType.WIFI)
}
}
private fun mapRssiToSignalLevel(rssi: Int): Int {
return when {
rssi >= -50 -> 4
rssi >= -60 -> 3
rssi >= -70 -> 2
rssi >= -80 -> 1
else -> 0
}
}
private fun isCellularNetworkActive(): Boolean {
val activeNetwork = connectivityManager.activeNetworkInfo
return activeNetwork?.type == ConnectivityManager.TYPE_MOBILE && activeNetwork.isConnected
}
private fun isWifiNetworkActive(): Boolean {
val activeNetwork = connectivityManager.activeNetworkInfo
return activeNetwork?.type == ConnectivityManager.TYPE_WIFI && activeNetwork.isConnected
}
}