Skip to content
Snippets Groups Projects
Commit 60849b31 authored by Fodor Patrik's avatar Fodor Patrik :ghost:
Browse files

FirebaseUIAuth, bottom navigation, theme

parent 2585b271
Branches
No related tags found
No related merge requests found
package hu.bme.kszk.szobatarsch
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.firebase.ui.auth.AuthUI
import com.firebase.ui.auth.FirebaseAuthUIActivityResultContract
import com.firebase.ui.auth.data.model.FirebaseAuthUIAuthenticationResult
import com.google.firebase.FirebaseApp
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import hu.bme.kszk.szobatarsch.composable.*
import hu.bme.kszk.szobatarsch.data.UserThemeSetting
import hu.bme.kszk.szobatarsch.firebase.User
import hu.bme.kszk.szobatarsch.firebase.registerOrOverwriteUser
import hu.bme.kszk.szobatarsch.ui.theme.SzobatarSCHTheme
import hu.bme.kszk.szobatarsch.ui.theme.Theme
val firebaseUser: FirebaseUser? get() = FirebaseAuth.getInstance().currentUser
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
FirebaseApp.initializeApp(this)
if (firebaseUser == null) {
signIn()
} else {
setContentForTheApp()
}
}
private fun signIn() {
val signInIntent = createFirebaseAuthUIIntent()
signInLauncher.launch(signInIntent)
}
private fun createFirebaseAuthUIIntent(): Intent {
val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build()
)
return AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.setTheme(R.style.Theme_SzobatarSCH)
.setLogo(R.drawable.kszk)
.build()
}
private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract()
) { res ->
this.signInResult(res)
}
private fun signInResult(result: FirebaseAuthUIAuthenticationResult) {
val response = result.idpResponse
if (result.resultCode == RESULT_OK) {
if (firebaseUser != null) setContentForTheApp() else signIn()
}
if (result.resultCode == RESULT_CANCELED) {
finish()
} else {
Log.e("MainActivity.kt_logged", "Error logging in " + response?.error?.errorCode)
}
}
private fun setContentForTheApp() {
setContent {
SzobatarSCHTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Greeting("Android")
SzobatarSCHTheme(darkTheme = isAppDarkTheme()) {
MainScreen()
}
}
}
}
@Composable
fun isAppDarkTheme(): Boolean {
val context = LocalContext.current
val dataStore = UserThemeSetting(context)
val theme = dataStore.getTheme.collectAsState(initial = 0)
return when (theme.value?.let { Theme.values()[it] }) {
Theme.System -> isSystemInDarkTheme()
Theme.Light -> false
Theme.Dark -> true
else -> isSystemInDarkTheme()
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!")
fun MainScreen() {
LaunchedEffect(Unit) {
if (firebaseUser?.metadata?.creationTimestamp == firebaseUser?.metadata?.lastSignInTimestamp) {
registerOrOverwriteUser(
User(
id = firebaseUser!!.uid,
name = firebaseUser!!.displayName!!
)
)
}
/*val intent = Intent(context, EditProfileActivity::class.java)
context.startActivity(intent)*/
}
val navController = rememberNavController()
Scaffold(
modifier = Modifier.fillMaxSize(),
bottomBar = { BottomNavigationBar(navController = navController) }
) {
NavigationHost(navController = navController, paddingValues = it)
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
SzobatarSCHTheme {
Greeting("Android")
fun NavigationHost(navController: NavHostController, paddingValues: PaddingValues) {
NavHost(
modifier = Modifier.padding(paddingValues),
navController = navController,
startDestination = NavRoutes.Find.route,
) {
composable(NavRoutes.Find.route) {
FindPeople()
}
composable(NavRoutes.Matches.route) {
Matches()
}
composable(NavRoutes.Profile.route) {
Profile()
}
composable(NavRoutes.Settings.route) {
Settings()
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment