From fb2351e7557637566cb393409278c43534d6589e Mon Sep 17 00:00:00 2001 From: Wing <44992537+wingio@users.noreply.github.com> Date: Sun, 26 Nov 2023 12:18:25 -0500 Subject: [PATCH] Fix login screen appearing before accounts could load --- .../dimett/domain/manager/AccountManager.kt | 16 ++++++++-- .../wingio/dimett/ui/activity/MainActivity.kt | 29 ++++++++++--------- .../java/xyz/wingio/dimett/utils/Utils.kt | 22 ++++++++++---- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/xyz/wingio/dimett/domain/manager/AccountManager.kt b/app/src/main/java/xyz/wingio/dimett/domain/manager/AccountManager.kt index 2d001c7..3ba8f29 100644 --- a/app/src/main/java/xyz/wingio/dimett/domain/manager/AccountManager.kt +++ b/app/src/main/java/xyz/wingio/dimett/domain/manager/AccountManager.kt @@ -1,11 +1,16 @@ package xyz.wingio.dimett.domain.manager +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import xyz.wingio.dimett.domain.db.AppDatabase import xyz.wingio.dimett.domain.db.entities.Account import xyz.wingio.dimett.rest.dto.user.CredentialUser +import xyz.wingio.dimett.utils.mainThread class AccountManager( db: AppDatabase, @@ -15,7 +20,10 @@ class AccountManager( private val managerScope = CoroutineScope(Dispatchers.IO) private val dao = db.accountsDao() - var accounts: MutableList = mutableListOf() + var isInitialized by mutableStateOf(false) + private set + + var accounts: MutableList = mutableStateListOf() private set val current: Account? @@ -23,7 +31,11 @@ class AccountManager( init { managerScope.launch { - accounts = dao.listAccounts().toMutableList() + val accs = dao.listAccounts() + mainThread { + accounts += accs + isInitialized = true + } } } diff --git a/app/src/main/java/xyz/wingio/dimett/ui/activity/MainActivity.kt b/app/src/main/java/xyz/wingio/dimett/ui/activity/MainActivity.kt index 3d53921..bdbaa5b 100644 --- a/app/src/main/java/xyz/wingio/dimett/ui/activity/MainActivity.kt +++ b/app/src/main/java/xyz/wingio/dimett/ui/activity/MainActivity.kt @@ -4,7 +4,9 @@ import android.content.Intent import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Surface +import androidx.compose.ui.Modifier import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope import cafe.adriel.voyager.navigator.Navigator @@ -22,8 +24,6 @@ import xyz.wingio.dimett.ui.screens.auth.LoginScreen import xyz.wingio.dimett.ui.screens.main.MainScreen import xyz.wingio.dimett.ui.theme.DimettTheme import xyz.wingio.dimett.ui.viewmodels.auth.instanceUrl -import xyz.wingio.dimett.utils.EmojiUtils -import xyz.wingio.dimett.utils.getLogger class MainActivity : ComponentActivity(), KoinComponent { @@ -34,23 +34,25 @@ class MainActivity : ComponentActivity(), KoinComponent { private lateinit var navigator: Navigator - @OptIn(ExperimentalAnimationApi::class) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) - val isSignedIn = accountManager.current != null - val startScreen = if (isSignedIn) MainScreen() else LoginScreen() setContent { - val logger = getLogger() - - logger.debug(EmojiUtils.regex) - DimettTheme { - Navigator(startScreen) { - SlideTransition(it) - navigator = it + Surface( + modifier = Modifier.fillMaxSize() + ) { + if (accountManager.isInitialized) { + val isSignedIn = accountManager.current != null + val startScreen = if (isSignedIn) MainScreen() else LoginScreen() + + Navigator(startScreen) { + SlideTransition(it) + navigator = it + } + } } } } @@ -90,4 +92,5 @@ class MainActivity : ComponentActivity(), KoinComponent { } } } + } \ No newline at end of file diff --git a/app/src/main/java/xyz/wingio/dimett/utils/Utils.kt b/app/src/main/java/xyz/wingio/dimett/utils/Utils.kt index 3185e24..f613ef0 100644 --- a/app/src/main/java/xyz/wingio/dimett/utils/Utils.kt +++ b/app/src/main/java/xyz/wingio/dimett/utils/Utils.kt @@ -3,10 +3,11 @@ package xyz.wingio.dimett.utils import android.content.Context import android.content.Intent import android.icu.text.CompactDecimalFormat -import androidx.compose.runtime.Composable +import android.os.Handler +import android.os.Looper import androidx.compose.ui.text.AnnotatedString import androidx.core.text.parseAsHtml -import org.koin.androidx.compose.get +import org.koin.core.context.GlobalContext import org.koin.core.qualifier.named import xyz.wingio.dimett.BuildConfig import xyz.wingio.dimett.R @@ -14,6 +15,12 @@ import xyz.wingio.dimett.rest.dto.CustomEmoji import xyz.wingio.dimett.rest.dto.post.Mention import xyz.wingio.dimett.rest.dto.post.Post import java.util.Locale +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.firstOrNull +import kotlin.collections.forEach +import kotlin.collections.mutableMapOf +import kotlin.collections.set val String.plain: String get() = replace("
", "
 ") @@ -40,8 +47,7 @@ fun List.toMentionMap(): Map { return map } -@Composable -fun getLogger(): Logger = get(named("default")) +fun getLogger(): Logger = GlobalContext.get().get(named("default")) fun String.toAnnotatedString() = AnnotatedString(this) @@ -57,10 +63,16 @@ fun processPostContent(post: Post): String { fun Context.getResId(emojiCode: String) = resources.getIdentifier(emojiCode, "raw", BuildConfig.APPLICATION_ID) -fun formatNumber(number: Int): String = CompactDecimalFormat.getInstance(Locale.getDefault(), CompactDecimalFormat.CompactStyle.SHORT).format(number) +fun formatNumber(number: Int): String = + CompactDecimalFormat.getInstance(Locale.getDefault(), CompactDecimalFormat.CompactStyle.SHORT) + .format(number) fun Context.shareText(string: String) = Intent(Intent.ACTION_SEND).apply { type = "text/plain" putExtra(Intent.EXTRA_TEXT, string) startActivity(Intent.createChooser(this, getString(R.string.action_share))) +} + +fun mainThread(block: () -> Unit) { + Handler(Looper.getMainLooper()).post(block) } \ No newline at end of file