Basic navigation

This commit is contained in:
Damontecres 2025-09-22 12:09:41 -04:00
parent 51ad92f539
commit 80070f4174
No known key found for this signature in database
18 changed files with 496 additions and 22 deletions

View file

@ -3,22 +3,31 @@ package com.github.damontecres.dolphin
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.unit.dp
import androidx.datastore.core.DataStore
import androidx.tv.material3.ExperimentalTvMaterial3Api
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Surface
import com.github.damontecres.dolphin.data.ServerRepository
import com.github.damontecres.dolphin.preferences.UserPreferences
import com.github.damontecres.dolphin.ui.ServerLoginPage
import com.github.damontecres.dolphin.ui.main.MainPage
import com.github.damontecres.dolphin.ui.nav.ApplicationContent
import com.github.damontecres.dolphin.ui.theme.DolphinTheme
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import okhttp3.OkHttpClient
import javax.inject.Inject
@ -45,26 +54,37 @@ class MainActivity : AppCompatActivity() {
) {
CoilConfig(serverRepository, okHttpClient, false)
var isRestoringSession by remember { mutableStateOf(true) }
val preferences by userPreferencesDataStore.data.collectAsState(null)
preferences?.let { preferences ->
if (preferences.currentServerId.isNotBlank() && preferences.currentUserId.isNotBlank()) {
scope.launch {
LaunchedEffect(Unit) {
if (preferences.currentServerId.isNotBlank() && preferences.currentUserId.isNotBlank()) {
serverRepository.restoreSession(
preferences.currentServerId,
preferences.currentUserId,
)
}
} else {
ServerLoginPage(modifier = Modifier.fillMaxSize())
isRestoringSession = false
}
val server = serverRepository.currentServer
val user = serverRepository.currentUser
if (server != null && user != null) {
// TODO navigation
MainPage(
ApplicationContent(
preferences = preferences,
modifier = Modifier.fillMaxSize(),
)
} else if (isRestoringSession) {
Box(
modifier = Modifier.size(200.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.border,
modifier = Modifier.align(Alignment.Center),
)
}
} else {
ServerLoginPage(modifier = Modifier.fillMaxSize())
}
}
}