diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 458a3b6..3732089 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -33,7 +33,6 @@ android { } compileOptions { - isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } @@ -56,7 +55,6 @@ dependencies { implementation("androidx.compose.material3:material3:1.0.0-alpha15") implementation("androidx.navigation:navigation-compose:2.5.1") // jetpack compose - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") // <- this dependency is required implementation(Deps.Compose.ui) implementation(Deps.Compose.material) implementation(Deps.Compose.activity) diff --git a/app/src/main/java/com/himanshoe/sample/demo/KalendarDemo.kt b/app/src/main/java/com/himanshoe/sample/demo/KalendarDemo.kt index dd6dc4e..3500e95 100644 --- a/app/src/main/java/com/himanshoe/sample/demo/KalendarDemo.kt +++ b/app/src/main/java/com/himanshoe/sample/demo/KalendarDemo.kt @@ -28,12 +28,12 @@ fun KalendarDemo() { Kalendar( kalendarType = KalendarType.Oceanic, kalendarEvents = listOf( - KalendarEvent(LocalDate(2022, 8, 25), "Birthday"), - KalendarEvent(LocalDate(2022, 8, 25), "Birthday"), - KalendarEvent(LocalDate(2022, 8, 25), "Birthday"), - KalendarEvent(LocalDate(2022, 8, 28), "Anniversary"), - KalendarEvent(LocalDate(2022, 8, 28), "Party"), - KalendarEvent(LocalDate(2022, 8, 29), "Club"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 28), "Anniversary"), + KalendarEvent(LocalDate(2022, 10, 28), "Party"), + KalendarEvent(LocalDate(2022, 10, 29), "Club"), ) ) Text( @@ -46,7 +46,15 @@ fun KalendarDemo() { ) Kalendar( kalendarType = KalendarType.Firey, - modifier = Modifier.padding(16.dp) + modifier = Modifier.padding(16.dp), + kalendarEvents = listOf( + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 28), "Party"), + KalendarEvent(LocalDate(2022, 10, 29), "Club"), + ) ) Text( text = "Kalendar Firey Type", diff --git a/app/src/main/java/com/himanshoe/sample/demo/KalendarEndlossDemo.kt b/app/src/main/java/com/himanshoe/sample/demo/KalendarEndlossDemo.kt index d79e81d..50703cd 100644 --- a/app/src/main/java/com/himanshoe/sample/demo/KalendarEndlossDemo.kt +++ b/app/src/main/java/com/himanshoe/sample/demo/KalendarEndlossDemo.kt @@ -8,6 +8,7 @@ import com.himanshoe.kalendar.endlos.Kalendar import com.himanshoe.kalendar.endlos.model.KalendarEvent import kotlinx.datetime.Clock import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate import kotlinx.datetime.TimeZone import kotlinx.datetime.plus import kotlinx.datetime.todayIn @@ -20,9 +21,12 @@ fun KalendarEndlossDemo() { Kalendar( Modifier.background(Color.White), kalendarEvents = listOf( - KalendarEvent(oneWeekFromNow, "Himanshu"), - KalendarEvent(oneWeekFromNow, "Himanshu"), - KalendarEvent(oneWeekFromNow, "Himanshu") + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 25), "Birthday"), + KalendarEvent(LocalDate(2022, 10, 28), "Anniversary"), + KalendarEvent(LocalDate(2022, 10, 28), "Party"), + KalendarEvent(LocalDate(2022, 10, 29), "Club"), ) ) } diff --git a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/Kalendar.kt b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/Kalendar.kt index fbc0882..848616c 100644 --- a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/Kalendar.kt +++ b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/Kalendar.kt @@ -1,28 +1,15 @@ package com.himanshoe.kalendar.endlos -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems -import androidx.paging.compose.items import com.himanshoe.kalendar.endlos.color.KalendarColors import com.himanshoe.kalendar.endlos.color.KalendarThemeColor import com.himanshoe.kalendar.endlos.component.day.config.KalendarDayColors import com.himanshoe.kalendar.endlos.component.day.config.KalendarDayDefaultColors import com.himanshoe.kalendar.endlos.model.KalendarDay import com.himanshoe.kalendar.endlos.model.KalendarEvent -import kotlinx.datetime.Clock -import kotlinx.datetime.LocalDate -import kotlinx.datetime.TimeZone -import kotlinx.datetime.todayIn @Composable fun Kalendar( @@ -61,41 +48,3 @@ fun Kalendar( kalendarThemeColors = listOf(kalendarThemeColor), ) } - -@Composable -private fun KalendarEndloss( - modifier: Modifier, - kalendarItems: LazyPagingItems, - kalendarEvents: List, - onCurrentDayClick: (KalendarDay, List) -> Unit, - kalendarDayColors: KalendarDayColors, - kalendarThemeColors: List -) { - val today = Clock.System.todayIn(TimeZone.currentSystemDefault()) - val clickedDay = remember { mutableStateOf(today) } - - LazyColumn(modifier = modifier.fillMaxWidth()) { - items(kalendarItems) { date: LocalDate? -> - if (date != null) { - val kalendarThemeColor = if (kalendarThemeColors.count() == 1) { - kalendarThemeColors.first() - } else kalendarThemeColors[date.monthNumber.minus(1)] - - KalendarMonth( - date = date, - modifier = modifier - .padding(horizontal = 12.dp, vertical = 6.dp) - .background(kalendarThemeColor.backgroundColor), - kalendarEvents = kalendarEvents.filter { it.date.monthNumber == date.monthNumber }, - onCurrentDayClick = { day, events -> - clickedDay.value = day.localDate - onCurrentDayClick(day, events) - }, - kalendarDayColors = kalendarDayColors, - selectedDay = clickedDay.value, - kalendarThemeColors = kalendarThemeColor - ) - } - } - } -} diff --git a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarEndloss.kt b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarEndloss.kt new file mode 100644 index 0000000..46d42bd --- /dev/null +++ b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarEndloss.kt @@ -0,0 +1,59 @@ +package com.himanshoe.kalendar.endlos + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.paging.compose.LazyPagingItems +import androidx.paging.compose.items +import com.himanshoe.kalendar.endlos.color.KalendarThemeColor +import com.himanshoe.kalendar.endlos.component.day.config.KalendarDayColors +import com.himanshoe.kalendar.endlos.model.KalendarDay +import com.himanshoe.kalendar.endlos.model.KalendarEvent +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.todayIn + +@Composable +internal fun KalendarEndloss( + modifier: Modifier, + kalendarItems: LazyPagingItems, + kalendarEvents: List, + onCurrentDayClick: (KalendarDay, List) -> Unit, + kalendarDayColors: KalendarDayColors, + kalendarThemeColors: List +) { + val today = Clock.System.todayIn(TimeZone.currentSystemDefault()) + val clickedDay = remember { mutableStateOf(today) } + + LazyColumn(modifier = modifier.fillMaxWidth()) { + items(kalendarItems) { date: LocalDate? -> + if (date != null) { + val kalendarThemeColor = if (kalendarThemeColors.count() == 1) { + kalendarThemeColors.first() + } else kalendarThemeColors[date.monthNumber.minus(1)] + + KalendarMonth( + date = date, + modifier = modifier + .padding(horizontal = 12.dp, vertical = 6.dp) + .background(kalendarThemeColor.backgroundColor), + kalendarEvents = kalendarEvents.filter { it.date.monthNumber == date.monthNumber }, + onCurrentDayClick = { day, events -> + clickedDay.value = day.localDate + onCurrentDayClick(day, events) + }, + kalendarDayColors = kalendarDayColors, + selectedDay = clickedDay.value, + kalendarThemeColors = kalendarThemeColor + ) + } + } + } +} diff --git a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarMonth.kt b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarMonth.kt index 9827c81..68887ad 100644 --- a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarMonth.kt +++ b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/KalendarMonth.kt @@ -20,10 +20,13 @@ import com.himanshoe.kalendar.endlos.component.text.KalendarNormalText import com.himanshoe.kalendar.endlos.model.KalendarDay import com.himanshoe.kalendar.endlos.model.KalendarEvent import com.himanshoe.kalendar.endlos.model.toKalendarDay +import kotlinx.datetime.Clock import kotlinx.datetime.DayOfWeek import kotlinx.datetime.LocalDate import kotlinx.datetime.Month +import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDate +import kotlinx.datetime.todayIn private const val DaysInWeek = 7 private val WeekDays = listOf("M", "T", "W", "T", "F", "S", "S") @@ -38,6 +41,7 @@ internal fun KalendarMonth( kalendarDayColors: KalendarDayColors, kalendarThemeColors: KalendarThemeColor, ) { + val currentDay = Clock.System.todayIn(TimeZone.currentSystemDefault()) Column( modifier = modifier @@ -75,6 +79,7 @@ internal fun KalendarMonth( Row(horizontalArrangement = Arrangement.spacedBy(0.dp)) { weekDays.forEach { localDate -> if (localDate is LocalDate) { + val isCurrentDay = localDate == currentDay KalendarDay( modifier = Modifier, size = size, @@ -83,6 +88,7 @@ internal fun KalendarMonth( onCurrentDayClick = onCurrentDayClick, kalendarDayColors = kalendarDayColors, selectedKalendarDay = selectedDay, + isCurrentDay = isCurrentDay, dotColor = kalendarThemeColors.headerTextColor, dayBackgroundColor = kalendarThemeColors.dayBackgroundColor ) diff --git a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/component/day/KalendarDay.kt b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/component/day/KalendarDay.kt index 6545032..2349072 100644 --- a/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/component/day/KalendarDay.kt +++ b/kalendar-endlos/src/main/java/com/himanshoe/kalendar/endlos/component/day/KalendarDay.kt @@ -81,13 +81,12 @@ fun KalendarDay( .align(Alignment.CenterHorizontally), horizontalArrangement = Arrangement.Center ) { - if (kalendarEvents.isNotEmpty()) { - kalendarEvents.take(3).forEachIndexed { index, _ -> + val kalendarEventForDay = kalendarEvents.filter { it.date == kalendarDay.localDate } + if (kalendarEventForDay.isNotEmpty()) { + val dayEvents = if (kalendarEventForDay.count() > 3) kalendarEventForDay.take(3) else kalendarEventForDay + dayEvents.forEachIndexed { index, _ -> KalendarDots( - modifier = Modifier, - index = index, - size = size, - color = dotColor + modifier = Modifier, index = index, size = size, color = dotColor ) } } diff --git a/kalendar/src/main/java/com/himanshoe/kalendar/Kalendar.kt b/kalendar/src/main/java/com/himanshoe/kalendar/Kalendar.kt index 9e1eb40..6acbfe2 100644 --- a/kalendar/src/main/java/com/himanshoe/kalendar/Kalendar.kt +++ b/kalendar/src/main/java/com/himanshoe/kalendar/Kalendar.kt @@ -3,7 +3,6 @@ package com.himanshoe.kalendar import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview import com.himanshoe.kalendar.color.KalendarColors import com.himanshoe.kalendar.color.KalendarThemeColor import com.himanshoe.kalendar.component.day.config.KalendarDayColors @@ -80,8 +79,3 @@ fun Kalendar( } } } - -@Composable -@Preview -private fun KalendarPreview() { -} diff --git a/kalendar/src/main/java/com/himanshoe/kalendar/component/day/KalendarDay.kt b/kalendar/src/main/java/com/himanshoe/kalendar/component/day/KalendarDay.kt index aa5c356..e0bfedb 100644 --- a/kalendar/src/main/java/com/himanshoe/kalendar/component/day/KalendarDay.kt +++ b/kalendar/src/main/java/com/himanshoe/kalendar/component/day/KalendarDay.kt @@ -80,13 +80,12 @@ fun KalendarDay( .align(Alignment.CenterHorizontally), horizontalArrangement = Arrangement.Center ) { - if (kalendarEvents.isNotEmpty()) { - kalendarEvents.take(3).forEachIndexed { index, _ -> + val kalendarEventForDay = kalendarEvents.filter { it.date == kalendarDay.localDate } + if (kalendarEventForDay.isNotEmpty()) { + val dayEvents = if (kalendarEventForDay.count() > 3) kalendarEventForDay.take(3) else kalendarEventForDay + dayEvents.forEachIndexed { index, _ -> KalendarDots( - modifier = Modifier, - index = index, - size = size, - color = dotColor + modifier = Modifier, index = index, size = size, color = dotColor ) } } @@ -106,8 +105,7 @@ fun KalendarDots( .padding(horizontal = 1.dp) .clip(shape = CircleShape) .background( - color = color - .copy(alpha = index.plus(1) * 0.3F) + color = color.copy(alpha = index.plus(1) * 0.3F) ) .size(size = size.div(12)) ) @@ -119,11 +117,10 @@ private fun getKalendarDayState(selectedDate: LocalDate, currentDay: LocalDate) else -> KalendarDayState.KalendarDayDefault } -private fun getBorder(isCurrentDay: Boolean) = - BorderStroke( - width = if (isCurrentDay) 1.dp else 0.dp, - color = if (isCurrentDay) Color.Black else Color.Transparent, - ) +private fun getBorder(isCurrentDay: Boolean) = BorderStroke( + width = if (isCurrentDay) 1.dp else 0.dp, + color = if (isCurrentDay) Color.Black else Color.Transparent, +) private fun getTextWeight(kalendarDayState: KalendarDayState) = if (kalendarDayState is KalendarDayState.KalendarDaySelected) { @@ -141,14 +138,6 @@ private fun getBackgroundColor( Color.Transparent } -private fun getTextSelectionShape( - kalendarDayState: KalendarDayState, -) = if (kalendarDayState is KalendarDayState.KalendarDaySelected) { - CircleShape -} else { - CircleShape -} - private fun getTextColor( kalendarDayState: KalendarDayState, kalendarDayColors: KalendarDayColors, diff --git a/kalendar/src/main/java/com/himanshoe/kalendar/ui/firey/KalendarFirey.kt b/kalendar/src/main/java/com/himanshoe/kalendar/ui/firey/KalendarFirey.kt index adfec66..ce202f3 100644 --- a/kalendar/src/main/java/com/himanshoe/kalendar/ui/firey/KalendarFirey.kt +++ b/kalendar/src/main/java/com/himanshoe/kalendar/ui/firey/KalendarFirey.kt @@ -45,11 +45,15 @@ fun KalendarFirey( val displayedMonth = remember { mutableStateOf(currentDay.month) } - val (currentMonth, currentYear) = displayedMonth.value to currentDay.year + val displayedYear = remember { + mutableStateOf(currentDay.year) + } + val currentMonth = displayedMonth.value + val currentYear = displayedYear.value + val daysInMonth = currentMonth.minLength() - val year = currentDay.year val monthValue = if (currentMonth.value.toString().length == 1) "0" + currentMonth.value.toString() else currentMonth.value.toString() - val startDayOfMonth = "${currentDay.year}-$monthValue-01".toLocalDate() + val startDayOfMonth = "$currentYear-$monthValue-01".toLocalDate() val firstDayOfMonth = startDayOfMonth.dayOfWeek val selectedKalendarDate = remember { mutableStateOf(currentDay) } @@ -66,12 +70,18 @@ fun KalendarFirey( modifier = Modifier.padding(vertical = 12.dp), month = displayedMonth.value, onPreviousClick = { + if (displayedMonth.value.value == 1) { + displayedYear.value = displayedYear.value.minus(1) + } displayedMonth.value = displayedMonth.value.minus(1) }, onNextClick = { + if (displayedMonth.value.value == 12) { + displayedYear.value = displayedYear.value.plus(1) + } displayedMonth.value = displayedMonth.value.plus(1) }, - year = year, + year = displayedYear.value, textColor = kalendarThemeColors[currentMonth.value.minus(1)].headerTextColor, ) LazyVerticalGrid( @@ -123,11 +133,15 @@ fun KalendarFirey( val displayedMonth = remember { mutableStateOf(currentDay.month) } - val (currentMonth, currentYear) = displayedMonth.value to currentDay.year + val displayedYear = remember { + mutableStateOf(currentDay.year) + } + val currentMonth = displayedMonth.value + val currentYear = displayedYear.value + val daysInMonth = currentMonth.minLength() - val year = currentDay.year val monthValue = if (currentMonth.value.toString().length == 1) "0" + currentMonth.value.toString() else currentMonth.value.toString() - val startDayOfMonth = "${currentDay.year}-$monthValue-01".toLocalDate() + val startDayOfMonth = "$currentYear-$monthValue-01".toLocalDate() val firstDayOfMonth = startDayOfMonth.dayOfWeek val selectedKalendarDate = remember { mutableStateOf(currentDay) } @@ -144,14 +158,21 @@ fun KalendarFirey( modifier = Modifier.padding(vertical = 12.dp), month = displayedMonth.value, onPreviousClick = { + if (displayedMonth.value.value == 1) { + displayedYear.value = displayedYear.value.minus(1) + } displayedMonth.value = displayedMonth.value.minus(1) }, onNextClick = { + if (displayedMonth.value.value == 12) { + displayedYear.value = displayedYear.value.plus(1) + } displayedMonth.value = displayedMonth.value.plus(1) }, - year = year, + year = displayedYear.value, textColor = kalendarThemeColor.headerTextColor, ) + LazyVerticalGrid( modifier = Modifier.fillMaxWidth(), columns = GridCells.Fixed(7),