Successfully moved to Dagger DI framework

This commit is contained in:
Arty Bishop committed 2019-11-22 10:42:34 +00:00
1 parent 3ad4d2fdf6
commit cc6e486574
11 files changed
+71 -48

No files matched your search

@@ -1,32 +0,0 @@
package com.rtbishop.lookingsat
import android.content.Context
import com.rtbishop.lookingsat.network.RemoteDataSource
import com.rtbishop.lookingsat.network.TransmittersApi
import com.rtbishop.lookingsat.repo.Repository
import com.rtbishop.lookingsat.storage.LocalDataSource
import com.rtbishop.lookingsat.storage.TransmittersDatabase
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object Injector {
private fun provideRemoteDataSource(): RemoteDataSource {
val api = Retrofit.Builder()
.baseUrl("https://db.satnogs.org/api/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(TransmittersApi::class.java)
val client = OkHttpClient()
return RemoteDataSource(api, client)
}
private fun provideLocalDataSource(context: Context): LocalDataSource {
return LocalDataSource(TransmittersDatabase.getInstance(context).transmittersDao())
}
fun provideRepository(context: Context): Repository {
return Repository(provideLocalDataSource(context), provideRemoteDataSource())
}
}
@@ -1,4 +1,4 @@
package com.rtbishop.lookingsat.vm
package com.rtbishop.lookingsat
import android.app.Application
import android.content.Context
@@ -16,7 +16,6 @@ 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.rtbishop.lookingsat.Injector
import com.rtbishop.lookingsat.repo.Repository
import com.rtbishop.lookingsat.repo.SatPass
import kotlinx.coroutines.Dispatchers
@@ -25,6 +24,7 @@ import kotlinx.coroutines.withContext
import java.io.FileNotFoundException
import java.io.IOException
import java.util.*
import javax.inject.Inject
class MainViewModel(application: Application) : AndroidViewModel(application) {
@@ -34,7 +34,9 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
private val tleFile = "tles.txt"
private val tag = "myTag"
private val repository: Repository = Injector.provideRepository(application)
@Inject
lateinit var repository: Repository
private val preferences = PreferenceManager.getDefaultSharedPreferences(application)
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(application)
@@ -53,6 +55,10 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
var tleMainList = loadTwoLineElementFile().sortedWith(compareBy { it.name })
var tleSelectedMap = mutableMapOf<TLE, Boolean>()
init {
(application as LookingSatApp).appComponent.inject(this)
}
private fun loadTwoLineElementFile(): List<TLE> {
return try {
TLE.importSat(getApplication<Application>().openFileInput(tleFile))
@@ -1,7 +1,7 @@
package com.rtbishop.lookingsat.di
import android.content.Context
import com.rtbishop.lookingsat.ui.MainActivity
import com.rtbishop.lookingsat.MainViewModel
import dagger.BindsInstance
import dagger.Component
import javax.inject.Singleton
@@ -15,5 +15,5 @@ interface AppComponent {
fun create(@BindsInstance context: Context): AppComponent
}
fun inject(activity: MainActivity)
fun inject(viewModel: MainViewModel)
}
@@ -1,6 +1,29 @@
package com.rtbishop.lookingsat.di
import com.rtbishop.lookingsat.network.TransmittersApi
import dagger.Module
import dagger.Provides
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Singleton
@Module
class NetworkModule
class NetworkModule {
@Singleton
@Provides
fun provideTransmittersApi(): TransmittersApi {
return Retrofit.Builder()
.baseUrl("https://db.satnogs.org/api/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(TransmittersApi::class.java)
}
@Singleton
@Provides
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient()
}
}
@@ -1,6 +1,26 @@
package com.rtbishop.lookingsat.di
import android.content.Context
import androidx.room.Room
import com.rtbishop.lookingsat.storage.TransmittersDao
import com.rtbishop.lookingsat.storage.TransmittersDb
import dagger.Module
import dagger.Provides
import javax.inject.Singleton
@Module
class StorageModule
class StorageModule {
@Singleton
@Provides
fun provideTransmittersDb(context: Context): TransmittersDb {
return Room.databaseBuilder(context, TransmittersDb::class.java, "transmitters")
.build()
}
@Singleton
@Provides
fun provideTransmittersDao(db: TransmittersDb): TransmittersDao {
return db.transmittersDao()
}
}
@@ -5,8 +5,12 @@ import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.InputStream
import java.io.SequenceInputStream
import javax.inject.Inject
class RemoteDataSource(private val api: TransmittersApi, private val client: OkHttpClient) {
class RemoteDataSource @Inject constructor(
private val api: TransmittersApi,
private val client: OkHttpClient
) {
fun fetchTleStream(): InputStream {
val requestAmateur =
@@ -3,8 +3,9 @@ package com.rtbishop.lookingsat.repo
import com.rtbishop.lookingsat.network.RemoteDataSource
import com.rtbishop.lookingsat.storage.LocalDataSource
import java.io.InputStream
import javax.inject.Inject
class Repository(
class Repository @Inject constructor(
private val localSource: LocalDataSource,
private val remoteSource: RemoteDataSource
) {
@@ -1,8 +1,9 @@
package com.rtbishop.lookingsat.storage
import com.rtbishop.lookingsat.repo.Transmitter
import javax.inject.Inject
class LocalDataSource(private val transmittersDao: TransmittersDao) {
class LocalDataSource @Inject constructor(private val transmittersDao: TransmittersDao) {
suspend fun insertTransmitters(transmitters: List<Transmitter>) {
transmittersDao.insertTransmitters(transmitters)
@@ -7,20 +7,20 @@ import androidx.room.RoomDatabase
import com.rtbishop.lookingsat.repo.Transmitter
@Database(entities = [Transmitter::class], version = 1, exportSchema = false)
abstract class TransmittersDatabase : RoomDatabase() {
abstract class TransmittersDb : RoomDatabase() {
abstract fun transmittersDao(): TransmittersDao
companion object {
@Volatile
private var INSTANCE: TransmittersDatabase? = null
private var INSTANCE: TransmittersDb? = null
fun getInstance(context: Context): TransmittersDatabase =
fun getInstance(context: Context): TransmittersDb =
INSTANCE ?: synchronized(this) {
INSTANCE ?: Room.databaseBuilder(
context,
TransmittersDatabase::class.java,
TransmittersDb::class.java,
"transmitters"
).build()
}
@@ -25,8 +25,8 @@ import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.navigation.NavigationView
import com.rtbishop.lookingsat.MainViewModel
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.vm.MainViewModel
import java.util.*
import java.util.concurrent.TimeUnit
@@ -14,9 +14,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.github.amsacode.predict4java.TLE
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.rtbishop.lookingsat.MainViewModel
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.repo.SatPass
import com.rtbishop.lookingsat.vm.MainViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch