1package com.parseable.android
3import android.os.Bundle
4import androidx.activity.ComponentActivity
5import androidx.activity.compose.setContent
6import androidx.activity.enableEdgeToEdge
7import androidx.compose.foundation.layout.Box
8import androidx.compose.foundation.layout.fillMaxSize
9import androidx.compose.material3.CircularProgressIndicator
10import androidx.compose.runtime.*
11import androidx.compose.ui.Alignment
12import androidx.compose.ui.Modifier
13import androidx.navigation.compose.rememberNavController
14import com.parseable.android.data.model.ServerConfig
15import com.parseable.android.data.repository.ParseableRepository
16import com.parseable.android.data.repository.SettingsRepository
17import com.parseable.android.ui.ErrorHandler
18import com.parseable.android.ui.GlobalErrorBoundary
19import com.parseable.android.ui.navigation.ParseableNavGraph
20import com.parseable.android.ui.navigation.Routes
21import com.parseable.android.ui.theme.ParseableTheme
22import dagger.hilt.android.AndroidEntryPoint
23import kotlinx.coroutines.flow.first
24import kotlinx.coroutines.flow.launchIn
25import kotlinx.coroutines.flow.onEach
26import javax.inject.Inject
29class MainActivity : ComponentActivity() {
32 lateinit var settingsRepository: SettingsRepository
35 lateinit var repository: ParseableRepository
37 private val errorHandler = ErrorHandler()
39 override fun onCreate(savedInstanceState: Bundle?) {
40 super.onCreate(savedInstanceState)
45 GlobalErrorBoundary(errorHandler = errorHandler) {
46 var startDestination by remember { mutableStateOf<String?>(null) }
48 LaunchedEffect(Unit) {
49 val savedConfig: ServerConfig? = settingsRepository.serverConfig.first()
50 if (savedConfig != null) {
51 repository.configure(savedConfig)
53 startDestination = if (savedConfig != null) Routes.STREAMS else Routes.LOGIN
56 val dest = startDestination
58 val navController = rememberNavController()
60 // Navigate to login on 401 auth errors
61 LaunchedEffect(navController) {
64 settingsRepository.clearConfig()
65 errorHandler.showError("Session expired. Please log in again.")
66 navController.navigate(Routes.login(sessionExpired = true)) {
67 popUpTo(0) { inclusive = true }
74 navController = navController,
75 startDestination = dest,
76 repository = repository,
80 modifier = Modifier.fillMaxSize(),
81 contentAlignment = Alignment.Center,
83 CircularProgressIndicator()
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list