From 960935ebd07e717158c89ab5ccaa9180020665bc Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Mon, 4 May 2020 23:16:07 +0200 Subject: Display active filters in filter tabs --- .../deck/ui/filter/FilterAssigneesFragment.java | 9 ++--- .../deck/ui/filter/FilterDialogFragment.java | 40 +++++++++++++++++++++- .../deck/ui/filter/FilterDuedateFragment.java | 9 ++--- .../deck/ui/filter/FilterLabelsFragment.java | 9 ++--- 4 files changed, 54 insertions(+), 13 deletions(-) (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/filter') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterAssigneesFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterAssigneesFragment.java index 1d29ff034..f26c51f99 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterAssigneesFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterAssigneesFragment.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import it.niedermann.nextcloud.deck.R; @@ -22,7 +23,7 @@ import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx; public class FilterAssigneesFragment extends Fragment implements SelectionListener { - private FilterInformation filterInformationDraft; + private LiveData filterInformationDraft; private DialogFilterAssigneesBinding binding; private MainViewModel mainViewModel; private UserFilterAdapter userAdapter; @@ -37,7 +38,7 @@ public class FilterAssigneesFragment extends Fragment implements SelectionListen this.filterInformationDraft = mainViewModel.getFilterInformationDraft(); observeOnce(syncManager.findProposalsForUsersToAssign(mainViewModel.getCurrentAccount().getId(), mainViewModel.getCurrentBoardLocalId()), requireActivity(), (users) -> { - userAdapter = new UserFilterAdapter(dpToPx(requireContext(), R.dimen.avatar_size), mainViewModel.getCurrentAccount(), users, this.filterInformationDraft.getUsers(), this); + userAdapter = new UserFilterAdapter(dpToPx(requireContext(), R.dimen.avatar_size), mainViewModel.getCurrentAccount(), users, this.filterInformationDraft.getValue().getUsers(), this); binding.users.setNestedScrollingEnabled(false); binding.users.setAdapter(userAdapter); }); @@ -47,11 +48,11 @@ public class FilterAssigneesFragment extends Fragment implements SelectionListen @Override public void onItemSelected(User item) { - filterInformationDraft.addUser(item); + mainViewModel.addFilterInformationUser(item); } @Override public void onItemDeselected(User item) { - filterInformationDraft.removeUser(item); + mainViewModel.removeFilterInformationUser(item); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java index 326f914a1..ef6280c1c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java @@ -9,6 +9,7 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import androidx.viewpager2.adapter.FragmentStateAdapter; @@ -16,6 +17,8 @@ import com.google.android.material.tabs.TabLayoutMediator; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding; +import it.niedermann.nextcloud.deck.model.enums.EDueType; +import it.niedermann.nextcloud.deck.model.internal.FilterInformation; import it.niedermann.nextcloud.deck.ui.MainViewModel; import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; @@ -44,7 +47,42 @@ public class FilterDialogFragment extends BrandedDialogFragment { binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); binding.viewPager.setAdapter(new TabsPagerAdapter(getChildFragmentManager(), getLifecycle())); binding.viewPager.setOffscreenPageLimit(tabTitles.length); - new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(tabTitles[position])).attach(); + + LiveData filterInformationDraft = mainViewModel.getFilterInformationDraft(); + new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> { + switch (position) { + case 0: + filterInformationDraft.observe(this, (draft) -> { + if (draft.getLabels().size() > 0) { + tab.setIcon(R.drawable.circle_alpha_colorize_36dp); + } else { + tab.setIcon(null); + } + }); + break; + case 1: + filterInformationDraft.observe(this, (draft) -> { + if (draft.getUsers().size() > 0) { + tab.setIcon(R.drawable.circle_alpha_colorize_36dp); + } else { + tab.setIcon(null); + } + }); + break; + case 2: + filterInformationDraft.observe(this, (draft) -> { + if (draft.getDueType() != EDueType.NO_FILTER) { + tab.setIcon(R.drawable.circle_alpha_colorize_36dp); + } else { + tab.setIcon(null); + } + }); + break; + default: + throw new IllegalStateException("position must be between 0 and 2"); + } + tab.setText(tabTitles[position]); + }).attach(); mainViewModel.createFilterInformationDraft(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDuedateFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDuedateFragment.java index ac9514773..43b399139 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDuedateFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDuedateFragment.java @@ -9,6 +9,7 @@ import android.widget.AdapterView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import it.niedermann.nextcloud.deck.databinding.DialogFilterDuedateBinding; @@ -18,7 +19,7 @@ import it.niedermann.nextcloud.deck.ui.MainViewModel; public class FilterDuedateFragment extends Fragment implements AdapterView.OnItemSelectedListener { - private FilterInformation filterInformationDraft; + private LiveData filterInformationDraft; private DialogFilterDuedateBinding binding; private MainViewModel mainViewModel; private OverdueFilterAdapter overdueAdapter; @@ -31,18 +32,18 @@ public class FilterDuedateFragment extends Fragment implements AdapterView.OnIte overdueAdapter = new OverdueFilterAdapter(requireContext()); binding.overdue.setAdapter(overdueAdapter); this.filterInformationDraft = mainViewModel.getFilterInformationDraft(); - binding.overdue.setSelection(overdueAdapter.getPosition(this.filterInformationDraft.getDueType())); + binding.overdue.setSelection(overdueAdapter.getPosition(this.filterInformationDraft.getValue().getDueType())); binding.overdue.setOnItemSelectedListener(this); return binding.getRoot(); } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { - filterInformationDraft.setDueType(overdueAdapter.getItem(position)); + mainViewModel.setFilterInformationDraftDueType(overdueAdapter.getItem(position)); } @Override public void onNothingSelected(AdapterView parent) { - filterInformationDraft.setDueType(EDueType.NO_FILTER); + mainViewModel.setFilterInformationDraftDueType(EDueType.NO_FILTER); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsFragment.java index cf20f0d06..b2e5e5c58 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsFragment.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; import it.niedermann.nextcloud.deck.databinding.DialogFilterLabelsBinding; @@ -20,7 +21,7 @@ import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.Liv public class FilterLabelsFragment extends Fragment implements SelectionListener