Switched to using the NavResult Api for tle sources list
This commit is contained in:
1 parent
0ddd0286a5
commit
af7a4d03d2
3 files changed
+43
-5
No files matched your search
@@ -28,9 +28,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.data.model.Result
|
||||
import com.rtbishop.look4sat.data.model.TleSource
|
||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||
import com.rtbishop.look4sat.utility.getNavResult
|
||||
import com.rtbishop.look4sat.utility.navigateSafe
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
@@ -54,6 +56,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
binding = FragmentEntriesBinding.bind(view)
|
||||
setupComponents()
|
||||
setupObservers()
|
||||
observeSourcesResult()
|
||||
}
|
||||
|
||||
private fun setupComponents() {
|
||||
@@ -104,6 +107,12 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
})
|
||||
}
|
||||
|
||||
private fun observeSourcesResult() {
|
||||
getNavResult<List<String>>(R.id.nav_entries, "sources") { result ->
|
||||
viewModel.updateSatDataFromSources(result.map { TleSource(it) })
|
||||
}
|
||||
}
|
||||
|
||||
private fun setLoaded() {
|
||||
binding?.apply {
|
||||
entriesError.visibility = View.INVISIBLE
|
||||
|
||||
@@ -23,17 +23,19 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.data.repository.PrefsRepo
|
||||
import com.rtbishop.look4sat.databinding.DialogSourcesBinding
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.utility.setNavResult
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SourcesDialog : AppCompatDialogFragment() {
|
||||
|
||||
private val viewModel: SharedViewModel by activityViewModels()
|
||||
@Inject
|
||||
lateinit var prefsRepo: PrefsRepo
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
|
||||
return inflater.inflate(R.layout.dialog_sources, group, false)
|
||||
@@ -41,7 +43,7 @@ class SourcesDialog : AppCompatDialogFragment() {
|
||||
|
||||
override fun onViewCreated(view: View, state: Bundle?) {
|
||||
super.onViewCreated(view, state)
|
||||
val sourcesAdapter = SourcesAdapter().apply { setSources(viewModel.getSources()) }
|
||||
val sourcesAdapter = SourcesAdapter().apply { setSources(prefsRepo.loadTleSources()) }
|
||||
DialogSourcesBinding.bind(view).apply {
|
||||
dialog?.window?.setLayout(
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
@@ -55,7 +57,7 @@ class SourcesDialog : AppCompatDialogFragment() {
|
||||
sourcesAdapter.addSource()
|
||||
}
|
||||
tleSourcesBtnPos.setOnClickListener {
|
||||
viewModel.updateSatDataFromSources(sourcesAdapter.getSources())
|
||||
setNavResult("sources", sourcesAdapter.getSources().map { it.url })
|
||||
dismiss()
|
||||
}
|
||||
tleSourcesBtnNeg.setOnClickListener { dismiss() }
|
||||
|
||||
@@ -24,9 +24,13 @@ import android.net.NetworkCapabilities
|
||||
import android.net.NetworkRequest
|
||||
import android.os.Bundle
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.LifecycleEventObserver
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.Navigator
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.github.amsacode.predict4java.GroundStationPosition
|
||||
import com.github.amsacode.predict4java.Satellite
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
@@ -65,6 +69,29 @@ fun NavController.navigateSafe(
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> Fragment.setNavResult(key: String, value: T) {
|
||||
findNavController().previousBackStackEntry?.savedStateHandle?.set(key, value)
|
||||
}
|
||||
|
||||
fun <T> Fragment.getNavResult(@IdRes id: Int, key: String, onResult: (result: T) -> Unit) {
|
||||
val navBackStackEntry = findNavController().getBackStackEntry(id)
|
||||
val observer = LifecycleEventObserver { _, event ->
|
||||
if (event == Lifecycle.Event.ON_RESUME
|
||||
&& navBackStackEntry.savedStateHandle.contains(key)
|
||||
) {
|
||||
val result = navBackStackEntry.savedStateHandle.get<T>(key)
|
||||
result?.let(onResult)
|
||||
navBackStackEntry.savedStateHandle.remove<T>(key)
|
||||
}
|
||||
}
|
||||
navBackStackEntry.lifecycle.addObserver(observer)
|
||||
viewLifecycleOwner.lifecycle.addObserver(LifecycleEventObserver { _, event ->
|
||||
if (event == Lifecycle.Event.ON_DESTROY) {
|
||||
navBackStackEntry.lifecycle.removeObserver(observer)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ExperimentalCoroutinesApi
|
||||
fun Context.isNetworkAvailableFlow(): Flow<Boolean> = callbackFlow {
|
||||
val callback = object : ConnectivityManager.NetworkCallback() {
|
||||
|
||||
Reference in new issue
Block a user