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-18 22:19:45 +0300
committerStefan Niedermann <info@niedermann.it>2020-04-18 22:19:45 +0300
commitd13c683ec6a443ee9c4e0167cbaab5183a4fe5ca (patch)
tree9feffbb173f6b6dbbcf242dd3a7fa096280e9ea4 /app/src/main/java/it/niedermann/nextcloud/deck/ui/view
parentcae2fd611e426c13958e6a561e3d48e3478ad43f (diff)
Fix #382 Extract OverlappingAvatarLayout into own reusable component
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/view')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/view/OverlappingAvatars.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/OverlappingAvatars.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/OverlappingAvatars.java
new file mode 100644
index 000000000..2bf6ec13c
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/view/OverlappingAvatars.java
@@ -0,0 +1,69 @@
+package it.niedermann.nextcloud.deck.ui.view;
+
+import android.content.Context;
+import android.net.Uri;
+import android.util.AttributeSet;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+
+import androidx.annotation.NonNull;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+
+import java.util.List;
+
+import it.niedermann.nextcloud.deck.R;
+import it.niedermann.nextcloud.deck.model.Account;
+import it.niedermann.nextcloud.deck.model.User;
+
+import static it.niedermann.nextcloud.deck.util.DimensionUtil.dpToPx;
+
+public class OverlappingAvatars extends RelativeLayout {
+ final int maxAvatarCount;
+ final int avatarSize;
+ final int overlapPx;
+
+ public OverlappingAvatars(Context context) {
+ this(context, null);
+ }
+
+ public OverlappingAvatars(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public OverlappingAvatars(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ maxAvatarCount = context.getResources().getInteger(R.integer.max_avatar_count);
+ avatarSize = dpToPx(context, R.dimen.avatar_size_small);
+ overlapPx = dpToPx(context, R.dimen.avatar_size_small_overlapping);
+ }
+
+ public void setAvatars(@NonNull Account account, @NonNull List<User> assignedUsers) {
+ @NonNull Context context = getContext();
+ removeAllViews();
+ RelativeLayout.LayoutParams avatarLayoutParams;
+ int avatarCount;
+ for (avatarCount = 0; avatarCount < assignedUsers.size() && avatarCount < maxAvatarCount; avatarCount++) {
+ avatarLayoutParams = new RelativeLayout.LayoutParams(avatarSize, avatarSize);
+ avatarLayoutParams.setMargins(0, 0, avatarCount * overlapPx, 0);
+ avatarLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
+ final ImageView avatar = new ImageView(context);
+ avatar.setLayoutParams(avatarLayoutParams);
+ addView(avatar);
+ avatar.requestLayout();
+ Glide.with(context)
+ .load(account.getUrl() + "/index.php/avatar/" + Uri.encode(assignedUsers.get(avatarCount).getUid()) + "/" + avatarSize)
+ .error(R.drawable.ic_person_grey600_24dp)
+ .apply(RequestOptions.circleCropTransform())
+ .into(avatar);
+ }
+
+ // Recalculate container size based on avatar count
+ int size = overlapPx * (avatarCount - 1) + avatarSize;
+ ViewGroup.LayoutParams rememberParam = getLayoutParams();
+ rememberParam.width = size;
+ setLayoutParams(rememberParam);
+ }
+}