summaryrefslogtreecommitdiff
path: root/anastasis/src/main/java/net/taler/anastasis/MainActivity.kt
blob: 653d8a554b193271bd76cd4056660805cf3d4f69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package net.taler.anastasis

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.hilt.navigation.compose.hiltViewModel
import dagger.hilt.android.AndroidEntryPoint
import net.taler.anastasis.ui.backup.ReviewPoliciesScreen
import net.taler.anastasis.ui.backup.SelectAuthMethodsScreen
import net.taler.anastasis.ui.common.SelectContinentScreen
import net.taler.anastasis.ui.common.SelectCountryScreen
import net.taler.anastasis.ui.common.SelectUserAttributesScreen
import net.taler.anastasis.ui.dialogs.ErrorDialog
import net.taler.anastasis.ui.home.HomeScreen
import net.taler.anastasis.ui.theme.AnastasisTheme
import net.taler.anastasis.viewmodels.ReducerViewModel

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    val viewModel: ReducerViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                if (viewModel.goBack()) finish()
            }
        })

        setContent {
            AnastasisTheme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background,
                ) {
                    MainNavHost()
                }
            }
        }
    }
}

@Composable
fun MainNavHost(
    viewModel: ReducerViewModel = hiltViewModel(),
) {
    val error by viewModel.reducerError.collectAsState()
    error?.let {
        ErrorDialog(error = it) {
            viewModel.cleanError()
        }
    }

    val navRoute by viewModel.navRoute.collectAsState()
    when (navRoute) {
        Routes.Home.route -> {
            HomeScreen()
        }
        Routes.SelectContinent.route -> {
            SelectContinentScreen()
        }
        Routes.SelectCountry.route -> {
            SelectCountryScreen()
        }
        Routes.SelectUserAttributes.route -> {
            SelectUserAttributesScreen()
        }
        Routes.SelectAuthMethods.route -> {
            SelectAuthMethodsScreen()
        }
        Routes.ReviewPoliciesScreen.route -> {
            ReviewPoliciesScreen()
        }
        Routes.RestoreInit.route -> {
            Text("This is the restore session screen!")
        }
    }
}