Skip to content

Commit 215fe6b

Browse files
worked on add reminder
1 parent aa55ab8 commit 215fe6b

11 files changed

Lines changed: 209 additions & 98 deletions

File tree

core/common/src/main/java/com/brandyodhiambo/common/domain/model/ReminderMode.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@
1616
package com.brandyodhiambo.common.domain.model
1717

1818
data class ReminderMode(
19-
val day: String,
20-
val isOn: Boolean
19+
val mode:String,
20+
val days: List<String>,
21+
val isVibrated:Boolean,
22+
val isDeleted: Boolean,
23+
val hour:Int,
24+
val minutes:Int,
25+
val ampm:String,
26+
val isOn:Boolean
2127
)

core/common/src/main/java/com/brandyodhiambo/common/domain/repository/TimeFormateRepository.kt renamed to core/common/src/main/java/com/brandyodhiambo/common/domain/repository/SettingRepository.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
44
import com.brandyodhiambo.common.domain.model.ReminderMode
55
import com.brandyodhiambo.common.domain.model.TimeFormate
66

7-
interface TimeFormateRepository {
7+
interface SettingRepository {
88

99
suspend fun insertTimeFormate(timeFormate: TimeFormate)
1010
fun getTimeFormate(): LiveData<TimeFormate?>
@@ -14,7 +14,7 @@ interface TimeFormateRepository {
1414

1515
suspend fun insertReminderMode(reminderMode: ReminderMode)
1616
suspend fun updateReminderMode(reminderMode: ReminderMode)
17-
fun getReminderMode():LiveData<ReminderMode?>
17+
fun getReminderMode():LiveData<List<ReminderMode>?>
1818
suspend fun deleteReminderMode(reminderMode: ReminderMode)
1919
suspend fun deleteAllReminderMode()
2020
}

core/database/src/main/java/com/brandyodhiambo/dao/ReminderModeDao.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,23 @@ interface ReminderModeDao {
1313
suspend fun insertReminderMode(reminderModeEntity: ReminderModeEntity)
1414

1515
@Query("SELECT *FROM reminder_mode_table")
16-
fun getReminderMode(): LiveData<ReminderModeEntity?>
16+
fun getReminderMode(): LiveData<List<ReminderModeEntity>?>
1717

1818
@Delete
19-
suspend fun deleteReminderMode(ReminderModeEntity: ReminderModeEntity)
19+
suspend fun deleteReminderMode(reminderModeEntity: ReminderModeEntity)
2020

21-
@Query("UPDATE reminder_mode_table SET day = :day, isOn = :isOn WHERE id = :id")
22-
suspend fun updateReminderMode(id: Int, day: String, isOn: Boolean)
21+
@Query("UPDATE reminder_mode_table SET days = :days, hour =:hour, minutes = :minutes, ampm = :ampm,mode=:mode, isVibrated = :isVibrated, isDeleted = :isDeleted, isOn = :isOn WHERE id = :id")
22+
suspend fun updateReminderMode(
23+
id: Int,
24+
days: List<String>,
25+
mode:String,
26+
hour:Int,
27+
minutes:Int,
28+
ampm:String,
29+
isVibrated:Boolean,
30+
isDeleted:Boolean,
31+
isOn: Boolean
32+
)
2333

2434
@Query("DELETE FROM reminder_mode_table")
2535
suspend fun deleteAllReminderMode()

core/database/src/main/java/com/brandyodhiambo/entity/ReminderModeEntity.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import com.brandyodhiambo.Constants.REMINDER_MODE
88
data class ReminderModeEntity(
99
@PrimaryKey(autoGenerate = true)
1010
val id: Int = 0,
11-
val day: String,
12-
val isOn: Boolean
11+
val mode:String,
12+
val days: List<String>,
13+
val isVibrated:Boolean,
14+
val isDeleted: Boolean,
15+
val hour:Int,
16+
val minutes:Int,
17+
val ampm:String,
18+
val isOn:Boolean
1319
)

feature/settings/src/main/java/com/brandyodhiambo/settings/data/mapper/Mapper.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.brandyodhiambo.entity.TimeFormateEntity
77

88
internal fun TimeFormateEntity.toTimeFormate(): TimeFormate {
99
return TimeFormate(
10-
formate = formate
10+
formate = formate
1111
)
1212
}
1313

@@ -17,16 +17,28 @@ internal fun TimeFormate.toTimeFormateEntity(): TimeFormateEntity {
1717
)
1818
}
1919

20-
internal fun ReminderModeEntity.toReminderMode():ReminderMode{
20+
internal fun ReminderModeEntity.toReminderMode(): ReminderMode {
2121
return ReminderMode(
22-
day = day,
22+
days = days,
23+
mode = mode,
24+
isVibrated = isVibrated,
25+
isDeleted = isDeleted,
26+
hour = hour,
27+
minutes = minutes,
28+
ampm = ampm,
2329
isOn = isOn
2430
)
2531
}
2632

27-
internal fun ReminderMode.toReminderModeEntity():ReminderModeEntity{
33+
internal fun ReminderMode.toReminderModeEntity(): ReminderModeEntity {
2834
return ReminderModeEntity(
29-
day = day,
35+
days = days,
36+
mode = mode,
37+
isVibrated = isVibrated,
38+
isDeleted = isDeleted,
39+
hour = hour,
40+
minutes = minutes,
41+
ampm = ampm,
3042
isOn = isOn
3143
)
3244
}

feature/settings/src/main/java/com/brandyodhiambo/settings/data/repository/TimeFormateRepositoryImpl.kt renamed to feature/settings/src/main/java/com/brandyodhiambo/settings/data/repository/SettingRepositoryImpl.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ import androidx.lifecycle.LiveData
44
import androidx.lifecycle.map
55
import com.brandyodhiambo.common.domain.model.ReminderMode
66
import com.brandyodhiambo.common.domain.model.TimeFormate
7-
import com.brandyodhiambo.common.domain.repository.TimeFormateRepository
7+
import com.brandyodhiambo.common.domain.repository.SettingRepository
88
import com.brandyodhiambo.dao.ReminderModeDao
99
import com.brandyodhiambo.dao.TimeFormateDao
1010
import com.brandyodhiambo.settings.data.mapper.toReminderMode
1111
import com.brandyodhiambo.settings.data.mapper.toReminderModeEntity
1212
import com.brandyodhiambo.settings.data.mapper.toTimeFormate
1313
import com.brandyodhiambo.settings.data.mapper.toTimeFormateEntity
1414

15-
class TimeFormateRepositoryImpl(
15+
class SettingRepositoryImpl(
1616
private val timeFormateDao: TimeFormateDao,
1717
private val reminderModeDao: ReminderModeDao
18-
):TimeFormateRepository {
18+
):SettingRepository {
1919
override suspend fun insertTimeFormate(timeFormate: TimeFormate) {
2020
timeFormateDao.insertTimeFormate(timeFormate.toTimeFormateEntity())
2121
}
@@ -42,17 +42,24 @@ class TimeFormateRepositoryImpl(
4242
val entityData = reminderMode.toReminderModeEntity()
4343
reminderModeDao.updateReminderMode(
4444
id = entityData.id,
45-
day = entityData.day,
45+
days = entityData.days,
46+
mode = entityData.mode,
47+
isVibrated = entityData.isVibrated,
48+
isDeleted = entityData.isDeleted,
49+
hour = entityData.hour,
50+
minutes = entityData.minutes,
51+
ampm = entityData.ampm,
4652
isOn = entityData.isOn
4753
)
4854
}
4955

50-
override fun getReminderMode(): LiveData<ReminderMode?> {
51-
return reminderModeDao.getReminderMode().map {
52-
it?.toReminderMode()
56+
override fun getReminderMode():LiveData<List<ReminderMode>?>{
57+
return reminderModeDao.getReminderMode().map { reminderModes ->
58+
reminderModes?.map { it.toReminderMode() }
5359
}
5460
}
5561

62+
5663
override suspend fun deleteReminderMode(reminderMode: ReminderMode) {
5764
reminderModeDao.deleteReminderMode(reminderMode.toReminderModeEntity())
5865
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.brandyodhiambo.settings.di
22

3-
import com.brandyodhiambo.common.domain.repository.TimeFormateRepository
3+
import com.brandyodhiambo.common.domain.repository.SettingRepository
44
import com.brandyodhiambo.dao.ReminderModeDao
55
import com.brandyodhiambo.dao.TimeFormateDao
6-
import com.brandyodhiambo.settings.data.repository.TimeFormateRepositoryImpl
6+
import com.brandyodhiambo.settings.data.repository.SettingRepositoryImpl
77
import dagger.Module
88
import dagger.Provides
99
import dagger.hilt.InstallIn
@@ -15,7 +15,7 @@ import javax.inject.Singleton
1515
object SettingModule {
1616
@Provides
1717
@Singleton
18-
fun provideTimeFormateRepository(timeFormateDao: TimeFormateDao,reminderModeDao: ReminderModeDao):TimeFormateRepository{
19-
return TimeFormateRepositoryImpl(timeFormateDao,reminderModeDao)
18+
fun provideTimeFormateRepository(timeFormateDao: TimeFormateDao,reminderModeDao: ReminderModeDao):SettingRepository{
19+
return SettingRepositoryImpl(timeFormateDao,reminderModeDao)
2020
}
2121
}

feature/settings/src/main/java/com/brandyodhiambo/settings/presentation/AddReminderScreen.kt

Lines changed: 72 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ import androidx.compose.ui.unit.dp
4848
import androidx.compose.ui.window.Dialog
4949
import androidx.hilt.navigation.compose.hiltViewModel
5050
import com.brandyodhiambo.common.R
51+
import com.brandyodhiambo.common.domain.model.ReminderMode
52+
import com.brandyodhiambo.common.util.getCurrentDay
5153
import com.brandyodhiambo.designsystem.components.NotificationSwitcher
5254
import com.brandyodhiambo.settings.presentation.component.CustomReminderModeDialog
5355
import com.chargemap.compose.numberpicker.AMPMHours
@@ -69,7 +71,20 @@ fun AddReminderScreen(
6971
val repeateModeDialog = settingsViewModel.repeatModeDialog.value
7072
Scaffold(
7173
topBar = {
72-
TopAppBarAddReminder(navigator = navigator)
74+
TopAppBarAddReminder(navigator = navigator, onSave = {
75+
settingsViewModel.insertReminderMode(
76+
ReminderMode(
77+
mode = settingsViewModel.selectedMode.value,
78+
days = settingsViewModel.selectedCustomDays.value,
79+
isOn = true,
80+
isDeleted = settingsViewModel.isDeleted.value ,
81+
isVibrated = settingsViewModel.isVibrated.value,
82+
hour = settingsViewModel.hour.value,
83+
minutes = settingsViewModel.minutes.value,
84+
ampm = settingsViewModel.ampm.value,
85+
)
86+
)
87+
})
7388
}
7489
) { paddingValue ->
7590
Column(
@@ -81,10 +96,22 @@ fun AddReminderScreen(
8196
Spacer(modifier = Modifier.height(20.dp))
8297

8398
// ReminderTime
84-
ReminderTimePickerInHours()
99+
ReminderTimePickerInHours(
100+
currentPickerValueText = settingsViewModel.timePickerValue.value,
101+
onCurrentPickerValueTextChange = {
102+
settingsViewModel.timePickerValue.value = it
103+
},
104+
onTimeSleepSelected = {
105+
var ampm = ""
106+
ampm = if (it.hours in 0..12) {
107+
"AM"
108+
} else {
109+
"PM"
110+
}
111+
settingsViewModel.onTimeSelected(it.hours, it.minutes, ampm)
112+
}
113+
)
85114
Spacer(modifier = Modifier.height(8.dp))
86-
87-
//Reminder Mode (once,mon to fri,custom,daily)
88115
Row(
89116
modifier = Modifier.fillMaxWidth(),
90117
horizontalArrangement = Arrangement.SpaceBetween,
@@ -101,7 +128,7 @@ fun AddReminderScreen(
101128
verticalAlignment = Alignment.CenterVertically
102129
) {
103130
Text(
104-
text = "Mon to Fri",
131+
text = settingsViewModel.selectedMode.value,
105132
style = MaterialTheme.typography.labelMedium,
106133
color = MaterialTheme.colorScheme.onBackground
107134
)
@@ -127,10 +154,11 @@ fun AddReminderScreen(
127154
color = MaterialTheme.colorScheme.onBackground
128155
)
129156
NotificationSwitcher(
130-
isOn = true,
157+
isOn = settingsViewModel.isVibrated.value,
131158
size = 35.dp,
132159
padding = 5.dp,
133160
onToggle = {
161+
settingsViewModel.setIsVibrated(settingsViewModel.isVibrated.value.not())
134162
}
135163
)
136164
}
@@ -147,10 +175,11 @@ fun AddReminderScreen(
147175
color = MaterialTheme.colorScheme.onBackground
148176
)
149177
NotificationSwitcher(
150-
isOn = false,
178+
isOn = settingsViewModel.isDeleted.value,
151179
size = 35.dp,
152180
padding = 5.dp,
153181
onToggle = {
182+
settingsViewModel.setIsDeleted(settingsViewModel.isDeleted.value.not())
154183
}
155184
)
156185
}
@@ -160,18 +189,38 @@ fun AddReminderScreen(
160189
val repeatModes = listOf("Once", "Mon to Fri", "Daily", "Custom")
161190
CustomReminderModeDialog(
162191
items = repeatModes,
163-
selectedValue = settingsViewModel.selectedReminderMode.value,
192+
selectedValue = settingsViewModel.selectedMode.value,
164193
title = "Repeat Mode",
165194
isSelectedItem = {
166-
settingsViewModel.selectedReminderMode.value == it
195+
settingsViewModel.selectedMode.value == it
167196
},
168197
onChangeState = {
169-
settingsViewModel.onReminderSelected(it)
198+
settingsViewModel.onSelectedMode(it)
170199
} ,
171200
onCustomReminderDialog = {
172201
settingsViewModel.setRepeatModeDialog(value = false)
173-
// insert the reminder mode
174-
},
202+
when (settingsViewModel.selectedMode.value) {
203+
"Once" -> {
204+
val currentDay = getCurrentDay()
205+
settingsViewModel.onSelectedDayChangeState(listOf(currentDay))
206+
}
207+
"Mon to Fri" -> {
208+
val weekdays = listOf("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
209+
settingsViewModel.onSelectedDayChangeState(weekdays)
210+
}
211+
"Daily" -> {
212+
val allDays = listOf("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
213+
settingsViewModel.onSelectedDayChangeState(allDays)
214+
}
215+
"Custom" -> {
216+
//selectedCustomDays
217+
settingsViewModel.onSelectedDayChangeState(settingsViewModel.selectedCustomDays.value)
218+
}
219+
}
220+
},
221+
onSelectedDaysChangeState = {
222+
settingsViewModel.onSelectedDayChangeState(it)
223+
}
175224
)
176225
}
177226
}
@@ -181,7 +230,7 @@ fun AddReminderScreen(
181230

182231
@OptIn(ExperimentalMaterial3Api::class)
183232
@Composable
184-
fun TopAppBarAddReminder(navigator: AddReminderNavigator) {
233+
fun TopAppBarAddReminder(navigator: AddReminderNavigator, onSave: ()->Unit) {
185234
TopAppBar(
186235
title = {
187236
Text(
@@ -200,7 +249,7 @@ fun TopAppBarAddReminder(navigator: AddReminderNavigator) {
200249
}
201250
},
202251
actions = {
203-
TextButton(onClick = { /*TODO*/ }) {
252+
TextButton(onClick = onSave) {
204253
Text(
205254
text = "Save",
206255
style = MaterialTheme.typography.labelMedium,
@@ -215,7 +264,11 @@ fun TopAppBarAddReminder(navigator: AddReminderNavigator) {
215264
}
216265

217266
@Composable
218-
fun ReminderTimePickerInHours() {
267+
fun ReminderTimePickerInHours(
268+
currentPickerValueText: Hours,
269+
onCurrentPickerValueTextChange: (Hours) -> Unit,
270+
onTimeSleepSelected: (Hours) -> Unit
271+
) {
219272
Column(
220273
modifier = Modifier
221274
.fillMaxWidth()
@@ -224,12 +277,13 @@ fun ReminderTimePickerInHours() {
224277
verticalArrangement = Arrangement.Top,
225278
horizontalAlignment = Alignment.CenterHorizontally
226279
) {
227-
var pickerValue by remember { mutableStateOf<Hours>(AMPMHours(0, 0, AMPMHours.DayTime.AM)) }
228280
HoursNumberPicker(
229281
dividersColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.5f),
230-
value = pickerValue,
282+
value = currentPickerValueText,
283+
hoursRange = 0..23,
231284
onValueChange = {
232-
pickerValue = it
285+
onCurrentPickerValueTextChange(it)
286+
onTimeSleepSelected(it)
233287
},
234288
hoursDivider = {
235289
Text(

0 commit comments

Comments
 (0)