diff options
author | Stefan Niedermann <info@niedermann.it> | 2023-02-13 01:12:25 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2023-02-13 01:12:25 +0300 |
commit | c9685459faf73423e5f3ad885947e047cb962b06 (patch) | |
tree | 7f4562cf120604ca891031c72ad84bae34bf78f6 /app/src/main/java/it/niedermann/nextcloud | |
parent | d530b6aa63bef653178c2ad28bb7a7fbc4f55d34 (diff) |
refactor(details): Reimplement with ConstraintLayout
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud')
3 files changed, 45 insertions, 23 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeAdapter.java index 4eb3f983c..0bc027ca8 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeAdapter.java @@ -3,9 +3,11 @@ package it.niedermann.nextcloud.deck.ui.card.details; import static androidx.recyclerview.widget.RecyclerView.NO_ID; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.util.Consumer; import androidx.recyclerview.widget.RecyclerView; @@ -19,6 +21,8 @@ import it.niedermann.nextcloud.deck.model.User; @SuppressWarnings("WeakerAccess") public class AssigneeAdapter extends RecyclerView.Adapter<AssigneeViewHolder> { + @Nullable + private RecyclerView recyclerView; private final Account account; @NonNull private final List<User> users = new ArrayList<>(); @@ -41,6 +45,18 @@ public class AssigneeAdapter extends RecyclerView.Adapter<AssigneeViewHolder> { return id == null ? NO_ID : id; } + @Override + public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + this.recyclerView = recyclerView; + } + + @Override + public void onDetachedFromRecyclerView(@NonNull RecyclerView recyclerView) { + super.onDetachedFromRecyclerView(recyclerView); + this.recyclerView = null; + } + @NonNull @Override public AssigneeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -62,18 +78,26 @@ public class AssigneeAdapter extends RecyclerView.Adapter<AssigneeViewHolder> { public void setUsers(@NonNull List<User> users) { this.users.clear(); this.users.addAll(users); + updateRecylcerViewVisibility(); notifyDataSetChanged(); } public void addUser(@NonNull User user) { this.users.add(user); + updateRecylcerViewVisibility(); notifyItemInserted(this.users.size()); } public void removeUser(@NonNull User user) { final int index = this.users.indexOf(user); this.users.remove(user); + updateRecylcerViewVisibility(); notifyItemRemoved(index); } + private void updateRecylcerViewVisibility() { + if (this.recyclerView != null) { + this.recyclerView.setVisibility(this.getItemCount() > 0 ? View.VISIBLE : View.GONE); + } + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeDecoration.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeDecoration.java index 096dcfa53..03db28095 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeDecoration.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeDecoration.java @@ -9,20 +9,24 @@ import androidx.recyclerview.widget.RecyclerView; public class AssigneeDecoration extends RecyclerView.ItemDecoration { + private final int spanCount; private final int gutter; - public AssigneeDecoration(@Px int gutter) { + public AssigneeDecoration(int spanCount, @Px int gutter) { + this.spanCount = spanCount; this.gutter = gutter; } @Override public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - final int position = parent.getChildAdapterPosition(view); + int position = parent.getChildAdapterPosition(view); + int column = position % spanCount; - if (position >= 0) { - // All columns get some spacing at the bottom and at the right side - outRect.right = gutter; - outRect.bottom = gutter; + outRect.left = column * gutter / spanCount; + outRect.right = gutter - (column + 1) * gutter / spanCount; + + if (position >= spanCount) { + outRect.top = gutter; } } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java index 4eec53ece..b76fae043 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java @@ -315,10 +315,11 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, binding.assignees.setAdapter(adapter); binding.assignees.post(() -> { @Px final int gutter = DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.spacer_1x); - final int spanCount = (int) (float) binding.assignees.getWidth() / (DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.avatar_size) + gutter); + final int spanCount = (int) (float) binding.labelsWrapper.getWidth() / (DimensionUtil.INSTANCE.dpToPx(requireContext(), R.dimen.avatar_size) + gutter); binding.assignees.setLayoutManager(new GridLayoutManager(getContext(), spanCount)); - binding.assignees.addItemDecoration(new AssigneeDecoration(gutter)); + binding.assignees.addItemDecoration(new AssigneeDecoration(spanCount, gutter)); }); + if (viewModel.canEdit()) { Long localCardId = viewModel.getFullCard().getCard().getLocalId(); localCardId = localCardId == null ? -1 : localCardId; @@ -330,16 +331,12 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, adapter.addUser(user); binding.people.setText(""); }); - - if (this.viewModel.getFullCard().getAssignedUsers() != null) { - adapter.setUsers(this.viewModel.getFullCard().getAssignedUsers()); - } } else { binding.people.setEnabled(false); + } - if (this.viewModel.getFullCard().getAssignedUsers() != null) { - adapter.setUsers(this.viewModel.getFullCard().getAssignedUsers()); - } + if (this.viewModel.getFullCard().getAssignedUsers() != null) { + adapter.setUsers(this.viewModel.getFullCard().getAssignedUsers()); } } @@ -408,13 +405,10 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, viewModel.getFullCard().getAssignedUsers().remove(user); adapter.removeUser(user); ((UserAutoCompleteAdapter) binding.people.getAdapter()).include(user); - ThemedSnackbar.make( - requireView(), getString(R.string.unassigned_user, user.getDisplayname()), - Snackbar.LENGTH_LONG) - .setAction(R.string.simple_undo, v1 -> { - viewModel.getFullCard().getAssignedUsers().add(user); - ((UserAutoCompleteAdapter) binding.people.getAdapter()).exclude(user); - adapter.addUser(user); - }).show(); + ThemedSnackbar.make(requireView(), getString(R.string.unassigned_user, user.getDisplayname()), Snackbar.LENGTH_LONG).setAction(R.string.simple_undo, v1 -> { + viewModel.getFullCard().getAssignedUsers().add(user); + ((UserAutoCompleteAdapter) binding.people.getAdapter()).exclude(user); + adapter.addUser(user); + }).show(); } } |