Navigating to SourcesDialog.kt using Jetpack Navigation

This commit is contained in:
Arty Bishop committed 2020-10-24 21:32:20 +01:00
1 parent 04fc4fd3aa
commit 7eb388f63a
5 files changed
+45 -38

No files matched your search

@@ -27,16 +27,19 @@ import androidx.recyclerview.widget.RecyclerView
import com.rtbishop.look4sat.data.TleSource import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.databinding.ItemTleSourceBinding import com.rtbishop.look4sat.databinding.ItemTleSourceBinding
class SourcesAdapter(private var sources: MutableList<TleSource>) : class SourcesAdapter(private var sources: MutableList<TleSource> = mutableListOf()) :
RecyclerView.Adapter<SourcesAdapter.TleSourceHolder>() { RecyclerView.Adapter<SourcesAdapter.TleSourceHolder>() {
fun getSources(): MutableList<TleSource> { fun addSource() {
return sources val emptySource = TleSource()
if (!sources.contains(emptySource)) {
sources.add(emptySource)
notifyItemInserted(itemCount - 1)
}
} }
fun setSources(list: MutableList<TleSource>) { fun getSources(): List<TleSource> {
sources = list return sources.filter { it.url != String() && it.url != " " && it.url.contains("https://") }
notifyDataSetChanged()
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TleSourceHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TleSourceHolder {
@@ -53,7 +56,7 @@ class SourcesAdapter(private var sources: MutableList<TleSource>) :
return sources.size return sources.size
} }
inner class TleSourceHolder(itemView: View, val binding: ItemTleSourceBinding) : inner class TleSourceHolder(itemView: View, private val binding: ItemTleSourceBinding) :
RecyclerView.ViewHolder(itemView) { RecyclerView.ViewHolder(itemView) {
fun bind(source: TleSource) { fun bind(source: TleSource) {
@@ -7,11 +7,11 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.rtbishop.look4sat.R import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.SharedViewModel
import com.rtbishop.look4sat.data.SatEntry import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
import com.rtbishop.look4sat.utility.RecyclerDivider import com.rtbishop.look4sat.utility.RecyclerDivider
@@ -25,7 +25,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
private lateinit var entriesAdapter: EntriesAdapter private lateinit var entriesAdapter: EntriesAdapter
private val viewModel: SharedViewModel by activityViewModels() private val viewModel: SharedViewModel by activityViewModels()
private val pickFileReqCode = 100 private val pickFileReqCode = 100
private var tleSources = listOf<TleSource>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@@ -53,7 +52,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
} }
private fun setupObservers() { private fun setupObservers() {
viewModel.getSources().observe(viewLifecycleOwner, { tleSources = it })
viewModel.getEntries().observe(viewLifecycleOwner, { viewModel.getEntries().observe(viewLifecycleOwner, {
if (it.isNullOrEmpty()) setError() if (it.isNullOrEmpty()) setError()
else { else {
@@ -74,7 +72,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
} }
private fun showImportFromWebDialog() { private fun showImportFromWebDialog() {
SourcesDialog(tleSources, viewModel).show(childFragmentManager, "SourcesDialog") findNavController().navigate(R.id.nav_dialog_sources)
} }
private fun showImportFromFileDialog() { private fun showImportFromFileDialog() {
@@ -19,9 +19,12 @@
package com.rtbishop.look4sat.ui.fragments package com.rtbishop.look4sat.ui.fragments
import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDialogFragment import androidx.appcompat.app.AppCompatDialogFragment
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.rtbishop.look4sat.R import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.SharedViewModel
@@ -31,34 +34,32 @@ import com.rtbishop.look4sat.ui.adapters.SourcesAdapter
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint @AndroidEntryPoint
class SourcesDialog(sources: List<TleSource>, private val viewModel: SharedViewModel) : class SourcesDialog : AppCompatDialogFragment() {
AppCompatDialogFragment() {
private val sourcesAdapter = SourcesAdapter(sources as MutableList<TleSource>) private val viewModel: SharedViewModel by activityViewModels()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
val binding = DialogSourcesBinding.inflate(requireActivity().layoutInflater).apply { return inflater.inflate(R.layout.dialog_sources, group, false)
tleSourcesRecycler.apply { }
adapter = sourcesAdapter
layoutManager = LinearLayoutManager(requireContext())
}
tleSourceBtnAdd.setOnClickListener {
val tempSources = sourcesAdapter.getSources()
tempSources.add(TleSource(String()))
sourcesAdapter.setSources(tempSources)
}
tleSourcesBtnPos.setOnClickListener {
val filteredSources = sourcesAdapter.getSources()
.filter { it.url != String() && it.url != " " && it.url.contains("https://") }
viewModel.updateEntriesFromSources(filteredSources)
dismiss()
}
tleSourcesBtnNeg.setOnClickListener { dismiss() }
}
return Dialog(requireActivity()).apply { override fun onViewCreated(view: View, state: Bundle?) {
setContentView(binding.root) super.onViewCreated(view, state)
window?.setBackgroundDrawableResource(R.drawable.ic_launcher_background) viewModel.getSources().observe(viewLifecycleOwner, { sources ->
} val sourcesAdapter = SourcesAdapter(sources as MutableList<TleSource>)
DialogSourcesBinding.bind(view).apply {
tleSourcesRecycler.apply {
adapter = sourcesAdapter
layoutManager = LinearLayoutManager(requireContext())
}
tleSourceBtnAdd.setOnClickListener {
sourcesAdapter.addSource()
}
tleSourcesBtnPos.setOnClickListener {
viewModel.updateEntriesFromSources(sourcesAdapter.getSources())
dismiss()
}
tleSourcesBtnNeg.setOnClickListener { dismiss() }
}
})
} }
} }
@@ -4,6 +4,7 @@
android:id="@+id/tleSourcesDialog" android:id="@+id/tleSourcesDialog"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/greyDark"
android:padding="4dp"> android:padding="4dp">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
@@ -77,5 +77,9 @@
android:id="@+id/nav_info" android:id="@+id/nav_info"
android:name="com.rtbishop.look4sat.ui.fragments.InfoFragment" android:name="com.rtbishop.look4sat.ui.fragments.InfoFragment"
tools:layout="@layout/fragment_info" /> tools:layout="@layout/fragment_info" />
<dialog
android:id="@+id/nav_dialog_sources"
android:name="com.rtbishop.look4sat.ui.fragments.SourcesDialog"
tools:layout="@layout/dialog_sources" />
</navigation> </navigation>