OXYGENHUB
# 3f3508bd5f16 oxygenhub-android / app / src / main / java / io / oxygenhub / android / MainActivity.kt
1.9 KiB · last changed Sign-in, dashboard, repositories, issues and inbox screens, adaptive (refs #2) 11 days ago source blame history raw
57c08243 Andy McCall ↶ 1
package io.oxygenhub.android
2
3
import android.os.Bundle
4
import androidx.activity.ComponentActivity
5
import androidx.activity.compose.setContent
6
import androidx.activity.enableEdgeToEdge
144cbf7b Andy McCall ↶ 7
import androidx.compose.runtime.getValue
8
import androidx.compose.runtime.key
9
import androidx.lifecycle.compose.collectAsStateWithLifecycle
10
import io.oxygenhub.android.ui.nav.SignedInApp
11
import io.oxygenhub.android.ui.nav.rememberViewModel
12
import io.oxygenhub.android.ui.signin.SignInScreen
13
import io.oxygenhub.android.ui.signin.SignInViewModel
57c08243 Andy McCall ↶ 14
import io.oxygenhub.android.ui.theme.OxygenHubTheme
15
import uniffi.rust_core.oxygenGreeting
16
17
class MainActivity : ComponentActivity() {
18
    override fun onCreate(savedInstanceState: Bundle?) {
19
        super.onCreate(savedInstanceState)
20
        enableEdgeToEdge()
144cbf7b Andy McCall ↶ 21
        val container = (application as OxygenHubApp).container
22
        val sessions = container.sessions
57c08243 Andy McCall ↶ 23
        setContent {
24
            OxygenHubTheme {
144cbf7b Andy McCall ↶ 25
                val session by sessions.session.collectAsStateWithLifecycle()
26
                val signedIn = session
27
                val api = signedIn?.let { sessions.api() }
28
                if (signedIn == null || api == null) {
29
                    SignInScreen(
30
                        rememberViewModel { SignInViewModel(sessions, container::deviceAuth, container.clientName, DEFAULT_HUB) },
31
                    )
57c08243 Andy McCall ↶ 32
                } else {
144cbf7b Andy McCall ↶ 33
                    // A new session starts the signed-in app afresh: nothing of the last account's is kept.
34
                    key(signedIn) {
35
                        SignedInApp(
36
                            session = signedIn,
37
                            api = api,
38
                            nativeCore = { oxygenGreeting(signedIn.username) },
39
                            onSignOut = { sessions.signOut() },
40
                        )
41
                    }
57c08243 Andy McCall ↶ 42
                }
43
            }
44
        }
45
    }
46
}