From 2ca4a2af86be8431416d65e080c95dc3188d6b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD-=E7=99=BD?= Date: Sun, 20 Nov 2022 07:40:57 +0800 Subject: [PATCH] Restrict datepicker ranges with validators --- .../ehviewer/ui/scene/FavoritesScene.java | 19 ++++++++++++++++--- .../ehviewer/ui/scene/GalleryListScene.java | 19 ++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 5814cd80f..963f9df8a 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -42,6 +42,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.datepicker.CalendarConstraints; +import com.google.android.material.datepicker.CompositeDateValidator; +import com.google.android.material.datepicker.DateValidatorPointBackward; +import com.google.android.material.datepicker.DateValidatorPointForward; import com.google.android.material.datepicker.MaterialDatePicker; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.hippo.annotation.Implemented; @@ -649,13 +652,23 @@ public class FavoritesScene extends BaseScene implements return; } - LocalDateTime local = LocalDateTime.of(2005, 1, 1, 0, 0); - var constraintsBuilder = new CalendarConstraints.Builder().setStart(local.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)).toInstant().toEpochMilli()).setEnd(MaterialDatePicker.todayInUtcMilliseconds()); + LocalDateTime local = LocalDateTime.of(2007, 3, 21, 0, 0); + long fromDate = local.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)).toInstant().toEpochMilli(); + long toDate = MaterialDatePicker.todayInUtcMilliseconds(); + + ArrayList listValidators = new ArrayList<>(); + listValidators.add(DateValidatorPointForward.from(fromDate)); + listValidators.add(DateValidatorPointBackward.before(toDate)); + + var constraintsBuilder = new CalendarConstraints.Builder() + .setStart(fromDate) + .setEnd(toDate) + .setValidator(CompositeDateValidator.allOf(listValidators)); var datePicker = MaterialDatePicker.Builder.datePicker() .setCalendarConstraints(constraintsBuilder.build()) .setTitleText(R.string.go_to) - .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) + .setSelection(toDate) .build(); datePicker.show(requireActivity().getSupportFragmentManager(), "date-picker"); datePicker.addOnPositiveButtonClickListener(v -> { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index d0120d962..4270811cb 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -56,6 +56,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.datepicker.CalendarConstraints; +import com.google.android.material.datepicker.CompositeDateValidator; +import com.google.android.material.datepicker.DateValidatorPointBackward; +import com.google.android.material.datepicker.DateValidatorPointForward; import com.google.android.material.datepicker.MaterialDatePicker; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.hippo.app.BaseDialogBuilder; @@ -896,13 +899,23 @@ public final class GalleryListScene extends BaseScene dialog.dismiss(); }); } else { - LocalDateTime local = LocalDateTime.of(2005, 1, 1, 0, 0); - var constraintsBuilder = new CalendarConstraints.Builder().setStart(local.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)).toInstant().toEpochMilli()).setEnd(MaterialDatePicker.todayInUtcMilliseconds()); + LocalDateTime local = LocalDateTime.of(2007, 3, 21, 0, 0); + long fromDate = local.atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)).toInstant().toEpochMilli(); + long toDate = MaterialDatePicker.todayInUtcMilliseconds(); + + ArrayList listValidators = new ArrayList<>(); + listValidators.add(DateValidatorPointForward.from(fromDate)); + listValidators.add(DateValidatorPointBackward.before(toDate)); + + var constraintsBuilder = new CalendarConstraints.Builder() + .setStart(fromDate) + .setEnd(toDate) + .setValidator(CompositeDateValidator.allOf(listValidators)); var datePicker = MaterialDatePicker.Builder.datePicker() .setCalendarConstraints(constraintsBuilder.build()) .setTitleText(R.string.go_to) - .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) + .setSelection(toDate) .build(); datePicker.show(requireActivity().getSupportFragmentManager(), "date-picker"); datePicker.addOnPositiveButtonClickListener(v -> {