mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Restored satellite selection functionality
This commit is contained in:
1 parent
80ba3644f7
commit
a7c840d532
11 files changed
+118
-87
No files matched your search
@@ -39,26 +39,29 @@ interface EntriesDao {
|
|||||||
suspend fun insertEntries(entries: List<SatEntry>)
|
suspend fun insertEntries(entries: List<SatEntry>)
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
suspend fun updateEntries(entries: List<SatEntry>, cleanup: Boolean = false) {
|
suspend fun updateEntries(entries: List<SatEntry>) {
|
||||||
val entriesSelection = getEntriesSelection()
|
val entriesSelection = getEntriesSelection()
|
||||||
if (cleanup) deleteEntries()
|
|
||||||
insertEntries(entries)
|
insertEntries(entries)
|
||||||
restoreSelection(entriesSelection, true)
|
restoreEntriesSelection(entriesSelection)
|
||||||
}
|
|
||||||
|
|
||||||
@Query("UPDATE entries SET isSelected = :isSelected WHERE catnum = :catnum")
|
|
||||||
suspend fun updateEntrySelection(catnum: Int, isSelected: Boolean)
|
|
||||||
|
|
||||||
@Transaction
|
|
||||||
suspend fun updateEntriesSelection(catnums: List<Int>, isSelected: Boolean) {
|
|
||||||
catnums.forEach { catnum -> updateEntrySelection(catnum, isSelected) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transaction
|
@Transaction
|
||||||
suspend fun restoreSelection(catnums: List<Int>, isSelected: Boolean) {
|
suspend fun restoreEntriesSelection(catnums: List<Int>) {
|
||||||
updateEntriesSelection(catnums, isSelected)
|
updateEntriesSelection(catnums)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
suspend fun updateEntriesSelection(catnums: List<Int>) {
|
||||||
|
clearEntriesSelection()
|
||||||
|
catnums.forEach { catnum -> updateEntrySelection(catnum) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Query("UPDATE entries SET isSelected = 1 WHERE catnum = :catnum")
|
||||||
|
suspend fun updateEntrySelection(catnum: Int)
|
||||||
|
|
||||||
|
@Query("UPDATE entries SET isSelected = 0")
|
||||||
|
suspend fun clearEntriesSelection()
|
||||||
|
|
||||||
@Query("DELETE FROM entries")
|
@Query("DELETE FROM entries")
|
||||||
suspend fun deleteEntries()
|
suspend fun deleteEntries()
|
||||||
}
|
}
|
||||||
@@ -62,8 +62,8 @@ class LocalSource(
|
|||||||
entriesDao.updateEntries(entries.toFrameworkEntries())
|
entriesDao.updateEntries(entries.toFrameworkEntries())
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun updateEntriesSelection(catnums: List<Int>, isSelected: Boolean) {
|
override suspend fun updateEntriesSelection(catnums: List<Int>) {
|
||||||
entriesDao.updateEntriesSelection(catnums, isSelected)
|
entriesDao.updateEntriesSelection(catnums)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun updateTransmitters(transmitters: List<Transmitter>) {
|
override suspend fun updateTransmitters(transmitters: List<Transmitter>) {
|
||||||
|
|||||||
+6
-3
@@ -37,19 +37,21 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||||
|
|
||||||
|
private lateinit var binding: FragmentEntriesBinding
|
||||||
private val viewModel: EntriesViewModel by viewModels()
|
private val viewModel: EntriesViewModel by viewModels()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
setupComponents(view)
|
binding = FragmentEntriesBinding.bind(view)
|
||||||
|
setupComponents()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupComponents(view: View) {
|
private fun setupComponents() {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
val adapter = EntriesAdapter(viewModel)
|
val adapter = EntriesAdapter(viewModel)
|
||||||
val layoutManager = GridLayoutManager(context, 2)
|
val layoutManager = GridLayoutManager(context, 2)
|
||||||
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
||||||
val binding = FragmentEntriesBinding.bind(view).apply {
|
binding.run {
|
||||||
entriesRecycler.apply {
|
entriesRecycler.apply {
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
this.adapter = adapter
|
this.adapter = adapter
|
||||||
@@ -61,6 +63,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) }
|
entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) }
|
||||||
entriesMode.setOnClickListener { showModesDialog() }
|
entriesMode.setOnClickListener { showModesDialog() }
|
||||||
entriesSelectAll.setOnClickListener { viewModel.selectCurrentItems() }
|
entriesSelectAll.setOnClickListener { viewModel.selectCurrentItems() }
|
||||||
|
entriesAccept.setOnClickListener { viewModel.saveSelection() }
|
||||||
}
|
}
|
||||||
viewModel.satData.observe(viewLifecycleOwner) { satData ->
|
viewModel.satData.observe(viewLifecycleOwner) { satData ->
|
||||||
handleSatData(satData, binding, adapter)
|
handleSatData(satData, binding, adapter)
|
||||||
|
|||||||
@@ -67,6 +67,13 @@ class EntriesViewModel @Inject constructor(
|
|||||||
currentQuery.value = query
|
currentQuery.value = query
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun saveSelection() {
|
||||||
|
itemsFromRepo.value?.let { itemsAll ->
|
||||||
|
val selectedIds = itemsAll.filter { it.isSelected }.map { it.catnum }
|
||||||
|
repository.updateSelection(selectedIds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun updateSelection(catNums: List<Int>, isSelected: Boolean) {
|
override fun updateSelection(catNums: List<Int>, isSelected: Boolean) {
|
||||||
itemsFromRepo.value?.let { itemsAll ->
|
itemsFromRepo.value?.let { itemsAll ->
|
||||||
val copiedList = itemsAll.map { item -> item.copy() }
|
val copiedList = itemsAll.map { item -> item.copy() }
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var sharedPreferences: SharedPreferences
|
lateinit var sharedPreferences: SharedPreferences
|
||||||
|
private lateinit var binding: FragmentMapBinding
|
||||||
|
|
||||||
private val args: MapFragmentArgs by navArgs()
|
private val args: MapFragmentArgs by navArgs()
|
||||||
private val viewModel: MapViewModel by viewModels()
|
private val viewModel: MapViewModel by viewModels()
|
||||||
@@ -69,8 +70,14 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
binding = FragmentMapBinding.bind(view)
|
||||||
|
setupComponents()
|
||||||
|
setupObservers()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupComponents() {
|
||||||
Configuration.getInstance().load(requireContext(), sharedPreferences)
|
Configuration.getInstance().load(requireContext(), sharedPreferences)
|
||||||
val binding = FragmentMapBinding.bind(view).apply {
|
binding.run {
|
||||||
mapView.apply {
|
mapView.apply {
|
||||||
setMultiTouchControls(true)
|
setMultiTouchControls(true)
|
||||||
setTileSource(TileSourceFactory.WIKIMEDIA)
|
setTileSource(TileSourceFactory.WIKIMEDIA)
|
||||||
@@ -85,23 +92,22 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
// add overlays: 0 - GSP, 1 - SatTrack, 2 - SatFootprint, 3 - SatIcons
|
// add overlays: 0 - GSP, 1 - SatTrack, 2 - SatFootprint, 3 - SatIcons
|
||||||
overlays.addAll(Array(4) { FolderOverlay() })
|
overlays.addAll(Array(4) { FolderOverlay() })
|
||||||
}
|
}
|
||||||
|
mapBack.setOnClickListener { findNavController().navigateUp() }
|
||||||
|
mapBtnPrev.setOnClickListener { viewModel.scrollSelection(true) }
|
||||||
|
mapBtnNext.setOnClickListener { viewModel.scrollSelection(false) }
|
||||||
}
|
}
|
||||||
binding.mapBack.setOnClickListener { findNavController().navigateUp() }
|
|
||||||
binding.mapBtnPrev.setOnClickListener { viewModel.scrollSelection(true) }
|
|
||||||
binding.mapBtnNext.setOnClickListener { viewModel.scrollSelection(false) }
|
|
||||||
setupObservers(binding)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupObservers(binding: FragmentMapBinding) {
|
private fun setupObservers() {
|
||||||
viewModel.selectDefaultSatellite(args.catNum)
|
viewModel.selectDefaultSatellite(args.catNum)
|
||||||
viewModel.stationPosLiveData.observe(viewLifecycleOwner) { renderStationPos(it, binding) }
|
viewModel.stationPosLiveData.observe(viewLifecycleOwner) { renderStationPos(it) }
|
||||||
viewModel.satPositions.observe(viewLifecycleOwner) { renderSatPositions(it, binding) }
|
viewModel.satPositions.observe(viewLifecycleOwner) { renderSatPositions(it) }
|
||||||
viewModel.satTrack.observe(viewLifecycleOwner) { renderSatTrack(it, binding) }
|
viewModel.satTrack.observe(viewLifecycleOwner) { renderSatTrack(it) }
|
||||||
viewModel.satFootprint.observe(viewLifecycleOwner) { renderSatFootprint(it, binding) }
|
viewModel.satFootprint.observe(viewLifecycleOwner) { renderSatFootprint(it) }
|
||||||
viewModel.mapData.observe(viewLifecycleOwner) { renderSatData(it, binding) }
|
viewModel.mapData.observe(viewLifecycleOwner) { renderSatData(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderStationPos(stationPos: GeoPos, binding: FragmentMapBinding) {
|
private fun renderStationPos(stationPos: GeoPos) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
Marker(mapView).apply {
|
Marker(mapView).apply {
|
||||||
setInfoWindow(null)
|
setInfoWindow(null)
|
||||||
@@ -114,7 +120,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderSatPositions(posMap: Map<Satellite, GeoPos>, binding: FragmentMapBinding) {
|
private fun renderSatPositions(posMap: Map<Satellite, GeoPos>) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
val markers = FolderOverlay()
|
val markers = FolderOverlay()
|
||||||
posMap.entries.forEach {
|
posMap.entries.forEach {
|
||||||
@@ -143,7 +149,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderSatTrack(satTrack: List<List<GeoPos>>, binding: FragmentMapBinding) {
|
private fun renderSatTrack(satTrack: List<List<GeoPos>>) {
|
||||||
val trackOverlay = FolderOverlay()
|
val trackOverlay = FolderOverlay()
|
||||||
satTrack.forEach { track ->
|
satTrack.forEach { track ->
|
||||||
val trackPoints = track.map { GeoPoint(it.latitude, it.longitude) }
|
val trackPoints = track.map { GeoPoint(it.latitude, it.longitude) }
|
||||||
@@ -160,7 +166,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
binding.mapView.overlays[1] = trackOverlay
|
binding.mapView.overlays[1] = trackOverlay
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderSatFootprint(satFootprint: List<GeoPos>, binding: FragmentMapBinding) {
|
private fun renderSatFootprint(satFootprint: List<GeoPos>) {
|
||||||
val footprintPoints = satFootprint.map { GeoPoint(it.latitude, it.longitude) }
|
val footprintPoints = satFootprint.map { GeoPoint(it.latitude, it.longitude) }
|
||||||
val footprintOverlay = Polygon().apply {
|
val footprintOverlay = Polygon().apply {
|
||||||
fillPaint.set(footprintPaint)
|
fillPaint.set(footprintPaint)
|
||||||
@@ -174,7 +180,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
binding.mapView.overlays[2] = footprintOverlay
|
binding.mapView.overlays[2] = footprintOverlay
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renderSatData(mapData: MapData, binding: FragmentMapBinding) {
|
private fun renderSatData(mapData: MapData) {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
mapDataName.text =
|
mapDataName.text =
|
||||||
String.format(getString(R.string.pat_osm_idName), mapData.catNum, mapData.name)
|
String.format(getString(R.string.pat_osm_idName), mapData.catNum, mapData.name)
|
||||||
|
|||||||
+15
-13
@@ -36,19 +36,21 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesClickListener {
|
class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesClickListener {
|
||||||
|
|
||||||
|
private lateinit var binding: FragmentPassesBinding
|
||||||
private val passesViewModel: PassesViewModel by viewModels()
|
private val passesViewModel: PassesViewModel by viewModels()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
setupComponents(view)
|
binding = FragmentPassesBinding.bind(view)
|
||||||
|
setupComponents()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupComponents(view: View) {
|
private fun setupComponents() {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
val adapter = PassesAdapter(passesViewModel.shouldUseUTC(), this)
|
val adapter = PassesAdapter(passesViewModel.shouldUseUTC(), this)
|
||||||
val layoutManager = LinearLayoutManager(context)
|
val layoutManager = LinearLayoutManager(context)
|
||||||
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
||||||
val binding = FragmentPassesBinding.bind(view).apply {
|
binding.run {
|
||||||
passesList.apply {
|
passesList.apply {
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
this.adapter = adapter
|
this.adapter = adapter
|
||||||
@@ -73,16 +75,6 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateToPassPrefs() {
|
|
||||||
val direction = PassesFragmentDirections.actionPassesToPassPrefs()
|
|
||||||
findNavController().navigate(direction)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun navigateToSettings() {
|
|
||||||
val direction = PassesFragmentDirections.actionGlobalSettingsFragment()
|
|
||||||
findNavController().navigate(direction)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleNewPasses(
|
private fun handleNewPasses(
|
||||||
dataState: DataState<List<SatPass>>,
|
dataState: DataState<List<SatPass>>,
|
||||||
passesAdapter: PassesAdapter,
|
passesAdapter: PassesAdapter,
|
||||||
@@ -134,6 +126,16 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun navigateToPassPrefs() {
|
||||||
|
val direction = PassesFragmentDirections.actionPassesToPassPrefs()
|
||||||
|
findNavController().navigate(direction)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun navigateToSettings() {
|
||||||
|
val direction = PassesFragmentDirections.actionGlobalSettingsFragment()
|
||||||
|
findNavController().navigate(direction)
|
||||||
|
}
|
||||||
|
|
||||||
override fun navigateToPass(satPass: SatPass) {
|
override fun navigateToPass(satPass: SatPass) {
|
||||||
if (satPass.progress < 100) {
|
if (satPass.progress < 100) {
|
||||||
val catNum = satPass.catNum
|
val catNum = satPass.catNum
|
||||||
|
|||||||
@@ -40,21 +40,23 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
lateinit var preferences: ISettingsHandler
|
lateinit var preferences: ISettingsHandler
|
||||||
|
private lateinit var binding: FragmentRadarBinding
|
||||||
private val args: RadarFragmentArgs by navArgs()
|
private val args: RadarFragmentArgs by navArgs()
|
||||||
private val viewModel: RadarViewModel by viewModels()
|
private val viewModel: RadarViewModel by viewModels()
|
||||||
private var radarView: RadarView? = null
|
private var radarView: RadarView? = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
setupComponents(view)
|
binding = FragmentRadarBinding.bind(view)
|
||||||
|
setupViews()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupComponents(view: View) {
|
private fun setupViews() {
|
||||||
val context = requireContext()
|
val context = requireContext()
|
||||||
val adapter = TransmittersAdapter()
|
val adapter = TransmittersAdapter()
|
||||||
val layoutManager = LinearLayoutManager(context)
|
val layoutManager = LinearLayoutManager(context)
|
||||||
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
val itemDecoration = DividerItemDecoration(context, layoutManager.orientation)
|
||||||
FragmentRadarBinding.bind(view).apply {
|
binding.run {
|
||||||
radarRecycler.apply {
|
radarRecycler.apply {
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
this.adapter = adapter
|
this.adapter = adapter
|
||||||
@@ -62,14 +64,11 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
|||||||
addItemDecoration(itemDecoration)
|
addItemDecoration(itemDecoration)
|
||||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||||
}
|
}
|
||||||
setupObservers(adapter, this)
|
setupObservers(adapter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupObservers(
|
private fun setupObservers(transmittersAdapter: TransmittersAdapter) {
|
||||||
transmittersAdapter: TransmittersAdapter,
|
|
||||||
binding: FragmentRadarBinding
|
|
||||||
) {
|
|
||||||
viewModel.getPass(args.catNum, args.aosTime).observe(viewLifecycleOwner) { pass ->
|
viewModel.getPass(args.catNum, args.aosTime).observe(viewLifecycleOwner) { pass ->
|
||||||
radarView = RadarView(requireContext()).apply {
|
radarView = RadarView(requireContext()).apply {
|
||||||
setShowAim(preferences.getUseCompass())
|
setShowAim(preferences.getUseCompass())
|
||||||
@@ -79,7 +78,7 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
|||||||
viewModel.radarData.observe(viewLifecycleOwner) { passData ->
|
viewModel.radarData.observe(viewLifecycleOwner) { passData ->
|
||||||
radarView?.setPosition(passData.satPos)
|
radarView?.setPosition(passData.satPos)
|
||||||
radarView?.setPositions(passData.satTrack)
|
radarView?.setPositions(passData.satTrack)
|
||||||
setPassText(pass, passData.satPos, binding)
|
setPassText(pass, passData.satPos)
|
||||||
}
|
}
|
||||||
viewModel.transmitters.observe(viewLifecycleOwner) { list ->
|
viewModel.transmitters.observe(viewLifecycleOwner) { list ->
|
||||||
if (list.isNotEmpty()) {
|
if (list.isNotEmpty()) {
|
||||||
@@ -101,12 +100,7 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun navigateToMap(catnum: Int) {
|
private fun setPassText(satPass: SatPass, satPos: SatPos) {
|
||||||
val direction = RadarFragmentDirections.actionGlobalMapFragment(catnum)
|
|
||||||
findNavController().navigate(direction)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setPassText(satPass: SatPass, satPos: SatPos, binding: FragmentRadarBinding) {
|
|
||||||
val timeNow = System.currentTimeMillis()
|
val timeNow = System.currentTimeMillis()
|
||||||
val polarAz = getString(R.string.pat_azimuth)
|
val polarAz = getString(R.string.pat_azimuth)
|
||||||
val polarEl = getString(R.string.pat_elevation)
|
val polarEl = getString(R.string.pat_elevation)
|
||||||
@@ -135,6 +129,11 @@ class RadarFragment : Fragment(R.layout.fragment_radar) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun navigateToMap(catnum: Int) {
|
||||||
|
val direction = RadarFragmentDirections.actionGlobalMapFragment(catnum)
|
||||||
|
findNavController().navigate(direction)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
viewModel.enableSensor()
|
viewModel.enableSensor()
|
||||||
|
|||||||
+30
-21
@@ -46,6 +46,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
|||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||||
|
|
||||||
|
private lateinit var binding: FragmentSettingsBinding
|
||||||
private val viewModel: SettingsViewModel by viewModels()
|
private val viewModel: SettingsViewModel by viewModels()
|
||||||
private val locationFine = Manifest.permission.ACCESS_FINE_LOCATION
|
private val locationFine = Manifest.permission.ACCESS_FINE_LOCATION
|
||||||
private val locationCoarse = Manifest.permission.ACCESS_COARSE_LOCATION
|
private val locationCoarse = Manifest.permission.ACCESS_COARSE_LOCATION
|
||||||
@@ -64,23 +65,31 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
val settingsBinding = FragmentSettingsBinding.bind(view)
|
binding = FragmentSettingsBinding.bind(view)
|
||||||
settingsBinding.prefsBack.setOnClickListener { findNavController().navigateUp() }
|
setupViews()
|
||||||
setupAboutCard(settingsBinding)
|
setupObservers()
|
||||||
setupDataCard(settingsBinding)
|
}
|
||||||
setupLocationCard(settingsBinding)
|
|
||||||
setupTrackingCard(settingsBinding)
|
private fun setupViews() {
|
||||||
setupOtherCard(settingsBinding)
|
binding.prefsBack.setOnClickListener { findNavController().navigateUp() }
|
||||||
setupWarrantyCard(settingsBinding)
|
setupAboutCard()
|
||||||
|
setupDataCard()
|
||||||
|
setupLocationCard()
|
||||||
|
setupTrackingCard()
|
||||||
|
setupOtherCard()
|
||||||
|
setupWarrantyCard()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupObservers() {
|
||||||
viewModel.stationPosition.asLiveData().observe(viewLifecycleOwner) { stationPos ->
|
viewModel.stationPosition.asLiveData().observe(viewLifecycleOwner) { stationPos ->
|
||||||
stationPos?.let { handleStationPosition(stationPos, settingsBinding) }
|
stationPos?.let { handleStationPosition(stationPos) }
|
||||||
}
|
}
|
||||||
viewModel.getUpdateState().asLiveData().observe(viewLifecycleOwner) { updateState ->
|
viewModel.getUpdateState().asLiveData().observe(viewLifecycleOwner) { updateState ->
|
||||||
updateState?.let { handleSatState(updateState, settingsBinding) }
|
updateState?.let { handleSatState(updateState) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupAboutCard(binding: FragmentSettingsBinding) {
|
private fun setupAboutCard() {
|
||||||
binding.prefsInfo.aboutVersion.text =
|
binding.prefsInfo.aboutVersion.text =
|
||||||
String.format(getString(R.string.about_version), BuildConfig.VERSION_NAME)
|
String.format(getString(R.string.about_version), BuildConfig.VERSION_NAME)
|
||||||
binding.prefsInfo.aboutBtnGithub.setOnClickListener {
|
binding.prefsInfo.aboutBtnGithub.setOnClickListener {
|
||||||
@@ -94,8 +103,8 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupLocationCard(binding: FragmentSettingsBinding) {
|
private fun setupLocationCard() {
|
||||||
setPositionText(viewModel.getStationPosition(), binding)
|
setPositionText(viewModel.getStationPosition())
|
||||||
binding.prefsLocation.locationBtnGps.setOnClickListener {
|
binding.prefsLocation.locationBtnGps.setOnClickListener {
|
||||||
locationRequest.launch(arrayOf(locationFine, locationCoarse))
|
locationRequest.launch(arrayOf(locationFine, locationCoarse))
|
||||||
}
|
}
|
||||||
@@ -114,7 +123,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupDataCard(binding: FragmentSettingsBinding) {
|
private fun setupDataCard() {
|
||||||
binding.prefsData.updateBtnFile.setOnClickListener { contentRequest.launch("*/*") }
|
binding.prefsData.updateBtnFile.setOnClickListener { contentRequest.launch("*/*") }
|
||||||
binding.prefsData.updateBtnWeb.setOnClickListener {
|
binding.prefsData.updateBtnWeb.setOnClickListener {
|
||||||
val action = SettingsFragmentDirections.actionPrefsToSources()
|
val action = SettingsFragmentDirections.actionPrefsToSources()
|
||||||
@@ -126,7 +135,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupTrackingCard(binding: FragmentSettingsBinding) {
|
private fun setupTrackingCard() {
|
||||||
binding.prefsTracking.trackingSwitch.apply {
|
binding.prefsTracking.trackingSwitch.apply {
|
||||||
isChecked = viewModel.getRotatorEnabled()
|
isChecked = viewModel.getRotatorEnabled()
|
||||||
binding.prefsTracking.trackingIp.isEnabled = isChecked
|
binding.prefsTracking.trackingIp.isEnabled = isChecked
|
||||||
@@ -147,7 +156,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupOtherCard(binding: FragmentSettingsBinding) {
|
private fun setupOtherCard() {
|
||||||
binding.prefsOther.otherSwitchUtc.apply {
|
binding.prefsOther.otherSwitchUtc.apply {
|
||||||
isChecked = viewModel.getUseUTC()
|
isChecked = viewModel.getUseUTC()
|
||||||
setOnCheckedChangeListener { _, isChecked -> viewModel.setUseUTC(isChecked) }
|
setOnCheckedChangeListener { _, isChecked -> viewModel.setUseUTC(isChecked) }
|
||||||
@@ -162,22 +171,22 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupWarrantyCard(binding: FragmentSettingsBinding) {
|
private fun setupWarrantyCard() {
|
||||||
binding.prefsWarranty.warrantyThanks.movementMethod = LinkMovementMethod.getInstance()
|
binding.prefsWarranty.warrantyThanks.movementMethod = LinkMovementMethod.getInstance()
|
||||||
binding.prefsWarranty.warrantyLicense.movementMethod = LinkMovementMethod.getInstance()
|
binding.prefsWarranty.warrantyLicense.movementMethod = LinkMovementMethod.getInstance()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setPositionText(geoPos: GeoPos, binding: FragmentSettingsBinding) {
|
private fun setPositionText(geoPos: GeoPos) {
|
||||||
val latFormat = getString(R.string.location_lat)
|
val latFormat = getString(R.string.location_lat)
|
||||||
val lonFormat = getString(R.string.location_lon)
|
val lonFormat = getString(R.string.location_lon)
|
||||||
binding.prefsLocation.locationLat.text = String.format(latFormat, geoPos.latitude)
|
binding.prefsLocation.locationLat.text = String.format(latFormat, geoPos.latitude)
|
||||||
binding.prefsLocation.locationLon.text = String.format(lonFormat, geoPos.longitude)
|
binding.prefsLocation.locationLon.text = String.format(lonFormat, geoPos.longitude)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleStationPosition(pos: DataState<GeoPos>, binding: FragmentSettingsBinding) {
|
private fun handleStationPosition(pos: DataState<GeoPos>) {
|
||||||
when (pos) {
|
when (pos) {
|
||||||
is DataState.Success -> {
|
is DataState.Success -> {
|
||||||
setPositionText(pos.data, binding)
|
setPositionText(pos.data)
|
||||||
binding.prefsLocation.locationProgress.isIndeterminate = false
|
binding.prefsLocation.locationProgress.isIndeterminate = false
|
||||||
viewModel.setPositionHandled()
|
viewModel.setPositionHandled()
|
||||||
showToast(getString(R.string.pref_pos_success))
|
showToast(getString(R.string.pref_pos_success))
|
||||||
@@ -194,7 +203,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleSatState(state: DataState<Long>, binding: FragmentSettingsBinding) {
|
private fun handleSatState(state: DataState<Long>) {
|
||||||
when (state) {
|
when (state) {
|
||||||
is DataState.Success -> {
|
is DataState.Success -> {
|
||||||
binding.prefsData.updateProgress.isIndeterminate = false
|
binding.prefsData.updateProgress.isIndeterminate = false
|
||||||
|
|||||||
@@ -116,8 +116,10 @@ class DataRepository(
|
|||||||
|
|
||||||
override suspend fun getTransmitters(catnum: Int) = localSource.getTransmitters(catnum)
|
override suspend fun getTransmitters(catnum: Int) = localSource.getTransmitters(catnum)
|
||||||
|
|
||||||
override suspend fun updateSelection(catnums: List<Int>, isSelected: Boolean) {
|
override fun updateSelection(catnums: List<Int>) {
|
||||||
localSource.updateEntriesSelection(catnums, isSelected)
|
repositoryScope.launch {
|
||||||
|
localSource.updateEntriesSelection(catnums)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun importSatellites(stream: InputStream): List<SatEntry> {
|
private suspend fun importSatellites(stream: InputStream): List<SatEntry> {
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ interface ILocalSource {
|
|||||||
|
|
||||||
suspend fun updateEntries(entries: List<SatEntry>)
|
suspend fun updateEntries(entries: List<SatEntry>)
|
||||||
|
|
||||||
suspend fun updateEntriesSelection(catnums: List<Int>, isSelected: Boolean)
|
suspend fun updateEntriesSelection(catnums: List<Int>)
|
||||||
|
|
||||||
suspend fun updateTransmitters(transmitters: List<Transmitter>)
|
suspend fun updateTransmitters(transmitters: List<Transmitter>)
|
||||||
|
|
||||||
|
|||||||
@@ -42,5 +42,5 @@ interface IDataRepository {
|
|||||||
|
|
||||||
suspend fun getTransmitters(catnum: Int): List<Transmitter>
|
suspend fun getTransmitters(catnum: Int): List<Transmitter>
|
||||||
|
|
||||||
suspend fun updateSelection(catnums: List<Int>, isSelected: Boolean = true)
|
fun updateSelection(catnums: List<Int>)
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user