NTP-67103 | Signal strength helper cleanup (#16503)
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user