Welcome to mirror list, hosted at ThFree Co, Russian Federation.

OverlappingAvatars.java « view « ui « deck « nextcloud « niedermann « it « java « main « src « app - github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4c52ffc1a19c1932df7be8b23c1bbc24b0b0541f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package it.niedermann.nextcloud.deck.ui.view;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import androidx.annotation.NonNull;
import androidx.annotation.Px;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;

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;

public class OverlappingAvatars extends RelativeLayout {
    final int maxAvatarCount;
    @Px
    final int avatarSize;
    @Px
    final int avatarBorderSize;
    final Drawable borderDrawable;
    @Px
    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);

        final var resources = getResources();
        maxAvatarCount = resources.getInteger(R.integer.max_avatar_count);
        avatarBorderSize = resources.getDimensionPixelSize(R.dimen.avatar_size_small_overlapping_border);
        avatarSize = resources.getDimensionPixelSize(R.dimen.avatar_size_small) + avatarBorderSize * 2;
        overlapPx = resources.getDimensionPixelSize(R.dimen.avatar_size_small_overlapping);
        borderDrawable = ContextCompat.getDrawable(context, R.drawable.avatar_border);
        assert borderDrawable != null;
        DrawableCompat.setTint(borderDrawable, ContextCompat.getColor(context, R.color.bg_card));
    }

    public void setAvatars(@NonNull Account account, @NonNull List<User> assignedUsers) {
        @NonNull final var 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 var avatar = new ImageView(context);
            avatar.setLayoutParams(avatarLayoutParams);
            avatar.setPadding(avatarBorderSize, avatarBorderSize, avatarBorderSize, avatarBorderSize);

            avatar.setBackground(borderDrawable);
            addView(avatar);
            avatar.requestLayout();
            Glide.with(context)
                    .load(account.getAvatarUrl(avatarSize, assignedUsers.get(avatarCount).getUid()))
                    .placeholder(R.drawable.ic_person_grey600_24dp)
                    .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;
        final var rememberParam = getLayoutParams();
        rememberParam.width = size;
        setLayoutParams(rememberParam);
    }
}