From 7eb388f63a45c5ade5477ad48f8eb658f64e2beb Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sat, 24 Oct 2020 21:32:20 +0100 Subject: [PATCH] Navigating to SourcesDialog.kt using Jetpack Navigation --- .../look4sat/ui/adapters/SourcesAdapter.kt | 17 +++--- .../look4sat/ui/fragments/EntriesFragment.kt | 6 +- .../look4sat/ui/fragments/SourcesDialog.kt | 55 ++++++++++--------- app/src/main/res/layout/dialog_sources.xml | 1 + app/src/main/res/navigation/nav_graph.xml | 4 ++ 5 files changed, 45 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt index 1c31ab98..0572d8bf 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt @@ -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) : +class SourcesAdapter(private var sources: MutableList = mutableListOf()) : RecyclerView.Adapter() { - fun getSources(): MutableList { - return sources + fun addSource() { + val emptySource = TleSource() + if (!sources.contains(emptySource)) { + sources.add(emptySource) + notifyItemInserted(itemCount - 1) + } } - fun setSources(list: MutableList) { - sources = list - notifyDataSetChanged() + fun getSources(): List { + 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) : 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) { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt index 187b411e..4e611d3f 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -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() 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() { diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt index 91f329e7..f5169668 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/SourcesDialog.kt @@ -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, private val viewModel: SharedViewModel) : - AppCompatDialogFragment() { +class SourcesDialog : AppCompatDialogFragment() { - private val sourcesAdapter = SourcesAdapter(sources as MutableList) + 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) + 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() } + } + }) } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_sources.xml b/app/src/main/res/layout/dialog_sources.xml index 6c4165d4..5b237004 100644 --- a/app/src/main/res/layout/dialog_sources.xml +++ b/app/src/main/res/layout/dialog_sources.xml @@ -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"> +