From 06cb63aa11ed75a56472ef56092bf680c4c1bce5 Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Wed, 4 Dec 2019 21:09:37 +0000 Subject: [PATCH] Added SharedPref and LocationClient injection to the ViewModel via AndroidModule. Minor fixes. --- .../com/rtbishop/lookingsat/MainViewModel.kt | 36 ++++++++----------- .../rtbishop/lookingsat/di/AndroidModule.kt | 26 ++++++++++++++ .../rtbishop/lookingsat/di/AppComponent.kt | 2 +- .../lookingsat/storage/TransmittersDb.kt | 17 --------- 4 files changed, 42 insertions(+), 39 deletions(-) create mode 100644 app/src/main/java/com/rtbishop/lookingsat/di/AndroidModule.kt diff --git a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt index b368feef..ea9534b8 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/MainViewModel.kt @@ -8,12 +8,11 @@ import androidx.core.content.edit import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope -import androidx.preference.PreferenceManager import com.github.amsacode.predict4java.GroundStationPosition import com.github.amsacode.predict4java.PassPredictor import com.github.amsacode.predict4java.SatNotFoundException import com.github.amsacode.predict4java.TLE -import com.google.android.gms.location.LocationServices +import com.google.android.gms.location.FusedLocationProviderClient import com.rtbishop.lookingsat.repo.Repository import com.rtbishop.lookingsat.repo.SatPass import com.rtbishop.lookingsat.repo.SatPassPrefs @@ -30,15 +29,15 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { private val keyLat = "latitude" private val keyLon = "longitude" - private val keyHeight = "height" + private val keyAlt = "altitude" private val keyHours = "hoursAhead" private val keyMaxEl = "maxElevation" private val tleFileName = "tleFile.txt" - private val preferences = PreferenceManager.getDefaultSharedPreferences(application) - private val locationClient = LocationServices.getFusedLocationProviderClient(application) - - val debugMessage = MutableLiveData("") + @Inject + lateinit var locationClient: FusedLocationProviderClient + @Inject + lateinit var preferences: SharedPreferences @Inject lateinit var repository: Repository @@ -46,19 +45,18 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { (application as LookingSatApp).appComponent.inject(this) } - var satPassList = emptyList() - + val debugMessage = MutableLiveData("") val gsp = MutableLiveData( GroundStationPosition( preferences.getDouble(keyLat, 0.0), preferences.getDouble(keyLon, 0.0), - preferences.getDouble(keyHeight, 0.0) + preferences.getDouble(keyAlt, 0.0) ) ) + var satPassList = emptyList() var tleMainList = loadTwoLineElementFile() var tleSelectedMap = mutableMapOf() - var selectedSingleSat = tleMainList[0] var passPrefs = SatPassPrefs( preferences.getInt(keyHours, 8), preferences.getDouble(keyMaxEl, 16.0) @@ -74,10 +72,6 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } } - fun updateSelectedSingleSat(sat: TLE) { - selectedSingleSat = sat - } - suspend fun getPasses() { val passList = mutableListOf() withContext(Dispatchers.Default) { @@ -85,12 +79,12 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { if (value) { try { val predictor = PassPredictor(tle, gsp.value) - val passes = predictor.getPasses(Date(), passPrefs.hoursAhead, false) + val passes = predictor.getPasses(Date(), passPrefs.hoursAhead, true) passes.forEach { passList.add(SatPass(tle, predictor, it)) } } catch (exception: IllegalArgumentException) { - debugMessage.postValue("There was a problem with TLE") + debugMessage.postValue("There was a problem with ${tle.name}") } catch (exception: SatNotFoundException) { - debugMessage.postValue("Certain satellites shall not pass") + debugMessage.postValue("${tle.name} shall not pass") } } } @@ -117,15 +111,15 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { locationClient.lastLocation.addOnSuccessListener { location: Location? -> val lat = location?.latitude ?: 0.0 val lon = location?.longitude ?: 0.0 - val height = location?.altitude ?: 0.0 + val alt = location?.altitude ?: 0.0 preferences.edit { putDouble(keyLat, lat) putDouble(keyLon, lon) - putDouble(keyHeight, height) + putDouble(keyAlt, alt) apply() } - gsp.postValue(GroundStationPosition(lat, lon, height)) + gsp.postValue(GroundStationPosition(lat, lon, alt)) debugMessage.postValue("Location was updated") } } diff --git a/app/src/main/java/com/rtbishop/lookingsat/di/AndroidModule.kt b/app/src/main/java/com/rtbishop/lookingsat/di/AndroidModule.kt new file mode 100644 index 00000000..ca94704d --- /dev/null +++ b/app/src/main/java/com/rtbishop/lookingsat/di/AndroidModule.kt @@ -0,0 +1,26 @@ +package com.rtbishop.lookingsat.di + +import android.content.Context +import android.content.SharedPreferences +import androidx.preference.PreferenceManager +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationServices +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +@Module +class AndroidModule { + + @Singleton + @Provides + fun provideSharedPreferences(context: Context): SharedPreferences { + return PreferenceManager.getDefaultSharedPreferences(context) + } + + @Singleton + @Provides + fun provideLocationClient(context: Context): FusedLocationProviderClient { + return LocationServices.getFusedLocationProviderClient(context) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/lookingsat/di/AppComponent.kt b/app/src/main/java/com/rtbishop/lookingsat/di/AppComponent.kt index 588ae504..a9692173 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/di/AppComponent.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/di/AppComponent.kt @@ -7,7 +7,7 @@ import dagger.Component import javax.inject.Singleton @Singleton -@Component(modules = [NetworkModule::class, StorageModule::class]) +@Component(modules = [AndroidModule::class, NetworkModule::class, StorageModule::class]) interface AppComponent { @Component.Factory diff --git a/app/src/main/java/com/rtbishop/lookingsat/storage/TransmittersDb.kt b/app/src/main/java/com/rtbishop/lookingsat/storage/TransmittersDb.kt index 20e48f50..41c5b4d9 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/storage/TransmittersDb.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/storage/TransmittersDb.kt @@ -1,8 +1,6 @@ package com.rtbishop.lookingsat.storage -import android.content.Context import androidx.room.Database -import androidx.room.Room import androidx.room.RoomDatabase import com.rtbishop.lookingsat.repo.Transmitter @@ -10,19 +8,4 @@ import com.rtbishop.lookingsat.repo.Transmitter abstract class TransmittersDb : RoomDatabase() { abstract fun transmittersDao(): TransmittersDao - - companion object { - - @Volatile - private var INSTANCE: TransmittersDb? = null - - fun getInstance(context: Context): TransmittersDb = - INSTANCE ?: synchronized(this) { - INSTANCE ?: Room.databaseBuilder( - context, - TransmittersDb::class.java, - "transmitters" - ).build() - } - } } \ No newline at end of file