diff --git a/app/src/main/java/dev/vdbroek/nekos/MainActivity.kt b/app/src/main/java/dev/vdbroek/nekos/MainActivity.kt index 89c364a..8c03015 100644 --- a/app/src/main/java/dev/vdbroek/nekos/MainActivity.kt +++ b/app/src/main/java/dev/vdbroek/nekos/MainActivity.kt @@ -74,18 +74,23 @@ class MainActivity : ComponentActivity() { UserState.username = prefs[USERNAME] } + App.isReady = prefs[READY] ?: true + val (tagsResponse) = Nekos.getTags() if (tagsResponse != null) { App.tags.addAll(tagsResponse.tags) } - val (response, exception) = Nekos.getImages() - when { - response != null -> { - HomeScreenState.images.addAll(if (App.uncensored) response.images else response.images.filter { !it.tags.contains(App.buggedTag) }) - isSplashActive = false + if (App.isReady) { + val (response, exception) = Nekos.getImages() + when { + response != null -> { + HomeScreenState.images.addAll(if (App.uncensored) response.images else response.images.filter { !it.tags.contains(App.buggedTag) }) + isSplashActive = false + App.initialLoad = false + } + exception != null -> finish() } - exception != null -> finish() } } @@ -106,16 +111,17 @@ class MainActivity : ComponentActivity() { val navigation = rememberNavController() val entry by navigation.currentBackStackEntryAsState() - val screen by remember { derivedStateOf { entry?.destination?.route ?: "" } } + val screen = remember { derivedStateOf { entry?.destination?.route ?: "" } } CompositionLocalProvider( LocalActivity provides this, LocalNavigation provides navigation, LocalScreen provides screen ) { - NekosTheme { - when (LocalScreen.current) { + val current by LocalScreen.current + + when (current) { Screens.Login.route, Screens.Register.route -> { window.statusBarColor = MaterialTheme.colorScheme.primary.toArgb() diff --git a/app/src/main/java/dev/vdbroek/nekos/components/InfiniteList.kt b/app/src/main/java/dev/vdbroek/nekos/components/InfiniteList.kt index d8f2b6d..4f23a09 100644 --- a/app/src/main/java/dev/vdbroek/nekos/components/InfiniteList.kt +++ b/app/src/main/java/dev/vdbroek/nekos/components/InfiniteList.kt @@ -1,5 +1,6 @@ package dev.vdbroek.nekos.components +import android.util.Log import androidx.compose.foundation.clickable import androidx.compose.foundation.gestures.ScrollableState import androidx.compose.foundation.layout.* @@ -165,7 +166,10 @@ fun InfiniteListHandler( .distinctUntilChanged() .collect { // Only load more when true - if (it) onLoadMore() + if (!App.initialLoad && App.isReady && it) { + Log.e("LOAD_MORE", "$it") + onLoadMore() + } } } } diff --git a/app/src/main/java/dev/vdbroek/nekos/components/NekosAppBar.kt b/app/src/main/java/dev/vdbroek/nekos/components/NekosAppBar.kt index 946e201..ae32e09 100644 --- a/app/src/main/java/dev/vdbroek/nekos/components/NekosAppBar.kt +++ b/app/src/main/java/dev/vdbroek/nekos/components/NekosAppBar.kt @@ -31,6 +31,7 @@ fun NekosAppBar( ) { val navigation = LocalNavigation.current val context = LocalContext.current + val current by LocalScreen.current val coroutine = rememberCoroutineScope() val toolbarScaffoldState = rememberCollapsingToolbarScaffoldState() @@ -50,7 +51,7 @@ fun NekosAppBar( .height(100.dp) .parallax(ratio = 0.2f) ) - when (LocalScreen.current) { + when (current) { Screens.Home.route -> { Box( modifier = Modifier diff --git a/app/src/main/java/dev/vdbroek/nekos/components/NekosAppContent.kt b/app/src/main/java/dev/vdbroek/nekos/components/NekosAppContent.kt index cd35f86..2a9b365 100644 --- a/app/src/main/java/dev/vdbroek/nekos/components/NekosAppContent.kt +++ b/app/src/main/java/dev/vdbroek/nekos/components/NekosAppContent.kt @@ -5,6 +5,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -27,11 +28,12 @@ private val noNavBar = listOf( @Composable fun NekosAppContent() { val navController = LocalNavigation.current + val current by LocalScreen.current Scaffold( contentColor = MaterialTheme.colorScheme.background, bottomBar = { - if (!noNavBar.contains(LocalScreen.current)) { + if (!noNavBar.contains(current)) { NekosNavBar() } }, diff --git a/app/src/main/java/dev/vdbroek/nekos/components/NekosNavBar.kt b/app/src/main/java/dev/vdbroek/nekos/components/NekosNavBar.kt index dea3337..6d696b7 100644 --- a/app/src/main/java/dev/vdbroek/nekos/components/NekosNavBar.kt +++ b/app/src/main/java/dev/vdbroek/nekos/components/NekosNavBar.kt @@ -15,10 +15,8 @@ import androidx.compose.material3.Icon import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.* +import androidx.navigation.compose.currentBackStackEntryAsState import dev.vdbroek.nekos.api.UserState import dev.vdbroek.nekos.ui.Screens import dev.vdbroek.nekos.utils.App @@ -31,7 +29,7 @@ import me.onebone.toolbar.ExperimentalToolbarApi @Composable fun NekosNavBar() { val navController = LocalNavigation.current - val screen = LocalScreen.current + val screen by LocalScreen.current val coroutine = rememberCoroutineScope() diff --git a/app/src/main/java/dev/vdbroek/nekos/ui/screens/Settings.kt b/app/src/main/java/dev/vdbroek/nekos/ui/screens/Settings.kt index 5ecd36b..01e9db3 100644 --- a/app/src/main/java/dev/vdbroek/nekos/ui/screens/Settings.kt +++ b/app/src/main/java/dev/vdbroek/nekos/ui/screens/Settings.kt @@ -74,13 +74,20 @@ fun Settings( val contentOptions = listOf("everything", "no_nsfw", "only_nsfw") var selectedContentOption by remember { mutableStateOf(App.nsfw) } - Column( - modifier = Modifier + val modifier = if (App.uncensored) { + Modifier .fillMaxSize() .scrollable( state = toolbarState, orientation = Orientation.Vertical ) + } else { + Modifier + .fillMaxSize() + } + + Column( + modifier = modifier ) { Text( modifier = Modifier.padding(start = 24.dp), @@ -350,9 +357,9 @@ suspend fun changeTheme( } } - dataStore.edit { preferences -> - preferences[MANUAL] = ThemeState.manual - preferences[IS_DARK] = ThemeState.isDark + dataStore.edit { prefs -> + prefs[MANUAL] = ThemeState.manual + prefs[IS_DARK] = ThemeState.isDark } } @@ -369,8 +376,8 @@ suspend fun changeLayout( } } - dataStore.edit { preferences -> - preferences[STAGGERED] = ThemeState.staggered + dataStore.edit { prefs -> + prefs[STAGGERED] = ThemeState.staggered } } diff --git a/app/src/main/java/dev/vdbroek/nekos/utils/Globals.kt b/app/src/main/java/dev/vdbroek/nekos/utils/Globals.kt index 84927db..264cefa 100644 --- a/app/src/main/java/dev/vdbroek/nekos/utils/Globals.kt +++ b/app/src/main/java/dev/vdbroek/nekos/utils/Globals.kt @@ -7,7 +7,7 @@ val IS_DARK = booleanPreferencesKey("is_dark") val MANUAL = booleanPreferencesKey("manual") val STAGGERED = booleanPreferencesKey("staggered") val NSFW = stringPreferencesKey("nsfw") - +val READY = booleanPreferencesKey("ready") val IS_LOGGED_IN = booleanPreferencesKey("is_logged_in") val TOKEN = stringPreferencesKey("token") val USERNAME = stringPreferencesKey("username") diff --git a/app/src/main/java/dev/vdbroek/nekos/utils/Utils.kt b/app/src/main/java/dev/vdbroek/nekos/utils/Utils.kt index 5d203f1..cba8e4b 100644 --- a/app/src/main/java/dev/vdbroek/nekos/utils/Utils.kt +++ b/app/src/main/java/dev/vdbroek/nekos/utils/Utils.kt @@ -53,7 +53,7 @@ val LocalNavigation = staticCompositionLocalOf { error("CompositionLocal LocalNavigation not present") } -val LocalScreen = staticCompositionLocalOf { +val LocalScreen = staticCompositionLocalOf> { error("CompositionLocal LocalScreen not present") } @@ -173,6 +173,9 @@ object App { */ const val uncensored = BuildConfig.BUILD_TYPE == "uncensored" + var isReady by mutableStateOf(false) + var initialLoad by mutableStateOf(true) + const val defaultNsfw = "no_nsfw" var nsfw by mutableStateOf(defaultNsfw) var permissionGranted by mutableStateOf(false)