v1.4.0 - Refactoring and code cleanup

This commit is contained in:
Arty Bishop committed 2020-04-23 21:39:15 +01:00
1 parent cf86892ad5
commit ad732bda79
11 files changed
+81 -57

No files matched your search

+2 -2
View File
@@ -30,8 +30,8 @@ android {
applicationId "com.rtbishop.look4sat"
minSdkVersion 21
targetSdkVersion 29
versionCode 11
versionName '1.3.4'
versionCode 12
versionName '1.4.0'
}
buildTypes {
release {
@@ -42,8 +42,9 @@ class LocalDataSource @Inject constructor(
return entriesDao.getSelectedEntries()
}
override suspend fun updateEntriesSelection(entries: List<SatEntry>) {
entriesDao.updateEntriesSelection(entries)
override suspend fun updateEntriesSelection(catNumList: List<Int>) {
entriesDao.clearEntriesSelection()
catNumList.forEach { entriesDao.updateEntrySelection(it) }
}
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -11,7 +11,7 @@ interface LocalSource {
suspend fun getSelectedEntries(): List<SatEntry>
suspend fun updateEntriesSelection(entries: List<SatEntry>)
suspend fun updateEntriesSelection(catNumList: List<Int>)
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -19,7 +19,10 @@
package com.rtbishop.look4sat.persistence.dao
import androidx.room.*
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.rtbishop.look4sat.data.SatEntry
@Dao
@@ -34,6 +37,9 @@ interface EntriesDao {
@Query("SELECT * FROM entries WHERE isSelected = 1 ORDER BY name ASC")
suspend fun getSelectedEntries(): List<SatEntry>
@Update
suspend fun updateEntriesSelection(entries: List<SatEntry>)
@Query("UPDATE entries SET isSelected = 1 WHERE catNum == :catNum")
suspend fun updateEntrySelection(catNum: Int)
@Query("UPDATE entries SET isSelected = 0")
suspend fun clearEntriesSelection()
}
@@ -58,8 +58,8 @@ class DefaultRepository @Inject constructor(
return localSource.getSelectedEntries()
}
override suspend fun updateEntriesSelection(entries: List<SatEntry>) {
localSource.updateEntriesSelection(entries)
override suspend fun updateEntriesSelection(catNumList: List<Int>) {
localSource.updateEntriesSelection(catNumList)
}
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -11,7 +11,7 @@ interface Repository {
suspend fun getSelectedEntries(): List<SatEntry>
suspend fun updateEntriesSelection(entries: List<SatEntry>)
suspend fun updateEntriesSelection(catNumList: List<Int>)
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -88,7 +88,7 @@ class MainActivity : AppCompatActivity() {
setSupportActionBar(toolbar)
appBarConfig = AppBarConfiguration(
setOf(R.id.nav_pass_list, R.id.nav_map_view, R.id.nav_settings, R.id.nav_about),
setOf(R.id.nav_pass_list, R.id.nav_map_view),
mainBinding.drawerLayout
)
@@ -122,6 +122,9 @@ class MainActivity : AppCompatActivity() {
drawerBinding.drawerLonValue.text =
String.format(getString(R.string.pat_location), gsp.longitude)
})
viewModel.getDebugMessage().observe(this, Observer { message ->
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
})
}
private fun setupDrawer() {
@@ -39,56 +39,63 @@ class SharedViewModel @Inject constructor(
private val repository: Repository
) : ViewModel() {
var isFirstLaunch = true
private var calculationJob: Job? = null
private val urlList = listOf("https://celestrak.com/NORAD/elements/active.txt")
private val _satPassList = MutableLiveData<MutableList<SatPass>>()
fun getSatPassList(): LiveData<MutableList<SatPass>> = _satPassList
private val _gsp = MutableLiveData(prefsManager.getPosition())
fun getGSP(): LiveData<GroundStationPosition> = _gsp
private val _satPassList = MutableLiveData<MutableList<SatPass>>()
private val _isListRefreshing = MutableLiveData<Boolean>()
fun getRefreshing(): LiveData<Boolean> = _isListRefreshing
private val _debugMessage = MutableLiveData<String>()
private var calculationJob: Job? = null
var isFirstLaunch = true
fun getTransmittersForSat(id: Int) = liveData { emit(repository.getTransmittersByCatNum(id)) }
fun getGSP(): LiveData<GroundStationPosition> = _gsp
fun getSatPassList(): LiveData<MutableList<SatPass>> = _satPassList
fun getRefreshing(): LiveData<Boolean> = _isListRefreshing
fun getDebugMessage(): LiveData<String> = _debugMessage
fun getRefreshRate() = prefsManager.getRefreshRate()
fun getHoursAhead() = prefsManager.getHoursAhead()
fun getMinElevation() = prefsManager.getMinElevation()
suspend fun getAllEntries(): List<SatEntry> {
return repository.getAllEntries()
}
fun setPassPrefs(hoursAhead: Int, minEl: Double) {
prefsManager.setHoursAhead(hoursAhead)
prefsManager.setMinElevation(minEl)
}
fun setPositionFromPref() = _gsp.postValue(prefsManager.getPosition())
fun getTransmittersForSat(id: Int) = liveData { emit(repository.getTransmittersByCatNum(id)) }
fun updateEntries() {
viewModelScope.launch {
val selected = repository.getSelectedEntries()
repository.updateEntriesFrom(urlList)
repository.updateEntriesSelection(selected)
}
}
fun updateEntriesSelection(entries: List<SatEntry>) {
viewModelScope.launch {
repository.updateEntriesSelection(entries)
calculatePasses()
}
}
fun updatePosition() {
prefsManager.getLastKnownPosition().let {
prefsManager.setPosition(it)
_gsp.postValue(it)
_debugMessage.postValue("Location was updated")
}
}
fun updateEntries() {
viewModelScope.launch(Dispatchers.IO) {
val selected = repository.getSelectedEntries().map { it.catNum }
repository.updateEntriesFrom(urlList)
repository.updateEntriesSelection(selected)
_debugMessage.postValue("TLE file was updated")
}
}
fun updateTransmitters() {
viewModelScope.launch(Dispatchers.IO) {
repository.updateTransmitters()
_debugMessage.postValue("Transceivers database was updated")
}
}
suspend fun getAllEntries(): List<SatEntry> {
return repository.getAllEntries()
fun updateEntriesSelection(catNumList: MutableList<Int>) {
viewModelScope.launch(Dispatchers.IO) {
repository.updateEntriesSelection(catNumList)
calculatePasses()
}
}
fun calculatePasses() {
@@ -107,21 +114,15 @@ class SharedViewModel @Inject constructor(
}
}
fun setPassPrefs(hoursAhead: Int, minEl: Double) {
prefsManager.setHoursAhead(hoursAhead)
prefsManager.setMinElevation(minEl)
}
private fun getPassesForEntries(
entry: SatEntry,
dateNow: Date,
gsp: GroundStationPosition
): MutableList<SatPass> {
val passList = mutableListOf<SatPass>()
val predictor = PassPredictor(entry.tle, gsp)
val passes = predictor.getPasses(dateNow, getHoursAhead(), true)
passes.forEach { passList.add(SatPass(entry.tle, predictor, it)) }
return passList
val passList = passes.map { SatPass(entry.tle, predictor, it) }
return passList as MutableList<SatPass>
}
private fun filterAndSortPasses(
@@ -116,7 +116,12 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) {
binding.fabSatSelect.setOnClickListener {
lifecycleScope.launch {
val list = viewModel.getAllEntries() as MutableList
showSelectSatDialog(list)
if (list.isEmpty()) {
Toast.makeText(requireContext(), "Please, update TLE", Toast.LENGTH_SHORT)
.show()
} else {
showSelectSatDialog(list, binding)
}
}
}
}
@@ -171,17 +176,21 @@ class PassListFragment : Fragment(R.layout.fragment_pass_list) {
.show()
}
private fun showSelectSatDialog(tleMainList: MutableList<SatEntry>) {
private fun showSelectSatDialog(
tleMainList: MutableList<SatEntry>,
binding: FragmentPassListBinding
) {
val listener = object : SatEntryDialogFragment.EntriesSubmitListener {
override fun onEntriesSubmit(entries: MutableList<SatEntry>) {
viewModel.updateEntriesSelection(entries)
override fun onEntriesSubmit(catNumList: MutableList<Int>) {
binding.refLayoutPassList.isRefreshing = true
viewModel.updateEntriesSelection(catNumList)
}
}
val dialogFragment = SatEntryDialogFragment(tleMainList).apply {
SatEntryDialogFragment(tleMainList).apply {
setEntriesListener(listener)
show(mainActivity.supportFragmentManager, "SatEntryDialogFragment")
}
dialogFragment.show(mainActivity.supportFragmentManager, "SatEntryDialogFragment")
}
private fun setTimer() {
@@ -94,10 +94,11 @@ class PolarViewFragment : Fragment(R.layout.fragment_polar_view) {
}
private fun refreshView() {
val rate = viewModel.getRefreshRate()
lifecycleScope.launch {
while (true) {
polarView.invalidate()
delay(viewModel.getRefreshRate())
delay(rate)
}
}
}
@@ -97,7 +97,10 @@ class SatEntryDialogFragment(private var entries: MutableList<SatEntry>) :
}
private fun onPositiveClicked() {
entriesListener.onEntriesSubmit(entries)
val catNumList = mutableListOf<Int>().apply {
entries.forEach { if (it.isSelected) this.add(it.catNum) }
}
entriesListener.onEntriesSubmit(catNumList)
dismiss()
}
@@ -128,6 +131,6 @@ class SatEntryDialogFragment(private var entries: MutableList<SatEntry>) :
}
interface EntriesSubmitListener {
fun onEntriesSubmit(entries: MutableList<SatEntry>)
fun onEntriesSubmit(catNumList: MutableList<Int>)
}
}