Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-05-05 00:16:07 +0300
committerStefan Niedermann <info@niedermann.it>2020-05-05 00:16:07 +0300
commit960935ebd07e717158c89ab5ccaa9180020665bc (patch)
tree9a792d4a0b5da02ffc924d6648a6753b692e8738
parentb5978199e6cfda0986d7b11d97ed0e5f05e498f5 (diff)
Display active filters in filter tabs
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java43
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterAssigneesFragment.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java40
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDuedateFragment.java9
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterLabelsFragment.java9
-rw-r--r--app/src/main/res/layout/dialog_filter.xml1
6 files changed, 93 insertions, 18 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
index dcbecf0bd..cebba655a 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainViewModel.java
@@ -7,6 +7,9 @@ import androidx.lifecycle.ViewModel;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.Board;
+import it.niedermann.nextcloud.deck.model.Label;
+import it.niedermann.nextcloud.deck.model.User;
+import it.niedermann.nextcloud.deck.model.enums.EDueType;
import it.niedermann.nextcloud.deck.model.internal.FilterInformation;
import static it.niedermann.nextcloud.deck.model.internal.FilterInformation.hasActiveFilter;
@@ -15,28 +18,28 @@ import static it.niedermann.nextcloud.deck.model.internal.FilterInformation.hasA
public class MainViewModel extends ViewModel {
@NonNull
- private FilterInformation filterInformationDraft = new FilterInformation();
+ private MutableLiveData<FilterInformation> filterInformationDraft = new MutableLiveData<>(new FilterInformation());
@NonNull
private MutableLiveData<FilterInformation> filterInformation = new MutableLiveData<>();
private Account currentAccount;
private Board currentBoard;
public void publishFilterInformationDraft() {
- this.filterInformation.postValue(hasActiveFilter(filterInformationDraft) ? filterInformationDraft : null);
+ this.filterInformation.postValue(hasActiveFilter(filterInformationDraft.getValue()) ? filterInformationDraft.getValue() : null);
}
public void clearFilterInformation() {
- this.filterInformationDraft = new FilterInformation();
+ this.filterInformationDraft.postValue(new FilterInformation());
this.publishFilterInformationDraft();
}
@NonNull
- public FilterInformation getFilterInformationDraft() {
+ public LiveData<FilterInformation> getFilterInformationDraft() {
return this.filterInformationDraft;
}
public void createFilterInformationDraft() {
- this.filterInformationDraft = new FilterInformation(this.filterInformation.getValue());
+ this.filterInformationDraft.postValue(new FilterInformation(this.filterInformation.getValue()));
}
@NonNull
@@ -44,6 +47,36 @@ public class MainViewModel extends ViewModel {
return this.filterInformation;
}
+ public void setFilterInformationDraftDueType(@NonNull EDueType dueType) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.setDueType(dueType);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
+ public void addFilterInformationDraftLabel(@NonNull Label label) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.addLabel(label);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
+ public void addFilterInformationUser(@NonNull User user) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.addUser(user);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
+ public void removeFilterInformationLabel(@NonNull Label label) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.removeLabel(label);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
+ public void removeFilterInformationUser(@NonNull User user) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.removeUser(user);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
public Account getCurrentAccount() {
return currentAccount;
}
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<User> {
- private FilterInformation filterInformationDraft;
+ private LiveData<FilterInformation> 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<FilterInformation> 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<FilterInformation> 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<Label> {
- private FilterInformation filterInformationDraft;
+ private LiveData<FilterInformation> filterInformationDraft;
private DialogFilterLabelsBinding binding;
private MainViewModel mainViewModel;
private LabelFilterAdapter labelAdapter;
@@ -34,7 +35,7 @@ public class FilterLabelsFragment extends Fragment implements SelectionListener<
this.filterInformationDraft = mainViewModel.getFilterInformationDraft();
observeOnce(syncManager.findProposalsForLabelsToAssign(mainViewModel.getCurrentAccount().getId(), mainViewModel.getCurrentBoardLocalId()), requireActivity(), (labels) -> {
- labelAdapter = new LabelFilterAdapter(labels, this.filterInformationDraft.getLabels(), this);
+ labelAdapter = new LabelFilterAdapter(labels, this.filterInformationDraft.getValue().getLabels(), this);
binding.labels.setNestedScrollingEnabled(false);
binding.labels.setAdapter(labelAdapter);
});
@@ -43,11 +44,11 @@ public class FilterLabelsFragment extends Fragment implements SelectionListener<
@Override
public void onItemSelected(Label item) {
- filterInformationDraft.addLabel(item);
+ mainViewModel.addFilterInformationDraftLabel(item);
}
@Override
public void onItemDeselected(Label item) {
- filterInformationDraft.removeLabel(item);
+ mainViewModel.removeFilterInformationLabel(item);
}
}
diff --git a/app/src/main/res/layout/dialog_filter.xml b/app/src/main/res/layout/dialog_filter.xml
index bd6834966..e7d9ebd6a 100644
--- a/app/src/main/res/layout/dialog_filter.xml
+++ b/app/src/main/res/layout/dialog_filter.xml
@@ -9,6 +9,7 @@
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ app:tabInlineLabel="true"
app:tabUnboundedRipple="true" />
<androidx.viewpager2.widget.ViewPager2