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

DueDateChip.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: f2bdf8699b5b67c157db88dcb6d4787cec0c9e68 (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package it.niedermann.nextcloud.deck.ui.view;

import static java.time.temporal.ChronoUnit.HOURS;

import android.content.Context;
import android.content.res.ColorStateList;
import android.util.AttributeSet;
import android.util.TypedValue;

import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Px;
import androidx.core.content.ContextCompat;

import com.google.android.material.chip.Chip;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;

import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.util.DateUtil;

public class DueDateChip extends Chip {

    @ColorInt
    protected final int colorOnSurface;
    protected final boolean compactMode;

    public DueDateChip(Context context) {
        this(context, null);
    }

    public DueDateChip(Context context, AttributeSet attrs) {
        this(context, attrs, com.google.android.material.R.attr.chipStyle);
    }

    public DueDateChip(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        final var typedValue = new TypedValue();
        final var theme = getContext().getTheme();
        theme.resolveAttribute(com.google.android.material.R.attr.colorOnSecondary, typedValue, true);
        this.colorOnSurface = typedValue.data;

        final var styles = context.obtainStyledAttributes(attrs, R.styleable.DueDateChip, defStyleAttr, 0);
        this.compactMode = styles.getBoolean(R.styleable.DueDateChip_compactMode, false);
        styles.recycle();

        setEnsureMinTouchTargetSize(false);
        setClickable(false);

        @Px final var padding = getResources().getDimensionPixelSize(R.dimen.spacer_1x);
        setPadding(padding, padding, padding, padding);
        setMinHeight(0);
        setChipMinHeight(0);

        if (compactMode) {
            setChipEndPadding(0);
            setTextEndPadding(0);
        }
    }

    public void setDueDate(@NonNull Instant date, boolean isDone) {
        if (compactMode) {
            setText(null);
        } else {
            setText(DateUtil.getRelativeDateTimeString(getContext(), date.toEpochMilli()));
        }

        @DrawableRes final int chipIconRes;
        @Nullable @ColorRes final Integer textColorRes;
        @ColorRes final int backgroundColorRes;

        if (isDone) { // Done
            chipIconRes = R.drawable.ic_check_circle_24;
            backgroundColorRes = R.color.due_done;
            textColorRes = R.color.due_text_done;

        } else if (date.isBefore(Instant.now())) { // Overdue
            chipIconRes = R.drawable.ic_time_filled_24;
            backgroundColorRes = R.color.due_overdue;
            textColorRes = R.color.due_text_overdue;

        } else if (HOURS.between(LocalDateTime.now(), date.atZone(ZoneId.systemDefault())) < 24) { // Next 24 Hours
            chipIconRes = R.drawable.ic_time_24;
            backgroundColorRes = R.color.due_today;
            textColorRes = R.color.due_text_today;

        } else { // Future
            chipIconRes = R.drawable.ic_time_24;
            backgroundColorRes = android.R.color.transparent;
            textColorRes = null;
        }

        setChipIcon(ContextCompat.getDrawable(getContext(), chipIconRes));
        setChipBackgroundColorResource(backgroundColorRes);

        if (textColorRes == null) {
            setTextColor(colorOnSurface);
            setChipIconTint(ColorStateList.valueOf(colorOnSurface));

        } else {
            setTextColor(ContextCompat.getColor(getContext(), textColorRes));
            setChipIconTintResource(textColorRes);
        }
    }
}