From 2277f0f4f074aa33f8fd045dbc6790d180efcccb Mon Sep 17 00:00:00 2001 From: Alex Petrakov Date: Mon, 26 Aug 2019 22:58:58 +0300 Subject: [PATCH 1/4] Fix slow generation of unbounded months --- .../java/com/kizitonwose/calendarview/model/MonthConfig.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt index fe7d14ec..43a6efb8 100644 --- a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt +++ b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt @@ -106,11 +106,7 @@ internal data class MonthConfig( // Regroup data into 7 days. val allDaysGroup = mutableListOf>() - while (allDays.isNotEmpty()) { - val sevenDays = allDays.take(7) - allDaysGroup.add(sevenDays) - allDays.removeAll(sevenDays) - } + allDaysGroup.addAll(allDays.chunked(7)) val calendarMonths = mutableListOf() val calMonthsCount = allDaysGroup.size roundDiv maxRowCount From a00c7e9b78bc84cdd0b5c06293144ddd73e41f79 Mon Sep 17 00:00:00 2001 From: Alex Petrakov Date: Wed, 28 Aug 2019 14:05:22 +0300 Subject: [PATCH 2/4] Optimize a loop used for bounded months generation --- .../kizitonwose/calendarview/model/MonthConfig.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt index 43a6efb8..8afd10ce 100644 --- a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt +++ b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt @@ -56,16 +56,16 @@ internal data class MonthConfig( } val weekDaysGroup = - generateWeekDays(currentMonth, firstDayOfWeek, generateInDates, outDateStyle).toMutableList() + generateWeekDays(currentMonth, firstDayOfWeek, generateInDates, outDateStyle) // Group rows by maxRowCount into CalendarMonth classes. val calendarMonths = mutableListOf() val numberOfSameMonth = weekDaysGroup.size roundDiv maxRowCount - while (weekDaysGroup.isNotEmpty()) { - val monthDays = weekDaysGroup.take(maxRowCount) - calendarMonths.add(CalendarMonth(currentMonth, monthDays, calendarMonths.size, numberOfSameMonth)) - weekDaysGroup.removeAll(monthDays) - } + var indexInSameMonth = 0 + calendarMonths.addAll(weekDaysGroup.chunked(maxRowCount) { monthDays -> + // Use monthDays.toList() to create a copy of the ephemeral list. + CalendarMonth(currentMonth, monthDays.toList(), indexInSameMonth++, numberOfSameMonth) + }) months.addAll(calendarMonths) if (currentMonth != endMonth) currentMonth = currentMonth.next else break From 464fbbd05f9a391dcf4a4b53ee029785ce0cc45e Mon Sep 17 00:00:00 2001 From: Alex Petrakov Date: Wed, 28 Aug 2019 14:28:49 +0300 Subject: [PATCH 3/4] Optimize a loop used for generation of weeks for each YearMonth --- .../com/kizitonwose/calendarview/model/MonthConfig.kt | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt index 8afd10ce..272cc9c4 100644 --- a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt +++ b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt @@ -204,7 +204,7 @@ internal data class MonthConfig( val thisMonthDays = (1..yearMonth.lengthOfMonth()).map { CalendarDay(LocalDate.of(year, month, it), DayOwner.THIS_MONTH) - }.toMutableList() + } val weekDaysGroup = if (generateInDates) { // Group days by week of month so we can add the in dates if necessary. @@ -227,12 +227,7 @@ internal data class MonthConfig( groupByWeekOfMonth } else { // Group days by 7, first day shown on the month will be day 1. - val groupBySeven = mutableListOf>() - while (thisMonthDays.isNotEmpty()) { - val nextRow = thisMonthDays.take(7) - groupBySeven.add(nextRow) - thisMonthDays.removeAll(nextRow) - } + val groupBySeven = thisMonthDays.chunked(7).toMutableList() groupBySeven } From 2de3f1a9c65918cf37b2f4e1b658b0c322e9c5e1 Mon Sep 17 00:00:00 2001 From: Alex Petrakov Date: Wed, 28 Aug 2019 17:46:59 +0300 Subject: [PATCH 4/4] Simplifications --- .../java/com/kizitonwose/calendarview/model/MonthConfig.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt index 272cc9c4..a7e20854 100644 --- a/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt +++ b/library/src/main/java/com/kizitonwose/calendarview/model/MonthConfig.kt @@ -105,8 +105,7 @@ internal data class MonthConfig( } // Regroup data into 7 days. - val allDaysGroup = mutableListOf>() - allDaysGroup.addAll(allDays.chunked(7)) + val allDaysGroup = allDays.chunked(7).toMutableList() val calendarMonths = mutableListOf() val calMonthsCount = allDaysGroup.size roundDiv maxRowCount @@ -227,8 +226,7 @@ internal data class MonthConfig( groupByWeekOfMonth } else { // Group days by 7, first day shown on the month will be day 1. - val groupBySeven = thisMonthDays.chunked(7).toMutableList() - groupBySeven + thisMonthDays.chunked(7).toMutableList() }