diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-04-18 22:19:45 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-04-18 22:19:45 +0300 |
commit | d13c683ec6a443ee9c4e0167cbaab5183a4fe5ca (patch) | |
tree | 9feffbb173f6b6dbbcf242dd3a7fa096280e9ea4 /app/src/main/java/it/niedermann/nextcloud/deck/ui/view | |
parent | cae2fd611e426c13958e6a561e3d48e3478ad43f (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.java | 69 |
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); + } +} |