mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-04 03:37:21 +00:00
Added PassesPrefsDialog.kt with extra, will cleanup later
This commit is contained in:
1 parent
be26b3e1dc
commit
f58f851151
15 files changed
+349
-66
No files matched your search
+28
-2
@@ -29,9 +29,10 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.presentation.ItemDivider
|
||||
import com.rtbishop.look4sat.presentation.getNavResult
|
||||
import com.rtbishop.look4sat.presentation.navigateSafe
|
||||
import com.rtbishop.look4sat.presentation.toTimerString
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
@@ -66,15 +67,37 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
layoutManager = LinearLayoutManager(context)
|
||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
addItemDecoration(ItemDivider(R.drawable.rec_divider_dark))
|
||||
// addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
// override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
// if (dy > 0 && passesFab.visibility == View.VISIBLE) passesFab.hide()
|
||||
// else if (dy < 0 && passesFab.visibility != View.VISIBLE) passesFab.show()
|
||||
// }
|
||||
// })
|
||||
}
|
||||
passesRefresh.setOnClickListener { passesViewModel.forceCalculation() }
|
||||
passesRefresh.setOnClickListener { findNavController().navigate(R.id.nav_pass_prefs) }
|
||||
// passesSwipe.apply {
|
||||
// setColorSchemeResources(R.color.greySurface)
|
||||
// setProgressBackgroundColorSchemeResource(R.color.themeLight)
|
||||
// setOnRefreshListener { passesViewModel.forceCalculation() }
|
||||
// }
|
||||
}
|
||||
// val appBarConfiguration = AppBarConfiguration(setOf(R.id.nav_passes))
|
||||
// binding.passesToolbar.setupWithNavController(findNavController(), appBarConfiguration)
|
||||
// binding.passesToolbar.navigationIcon =
|
||||
// ResourcesCompat.getDrawable(resources, R.drawable.ic_add, requireActivity().theme)
|
||||
// binding.passesToolbar.inflateMenu(R.menu.passes_menu)
|
||||
// binding.passesFab.setOnClickListener {
|
||||
// findNavController().navigate(R.id.nav_entries)
|
||||
// }
|
||||
passesViewModel.passes.observe(viewLifecycleOwner, { passesResult ->
|
||||
handleNewPasses(passesResult, passesAdapter, binding)
|
||||
})
|
||||
passesViewModel.isFirstLaunchDone.observe(viewLifecycleOwner, { setupDone ->
|
||||
if (!setupDone) locPermReq.launch(arrayOf(locPermFine, locPermCoarse))
|
||||
})
|
||||
getNavResult<Pair<Int, Double>>(R.id.nav_passes, "prefs") { prefs ->
|
||||
passesViewModel.forceCalculation(prefs.first, prefs.second)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNewPasses(
|
||||
@@ -86,6 +109,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
is DataState.Success -> {
|
||||
passesAdapter.submitList(dataState.data)
|
||||
binding.apply {
|
||||
// passesSwipe.isRefreshing = false
|
||||
passesError.visibility = View.INVISIBLE
|
||||
passesProgress.visibility = View.INVISIBLE
|
||||
passesRecycler.visibility = View.VISIBLE
|
||||
@@ -94,6 +118,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
}
|
||||
is DataState.Loading -> {
|
||||
binding.apply {
|
||||
// passesSwipe.isRefreshing = true
|
||||
passesTimer.text = 0L.toTimerString()
|
||||
passesError.visibility = View.INVISIBLE
|
||||
passesRecycler.visibility = View.INVISIBLE
|
||||
@@ -102,6 +127,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes), PassesAdapter.PassesC
|
||||
}
|
||||
else -> {
|
||||
binding.apply {
|
||||
// passesSwipe.isRefreshing = false
|
||||
passesTimer.text = 0L.toTimerString()
|
||||
passesProgress.visibility = View.INVISIBLE
|
||||
passesRecycler.visibility = View.INVISIBLE
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
package com.rtbishop.look4sat.presentation.passesScreen
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.DialogPassesBinding
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import com.rtbishop.look4sat.presentation.setNavResult
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class PassesPrefsDialog : AppCompatDialogFragment() {
|
||||
|
||||
@Inject
|
||||
lateinit var preferences: PreferencesSource
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.dialog_passes, group, false)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, state: Bundle?) {
|
||||
super.onViewCreated(view, state)
|
||||
DialogPassesBinding.bind(view).apply {
|
||||
dialog?.window?.setLayout(
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
hoursAheadEdit.setText(preferences.getHoursAhead().toString())
|
||||
minElevEdit.setText(preferences.getMinElevation().toString())
|
||||
passPrefBtnPos.setOnClickListener {
|
||||
val hoursAheadText = hoursAheadEdit.text.toString()
|
||||
val hoursAhead = if (hoursAheadText.isNotEmpty()) hoursAheadText.toInt() else 8
|
||||
val minElevText = minElevEdit.text.toString()
|
||||
val minElev = if (minElevText.isNotEmpty()) minElevText.toDouble() else 16.0
|
||||
setNavResult("prefs", Pair(hoursAhead, minElev))
|
||||
dismiss()
|
||||
}
|
||||
passPrefBtnNeg.setOnClickListener { dismiss() }
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
-8
@@ -21,10 +21,10 @@ import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.rtbishop.look4sat.domain.DataRepository
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
import com.rtbishop.look4sat.domain.predict.Predictor
|
||||
import com.rtbishop.look4sat.domain.predict.SatPass
|
||||
import com.rtbishop.look4sat.domain.model.DataState
|
||||
import com.rtbishop.look4sat.domain.DataRepository
|
||||
import com.rtbishop.look4sat.framework.PreferencesSource
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.*
|
||||
@@ -82,16 +82,17 @@ class PassesViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun forceCalculation() {
|
||||
fun forceCalculation(
|
||||
hoursAhead: Int = preferences.getHoursAhead(),
|
||||
minElevation: Double = preferences.getMinElevation(),
|
||||
timeRef: Long = System.currentTimeMillis()
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
_passes.postValue(DataState.Loading)
|
||||
passesProcessing?.cancelAndJoin()
|
||||
val timeNow = System.currentTimeMillis()
|
||||
val satellites = dataRepository.getSelectedSatellites()
|
||||
val stationPos = preferences.loadStationPosition()
|
||||
val hoursAhead = preferences.getHoursAhead()
|
||||
val minElev = preferences.getMinElevation()
|
||||
predictor.forceCalculation(satellites, stationPos, timeNow, hoursAhead, minElev)
|
||||
predictor.forceCalculation(satellites, stationPos, timeRef, hoursAhead, minElevation)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +115,9 @@ class PassesViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
currentPasses = currentPasses.filter { it.progress < 100 }
|
||||
_passes.postValue(DataState.Success(currentPasses.map { it.copy() }))
|
||||
val passesCopy = currentPasses.map { it.copy() }
|
||||
if (passesCopy.isEmpty()) _passes.postValue(DataState.Empty)
|
||||
else _passes.postValue(DataState.Success(passesCopy))
|
||||
delay(1000)
|
||||
}
|
||||
}
|
||||
|
||||
+36
-8
@@ -23,18 +23,22 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.DialogSourcesBinding
|
||||
import com.rtbishop.look4sat.domain.DataRepository
|
||||
import com.rtbishop.look4sat.framework.model.Source
|
||||
import com.rtbishop.look4sat.presentation.setNavResult
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SourcesDialog : AppCompatDialogFragment() {
|
||||
|
||||
private val viewModel: SourcesViewModel by viewModels()
|
||||
@Inject
|
||||
lateinit var dataRepository: DataRepository
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.dialog_sources, group, false)
|
||||
@@ -42,26 +46,50 @@ class SourcesDialog : AppCompatDialogFragment() {
|
||||
|
||||
override fun onViewCreated(view: View, state: Bundle?) {
|
||||
super.onViewCreated(view, state)
|
||||
viewModel.sources.observe(viewLifecycleOwner, { sources ->
|
||||
val adapter = SourcesAdapter().apply { setSources(sources.map { Source(it) }) }
|
||||
// liveData { emit(dataRepository.getWebSources()) }.observe(viewLifecycleOwner, { sources ->
|
||||
// val sourcesAdapter = SourcesAdapter().apply { setSources(sources.map { Source(it) }) }
|
||||
// DialogSourcesBinding.bind(view).apply {
|
||||
// dialog?.window?.setLayout(
|
||||
// WindowManager.LayoutParams.MATCH_PARENT,
|
||||
// WindowManager.LayoutParams.WRAP_CONTENT
|
||||
// )
|
||||
// sourcesRecycler.apply {
|
||||
// adapter = sourcesAdapter
|
||||
// layoutManager = LinearLayoutManager(requireContext())
|
||||
// }
|
||||
// sourcesBtnAdd.setOnClickListener {
|
||||
// sourcesAdapter.addSource()
|
||||
// }
|
||||
// sourcesBtnPos.setOnClickListener {
|
||||
// setNavResult("sources", sourcesAdapter.getSources().map { it.sourceUrl })
|
||||
// dismiss()
|
||||
// }
|
||||
// sourcesBtnNeg.setOnClickListener { dismiss() }
|
||||
// }
|
||||
// })
|
||||
lifecycleScope.launch {
|
||||
val sources = dataRepository.getWebSources()
|
||||
val sourcesAdapter = SourcesAdapter()
|
||||
DialogSourcesBinding.bind(view).apply {
|
||||
dialog?.window?.setLayout(
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.WRAP_CONTENT
|
||||
)
|
||||
sourcesRecycler.apply {
|
||||
this.adapter = adapter
|
||||
sourcesAdapter.apply { setSources(sources.map { Source(it) }) }
|
||||
adapter = sourcesAdapter
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
}
|
||||
sourcesBtnAdd.setOnClickListener {
|
||||
adapter.addSource()
|
||||
sourcesAdapter.addSource()
|
||||
}
|
||||
sourcesBtnPos.setOnClickListener {
|
||||
setNavResult("sources", adapter.getSources().map { it.sourceUrl })
|
||||
setNavResult("sources", sourcesAdapter.getSources().map { it.sourceUrl })
|
||||
dismiss()
|
||||
}
|
||||
sourcesBtnNeg.setOnClickListener { dismiss() }
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
package com.rtbishop.look4sat.presentation.sourcesScreen
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.liveData
|
||||
import com.rtbishop.look4sat.domain.DataRepository
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class SourcesViewModel @Inject constructor(dataRepository: DataRepository) : ViewModel() {
|
||||
|
||||
val sources = liveData {
|
||||
emit(dataRepository.getWebSources())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user