Skip to content

Commit

Permalink
create app
Browse files Browse the repository at this point in the history
  • Loading branch information
jalucenyo committed Aug 22, 2022
1 parent b29d314 commit 0a5e7a8
Show file tree
Hide file tree
Showing 31 changed files with 1,824 additions and 142 deletions.
3 changes: 3 additions & 0 deletions .idea/misc.xml

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

28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# FirebaseChat

### Agosto: 02/08/22





<a href="https://rviewer.io/"><img src="/~https://github.com/mouredev/Monthly-App-Challenge-2022/raw/main/Rviewer/mouredev_rviewer_firebasechat.png" style="height: 50%; width:50%;"/></a>

**FIREBASE CHAT:** Crea una aplicación de chat usando Firebase como tu backend.

**NOTA:** Para la revisión en directo desde Twitch se agradece crear un readme con un enlace de descarga, url de la web desplegada o vídeo/capturas con la ejecución de la app. Gracias!

¿Nunca te has preguntado cómo funciona un chat? Pues bien, vamos a crear una aplicación que utilice varios de los servicios de Firebase para login y base de datos en tiempo real.

**¿En qué consiste el reto?**

*La aplicación tendrá una pantalla donde tendrás que hacer login con tu cuenta de Google.*

*Una vez realizado, accederás a una sala de chat donde se visualizarán los mensajes de todos los usuarios y podrás interactuar con ellos.*

*¡Punto extra! ¿Eres capaz de enviar notificaciones push a otro dispositivo cada vez que te escriben?¿E imágenes?*

#### Fecha de entrega estimada: 27/08/22
De esta manera podrás recibir feedback técnico sobre tu prueba y asistir a su revisión en directo desde Twitch el día de la publicación del próximo reto mensual.

#### ¿Te animas a resolver este desafío? Aquí tienes [todos los detalles](https://bit.ly/3vyk6ap).
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ dependencies {
implementation 'androidx.activity:activity-compose:1.5.1'
implementation "androidx.compose.material:material-icons-extended:$compose_version"

// To use constraintlayout in compose
implementation "androidx.constraintlayout:constraintlayout:2.1.4"
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"

// Navigation
implementation "androidx.navigation:navigation-compose:2.5.1"
implementation "androidx.navigation:navigation-ui-ktx:2.5.1"
Expand Down

This file was deleted.

17 changes: 2 additions & 15 deletions app/src/main/java/com/luceno/firebasechat/FirebaseAppState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,6 @@ package com.luceno.firebasechat

import androidx.navigation.NavHostController

class FirebaseAppState(
data class FirebaseAppState(
val navController: NavHostController
) {

fun navigate(route: String) {
navController.navigate(route)
}

fun navigateAndPopUp(route: String, popUp: String) {
navController.navigate(route){
launchSingleTop = true
popUpTo(popUp) { inclusive = true }
}
}

}
)
59 changes: 43 additions & 16 deletions app/src/main/java/com/luceno/firebasechat/FirebaseChatNavigation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,32 @@ package com.luceno.firebasechat

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.luceno.firebasechat.feature_chat.presentation.ChatRoomScreen
import com.luceno.firebasechat.feature_auth.presentation.signin.SignInScreen
import com.luceno.firebasechat.feature_auth.presentation.signin.SignInViewModel
import com.luceno.firebasechat.feature_auth.presentation.signup.SignUpScreen
import com.luceno.firebasechat.feature_auth.presentation.signup.SignUpViewModel
import com.luceno.firebasechat.firebase_splash.SplashScreen


@Composable
fun FirebaseChatApp(){

val appState = rememberAppState()
val context = LocalContext.current

NavHost(
navController = appState.navController,
startDestination = SPLASH_SCREEN
){

composable(SPLASH_SCREEN){
composable(route = SPLASH_SCREEN){
SplashScreen(
onLoad = {

Expand All @@ -33,25 +39,46 @@ fun FirebaseChatApp(){
)
}

composable(SIGN_IN_SCREEN) {
SignInScreen( onSuccess = {
appState.navigateAndPopUp(CHAT_ROOM_SCREEN, SIGN_IN_SCREEN)
})
composable(route = SIGN_IN_SCREEN) {
val viewModel: SignInViewModel = hiltViewModel()
SignInScreen(
state = viewModel.state.value,
onEmailValueChange = viewModel::onEmailChange,
onPasswordValueChange = viewModel::onPasswordChange,
onVisibilityPassword = viewModel::onPasswordVisibility,
onSignInWithEmail = viewModel::onSignInWithEmail,
onSignInWithGoogle = viewModel::onSignInWithGoogle,
onResponseSignInWithGoogle = viewModel::onResponseSignInWithGoogle,
checkIsSignIn = viewModel::checkIsSignIn,
onSuccess = {
appState.navController.popBackStack()
appState.navController.navigate(CHAT_ROOM_SCREEN)
},
onNavigateToSignUp = { appState.navController.navigate(SIGN_UP_SCREEN) }
)
}

composable(CHAT_ROOM_SCREEN) {
ChatRoomScreen(onSingOut = { appState.navigate(SIGN_IN_SCREEN) })
composable(route = SIGN_UP_SCREEN) {
val viewModel: SignUpViewModel = hiltViewModel()
SignUpScreen(
state = viewModel.state.value,
onNavigateToBack = { appState.navController.popBackStack() },
onNameValueChange = viewModel::onNameValueChange,
onEmailValueChange = viewModel::onEmailValueChange,
onPasswordValueChange = viewModel::onPasswordValueChange,
onRepeatPasswordValueChange = viewModel::onRepeatPasswordValueChange,
onVisibilityPassword = viewModel::onPasswordVisibility,
onVisibilityRepeatPassword = viewModel::onRepeatPasswordVisibility,
onSignUp = viewModel::onSignUp,
onSuccess = {
appState.navController.navigate(CHAT_ROOM_SCREEN)
}
)
}

// composable("$CHAT_ROOM_SCREEN/{$USER_ID}",
// arguments = listOf(
// navArgument(USER_ID){ type = NavType.StringType}
// )
// )
// { backStackEntry ->
// val userId = backStackEntry.arguments?.getString(USER_ID)
// ChatRoomScreen(onSingOut = { appState.navigate(SIGN_IN_SCREEN) })
// }
composable(route = CHAT_ROOM_SCREEN) {
ChatRoomScreen(onSingOut = { appState.navController.navigate(SIGN_IN_SCREEN) })
}

}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ package com.luceno.firebasechat
const val SPLASH_SCREEN = "SplashScreen"
const val SIGN_IN_SCREEN = "SignInScreen"
const val CHAT_ROOM_SCREEN = "ChatRoomScreen"
const val SIGN_UP_SCREEN = "SignUpScreen"
Loading

0 comments on commit 0a5e7a8

Please sign in to comment.