Skip to content

Commit

Permalink
Merge pull request #218 from salmanA169/Create_a_Reminder_section
Browse files Browse the repository at this point in the history
Create a reminder section
  • Loading branch information
aritra-tech committed Nov 1, 2023
2 parents f8e4446 + 037ba22 commit e0f8f4f
Show file tree
Hide file tree
Showing 38 changed files with 741 additions and 37 deletions.
17 changes: 12 additions & 5 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
Expand Down Expand Up @@ -42,6 +44,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".reciever.ReminderNoteNotificationBroadcast" />
</application>

</manifest>
8 changes: 7 additions & 1 deletion app/src/main/java/com/aritra/notify/NotifyApplication.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package com.aritra.notify

import android.app.Application
import com.aritra.notify.core.notification.createNotificationChannel
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class NotifyApplication : Application()
class NotifyApplication : Application() {
override fun onCreate() {
super.onCreate()
createNotificationChannel(this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ fun AddEditBottomBar(
onSpeechRecognized: (String) -> Unit,
showDrawingScreen: () -> Unit,
showCameraSheet: () -> Unit,
onReminderDateTime: () -> Unit,
) {
var showSheet by remember { mutableStateOf(false) }
val sheetState = rememberModalBottomSheetState()
Expand Down Expand Up @@ -82,6 +83,13 @@ fun AddEditBottomBar(
)
}
)
IconButton(onClick = { onReminderDateTime() }) {
Icon(
modifier = Modifier.size(25.dp),
painter = painterResource(id = R.drawable.add_alert),
contentDescription = stringResource(R.string.add_box)
)
}
if (showSheet) {
ModalBottomSheet(
onDismissRequest = { showSheet = false },
Expand Down
201 changes: 201 additions & 0 deletions app/src/main/java/com/aritra/notify/components/dialog/TextDialog.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,55 @@
package com.aritra.notify.components.dialog

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AccessTime
import androidx.compose.material.icons.filled.DateRange
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.AssistChip
import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TimePicker
import androidx.compose.material3.rememberDatePickerState
import androidx.compose.material3.rememberTimePickerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.aritra.notify.R
import com.aritra.notify.domain.models.ReminderDateTimeModel
import com.aritra.notify.domain.models.formatToLocalDateTime
import com.aritra.notify.utils.Const
import com.aritra.notify.utils.checkDateIsNotOld
import com.aritra.notify.utils.checkTimeIsNotOld
import com.aritra.notify.utils.formatReminderDateTime
import com.aritra.notify.utils.toast
import java.time.Instant
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import java.time.ZoneId

@Composable
fun TextDialog(
Expand Down Expand Up @@ -74,3 +109,169 @@ fun TextDialog(
)
}
}

@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable
fun DateTimeDialog(
modifier: Modifier = Modifier,
isOpen: Boolean = false,
isEdit: Boolean = false,
onDateTimeUpdated: (LocalDateTime) -> Unit,
onConfirmCallback: () -> Unit,
onDismissCallback: () -> Unit,
) {
var shouldShowDatePicker by remember {
mutableStateOf(false)
}
var shouldShowTimePicker by remember {
mutableStateOf(false)
}

var isEditDateTime by remember {
mutableStateOf(false)
}

LaunchedEffect(key1 = isEdit) {
if (isEdit) {
isEditDateTime = true
}
}
val context = LocalContext.current
val datePickerState = rememberDatePickerState()
val timePickerState = rememberTimePickerState()

if (shouldShowDatePicker || isEditDateTime) {
DatePickerDialog(onDismissRequest = {
shouldShowDatePicker = false
onDismissCallback()
}, confirmButton = {
TextButton(onClick = {
if (datePickerState.selectedDateMillis == null) {
context.toast("Please Select Date")
} else {
if (LocalDateTime.of(
LocalDate.ofInstant(
Instant.ofEpochMilli(datePickerState.selectedDateMillis!!),
ZoneId.systemDefault()
),
LocalTime.now()
).checkDateIsNotOld()
) {
shouldShowDatePicker = false
shouldShowTimePicker = true
if (isEdit) {
isEditDateTime = false
}
} else {
context.toast("Can not choose old Date")
}
}
}) {
Text(text = "Confirm")
}
}) {
DatePicker(state = datePickerState)
}
}

if (shouldShowTimePicker) {
DatePickerDialog(onDismissRequest = {
shouldShowTimePicker = false
shouldShowDatePicker = true
}, confirmButton = {
TextButton(onClick = {
val dateTime = LocalDateTime.of(
LocalDate.ofInstant(
Instant.ofEpochMilli(datePickerState.selectedDateMillis!!),
ZoneId.systemDefault()
),
LocalTime.of(timePickerState.hour, timePickerState.minute)
)
if (dateTime.checkTimeIsNotOld()) {
onDateTimeUpdated(
dateTime
)
shouldShowTimePicker = false
} else {
context.toast("Can not choose old Time")
}
}) {
Text(text = "Confirm")
}
}) {
TimePicker(
state = timePickerState,
modifier = Modifier
.align(CenterHorizontally)
.padding(top = 16.dp)
)
}
}
if (isOpen && !isEdit) {
AlertDialog(onDismissRequest = onDismissCallback) {
Surface(
color = MaterialTheme.colorScheme.surface,
shape = RoundedCornerShape(8.dp),
modifier = modifier,
tonalElevation = 6.dp
) {
Column(modifier = Modifier.padding(24.dp)) {
Icon(
imageVector = Icons.Default.DateRange,
contentDescription = "Date",
modifier = Modifier
.align(CenterHorizontally)
.padding(bottom = 24.dp)
)
Text(
text = stringResource(id = R.string.set_reminder),
fontSize = 18.sp,
fontWeight = FontWeight.Medium,
color = MaterialTheme.colorScheme.onSurface,
modifier = Modifier.padding(bottom = 24.dp)
)
FlowRow(
verticalArrangement = Arrangement.spacedBy(4.dp),
horizontalArrangement = Arrangement.spacedBy(4.dp),
modifier = Modifier.padding(bottom = 24.dp),
maxItemsInEachRow = 1
) {
ReminderDateTimeModel.values().forEach {
AssistChip(leadingIcon = {
Icon(imageVector = Icons.Default.AccessTime, contentDescription = "")
}, onClick = {
if (it == ReminderDateTimeModel.CUSTOM) {
shouldShowDatePicker = true
} else {
onDateTimeUpdated(it.formatToLocalDateTime())
}
}, label = {
Text(
text = if (it != ReminderDateTimeModel.CUSTOM) {
it.formatToLocalDateTime()
.formatReminderDateTime()
} else {
"Custom"
},
fontSize = 16.sp,
color = MaterialTheme.colorScheme.onSurface
)
})
}
}
// TextButton(
// onClick = { onConfirmCallback() },
// shape = RoundedCornerShape(8.dp),
// modifier = Modifier.align(End)
// ) {
// Text(
// text = stringResource(R.string.confirm),
// fontSize = 16.sp,
// fontWeight = FontWeight.SemiBold
// )
// }
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ fun GridNoteCard(
)
}
}

Spacer(modifier = Modifier.height(10.dp))
Text(
text = notesModel.note,
Expand All @@ -152,6 +153,9 @@ fun GridNoteCard(
fontFamily = FontFamily(Font(R.font.poppins_medium)),
color = Color.Gray
)
notesModel.reminderDateTime?.let {
ReminderSection(dateTime = it, notesModel.isReminded)
}
}
}
}
Expand Down
Loading

0 comments on commit e0f8f4f

Please sign in to comment.