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>2023-02-13 01:12:25 +0300
committerStefan Niedermann <info@niedermann.it>2023-02-13 01:12:25 +0300
commitc9685459faf73423e5f3ad885947e047cb962b06 (patch)
tree7f4562cf120604ca891031c72ad84bae34bf78f6 /app/src/main/java/it/niedermann/nextcloud
parentd530b6aa63bef653178c2ad28bb7a7fbc4f55d34 (diff)
refactor(details): Reimplement with ConstraintLayout
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeAdapter.java24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/AssigneeDecoration.java16
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java28
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();
}
}