diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/adapter/MonthAdapter.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/adapter/MonthAdapter.java index 043ef89..e0a2b9a 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/adapter/MonthAdapter.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/adapter/MonthAdapter.java @@ -125,6 +125,28 @@ public void setWeekendDays(Set weekendDays) { setDaysAccordingToSet(weekendDays, DayFlag.WEEKEND); } + public void setMinDate(Calendar minDate){ + for (Month month : months) { + for (Day day : month.getDays()) { + if(!day.isDisabled()){ + day.setDisabled(CalendarUtils.isDayDisabledByMinDate(day, minDate)); + } + } + } + notifyDataSetChanged(); + } + + public void setMaxDate(Calendar maxDate){ + for (Month month : months) { + for (Day day : month.getDays()) { + if(!day.isDisabled()){ + day.setDisabled(CalendarUtils.isDayDisabledByMaxDate(day, maxDate)); + } + } + } + notifyDataSetChanged(); + } + public void setDisabledDays(Set disabledDays) { setDaysAccordingToSet(disabledDays, DayFlag.DISABLED); } diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/dialog/CalendarDialog.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/dialog/CalendarDialog.java index 440f7f1..d01c605 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/dialog/CalendarDialog.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/dialog/CalendarDialog.java @@ -26,6 +26,7 @@ import com.applikeysolutions.cosmocalendar.settings.selection.SelectionInterface; import com.applikeysolutions.cosmocalendar.view.CalendarView; +import java.util.Calendar; import java.util.List; import java.util.Set; @@ -343,6 +344,16 @@ public void setShowDaysOfWeekTitle(boolean showDaysOfWeekTitle) { calendarView.setShowDaysOfWeekTitle(showDaysOfWeekTitle); } + @Override + public Calendar getMinDate() { + return calendarView.getMinDate(); + } + + @Override + public Calendar getMaxDate() { + return calendarView.getMaxDate(); + } + @Override public Set getDisabledDays() { return calendarView.getDisabledDays(); @@ -363,6 +374,16 @@ public DisabledDaysCriteria getDisabledDaysCriteria() { return calendarView.getDisabledDaysCriteria(); } + @Override + public void setMinDate(Calendar minDate) { + calendarView.setMinDate(minDate); + } + + @Override + public void setMaxDate(Calendar maxDate) { + calendarView.setMaxDate(maxDate); + } + @Override public void setDisabledDays(Set disabledDays) { calendarView.setDisabledDays(disabledDays); diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/SettingsManager.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/SettingsManager.java index b8b016c..df1e936 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/SettingsManager.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/SettingsManager.java @@ -282,6 +282,16 @@ public void setShowDaysOfWeekTitle(boolean showDaysOfWeekTitle) { appearanceModel.setShowDaysOfWeekTitle(showDaysOfWeekTitle); } + @Override + public Calendar getMinDate() { + return calendarListsModel.getMinDate(); + } + + @Override + public Calendar getMaxDate() { + return calendarListsModel.getMaxDate(); + } + @Override public Set getDisabledDays() { return calendarListsModel.getDisabledDays(); @@ -331,4 +341,15 @@ public int getFirstDayOfWeek() { public void setFirstDayOfWeek(int firstDayOfWeek) { dateModel.setFirstDayOfWeek(firstDayOfWeek); } + + @Override + public void setMinDate(Calendar minDate) { + calendarListsModel.setMinDate(minDate); + } + + @Override + public void setMaxDate(Calendar maxDate) { + calendarListsModel.setMaxDate(maxDate); + } + } diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsInterface.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsInterface.java index 6b5f64a..0e00c23 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsInterface.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsInterface.java @@ -3,10 +3,15 @@ import com.applikeysolutions.cosmocalendar.settings.lists.connected_days.ConnectedDays; import com.applikeysolutions.cosmocalendar.settings.lists.connected_days.ConnectedDaysManager; +import java.util.Calendar; import java.util.Set; public interface CalendarListsInterface { + Calendar getMinDate(); + + Calendar getMaxDate(); + Set getDisabledDays(); ConnectedDaysManager getConnectedDaysManager(); @@ -15,6 +20,10 @@ public interface CalendarListsInterface { DisabledDaysCriteria getDisabledDaysCriteria(); + void setMinDate(Calendar minDate); + + void setMaxDate(Calendar maxDate); + void setDisabledDays(Set disabledDays); void setWeekendDays(Set weekendDays); diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsModel.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsModel.java index 0d9d53c..63c68ce 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsModel.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/settings/lists/CalendarListsModel.java @@ -10,6 +10,10 @@ public class CalendarListsModel implements CalendarListsInterface { + private Calendar minDate; + + private Calendar maxDate; + //Disabled days cannot be selected private Set disabledDays = new TreeSet<>(); @@ -22,6 +26,16 @@ public class CalendarListsModel implements CalendarListsInterface { add(Calendar.SUNDAY); }}; + @Override + public Calendar getMinDate() { + return minDate; + } + + @Override + public Calendar getMaxDate() { + return maxDate; + } + @Override public Set getDisabledDays() { return disabledDays; @@ -42,6 +56,16 @@ public DisabledDaysCriteria getDisabledDaysCriteria() { return disabledDaysCriteria; } + @Override + public void setMinDate(Calendar minDate) { + this.minDate = minDate; + } + + @Override + public void setMaxDate(Calendar maxDate) { + this.maxDate = maxDate; + } + @Override public void setDisabledDays(Set disabledDays) { this.disabledDays = disabledDays; diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/utils/CalendarUtils.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/utils/CalendarUtils.java index 0cc63c3..a3379b9 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/utils/CalendarUtils.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/utils/CalendarUtils.java @@ -157,8 +157,20 @@ public static void setDay(Day day, SettingsManager settingsManager) { day.setWeekend(settingsManager.getWeekendDays().contains(day.getCalendar().get(Calendar.DAY_OF_WEEK))); } + if (settingsManager.getMinDate() != null) { + day.setDisabled(isDayDisabledByMinDate(day, settingsManager.getMinDate())); + } + + if (settingsManager.getMaxDate() != null) { + if (!day.isDisabled()) { + day.setDisabled(isDayDisabledByMaxDate(day, settingsManager.getMaxDate())); + } + } + if (settingsManager.getDisabledDays() != null) { - day.setDisabled(isDayInSet(day, settingsManager.getDisabledDays())); + if(!day.isDisabled()) { + day.setDisabled(isDayInSet(day, settingsManager.getDisabledDays())); + } } if (settingsManager.getDisabledDaysCriteria() != null) { @@ -183,6 +195,18 @@ public static boolean isDayInSet(Day day, Set daysInSet) { return false; } + public static boolean isDayDisabledByMinDate(Day day, Calendar minDate) { + return day.getCalendar().get(Calendar.YEAR) < minDate.get(Calendar.YEAR) + || day.getCalendar().get(Calendar.YEAR) == minDate.get(Calendar.YEAR) + && day.getCalendar().get(Calendar.DAY_OF_YEAR) < minDate.get(Calendar.DAY_OF_YEAR); + } + + public static boolean isDayDisabledByMaxDate(Day day, Calendar maxDate) { + return day.getCalendar().get(Calendar.YEAR) > maxDate.get(Calendar.YEAR) + || day.getCalendar().get(Calendar.YEAR) == maxDate.get(Calendar.YEAR) + && day.getCalendar().get(Calendar.DAY_OF_YEAR) > maxDate.get(Calendar.DAY_OF_YEAR); + } + public static boolean isDayDisabledByCriteria(Day day, DisabledDaysCriteria criteria) { int field = -1; switch (criteria.getCriteriaType()){ diff --git a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/view/CalendarView.java b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/view/CalendarView.java index 8d224b7..cd0ffa4 100644 --- a/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/view/CalendarView.java +++ b/cosmocalendar/src/main/java/com/applikeysolutions/cosmocalendar/view/CalendarView.java @@ -101,8 +101,7 @@ public class CalendarView extends RelativeLayout implements OnDaySelectedListene private FetchMonthsAsyncTask asyncTask; public CalendarView(Context context) { - super(context); - init(); + this(context, null); } public CalendarView(Context context, @Nullable AttributeSet attrs) { @@ -512,6 +511,16 @@ private void loadAsyncMonths(final boolean future){ asyncTask.execute(new FetchMonthsAsyncTask.FetchParams(future, month, settingsManager, monthAdapter, SettingsManager.DEFAULT_MONTH_COUNT)); } + @Override + public Calendar getMinDate() { + return settingsManager.getMinDate(); + } + + @Override + public Calendar getMaxDate() { + return settingsManager.getMaxDate(); + } + @Override public Set getDisabledDays() { return settingsManager.getDisabledDays(); @@ -532,6 +541,18 @@ public DisabledDaysCriteria getDisabledDaysCriteria() { return settingsManager.getDisabledDaysCriteria(); } + @Override + public void setMinDate(Calendar minDate) { + settingsManager.setMinDate(minDate); + monthAdapter.setMinDate(minDate); + } + + @Override + public void setMaxDate(Calendar maxDate) { + settingsManager.setMaxDate(maxDate); + monthAdapter.setMaxDate(maxDate); + } + public void setDisabledDays(Set disabledDays) { settingsManager.setDisabledDays(disabledDays); monthAdapter.setDisabledDays(disabledDays);