Added LocalDataSource, Repository and ViewModel to Injector. Code move and cleanup.

This commit is contained in:
Arty Bishop committed 2019-10-29 22:52:51 +00:00
1 parent ace042d0b2
commit 53e64c30c2
13 files changed
+83 -31

No files matched your search

+1 -1
View File
@@ -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)
@@ -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")
}
}
+1 -1
View File
@@ -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"