diff --git a/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesFragment.kt b/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesFragment.kt index 04f2c69..a5c154e 100644 --- a/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesFragment.kt +++ b/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesFragment.kt @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView import com.devpass.mynotes.R import com.devpass.mynotes.databinding.FragmentNotesBinding import com.devpass.mynotes.domain.model.Note +import com.devpass.mynotes.domain.util.Filter import com.devpass.mynotes.presentation.adapter.NotesListAdapter import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint @@ -29,9 +30,16 @@ class NotesFragment : Fragment() { private lateinit var layoutFilter: LinearLayout private lateinit var btnFilter: ImageButton + private var selectedFilter: Filter = Filter.Title + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + viewModel.observeCurrentList().observe(viewLifecycleOwner) { adapter.submitList(it) + + recyclerView.post { + recyclerView.scrollToPosition(0) + } } viewModel.deletedNote.observe(viewLifecycleOwner) { @@ -53,7 +61,47 @@ class NotesFragment : Fragment() { setupRecyclerView(binding) setupHeader(binding) - viewModel.getNotes() + val pref = requireActivity().getSharedPreferences("filter", 0) + val editor = pref.edit() + + binding.groupFilter.setOnCheckedChangeListener { radioGroup, _ -> + + when (radioGroup.checkedRadioButtonId) { + R.id.sortByTitle -> { + selectedFilter = Filter.Title + viewModel.getNotes(selectedFilter) + editor.putInt("filter", 0) + } + R.id.sortByDate -> { + selectedFilter = Filter.Date + viewModel.getNotes(selectedFilter) + editor.putInt("filter", 1) + } + R.id.sortByColor -> { + selectedFilter = Filter.Color + viewModel.getNotes(selectedFilter) + editor.putInt("filter", 2) + } + } + + editor.apply() + } + + when(pref.getInt("filter", 0)){ + 0 -> { + binding.sortByTitle.isChecked = true + viewModel.getNotes(Filter.Title) + } + 1 -> { + binding.sortByDate.isChecked = true + viewModel.getNotes(Filter.Date) + } + 2 -> { + binding.sortByColor.isChecked = true + viewModel.getNotes(Filter.Color) + } + } + return binding.root } @@ -68,6 +116,7 @@ class NotesFragment : Fragment() { adapter = NotesListAdapter(::onNoteClicked, ::onDeleteButtonClicked, requireContext()) recyclerView = binding.rvListNotes recyclerView.adapter = adapter + recyclerView.layoutManager = LinearLayoutManager(requireContext()) } @@ -90,11 +139,12 @@ class NotesFragment : Fragment() { Snackbar.LENGTH_LONG ).setAction(R.string.message_undo_delete) { viewModel.undoDelete() + viewModel.getNotes(selectedFilter) }.show() } - private fun onDeleteButtonClicked(noteDeleted: Note){ + private fun onDeleteButtonClicked(noteDeleted: Note) { viewModel.deleteNote(noteDeleted) - viewModel.getNotes() + viewModel.getNotes(selectedFilter) } } diff --git a/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesViewModel.kt b/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesViewModel.kt index 022735e..96f3eb3 100644 --- a/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesViewModel.kt +++ b/solutions/devsprint-higor-silva-2/app/src/main/java/com/devpass/mynotes/presentation/notes/NotesViewModel.kt @@ -5,6 +5,7 @@ import com.devpass.mynotes.domain.exceptions.InvalidNoteException import com.devpass.mynotes.R import com.devpass.mynotes.domain.model.Note import com.devpass.mynotes.domain.usecase.NotesManagerUseCase +import com.devpass.mynotes.domain.util.Filter import com.devpass.mynotes.domain.util.SelfCleaningLiveData import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn @@ -27,10 +28,6 @@ class NotesViewModel @Inject constructor( var deletedNote = SelfCleaningLiveData() - init { - getNotes() - } - fun insertNote(note: Note) = viewModelScope.launch { try { @@ -43,9 +40,9 @@ class NotesViewModel @Inject constructor( fun onSnackBarShown() { errorMessage.value = null } - fun getNotes() = + fun getNotes(filter: Filter) = manager - .getAll() + .getAll(filter) .onEach { notes -> currentList.value = notes } .launchIn(viewModelScope) diff --git a/solutions/devsprint-higor-silva-2/app/src/main/res/layout/fragment_notes.xml b/solutions/devsprint-higor-silva-2/app/src/main/res/layout/fragment_notes.xml index a8b8a12..69bf5ae 100644 --- a/solutions/devsprint-higor-silva-2/app/src/main/res/layout/fragment_notes.xml +++ b/solutions/devsprint-higor-silva-2/app/src/main/res/layout/fragment_notes.xml @@ -55,6 +55,7 @@ app:layout_constraintTop_toBottomOf="@id/txt_header_note"> @@ -86,10 +87,10 @@ android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/layoutFilter" - app:layout_constraintBottom_toBottomOf="parent" tools:itemCount="20" /> \ No newline at end of file