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-04-23 17:43:12 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-04-24 15:12:11 +0300
commit547ff69eb5b62f2cbc2db6c4a5c70a0d1892ff02 (patch)
tree46c98ddf96a3c737ad51380d19b42524d13a3ebc /app/src/main/java/it/niedermann/nextcloud/deck/ui/filter
parent7824f1f4663dbde718617023992768a3dda5c20d (diff)
#396 Filter cards
Temporarily set all except duedate filters to visibility=gone
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/filter')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java64
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java71
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java71
3 files changed, 202 insertions, 4 deletions
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 85ecf7d3c..38220c725 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
@@ -11,6 +11,7 @@ import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
+import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding;
import it.niedermann.nextcloud.deck.model.Account;
@@ -21,15 +22,22 @@ import it.niedermann.nextcloud.deck.ui.MainViewModel;
import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder;
import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment;
+import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce;
+
public class FilterDialogFragment extends BrandedDialogFragment {
private static final String KEY_ACCOUNT = "account";
private static final String KEY_BOARD_ID = "board_id";
private MainViewModel viewModel;
+ private LabelFilterAdapter labelAdapter;
+ private UserFilterAdapter userAdapter;
private OverdueFilterAdapter overdueAdapter;
private FilterInformation filterInformation;
+ private Account account;
+ private long boardId;
+
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
@@ -44,10 +52,10 @@ public class FilterDialogFragment extends BrandedDialogFragment {
throw new IllegalArgumentException(KEY_ACCOUNT + " and " + KEY_BOARD_ID + " must be provided as arguments");
}
- long boardId = args.getLong(KEY_BOARD_ID);
- Account account = (Account) args.getSerializable(KEY_ACCOUNT);
+ boardId = args.getLong(KEY_BOARD_ID);
+ account = (Account) args.getSerializable(KEY_ACCOUNT);
- if (boardId == 0L || account == null) {
+ if (boardId <= 0L || account == null) {
throw new IllegalArgumentException(KEY_ACCOUNT + " and " + KEY_BOARD_ID + " must be valid localIds and not be 0 or null");
}
}
@@ -65,9 +73,16 @@ public class FilterDialogFragment extends BrandedDialogFragment {
final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext());
- it.niedermann.nextcloud.deck.databinding.DialogFilterBinding binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater());
+ final DialogFilterBinding binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater());
+
overdueAdapter = new OverdueFilterAdapter(requireContext());
+ labelAdapter = new LabelFilterAdapter(requireContext());
+ userAdapter = new UserFilterAdapter(requireContext());
+
binding.overdue.setAdapter(overdueAdapter);
+ binding.labels.setAdapter(labelAdapter);
+ binding.people.setAdapter(userAdapter);
+
binding.overdue.setSelection(overdueAdapter.getPosition(this.filterInformation.getDueType()));
binding.overdue.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
@@ -82,6 +97,47 @@ public class FilterDialogFragment extends BrandedDialogFragment {
});
SyncManager syncManager = new SyncManager(requireActivity());
+
+ observeOnce(syncManager.findProposalsForLabelsToAssign(account.getId(), boardId), requireActivity(), (labels) -> {
+ labelAdapter.addAll(labels);
+ labelAdapter.notifyDataSetChanged();
+ for (long labelId : this.filterInformation.getLabelIDs()) {
+ binding.labels.setSelection(labelAdapter.getPosition(labelId));
+ }
+ binding.labels.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ DeckLog.info("clicked position: " + position);
+ filterInformation.addLabelId(labelAdapter.getItemId(position));
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Nothing to do
+ }
+ });
+ });
+
+ observeOnce(syncManager.findProposalsForUsersToAssign(account.getId(), boardId), requireActivity(), (users) -> {
+ userAdapter.addAll(users);
+ userAdapter.notifyDataSetChanged();
+ for (long userId : this.filterInformation.getUserIDs()) {
+ binding.people.setSelection(userAdapter.getPosition(userId));
+ }
+ binding.people.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ DeckLog.info("clicked position: " + position);
+ filterInformation.addLabelId(userAdapter.getItemId(position));
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Nothing to do
+ }
+ });
+ });
+
return dialogBuilder
.setTitle(R.string.simple_filter)
.setView(binding.getRoot())
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java
new file mode 100644
index 000000000..8fed859a5
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/LabelFilterAdapter.java
@@ -0,0 +1,71 @@
+package it.niedermann.nextcloud.deck.ui.filter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.NoSuchElementException;
+
+import it.niedermann.nextcloud.deck.model.Label;
+
+public class LabelFilterAdapter extends ArrayAdapter<Label> {
+
+ @NonNull
+ private final LayoutInflater inflater;
+
+ @SuppressWarnings("WeakerAccess")
+ public LabelFilterAdapter(@NonNull Context context) {
+ super(context, android.R.layout.simple_list_item_multiple_choice, android.R.id.text1);
+ inflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ final Label label = getItem(position);
+ if (label == null) {
+ throw new NoSuchElementException();
+ }
+ return label.getLocalId();
+ }
+
+ @Override
+ public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ return getView(position, convertView, parent);
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ public int getPosition(long labelId) {
+ for (int i = 0; i < getCount(); i++) {
+ if (getItemId(i) == labelId) {
+ return i;
+ }
+ }
+ throw new NoSuchElementException();
+ }
+
+ @NotNull
+ @Override
+ public View getView(int position, View convertView, @NotNull ViewGroup parent) {
+ final View view;
+ if (convertView == null) {
+ view = inflater.inflate(android.R.layout.simple_list_item_multiple_choice, parent, false);
+ } else {
+ view = convertView;
+ }
+ ((TextView) view.findViewById(android.R.id.text1)).setText(getItem(position).getTitle());
+ return view;
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java
new file mode 100644
index 000000000..d1baa900f
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/UserFilterAdapter.java
@@ -0,0 +1,71 @@
+package it.niedermann.nextcloud.deck.ui.filter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.NoSuchElementException;
+
+import it.niedermann.nextcloud.deck.model.User;
+
+public class UserFilterAdapter extends ArrayAdapter<User> {
+
+ @NonNull
+ private final LayoutInflater inflater;
+
+ @SuppressWarnings("WeakerAccess")
+ public UserFilterAdapter(@NonNull Context context) {
+ super(context, android.R.layout.simple_list_item_multiple_choice, android.R.id.text1);
+ inflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ final User user = getItem(position);
+ if(user == null) {
+ throw new NoSuchElementException();
+ }
+ return user.getLocalId();
+ }
+
+ @Override
+ public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ return getView(position, convertView, parent);
+ }
+
+ @SuppressWarnings("WeakerAccess")
+ public int getPosition(long labelId) {
+ for (int i = 0; i < getCount(); i++) {
+ if (getItemId(i) == labelId) {
+ return i;
+ }
+ }
+ throw new NoSuchElementException();
+ }
+
+ @NotNull
+ @Override
+ public View getView(int position, View convertView, @NotNull ViewGroup parent) {
+ final View view;
+ if (convertView == null) {
+ view = inflater.inflate(android.R.layout.simple_list_item_multiple_choice, parent, false);
+ } else {
+ view = convertView;
+ }
+ ((TextView) view.findViewById(android.R.id.text1)).setText(getItem(position).getDisplayname());
+ return view;
+ }
+}