diff options
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui')
3 files changed, 38 insertions, 20 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java index 697b21e1e..bad539918 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AbstractCardViewHolder.java @@ -21,6 +21,7 @@ import com.nextcloud.android.common.ui.theme.utils.ColorRole; import org.jetbrains.annotations.Contract; +import java.time.Instant; import java.time.ZoneId; import java.util.List; import java.util.stream.Collectors; @@ -65,8 +66,8 @@ public abstract class AbstractCardViewHolder extends RecyclerView.ViewHolder { getNotSyncedYet().setVisibility(DBStatus.LOCAL_EDITED.equals(fullCard.getStatusEnum()) ? View.VISIBLE : View.GONE); - if (fullCard.getCard().getDueDate() != null) { - setupDueDate(getCardDueDate(), fullCard.getCard()); + if (fullCard.getCard().getDueDate() != null || fullCard.getCard().getDone() != null) { + setupTemporalChip(getCardDueDate(), fullCard.getCard()); getCardDueDate().setVisibility(View.VISIBLE); } else { getCardDueDate().setVisibility(View.GONE); @@ -112,9 +113,15 @@ public abstract class AbstractCardViewHolder extends RecyclerView.ViewHolder { return getCard(); } - private static void setupDueDate(@NonNull TextView cardDueDate, @NonNull Card card) { - cardDueDate.setText(DateUtil.getRelativeDateTimeString(cardDueDate.getContext(), card.getDueDate().toEpochMilli())); - DeckViewThemeUtils.themeDueDate(cardDueDate, card.getDueDate().atZone(ZoneId.systemDefault()).toLocalDate()); + /** + * Sets up a temporal information, e. g. {@link Card#getDone()} or {@link Card#getDueDate()} + */ + private static void setupTemporalChip(@NonNull TextView cardDueDate, @NonNull Card card) { + final boolean isDone = card.getDone() != null; + final Instant temporalInformation = isDone ? card.getDone() : card.getDueDate(); + + cardDueDate.setText(DateUtil.getRelativeDateTimeString(cardDueDate.getContext(), temporalInformation.toEpochMilli())); + DeckViewThemeUtils.themeTemporalChip(cardDueDate, temporalInformation.atZone(ZoneId.systemDefault()).toLocalDate(), isDone); } protected static void setupCoverImages(@NonNull Account account, @NonNull ViewGroup coverImagesHolder, @NonNull FullCard fullCard, int maxCoverImagesCount) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/theme/DeckViewThemeUtils.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/theme/DeckViewThemeUtils.java index 7b8c81ab4..b219f75bc 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/theme/DeckViewThemeUtils.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/theme/DeckViewThemeUtils.java @@ -197,25 +197,28 @@ public class DeckViewThemeUtils extends ViewThemeUtilsBase { @Deprecated(forRemoval = true) - public static void themeDueDate(@NonNull TextView cardDueDate, @NonNull LocalDate dueDate) { + public static void themeTemporalChip(@NonNull TextView cardDueDate, @NonNull LocalDate date, boolean isDone) { final var context = cardDueDate.getContext(); - final long diff = DAYS.between(LocalDate.now(), dueDate); @ColorInt @Nullable Integer textColor = null; @DrawableRes int backgroundDrawable = 0; - if (diff == 1) { - // due date: tomorrow - backgroundDrawable = R.drawable.due_tomorrow_background; - textColor = ContextCompat.getColor(context, R.color.due_text_tomorrow); - } else if (diff == 0) { - // due date: today - backgroundDrawable = R.drawable.due_today_background; - textColor = ContextCompat.getColor(context, R.color.due_text_today); - } else if (diff < 0) { - // due date: overdue - backgroundDrawable = R.drawable.due_overdue_background; - textColor = ContextCompat.getColor(context, R.color.due_text_overdue); + if (isDone) { + // due date: done + backgroundDrawable = R.drawable.due_done_background; + textColor = ContextCompat.getColor(context, R.color.due_text_done); + } else { + final long diff = DAYS.between(LocalDate.now(), date); + + if (diff == 0) { + // due date: today + backgroundDrawable = R.drawable.due_today_background; + textColor = ContextCompat.getColor(context, R.color.due_text_today); + } else if (diff < 0) { + // due date: overdue + backgroundDrawable = R.drawable.due_overdue_background; + textColor = ContextCompat.getColor(context, R.color.due_text_overdue); + } // else we use default text styling } cardDueDate.setBackgroundResource(backgroundDrawable); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java index 08e32bf25..96c4209e5 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/singlecard/SingleCardWidget.java @@ -58,7 +58,15 @@ public class SingleCardWidget extends AppWidgetProvider { views.setTextViewText(R.id.title, fullModel.getFullCard().getCard().getTitle()); views.setRemoteAdapter(R.id.description_lv, serviceIntent); - if (fullModel.getFullCard().getCard().getDueDate() != null) { + if (fullModel.getFullCard().getCard().getDone() != null) { + views.setTextViewText(R.id.card_due_date, DateUtil.getRelativeDateTimeString(context, fullModel.getFullCard().getCard().getDone().toEpochMilli())); + // TODO Use multiple views for background colors and only set the necessary to View.VISIBLE + // https://stackoverflow.com/a/3376537 + // Because otherwise using Reflection is the only way + views.setViewVisibility(R.id.card_due_date, View.VISIBLE); + views.setViewVisibility(R.id.card_due_date_image, View.VISIBLE); + views.setImageViewResource(R.id.card_due_date_image, R.drawable.calendar_blank_grey600_24dp); + } else if (fullModel.getFullCard().getCard().getDueDate() != null) { views.setTextViewText(R.id.card_due_date, DateUtil.getRelativeDateTimeString(context, fullModel.getFullCard().getCard().getDueDate().toEpochMilli())); // TODO Use multiple views for background colors and only set the necessary to View.VISIBLE // https://stackoverflow.com/a/3376537 |