Skip to content

Commit

Permalink
Merge pull request #54 from oguzsout/feature/ChangeEmailScreen
Browse files Browse the repository at this point in the history
Feature/change email screen
  • Loading branch information
oguzsout authored Mar 5, 2024
2 parents 9184d48 + 583004a commit d70df16
Show file tree
Hide file tree
Showing 10 changed files with 471 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.oguzdogdu.walliescompose.data.repository

import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthCredential
import com.google.firebase.auth.AuthResult
import com.google.firebase.auth.EmailAuthProvider
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.firestore.FirebaseFirestore
import com.oguzdogdu.walliescompose.data.common.Constants.COLLECTION_PATH
Expand Down Expand Up @@ -95,6 +98,21 @@ class UserAuthenticationRepositoryImpl @Inject constructor(
}
}.toResource()

override suspend fun changeEmail(email: String?, password: String?) : Flow<Resource<Task<Void>?>> = flow {
val credential =
auth.currentUser?.email?.let { password?.let { password ->
EmailAuthProvider.getCredential(it,
password
)
} }
credential?.let {
auth.currentUser?.reauthenticate(it)?.await()
emit(auth.currentUser?.updateEmail(email.orEmpty()))
firebaseFirestore.collection(COLLECTION_PATH).document(auth.currentUser!!.uid)
.update(EMAIL, email)
}
}.toResource()

override suspend fun signOut() = auth.signOut()

override suspend fun changeProfilePhoto(photo: String?) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.oguzdogdu.walliescompose.domain.repository

import com.google.android.gms.tasks.Task
import com.google.firebase.auth.AuthCredential
import com.google.firebase.auth.AuthResult
import com.oguzdogdu.walliescompose.domain.model.auth.User
import com.oguzdogdu.walliescompose.domain.wrapper.Resource
Expand All @@ -16,4 +17,5 @@ interface UserAuthenticationRepository {
suspend fun signOut()
suspend fun changeProfilePhoto(photo: String?)
suspend fun updatePassword(password: String?): Flow<Resource<Task<Void>?>>
suspend fun changeEmail(email:String?,password: String?): Flow<Resource<Task<Void>?>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ fun NavController.navigateToAuthenticatedUserScreen(
fun NavGraphBuilder.authenticatedUserScreen(
navigateBack: () -> Unit,
navigateToLogin: () -> Unit,
navigateToChangePassword: () -> Unit
) {
navigateToChangePassword: () -> Unit,
navigateToChangeEmail: () -> Unit,

) {
composable(
AuthenticatedUserScreenNavigationRoute
) {
Expand All @@ -30,6 +32,8 @@ fun NavGraphBuilder.authenticatedUserScreen(
},
navigateToChangePassword = {
navigateToChangePassword.invoke()
}, navigateToChangeEmail = {
navigateToChangeEmail.invoke()
}
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ fun AuthenticatedUserScreenRoute(
viewModel: AuthenticatedUserViewModel = hiltViewModel(),
navigateBack:() -> Unit,
navigateToLogin: () -> Unit,
navigateToChangePassword: () -> Unit
) {
navigateToChangePassword: () -> Unit,
navigateToChangeEmail: () -> Unit,
) {

val userState by viewModel.userState.collectAsStateWithLifecycle()
val dialogState by viewModel.changeProfilePhotoBottomSheetOpenStat.collectAsStateWithLifecycle()
Expand Down Expand Up @@ -167,6 +168,8 @@ fun AuthenticatedUserScreenRoute(
viewModel.handleUiEvents(AuthenticatedUserEvent.OpenChangeProfileBottomSheet(dialog))
}, onChangePasswordClick = {
navigateToChangePassword.invoke()
}, onChangeEmailClick = {
navigateToChangeEmail.invoke()
},showDialog = dialogState)
}
}
Expand All @@ -183,6 +186,7 @@ fun AuthenticatedUserScreenContent(
onChangeProfilePhotoButtonClick: () -> Unit,
dismissDialog: (Boolean) -> Unit,
onChangePasswordClick: () -> Unit,
onChangeEmailClick: () -> Unit,
showDialog: Boolean
) {
var isGoogleSign by remember {
Expand Down Expand Up @@ -220,9 +224,15 @@ fun AuthenticatedUserScreenContent(
onChangeProfilePhotoClick.invoke(it)
}
)
EditProfileInformationContent(modifier = modifier, onChangePasswordClick = {
onChangePasswordClick.invoke()
})
EditProfileInformationContent(
modifier = modifier,
onChangePasswordClick = {
onChangePasswordClick.invoke()
},
onChangeEmailClick = {
onChangeEmailClick.invoke()
}
)
}
ChangeProfilePhotoDialog(userInfos = userScreenState, modifier = modifier, profilePhotoUri = profilePhotoUri ,isOpen = showDialog, onDismiss = {
dismissDialog.invoke(false)
Expand Down Expand Up @@ -399,7 +409,11 @@ fun AuthenticatedUserWelcomeCard(
}

@Composable
fun EditProfileInformationContent(modifier: Modifier,onChangePasswordClick: () -> Unit) {
fun EditProfileInformationContent(
modifier: Modifier,
onChangePasswordClick: () -> Unit,
onChangeEmailClick: () -> Unit
) {
val scope = rememberCoroutineScope()
val profileOptionsList = immutableListOf(
MenuRow(
Expand Down Expand Up @@ -438,7 +452,7 @@ fun EditProfileInformationContent(modifier: Modifier,onChangePasswordClick: () -

},
openEditEmail = {

onChangeEmailClick.invoke()
}, openChangePassword = {
onChangePasswordClick.invoke()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.oguzdogdu.walliescompose.features.authenticateduser.changeemail

import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable

const val ChangeEmailScreenNavigationRoute = "change_email_screen_route"

fun NavController.navigateToChangeEmailScreen(
navOptions: NavOptions? = null,
) {
this.navigate(ChangeEmailScreenNavigationRoute, navOptions)
}

fun NavGraphBuilder.changeEmailScreen(
navigateBack: () -> Unit,
) {
composable(
ChangeEmailScreenNavigationRoute
) {
ChangeEmailScreenRoute(navigateBack = {
navigateBack.invoke()
})
}
}
Loading

0 comments on commit d70df16

Please sign in to comment.