Navigating to SourcesDialog.kt using Jetpack Navigation

pull/49/head
Arty Bishop 2020-10-24 21:32:20 +01:00
rodzic 04fc4fd3aa
commit 7eb388f63a
5 zmienionych plików z 45 dodań i 38 usunięć

Wyświetl plik

@ -27,16 +27,19 @@ import androidx.recyclerview.widget.RecyclerView
import com.rtbishop.look4sat.data.TleSource
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>() {
fun getSources(): MutableList<TleSource> {
return sources
fun addSource() {
val emptySource = TleSource()
if (!sources.contains(emptySource)) {
sources.add(emptySource)
notifyItemInserted(itemCount - 1)
}
}
fun setSources(list: MutableList<TleSource>) {
sources = list
notifyDataSetChanged()
fun getSources(): List<TleSource> {
return sources.filter { it.url != String() && it.url != " " && it.url.contains("https://") }
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TleSourceHolder {
@ -53,7 +56,7 @@ class SourcesAdapter(private var sources: MutableList<TleSource>) :
return sources.size
}
inner class TleSourceHolder(itemView: View, val binding: ItemTleSourceBinding) :
inner class TleSourceHolder(itemView: View, private val binding: ItemTleSourceBinding) :
RecyclerView.ViewHolder(itemView) {
fun bind(source: TleSource) {

Wyświetl plik

@ -7,11 +7,11 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
import com.rtbishop.look4sat.utility.RecyclerDivider
@ -25,7 +25,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
private lateinit var entriesAdapter: EntriesAdapter
private val viewModel: SharedViewModel by activityViewModels()
private val pickFileReqCode = 100
private var tleSources = listOf<TleSource>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
@ -53,7 +52,6 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
}
private fun setupObservers() {
viewModel.getSources().observe(viewLifecycleOwner, { tleSources = it })
viewModel.getEntries().observe(viewLifecycleOwner, {
if (it.isNullOrEmpty()) setError()
else {
@ -74,7 +72,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
}
private fun showImportFromWebDialog() {
SourcesDialog(tleSources, viewModel).show(childFragmentManager, "SourcesDialog")
findNavController().navigate(R.id.nav_dialog_sources)
}
private fun showImportFromFileDialog() {

Wyświetl plik

@ -19,9 +19,12 @@
package com.rtbishop.look4sat.ui.fragments
import android.app.Dialog
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel
@ -31,34 +34,32 @@ import com.rtbishop.look4sat.ui.adapters.SourcesAdapter
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SourcesDialog(sources: List<TleSource>, private val viewModel: SharedViewModel) :
AppCompatDialogFragment() {
class SourcesDialog : AppCompatDialogFragment() {
private val sourcesAdapter = SourcesAdapter(sources as MutableList<TleSource>)
private val viewModel: SharedViewModel by activityViewModels()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val binding = DialogSourcesBinding.inflate(requireActivity().layoutInflater).apply {
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() }
}
override fun onCreateView(inflater: LayoutInflater, group: ViewGroup?, state: Bundle?): View? {
return inflater.inflate(R.layout.dialog_sources, group, false)
}
return Dialog(requireActivity()).apply {
setContentView(binding.root)
window?.setBackgroundDrawableResource(R.drawable.ic_launcher_background)
}
override fun onViewCreated(view: View, state: Bundle?) {
super.onViewCreated(view, state)
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() }
}
})
}
}

Wyświetl plik

@ -4,6 +4,7 @@
android:id="@+id/tleSourcesDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/greyDark"
android:padding="4dp">
<com.google.android.material.textview.MaterialTextView

Wyświetl plik

@ -77,5 +77,9 @@
android:id="@+id/nav_info"
android:name="com.rtbishop.look4sat.ui.fragments.InfoFragment"
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>