Skip to content

Commit

Permalink
Changed the way events are being displayed to be more tidy by categor…
Browse files Browse the repository at this point in the history
…izing events per day
  • Loading branch information
HeyPouya committed Nov 16, 2024
1 parent c71f357 commit db603aa
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 42 deletions.
5 changes: 4 additions & 1 deletion app/src/main/java/com/pouyaheydari/calendar/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.pouyaheydari.calendar
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Scaffold
import com.pouyaheydari.calendar.ui.CalendarScreen
import com.pouyaheydari.calendar.ui.theme.PersianCalendarTheme
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -14,7 +15,9 @@ open class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)
setContent {
PersianCalendarTheme {
CalendarScreen()
Scaffold { paddingValues ->
CalendarScreen(paddingValues = paddingValues)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,17 @@ class GetEventsByDayUseCase @Inject constructor(private val resourceUtils: Event
return buildList {
persianEvents.forEach {
add(
Event(
day = shamsiDate.day,
description = it.description,
isHoliday = it.isHoliday
)
Event(description = it.description, isHoliday = it.isHoliday)
)
}
gregorianEvents.forEach {
add(
Event(
day = shamsiDate.day,
description = it.description,
isHoliday = it.isHoliday
)
Event(description = it.description, isHoliday = it.isHoliday)
)
}
hijriEvents.forEach {
add(
Event(
day = shamsiDate.day,
description = it.description,
isHoliday = it.isHoliday
)
Event(description = it.description, isHoliday = it.isHoliday)
)
}
}
Expand Down
24 changes: 14 additions & 10 deletions app/src/main/java/com/pouyaheydari/calendar/ui/CalendarScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ private const val CALENDAR_INTENT_TYPE = "vnd.android.cursor.item/event"
@Composable
fun CalendarScreen(
modifier: Modifier = Modifier,
paddingValues: PaddingValues = PaddingValues(0.dp),
viewModel: CalendarViewModel = viewModel(),
) {
val state = viewModel.screenState.collectAsStateWithLifecycle().value
Expand All @@ -57,6 +58,7 @@ fun CalendarScreen(

CalendarComponent(
modifier = modifier,
paddingValues = paddingValues,
today = state.today,
month = state.displayMonth,
context = context,
Expand Down Expand Up @@ -85,7 +87,8 @@ fun CalendarScreen(
onSetReminderClicked = {
handleIntentToDefaultCalendarApp(state, context, view)
},
isHoliday = state.selectedDay.isShamsiHoliday
isHoliday = state.selectedDay.isShamsiHoliday,
selectedDay = state.selectedDay
)
}

Expand Down Expand Up @@ -120,17 +123,20 @@ private fun handleIntentToDefaultCalendarApp(
@Composable
fun CalendarComponent(
modifier: Modifier = Modifier,
paddingValues: PaddingValues,
today: DayType.Day,
month: Month,
context: Context,
onDaySelected: (DayType.Day) -> Unit,
onNextMonthClicked: () -> Unit = {},
onPreviousMonthClicked: () -> Unit = {}
) {
Column(modifier = modifier) {
Column(
modifier = modifier.padding(bottom = paddingValues.calculateBottomPadding())
) {
HeaderComponent(
modifier = Modifier
.padding(16.dp)
.padding(paddingValues)
.fillMaxWidth(),
elevation = CardDefaults.cardElevation(defaultElevation = 16.dp),
dayOfWeek = stringResource(
Expand Down Expand Up @@ -186,13 +192,11 @@ fun CalendarComponent(
contentPadding = PaddingValues(top = 8.dp)
) {
items(it) { day ->
if (day is DayType.Day) {
day.events.forEach { event ->
EventComponent(
modifier = Modifier.clickable { onDaySelected(day) },
event = event
)
}
if (day is DayType.Day && day.events.isNotEmpty()) {
EventComponent(
modifier = Modifier.clickable { onDaySelected(day) },
day = day
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
Expand All @@ -21,7 +20,11 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.tooling.preview.PreviewScreenSizes
import androidx.compose.ui.unit.dp
import com.pouyaheydari.calendar.R
import com.pouyaheydari.calendar.core.pojo.DayType
import com.pouyaheydari.calendar.core.pojo.Event
import com.pouyaheydari.calendar.core.pojo.GregorianMonths
import com.pouyaheydari.calendar.core.pojo.ShamsiMonths
import com.pouyaheydari.calendar.core.pojo.WeekDay

@OptIn(ExperimentalMaterial3Api::class)
@Composable
Expand All @@ -35,6 +38,7 @@ fun DayDetailsBottomSheet(
onBottomSheetDismissed: () -> Unit = {},
shouldShowBottomSheet: Boolean = false,
isHoliday: Boolean = false,
selectedDay: DayType.Day,
) {
AnimatedVisibility(visible = shouldShowBottomSheet) {
ModalBottomSheet(
Expand All @@ -58,16 +62,17 @@ fun DayDetailsBottomSheet(
.padding(8.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
items(events) {
EventComponent(event = it)
}
if (events.isEmpty()) {
item {
Text(
modifier = Modifier.padding(16.dp),
text = stringResource(R.string.no_events)
)
}
} else {
item {
EventComponent(day = selectedDay)
}
}
item {
OutlinedButton(
Expand All @@ -92,6 +97,18 @@ private fun Preview() {
iranianDate = "۱۰ آذر ۱۴۰۲",
gregorianDate = "۲۲ سپتامبر ۲۰۲۴",
setReminderText = "کاری برای انجام در این روز تنظیم کنید",
events = listOf(Event(10, "روز جهانی درخت کاری", true)),
events = listOf(Event("روز جهانی درخت کاری", true)),
selectedDay = DayType.Day(
10,
ShamsiMonths.Farwarding,
1402,
WeekDay.Saturday,
22,
GregorianMonths.Jun,
2024,
false,
false,
listOf(Event("روز جهانی درخت کاری", true))
),
)
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.pouyaheydari.calendar.ui.components

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -8,29 +9,43 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.tooling.preview.PreviewFontScale
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.tooling.preview.PreviewScreenSizes
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.pouyaheydari.calendar.core.utils.toPersianNumber
import com.pouyaheydari.calendar.core.pojo.DayType
import com.pouyaheydari.calendar.core.pojo.Event
import com.pouyaheydari.calendar.core.pojo.GregorianMonths
import com.pouyaheydari.calendar.core.pojo.ShamsiMonths
import com.pouyaheydari.calendar.core.pojo.WeekDay
import com.pouyaheydari.calendar.core.utils.toPersianNumber

@Composable
fun EventComponent(modifier: Modifier = Modifier, event: Event) {
fun EventComponent(modifier: Modifier = Modifier, day: DayType.Day) {
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
Row(
modifier = modifier
.padding(8.dp)
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Text(text = event.day.toPersianNumber(), style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurface)
Text(
text = day.shamsiDay.toPersianNumber(),
style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurface
)
Spacer(modifier = Modifier.padding(8.dp))
Text(text = event.description, style = MaterialTheme.typography.labelMedium, color = MaterialTheme.colorScheme.onSurface)
Column {
for (event in day.events) {
Text(
text = event.description,
style = MaterialTheme.typography.labelMedium,
color = MaterialTheme.colorScheme.onSurface
)
}
}
}
}
}
Expand All @@ -40,5 +55,18 @@ fun EventComponent(modifier: Modifier = Modifier, event: Event) {
@PreviewLightDark
@Composable
private fun Preview() {
EventComponent(event = Event(day = 10, description = "روز جهانی درخت کاری", true))
EventComponent(
day = DayType.Day(
1,
ShamsiMonths.Farwarding,
1400,
WeekDay.Saturday,
1,
GregorianMonths.January,
2021,
false,
false,
listOf(Event(description = "روز جهانی درخت کاری", true))
)
)
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package com.pouyaheydari.calendar.core.pojo

data class Event(val day: Int, val description: String, val isHoliday: Boolean)
data class Event(val description: String, val isHoliday: Boolean)
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ class EventRepository @Inject constructor(

fun getShamsiEvents(month: ShamsiMonths, day: Int): List<Event> =
shamsiEvents.filter { it.day == day && it.month == month.monthNumber }.map {
Event(day = day, description = it.title, isHoliday = it.holiday)
Event(description = it.title, isHoliday = it.holiday)
}

fun getGregorianEvents(month: GregorianMonths, day: Int): List<Event> =
gregorianEvents.filter { it.day == day && it.month == month.monthNumber }.map {
Event(day = day, description = it.title, isHoliday = it.holiday)
Event(description = it.title, isHoliday = it.holiday)
}

fun getHijriEvents(month: ShamsiMonths, day: Int): List<Event> =
hijriEvents.filter { it.day == day && it.month == month.monthNumber }.map {
Event(day = day, description = it.title, isHoliday = it.holiday)
Event(description = it.title, isHoliday = it.holiday)
}
}

0 comments on commit db603aa

Please sign in to comment.