NTP-50063 | Trusted time API integration (#15508)

Co-authored-by: Kishan Kumar <kishan.kumar@navi.com>
This commit is contained in:
Ujjwal Kumar
2025-03-25 16:15:45 +05:30
committed by GitHub
parent bf32235681
commit a4815de51f
8 changed files with 78 additions and 0 deletions

View File

@@ -268,6 +268,7 @@ dependencies {
implementation libs.accompanist.systemuicontroller
implementation libs.android.gms.playServicesAds
implementation libs.android.gms.playServicesAuthApiPhone
implementation libs.android.gms.playServicesTime
implementation libs.android.installreferrer
implementation libs.android.material
implementation libs.androidx.activity.activity

View File

@@ -11,6 +11,7 @@ import androidx.appcompat.app.AppCompatDelegate
import coil.ImageLoader
import coil.ImageLoaderFactory
import com.navi.base.cache.repository.NaviCacheRepository
import com.navi.base.utils.TrustedTimeClientAccessor
import com.navi.bbps.common.model.NaviBbpsManager
import com.navi.moneymanager.common.manager.MMLibManager
import com.navi.pay.common.setup.NaviPayManager
@@ -47,6 +48,8 @@ open class NaviApplication : BaseApplication(), ImageLoaderFactory {
@Inject
lateinit var componentInitializers: Lazy<List<@JvmSuppressWildcards ComponentInitializer>>
@Inject lateinit var trustedTimeClientAccessor: Lazy<TrustedTimeClientAccessor>
@Inject lateinit var imageLoaderProvider: ImageLoaderProvider
private val isDifferentPackageValue: Boolean by lazy {

View File

@@ -0,0 +1,25 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.naviapp.app.initializers
import com.navi.base.utils.TrustedTimeAccessor
import com.navi.common.utils.log
import com.naviapp.app.NaviApplication
import javax.inject.Inject
class TrustedTimeClientInitializer @Inject constructor() : ComponentInitializer {
override fun initialize(application: NaviApplication) {
application.trustedTimeClientAccessor.get().createClient().addOnCompleteListener { task ->
if (task.isSuccessful) {
TrustedTimeAccessor.setInstance(trustedTimeClient = task.result)
} else {
task.exception?.log()
}
}
}
}

View File

@@ -21,6 +21,7 @@ import com.naviapp.app.initializers.NetworkConfigurationInitializer
import com.naviapp.app.initializers.NetworkStatsInitializer
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
import dagger.Provides
@@ -63,6 +64,7 @@ object AppModule {
signalManagerInitializer: SignalManagerInitializer,
lottieInitializer: LottieInitializer,
networkStatsInitializer: NetworkStatsInitializer,
trustedTimeClientInitializer: TrustedTimeClientInitializer,
): List<ComponentInitializer> {
return listOf(
sdkInitializer,
@@ -73,6 +75,7 @@ object AppModule {
signalManagerInitializer,
lottieInitializer,
networkStatsInitializer,
trustedTimeClientInitializer,
)
}
}

View File

@@ -8,6 +8,7 @@ android-gms-playServicesAuthApiPhone = "18.1.0"
android-gms-playServicesLocation = "21.3.0"
android-gms-playServicesMaps = "17.0.0"
android-gms-playServicesMlkitTextRecognition = "19.0.1"
android-gms-playServicesTime = "16.0.1"
android-installreferrer = "2.2"
android-material = "1.9.0"
android-places = "4.1.0"
@@ -131,6 +132,7 @@ android-gms-playServicesAuthApiPhone = { module = "com.google.android.gms:play-s
android-gms-playServicesLocation = { module = "com.google.android.gms:play-services-location", version.ref = "android-gms-playServicesLocation" }
android-gms-playServicesMaps = { module = "com.google.android.gms:play-services-maps", version.ref = "android-gms-playServicesMaps" }
android-gms-playServicesMlkitTextRecognition = { module = "com.google.android.gms:play-services-mlkit-text-recognition", version.ref = "android-gms-playServicesMlkitTextRecognition" }
android-gms-playServicesTime = { module = "com.google.android.gms:play-services-time", version.ref = "android-gms-playServicesTime" }
android-installreferrer = { module = "com.android.installreferrer:installreferrer", version.ref = "android-installreferrer" }

View File

@@ -70,6 +70,7 @@ static def formatString(String value) {
dependencies {
api platform(libs.firebase.bom)
api platform(libs.okhttp.bom)
implementation libs.android.gms.playServicesTime
api libs.android.play.appUpdateKtx
api libs.android.play.featureDeliveryKtx
api libs.android.play.reviewKtx

View File

@@ -9,6 +9,9 @@ package com.navi.base.cache.di
import android.content.Context
import androidx.room.Room
import com.google.android.gms.tasks.Task
import com.google.android.gms.time.TrustedTime
import com.google.android.gms.time.TrustedTimeClient
import com.google.gson.Gson
import com.navi.base.cache.database.NaviSharedDatabase
import com.navi.base.cache.repository.NaviCacheRepository
@@ -22,6 +25,7 @@ import com.navi.base.utils.NaviNetworkConnectivity
import com.navi.base.utils.NaviNetworkConnectivityImpl
import com.navi.base.utils.ResourceProvider
import com.navi.base.utils.ResourceProviderImpl
import com.navi.base.utils.TrustedTimeClientAccessor
import dagger.Binds
import dagger.Module
import dagger.Provides
@@ -47,6 +51,18 @@ object NaviBaseModule {
naviSharedDatabase.naviCacheDao()
@Provides @Singleton @NaviCommonGson fun providesGson() = Gson()
@Singleton
@Provides
fun provideTrustedTimeClientAccessor(
@ApplicationContext context: Context
): TrustedTimeClientAccessor {
return object : TrustedTimeClientAccessor {
override fun createClient(): Task<TrustedTimeClient> {
return TrustedTime.createClient(context)
}
}
}
}
@Module

View File

@@ -0,0 +1,27 @@
/*
*
* * Copyright © 2025 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.base.utils
import com.google.android.gms.tasks.Task
import com.google.android.gms.time.TrustedTimeClient
interface TrustedTimeClientAccessor {
fun createClient(): Task<TrustedTimeClient>
}
object TrustedTimeAccessor {
private var trustedTimeClient: TrustedTimeClient? = null
fun setInstance(trustedTimeClient: TrustedTimeClient) {
this.trustedTimeClient = trustedTimeClient
}
fun getCurrentTimeMillis(): Long {
return trustedTimeClient?.computeCurrentUnixEpochMillis() ?: System.currentTimeMillis()
}
}