Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SzobatárSCH
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Fodor Patrik
SzobatárSCH
Commits
60849b31
Commit
60849b31
authored
May 15, 2022
by
Fodor Patrik
Browse files
Options
Downloads
Patches
Plain Diff
FirebaseUIAuth, bottom navigation, theme
parent
2585b271
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
app/src/main/java/hu/bme/kszk/szobatarsch/MainActivity.kt
+140
-19
140 additions, 19 deletions
app/src/main/java/hu/bme/kszk/szobatarsch/MainActivity.kt
with
140 additions
and
19 deletions
app/src/main/java/hu/bme/kszk/szobatarsch/MainActivity.kt
+
140
−
19
View file @
60849b31
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
()
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment