mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Added LocalDataSource, Repository and ViewModel to Injector. Code move and cleanup.
This commit is contained in:
1 parent
ace042d0b2
commit
53e64c30c2
13 files changed
+83
-31
No files matched your search
@@ -14,7 +14,7 @@
|
||||
android:theme="@style/AppTheme"
|
||||
tools:ignore="GoogleAppIndexingWarning">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:name=".ui.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
<intent-filter>
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
package com.rtbishop.lookingsat
|
||||
|
||||
import android.content.Context
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.rtbishop.lookingsat.api.RemoteDataSource
|
||||
import com.rtbishop.lookingsat.api.TransmittersApi
|
||||
import com.rtbishop.lookingsat.db.LocalDataSource
|
||||
import com.rtbishop.lookingsat.db.TransmittersDatabase
|
||||
import com.rtbishop.lookingsat.repo.Repository
|
||||
import com.rtbishop.lookingsat.vm.ViewModelFactory
|
||||
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/")
|
||||
@@ -18,4 +25,18 @@ object Injector {
|
||||
|
||||
return RemoteDataSource(api, client)
|
||||
}
|
||||
|
||||
private fun provideLocalDataSource(context: Context): LocalDataSource {
|
||||
val dao = TransmittersDatabase.getInstance(context).transmittersDao()
|
||||
|
||||
return LocalDataSource(dao)
|
||||
}
|
||||
|
||||
private fun provideRepository(context: Context): Repository {
|
||||
return Repository(provideLocalDataSource(context), provideRemoteDataSource())
|
||||
}
|
||||
|
||||
private fun provideViewModelFactory(context: Context): ViewModelProvider.Factory {
|
||||
return ViewModelFactory(provideRepository(context))
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package com.rtbishop.lookingsat
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
|
||||
class MainViewModel(application: Application) : AndroidViewModel(application)
|
||||
@@ -10,6 +10,7 @@ private const val TLE_AMATEUR = "https://celestrak.com/NORAD/elements/amateur.tx
|
||||
private const val TLE_WEATHER = "https://celestrak.com/NORAD/elements/weather.txt"
|
||||
|
||||
class RemoteDataSource(private val api: TransmittersApi, private val client: OkHttpClient) {
|
||||
|
||||
private val requestAmateur = Request.Builder().url(TLE_AMATEUR).build()
|
||||
private val requestWeather = Request.Builder().url(TLE_WEATHER).build()
|
||||
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
package com.rtbishop.lookingsat.repo
|
||||
|
||||
class Repository
|
||||
import com.rtbishop.lookingsat.api.RemoteDataSource
|
||||
import com.rtbishop.lookingsat.db.LocalDataSource
|
||||
|
||||
class Repository(
|
||||
private val localSource: LocalDataSource,
|
||||
private val remoteSource: RemoteDataSource
|
||||
)
|
||||
@@ -10,7 +10,8 @@ import com.rtbishop.lookingsat.R
|
||||
class CreditsFragment : Fragment() {
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
return inflater.inflate(R.layout.fragment_credits, container, false)
|
||||
|
||||
+29
-6
@@ -1,4 +1,4 @@
|
||||
package com.rtbishop.lookingsat
|
||||
package com.rtbishop.lookingsat.ui
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
@@ -33,6 +33,8 @@ import androidx.preference.PreferenceManager
|
||||
import com.google.android.gms.location.FusedLocationProviderClient
|
||||
import com.google.android.gms.location.LocationServices
|
||||
import com.google.android.material.navigation.NavigationView
|
||||
import com.rtbishop.lookingsat.R
|
||||
import com.rtbishop.lookingsat.vm.MainViewModel
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -86,7 +88,12 @@ class MainActivity : AppCompatActivity() {
|
||||
drawerGetLocation = header.findViewById(R.id.drawer_get_location)
|
||||
val navController = findNavController(R.id.nav_host)
|
||||
|
||||
appBarConfig = AppBarConfiguration(setOf(R.id.nav_sky, R.id.nav_single_sat), drawerLayout)
|
||||
appBarConfig = AppBarConfiguration(
|
||||
setOf(
|
||||
R.id.nav_sky,
|
||||
R.id.nav_single_sat
|
||||
), drawerLayout
|
||||
)
|
||||
setupActionBarWithNavController(navController, appBarConfig)
|
||||
navView.setupWithNavController(navController)
|
||||
|
||||
@@ -111,7 +118,12 @@ class MainActivity : AppCompatActivity() {
|
||||
openGitHub()
|
||||
}
|
||||
|
||||
drawerGetLocation.startAnimation(AnimationUtils.loadAnimation(this, R.anim.pulse))
|
||||
drawerGetLocation.startAnimation(
|
||||
AnimationUtils.loadAnimation(
|
||||
this,
|
||||
R.anim.pulse
|
||||
)
|
||||
)
|
||||
drawerGetLocation.setOnClickListener {
|
||||
it.isEnabled = false
|
||||
updateLocation()
|
||||
@@ -146,11 +158,22 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
private fun updateLocation() {
|
||||
if (ContextCompat.checkSelfPermission(this, LOCATION_PERM) != GRANTED) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, LOCATION_PERM)) {
|
||||
if (ContextCompat.checkSelfPermission(
|
||||
this,
|
||||
LOCATION_PERM
|
||||
) != GRANTED
|
||||
) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||
this,
|
||||
LOCATION_PERM
|
||||
)
|
||||
) {
|
||||
Toast.makeText(this, "Missing permissions", Toast.LENGTH_LONG).show()
|
||||
} else {
|
||||
ActivityCompat.requestPermissions(this, arrayOf(LOCATION_PERM), LOCATION_REQ)
|
||||
ActivityCompat.requestPermissions(
|
||||
this, arrayOf(LOCATION_PERM),
|
||||
LOCATION_REQ
|
||||
)
|
||||
}
|
||||
} else {
|
||||
getPreciseLocation()
|
||||
@@ -5,20 +5,15 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.rtbishop.lookingsat.MainViewModel
|
||||
import com.rtbishop.lookingsat.R
|
||||
|
||||
class RadarFragment : Fragment() {
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
|
||||
return inflater.inflate(R.layout.fragment_radar, container, false)
|
||||
}
|
||||
}
|
||||
@@ -5,20 +5,15 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.rtbishop.lookingsat.MainViewModel
|
||||
import com.rtbishop.lookingsat.R
|
||||
|
||||
class SkyFragment : Fragment() {
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
|
||||
return inflater.inflate(R.layout.fragment_sky, container, false)
|
||||
}
|
||||
}
|
||||
@@ -5,20 +5,15 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProviders
|
||||
import com.rtbishop.lookingsat.MainViewModel
|
||||
import com.rtbishop.lookingsat.R
|
||||
|
||||
class WorldMapFragment : Fragment() {
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
|
||||
return inflater.inflate(R.layout.fragment_worldmap, container, false)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.rtbishop.lookingsat.vm
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.rtbishop.lookingsat.repo.Repository
|
||||
|
||||
class MainViewModel(private val repository: Repository) : ViewModel()
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.rtbishop.lookingsat.vm
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.rtbishop.lookingsat.repo.Repository
|
||||
|
||||
class ViewModelFactory(private val repository: Repository) : ViewModelProvider.Factory {
|
||||
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return MainViewModel(repository) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel")
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
tools:context=".ui.MainActivity">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
Reference in new issue
Block a user