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-07-13 20:00:15 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2020-07-13 20:09:10 +0300
commitc440d127248ceb175c2e7f0d97a9a5ae3acef8e0 (patch)
treeca16a694fe1accfb720f2f65ff03612df35edddd /app/src/main/java/it/niedermann/nextcloud/deck/ui/filter
parent6dd6a2d3bcb5cd57ddb9b7f41849ba15e3dfd007 (diff)
#590 Add filter "unassigned cards"
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/FilterUserAdapter.java42
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterViewModel.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/SelectionListener.java6
4 files changed, 61 insertions, 17 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserAdapter.java
index b4ae8f679..0dbb80e48 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserAdapter.java
@@ -8,6 +8,8 @@ import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.recyclerview.widget.RecyclerView;
+import com.bumptech.glide.Glide;
+
import java.util.ArrayList;
import java.util.List;
@@ -23,6 +25,8 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
final int avatarSize;
@NonNull
private final Account account;
+ @Nullable
+ private static final User NOT_ASSIGNED = null;
@NonNull
private final List<User> users = new ArrayList<>();
@NonNull
@@ -30,11 +34,15 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
@Nullable
private final SelectionListener<User> selectionListener;
- public FilterUserAdapter(@Px int avatarSize, @NonNull Account account, @NonNull List<User> users, @NonNull List<User> selectedUsers, @Nullable SelectionListener selectionListener) {
+ public FilterUserAdapter(@Px int avatarSize, @NonNull Account account, @NonNull List<User> users, @NonNull List<User> selectedUsers, boolean noAssignedUser, @Nullable SelectionListener<User> selectionListener) {
super();
this.avatarSize = avatarSize;
this.account = account;
+ this.users.add(NOT_ASSIGNED);
this.users.addAll(users);
+ if (noAssignedUser) {
+ this.selectedUsers.add(NOT_ASSIGNED);
+ }
this.selectedUsers.addAll(selectedUsers);
this.selectionListener = selectionListener;
setHasStableIds(true);
@@ -43,7 +51,8 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
@Override
public long getItemId(int position) {
- return users.get(position).getLocalId();
+ @Nullable final User user = users.get(position);
+ return user == null ? -1L : user.getLocalId();
}
@NonNull
@@ -54,7 +63,12 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
@Override
public void onBindViewHolder(@NonNull UserViewHolder viewHolder, int position) {
- viewHolder.bind(users.get(position));
+ final User user = users.get(position);
+ if (position == 0) {
+ viewHolder.bindNotAssigned();
+ } else {
+ viewHolder.bind(user);
+ }
}
@Override
@@ -62,10 +76,6 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
return users.size();
}
- public List<User> getSelected() {
- return selectedUsers;
- }
-
class UserViewHolder extends RecyclerView.ViewHolder {
private ItemFilterUserBinding binding;
@@ -74,22 +84,34 @@ public class FilterUserAdapter extends RecyclerView.Adapter<FilterUserAdapter.Us
this.binding = binding;
}
- void bind(final User user) {
+ void bind(@NonNull final User user) {
binding.displayName.setText(user.getDisplayname());
ViewUtil.addAvatar(binding.avatar, account.getUrl(), user.getUid(), avatarSize, R.drawable.ic_person_grey600_24dp);
itemView.setSelected(selectedUsers.contains(user));
+ bindClickListener(user);
+ }
+
+ public void bindNotAssigned() {
+ binding.displayName.setText(itemView.getContext().getString(R.string.no_assigned_user));
+ Glide.with(itemView.getContext())
+ .load(R.drawable.ic_baseline_account_circle_24)
+ .into(binding.avatar);
+ itemView.setSelected(selectedUsers.contains(NOT_ASSIGNED));
+ bindClickListener(NOT_ASSIGNED);
+ }
+ private void bindClickListener(@Nullable User user) {
itemView.setOnClickListener(view -> {
if (selectedUsers.contains(user)) {
selectedUsers.remove(user);
itemView.setSelected(false);
- if(selectionListener != null) {
+ if (selectionListener != null) {
selectionListener.onItemDeselected(user);
}
} else {
selectedUsers.add(user);
itemView.setSelected(true);
- if(selectionListener != null) {
+ if (selectionListener != null) {
selectionListener.onItemSelected(user);
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
index 64bc1db1f..3e8a80e4c 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterUserFragment.java
@@ -35,19 +35,33 @@ public class FilterUserFragment extends Fragment implements SelectionListener<Us
observeOnce(new SyncManager(requireContext()).findProposalsForUsersToAssign(mainViewModel.getCurrentAccount().getId(), mainViewModel.getCurrentBoardLocalId()), requireActivity(), (users) -> {
binding.users.setNestedScrollingEnabled(false);
- binding.users.setAdapter(new FilterUserAdapter(dpToPx(requireContext(), R.dimen.avatar_size), mainViewModel.getCurrentAccount(), users, requireNonNull(filterViewModel.getFilterInformationDraft().getValue()).getUsers(), this));
+ binding.users.setAdapter(new FilterUserAdapter(
+ dpToPx(requireContext(), R.dimen.avatar_size),
+ mainViewModel.getCurrentAccount(),
+ users,
+ requireNonNull(filterViewModel.getFilterInformationDraft().getValue()).getUsers(),
+ requireNonNull(filterViewModel.getFilterInformationDraft().getValue()).isNoAssignedUser(),
+ this));
});
return binding.getRoot();
}
@Override
- public void onItemSelected(User item) {
- filterViewModel.addFilterInformationUser(item);
+ public void onItemSelected(@Nullable User item) {
+ if (item == null) {
+ filterViewModel.setNotAssignedUser(true);
+ } else {
+ filterViewModel.addFilterInformationUser(item);
+ }
}
@Override
- public void onItemDeselected(User item) {
- filterViewModel.removeFilterInformationUser(item);
+ public void onItemDeselected(@Nullable User item) {
+ if (item == null) {
+ filterViewModel.setNotAssignedUser(false);
+ } else {
+ filterViewModel.removeFilterInformationUser(item);
+ }
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterViewModel.java
index cf8dc1754..121df3387 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterViewModel.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterViewModel.java
@@ -66,6 +66,12 @@ public class FilterViewModel extends ViewModel {
this.filterInformationDraft.postValue(newDraft);
}
+ public void setNotAssignedUser(boolean notAssignedUser) {
+ FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
+ newDraft.setNoAssignedUser(notAssignedUser);
+ this.filterInformationDraft.postValue(newDraft);
+ }
+
public void removeFilterInformationLabel(@NonNull Label label) {
FilterInformation newDraft = new FilterInformation(filterInformationDraft.getValue());
newDraft.removeLabel(label);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/SelectionListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/SelectionListener.java
index d2635a860..3fad71773 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/SelectionListener.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/SelectionListener.java
@@ -1,9 +1,11 @@
package it.niedermann.nextcloud.deck.ui.filter;
+import androidx.annotation.Nullable;
+
public interface SelectionListener<T> {
- void onItemSelected(T item);
+ void onItemSelected(@Nullable T item);
- default void onItemDeselected(T item) {
+ default void onItemDeselected(@Nullable T item) {
// Deselecting is optional
}
}