From 9e7bf0975ce23362ecdfeee7b3d60d099fe94a8f Mon Sep 17 00:00:00 2001 From: savchenko_n Date: Fri, 4 Aug 2017 17:42:57 +0300 Subject: [PATCH 1/3] Implement feature --- .../compactcalendarview/CompactCalendarController.java | 8 +++++++- library/src/main/res/values/attrs.xml | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java index 9a22199c..6fab2bd0 100755 --- a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java +++ b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java @@ -105,6 +105,7 @@ class CompactCalendarController { private int currentSelectedDayTextColor; private int calenderBackgroundColor = Color.WHITE; private int otherMonthDaysTextColor; + private int pastDaysTextColor; private TimeZone timeZone; /** @@ -128,6 +129,7 @@ private enum Direction { this.calenderTextColor = calenderTextColor; this.currentSelectedDayBackgroundColor = currentSelectedDayBackgroundColor; this.otherMonthDaysTextColor = calenderTextColor; + this.pastDaysTextColor = calenderTextColor; this.velocityTracker = velocityTracker; this.multiEventIndicatorColor = multiEventIndicatorColor; this.eventsContainer = eventsContainer; @@ -146,6 +148,7 @@ private void loadAttributes(AttributeSet attrs, Context context) { calenderTextColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarTextColor, calenderTextColor); currentDayTextColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarCurrentDayTextColor, calenderTextColor); otherMonthDaysTextColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarOtherMonthDaysTextColor, otherMonthDaysTextColor); + pastDaysTextColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarPastDaysTextColor, calenderTextColor); currentSelectedDayBackgroundColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarCurrentSelectedDayBackgroundColor, currentSelectedDayBackgroundColor); currentSelectedDayTextColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarCurrentSelectedDayTextColor, calenderTextColor); calenderBackgroundColor = typedArray.getColor(R.styleable.CompactCalendarView_compactCalendarBackgroundColor, calenderBackgroundColor); @@ -837,6 +840,7 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { //offset by one because we want to start from Monday int firstDayOfMonth = getDayOfWeek(monthToDrawCalender); + int currentDayOfMonth = currentCalender.get(Calendar.DAY_OF_MONTH); boolean isSameMonthAsToday = monthToDrawCalender.get(Calendar.MONTH) == todayCalender.get(Calendar.MONTH); boolean isSameYearAsToday = monthToDrawCalender.get(Calendar.YEAR) == todayCalender.get(Calendar.YEAR); boolean isSameMonthAsCurrentCalendar = monthToDrawCalender.get(Calendar.MONTH) == currentCalender.get(Calendar.MONTH) && @@ -879,13 +883,15 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { } else { int day = ((dayRow - 1) * 7 + dayColumn + 1) - firstDayOfMonth; int defaultCalenderTextColorToUse = calenderTextColor; - if (currentCalender.get(Calendar.DAY_OF_MONTH) == day && isSameMonthAsCurrentCalendar && !isAnimatingWithExpose) { + if (currentDayOfMonth == day && isSameMonthAsCurrentCalendar && !isAnimatingWithExpose) { drawDayCircleIndicator(currentSelectedDayIndicatorStyle, canvas, xPosition, yPosition, currentSelectedDayBackgroundColor); defaultCalenderTextColorToUse = currentSelectedDayTextColor; } else if (isSameYearAsToday && isSameMonthAsToday && todayDayOfMonth == day && !isAnimatingWithExpose) { // TODO calculate position of circle in a more reliable way drawDayCircleIndicator(currentDayIndicatorStyle, canvas, xPosition, yPosition, currentDayBackgroundColor); defaultCalenderTextColorToUse = currentDayTextColor; + } else if (currentDayOfMonth < day && isSameMonthAsCurrentCalendar) { + defaultCalenderTextColorToUse = pastDaysTextColor; } if (day <= 0) { if (displayOtherMonthDays) { diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index be80746e..d0aee65e 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -29,5 +29,6 @@ + From 6800ec2227a0b60a2d83e9b929723ec28707f3dd Mon Sep 17 00:00:00 2001 From: savchenko_n Date: Fri, 4 Aug 2017 18:03:27 +0300 Subject: [PATCH 2/3] Fix logic --- .../compactcalendarview/CompactCalendarController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java index 6fab2bd0..d76f51cb 100755 --- a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java +++ b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java @@ -845,6 +845,10 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { boolean isSameYearAsToday = monthToDrawCalender.get(Calendar.YEAR) == todayCalender.get(Calendar.YEAR); boolean isSameMonthAsCurrentCalendar = monthToDrawCalender.get(Calendar.MONTH) == currentCalender.get(Calendar.MONTH) && monthToDrawCalender.get(Calendar.YEAR) == currentCalender.get(Calendar.YEAR); + boolean isPastMonth = monthToDrawCalender.get(Calendar.YEAR) < currentCalender.get(Calendar.YEAR) + || monthToDrawCalender.get(Calendar.YEAR) == currentCalender.get(Calendar.YEAR) + && monthToDrawCalender.get(Calendar.MONTH) < currentCalender.get(Calendar.MONTH); + int todayDayOfMonth = todayCalender.get(Calendar.DAY_OF_MONTH); boolean isAnimatingWithExpose = animationStatus == EXPOSE_CALENDAR_ANIMATION; @@ -890,7 +894,7 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { // TODO calculate position of circle in a more reliable way drawDayCircleIndicator(currentDayIndicatorStyle, canvas, xPosition, yPosition, currentDayBackgroundColor); defaultCalenderTextColorToUse = currentDayTextColor; - } else if (currentDayOfMonth < day && isSameMonthAsCurrentCalendar) { + } else if (isPastMonth || isSameMonthAsCurrentCalendar && currentDayOfMonth > day) { defaultCalenderTextColorToUse = pastDaysTextColor; } if (day <= 0) { From 3b397ee915b97e60ea547a93adc48011e9c812e2 Mon Sep 17 00:00:00 2001 From: savchenko_n Date: Fri, 4 Aug 2017 18:14:43 +0300 Subject: [PATCH 3/3] Use todayCalender instead currentCalender --- .../CompactCalendarController.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java index d76f51cb..9743e303 100755 --- a/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java +++ b/library/src/main/java/com/github/sundeepk/compactcalendarview/CompactCalendarController.java @@ -841,15 +841,16 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { int firstDayOfMonth = getDayOfWeek(monthToDrawCalender); int currentDayOfMonth = currentCalender.get(Calendar.DAY_OF_MONTH); - boolean isSameMonthAsToday = monthToDrawCalender.get(Calendar.MONTH) == todayCalender.get(Calendar.MONTH); - boolean isSameYearAsToday = monthToDrawCalender.get(Calendar.YEAR) == todayCalender.get(Calendar.YEAR); + int todayDayOfMonth = todayCalender.get(Calendar.DAY_OF_MONTH); + + boolean isSameMonthAsToday = monthToDrawCalender.get(Calendar.MONTH) == todayCalender.get(Calendar.MONTH) + && monthToDrawCalender.get(Calendar.YEAR) == todayCalender.get(Calendar.YEAR); boolean isSameMonthAsCurrentCalendar = monthToDrawCalender.get(Calendar.MONTH) == currentCalender.get(Calendar.MONTH) && monthToDrawCalender.get(Calendar.YEAR) == currentCalender.get(Calendar.YEAR); - boolean isPastMonth = monthToDrawCalender.get(Calendar.YEAR) < currentCalender.get(Calendar.YEAR) - || monthToDrawCalender.get(Calendar.YEAR) == currentCalender.get(Calendar.YEAR) - && monthToDrawCalender.get(Calendar.MONTH) < currentCalender.get(Calendar.MONTH); + boolean isPastMonth = monthToDrawCalender.get(Calendar.YEAR) < todayCalender.get(Calendar.YEAR) + || monthToDrawCalender.get(Calendar.YEAR) == todayCalender.get(Calendar.YEAR) + && monthToDrawCalender.get(Calendar.MONTH) < todayCalender.get(Calendar.MONTH); - int todayDayOfMonth = todayCalender.get(Calendar.DAY_OF_MONTH); boolean isAnimatingWithExpose = animationStatus == EXPOSE_CALENDAR_ANIMATION; int maximumMonthDay = monthToDrawCalender.getActualMaximum(Calendar.DAY_OF_MONTH); @@ -890,11 +891,11 @@ void drawMonth(Canvas canvas, Calendar monthToDrawCalender, int offset) { if (currentDayOfMonth == day && isSameMonthAsCurrentCalendar && !isAnimatingWithExpose) { drawDayCircleIndicator(currentSelectedDayIndicatorStyle, canvas, xPosition, yPosition, currentSelectedDayBackgroundColor); defaultCalenderTextColorToUse = currentSelectedDayTextColor; - } else if (isSameYearAsToday && isSameMonthAsToday && todayDayOfMonth == day && !isAnimatingWithExpose) { + } else if (isSameMonthAsToday && todayDayOfMonth == day && !isAnimatingWithExpose) { // TODO calculate position of circle in a more reliable way drawDayCircleIndicator(currentDayIndicatorStyle, canvas, xPosition, yPosition, currentDayBackgroundColor); defaultCalenderTextColorToUse = currentDayTextColor; - } else if (isPastMonth || isSameMonthAsCurrentCalendar && currentDayOfMonth > day) { + } else if (isPastMonth || isSameMonthAsToday && todayDayOfMonth > day) { defaultCalenderTextColorToUse = pastDaysTextColor; } if (day <= 0) {