mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Successfully moved to Dagger DI framework
This commit is contained in:
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())
|
||||
}
|
||||
}
|
||||
+9
-3
@@ -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)
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user