I am using Hilt in Android project, and after I added class for gps tracking I am getting an error:
ModuleProcessingStep was unable to process ‘com...di.AppModule’ because ‘LocationTracker’ could not be resolved.
LocationTracker class is there and imported.
This is AppModule:
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl(AppConfig.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
@Provides
@Singleton
fun provideApiService(retrofit: Retrofit): ApiService =
retrofit.create(ApiService::class.java)
@Provides
@Singleton
fun providesFusedLocationProviderClient(
application: Application
): FusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(application)
@Provides
@Singleton
fun providesLocationTracker(
fusedLocationProviderClient: FusedLocationProviderClient,
application: Application
): LocationTracker = DefaultLocationTracker(
fusedLocationProviderClient = fusedLocationProviderClient,
application = application
)
}
And these are LocationTracker and DefaultLocationTracker
interface LocationTracker {
suspend fun getCurrentLocation(): Location?
}
class DefaultLocationTracker(
private val fusedLocationProviderClient: FusedLocationProviderClient,
private val application: Application
) : LocationTracker {
@OptIn(ExperimentalCoroutinesApi::class)
override suspend fun getCurrentLocation(): Location? {
val hasAccessFineLocationPermission = ContextCompat.checkSelfPermission(
application,
android.Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
val hasAccessCoarseLocationPermission = ContextCompat.checkSelfPermission(
application,
android.Manifest.permission.ACCESS_COARSE_LOCATION
) == PackageManager.PERMISSION_GRANTED
val locationManager = application.getSystemService(
Context.LOCATION_SERVICE
) as LocationManager
val isGpsEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER) ||
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
if (!isGpsEnabled && !(hasAccessCoarseLocationPermission || hasAccessFineLocationPermission)) {
return null
}
return suspendCancellableCoroutine { cont ->
fusedLocationProviderClient.lastLocation.apply {
if (isComplete) {
if (isSuccessful) {
cont.resume(result) {} // Resume coroutine with location result
} else {
cont.resume(null) {} // Resume coroutine with null location result
}
return@suspendCancellableCoroutine
}
addOnSuccessListener {
cont.resume(it) {} // Resume coroutine with location result
}
addOnFailureListener {
cont.resume(null) {} // Resume coroutine with null location result
}
addOnCanceledListener {
cont.cancel() // Cancel the coroutine
}
}
}
}
}