mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
v1.4.0 - Refactoring and code cleanup
This commit is contained in:
1 parent
cf86892ad5
commit
ad732bda79
11 files changed
+81
-57
No files matched your search
+2
-2
@@ -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>)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user