summaryrefslogtreecommitdiff
path: root/anastasis/src/main/java/net/taler/anastasis/MainActivity.kt
blob: 3a4ddb88b0a21ff0bad6985220fd0fcca5104211 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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.BackupFinishedScreen
import net.taler.anastasis.ui.backup.EditSecretScreen
import net.taler.anastasis.ui.backup.ReviewPoliciesScreen
import net.taler.anastasis.ui.backup.SelectAuthMethodsScreen
import net.taler.anastasis.ui.common.LoadingScreen
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.recovery.SelectChallengeScreen
import net.taler.anastasis.ui.recovery.SelectSecretScreen
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()
    val tasks by viewModel.tasks.collectAsState()
    if (tasks.isForegroundLoading) {
        LoadingScreen()
    } else {
        when (navRoute) {
            Routes.Home.route -> {
                HomeScreen()
            }

            Routes.SelectContinent.route -> {
                SelectContinentScreen()
            }

            Routes.SelectCountry.route -> {
                SelectCountryScreen()
            }

            Routes.SelectUserAttributes.route -> {
                SelectUserAttributesScreen()
            }

            Routes.SelectAuthMethods.route -> {
                SelectAuthMethodsScreen()
            }

            Routes.ReviewPolicies.route -> {
                ReviewPoliciesScreen()
            }

            Routes.EditSecret.route -> {
                EditSecretScreen()
            }

            Routes.BackupFinished.route -> {
                BackupFinishedScreen()
            }

            Routes.SelectSecret.route -> {
                SelectSecretScreen()
            }

            Routes.SelectChallenge.route -> {
                SelectChallengeScreen()
            }

            Routes.RestoreInit.route -> {
                Text("This is the restore session screen!")
            }
        }
    }
}