Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ dependencies {
implementation("androidx.activity:activity-compose:1.7.2")
// compose
implementation(platform("androidx.compose:compose-bom:2023.08.00"))
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material3:material3:1.2.0-alpha06") // to use rememberDatePickerState's new arguments
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import android.net.Uri
import android.provider.CalendarContract
import com.simply.birthdayapp.R
import com.simply.birthdayapp.presentation.models.CalendarContractItem
import java.util.Calendar
import java.util.Date
import java.util.TimeZone

@SuppressLint("Range")
Expand Down Expand Up @@ -37,11 +39,15 @@ fun Context.addEventToCalendar(email: String, date: Long, name: String): Uri? {
}

val userEmailContract = contractList.find { it.ownerAccount == email }
val id = userEmailContract?.ownerAccount ?: if (contractList.isNotEmpty()) contractList[0].calendarId else return null

val id = userEmailContract?.calendarId ?: if (contractList.isNotEmpty()) contractList[0].calendarId else return null
val dateWithCurrentYear = Calendar.getInstance().apply {
val year = this[Calendar.YEAR]
time = Date(date)
set(Calendar.YEAR, year)
}.time.time
val values = ContentValues().apply {
put(CalendarContract.Events.DTSTART, date)
put(CalendarContract.Events.DTEND, date)
put(CalendarContract.Events.DTSTART, dateWithCurrentYear)
put(CalendarContract.Events.DTEND, dateWithCurrentYear)
put(CalendarContract.Events.ALL_DAY, true)
put(CalendarContract.Events.RRULE, "FREQ=YEARLY")
put(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.simply.birthdayapp.presentation.ui.screens.auth.AuthMainScreen
import com.simply.birthdayapp.presentation.ui.screens.auth.AuthScreen
import com.simply.birthdayapp.presentation.ui.screens.main.MainScreen

sealed class RootDestination(val route: String) {
Expand Down Expand Up @@ -37,7 +38,10 @@ fun RootNavigation() {
startDestination = RootDestination.AuthMainScreen.route,
) {
composable(RootDestination.MainScreen.route) {
MainScreen(onSignOutClicked = { navigateToAuthMainScreen() })
MainScreen(
onSignOutClicked = { navigateToAuthMainScreen() },
onChangePasswordSuccess = { navigateToAuthMainScreen() }
)
}
composable(RootDestination.AuthMainScreen.route) {
AuthMainScreen(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.DatePicker
import androidx.compose.material3.DatePickerDefaults
import androidx.compose.material3.DatePickerDialog
import androidx.compose.material3.DatePickerFormatter
import androidx.compose.material3.DatePickerState
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
Expand Down Expand Up @@ -47,7 +46,6 @@ fun DatePickerComponent(
},
) {
DatePicker(
dateFormatter = DatePickerFormatter(),
modifier = Modifier.padding(top = 16.dp),
state = datePickerState,
showModeToggle = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
Expand Down Expand Up @@ -163,6 +164,7 @@ fun NewPasswordScreen(
focusedContainerColor = AppTheme.colors.white,
unfocusedContainerColor = AppTheme.colors.white,
hasPasswordError = hasRepeatPasswordError,
imeAction = ImeAction.Done,
errorText = stringResource(id = R.string.repeat_password_error),
onValueChange = { repeatPassword ->
forgotPasswordViewModel.setRepeatPassword(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ sealed class BottomBarDestination(val route: String) {
fun MainScreen(
shopsViewModel: ShopsViewModel = getViewModel(),
onSignOutClicked: () -> Unit = {},
onChangePasswordSuccess: () -> Unit = {},
) {
val bottomBarNavController = rememberNavController()

Expand Down Expand Up @@ -49,6 +50,10 @@ fun MainScreen(

composable(BottomBarDestination.ProfileMainScreen.route) {
ProfileMainScreen(onSignOutClicked = onSignOutClicked)
ProfileMainScreen(
onSignOutClicked = onSignOutClicked,
onChangePasswordSuccess = onChangePasswordSuccess
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.simply.birthdayapp.presentation.ui.screens.main.home

import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.LocalFocusManager
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
Expand All @@ -18,15 +17,14 @@ sealed class HomeDestination(val route: String) {
data object BirthdayDetailsScreen : HomeDestination("birthday-details-screen")
}

@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun HomeMainScreen(
onNavigateToShops: () -> Unit,
homeViewModel: HomeViewModel = getViewModel(),
birthdayViewModel: BirthdayViewModel = getViewModel(),
birthdayDetailsViewModel: BirthdayDetailsViewModel = getViewModel(),
) {
val keyboardController = LocalSoftwareKeyboardController.current
val focusManager = LocalFocusManager.current
val homeNavController = rememberNavController()

NavHost(navController = homeNavController, startDestination = HomeDestination.HomeScreen.route) {
Expand All @@ -44,13 +42,13 @@ fun HomeMainScreen(
birthdayViewModel = birthdayViewModel,
homeViewModel = homeViewModel,
navigateToHomeScreen = {
keyboardController?.hide()
focusManager.clearFocus()
homeNavController.navigate(HomeDestination.HomeScreen.route) {
popUpTo(HomeDestination.HomeScreen.route)
}
},
onBackClick = {
keyboardController?.hide()
focusManager.clearFocus()
homeNavController.navigateUp()
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@ fun HomeScreen(
val scrollPosition by homeViewModel.scrollPosition.collectAsState()
val errorState by homeViewModel.errorState.collectAsState()
val isRefreshing by homeViewModel.isRefreshing.collectAsState()
val createBirthdaySuccess by birthdayViewModel.createBirthdaySuccess.collectAsState()
val updateBirthdaySuccess by birthdayViewModel.updateBirthdaySuccess.collectAsState()
val deleteBirthdaySuccess by birthdayViewModel.deleteBirthdaySuccess.collectAsState()
val failedToAddBirthdayToCalendar by birthdayViewModel.failedToAddBirthdayToCalendar.collectAsState()

val birthdaysLazyListState = rememberLazyListState(initialFirstVisibleItemIndex = scrollPosition)
val context = LocalContext.current
Expand All @@ -77,42 +73,6 @@ fun HomeScreen(
homeViewModel.setErrorStateFalse()
}
}
LaunchedEffect(createBirthdaySuccess) {
if (createBirthdaySuccess) {
snackbarHostState.showSnackbar(
message = context.getString(R.string.birthday_created_successfully),
duration = SnackbarDuration.Short,
)
birthdayViewModel.setCreateBirthdaySuccessFalse()
}
}
LaunchedEffect(updateBirthdaySuccess) {
if (updateBirthdaySuccess) {
snackbarHostState.showSnackbar(
message = context.getString(R.string.birthday_updated_successfully),
duration = SnackbarDuration.Short,
)
birthdayViewModel.setUpdateBirthdaySuccessFalse()
}
}
LaunchedEffect(deleteBirthdaySuccess) {
if (deleteBirthdaySuccess) {
snackbarHostState.showSnackbar(
message = context.getString(R.string.birthday_deleted_successfully),
duration = SnackbarDuration.Short,
)
birthdayViewModel.setDeleteBirthdaySuccessFalse()
}
}
LaunchedEffect(failedToAddBirthdayToCalendar) {
if (failedToAddBirthdayToCalendar) {
snackbarHostState.showSnackbar(
message = context.getString(R.string.failed_to_add_birthday_to_calendar),
duration = SnackbarDuration.Short,
)
birthdayViewModel.setFailedToAddBirthdayToCalendar(false)
}
}
Box(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier
Expand All @@ -133,14 +93,14 @@ fun HomeScreen(
contentPadding = PaddingValues(start = 24.dp, end = 24.dp, bottom = 16.dp),
) {
items(birthdayList) { birthday ->
BirthdayCard(
birthday = birthday,
onCardClick = {
birthdayDetailsViewModel.setBirthday(birthday = birthday)
navigateToBirthdayDetailsScreen()
},
)
}
BirthdayCard(
birthday = birthday,
onCardClick = {
birthdayDetailsViewModel.setBirthday(birthday = birthday)
navigateToBirthdayDetailsScreen()
},
)
}
}
PullRefreshIndicator(
modifier = Modifier.align(Alignment.TopCenter),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.simply.birthdayapp.presentation.extensions.fromMillisToUtcDate
import com.simply.birthdayapp.presentation.extensions.fromUtcToDayMonthYearDate
import com.simply.birthdayapp.presentation.models.Birthday
import com.simply.birthdayapp.presentation.models.RelationshipEnum
import java.util.Calendar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
Expand All @@ -25,6 +24,7 @@ import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import java.util.Calendar

class BirthdayViewModel(
application: Application,
Expand Down Expand Up @@ -62,7 +62,7 @@ class BirthdayViewModel(
val editModeBirthday = _editModeBirthday.asStateFlow()

private val _createBirthdayIsCompleted = MutableStateFlow(false)
val createBirthdayIsCompleted = _createBirthdaySuccess.asStateFlow()
val createBirthdayIsCompleted = _createBirthdayIsCompleted.asStateFlow()

private val _updateBirthdayIsCompleted = MutableStateFlow(false)
val updateBirthdayIsCompleted = _updateBirthdayIsCompleted.asStateFlow()
Expand Down
Loading