Remove splash screen after TimelineTab lazy column is populated
This commit is contained in:
parent
cfcc5c48c7
commit
3e76597b8f
@ -13,7 +13,6 @@ import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.PreferenceManager
|
||||
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
|
||||
import cafe.adriel.voyager.navigator.Navigator
|
||||
import cafe.adriel.voyager.navigator.NavigatorDisposeBehavior
|
||||
@ -24,7 +23,6 @@ import com.readrops.app.home.HomeScreen
|
||||
import com.readrops.app.repositories.BaseRepository
|
||||
import com.readrops.app.sync.SyncWorker
|
||||
import com.readrops.app.timelime.TimelineTab
|
||||
import com.readrops.app.util.Migrations
|
||||
import com.readrops.app.util.Preferences
|
||||
import com.readrops.app.util.theme.ReadropsTheme
|
||||
import com.readrops.db.Database
|
||||
@ -41,19 +39,14 @@ import org.koin.core.parameter.parametersOf
|
||||
|
||||
class MainActivity : ComponentActivity(), KoinComponent {
|
||||
|
||||
var ready = false
|
||||
|
||||
@OptIn(ExperimentalVoyagerApi::class)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
installSplashScreen()
|
||||
val splashScreen = installSplashScreen()
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
runBlocking {
|
||||
Migrations.upgrade(
|
||||
appPreferences = get(),
|
||||
encryptedPreferences = get(),
|
||||
oldPreferences = PreferenceManager.getDefaultSharedPreferences(this@MainActivity),
|
||||
database = get(),
|
||||
)
|
||||
}
|
||||
splashScreen.setKeepOnScreenCondition { !ready }
|
||||
|
||||
val screenModel = get<AccountSelectionScreenModel>()
|
||||
val accountExists = screenModel.accountExists()
|
||||
|
@ -6,6 +6,7 @@ import android.app.NotificationManager
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import coil3.ImageLoader
|
||||
import coil3.PlatformContext
|
||||
import coil3.SingletonImageLoader
|
||||
@ -16,7 +17,9 @@ import coil3.request.crossfade
|
||||
import com.readrops.api.apiModule
|
||||
import com.readrops.app.util.CrashActivity
|
||||
import com.readrops.app.util.FeverFaviconFetcher
|
||||
import com.readrops.app.util.Migrations
|
||||
import com.readrops.db.dbModule
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.OkHttpClient
|
||||
import org.koin.android.ext.android.get
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
@ -52,6 +55,15 @@ open class ReadropsApp : Application(), KoinComponent, SingletonImageLoader.Fact
|
||||
}
|
||||
|
||||
createNotificationChannels()
|
||||
|
||||
runBlocking {
|
||||
Migrations.upgrade(
|
||||
appPreferences = get(),
|
||||
encryptedPreferences = get(),
|
||||
oldPreferences = PreferenceManager.getDefaultSharedPreferences(this@ReadropsApp),
|
||||
database = get(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun newImageLoader(context: PlatformContext): ImageLoader {
|
||||
|
@ -38,6 +38,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import com.readrops.api.utils.ApiUtils
|
||||
import com.readrops.app.BuildConfig
|
||||
import com.readrops.app.MainActivity
|
||||
import com.readrops.app.R
|
||||
import com.readrops.app.account.OPMLImportProgressDialog
|
||||
import com.readrops.app.account.credentials.AccountCredentialsScreen
|
||||
@ -78,6 +79,11 @@ class AccountSelectionScreen : AndroidScreen() {
|
||||
)
|
||||
}
|
||||
|
||||
// remove splash screen when opening the app with no account available
|
||||
LaunchedEffect(Unit) {
|
||||
(context as MainActivity).ready = true
|
||||
}
|
||||
|
||||
LaunchedEffect(state.exception) {
|
||||
if (state.exception != null) {
|
||||
snackbarHostState.showSnackbar(ErrorMessage.get(state.exception!!, context))
|
||||
|
@ -32,6 +32,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.res.painterResource
|
||||
@ -43,6 +44,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import cafe.adriel.voyager.navigator.tab.Tab
|
||||
import cafe.adriel.voyager.navigator.tab.TabOptions
|
||||
import com.readrops.app.MainActivity
|
||||
import com.readrops.app.R
|
||||
import com.readrops.app.feeds.dialogs.FeedModalBottomSheet
|
||||
import com.readrops.app.feeds.dialogs.UpdateFeedDialog
|
||||
@ -74,6 +76,7 @@ object FeedTab : Tab {
|
||||
val haptic = LocalHapticFeedback.current
|
||||
val uriHandler = LocalUriHandler.current
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
val context = LocalContext.current
|
||||
|
||||
val screenModel = koinScreenModel<FeedScreenModel>()
|
||||
val state by screenModel.feedsState.collectAsStateWithLifecycle()
|
||||
@ -82,6 +85,11 @@ object FeedTab : Tab {
|
||||
val topAppBarScrollBehavior =
|
||||
TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
|
||||
// remove splash screen when opening the app from <new feed> intent
|
||||
LaunchedEffect(Unit) {
|
||||
(context as MainActivity).ready = true
|
||||
}
|
||||
|
||||
LaunchedEffect(state.error) {
|
||||
if (state.error != null) {
|
||||
snackbarHostState.showSnackbar((state.error!!))
|
||||
|
@ -56,6 +56,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import cafe.adriel.voyager.navigator.tab.Tab
|
||||
import cafe.adriel.voyager.navigator.tab.TabOptions
|
||||
import com.readrops.app.MainActivity
|
||||
import com.readrops.app.R
|
||||
import com.readrops.app.item.ItemScreen
|
||||
import com.readrops.app.timelime.drawer.TimelineDrawer
|
||||
@ -118,6 +119,14 @@ object TimelineTab : Tab {
|
||||
}
|
||||
}
|
||||
|
||||
// remove splash screen when opening the app
|
||||
LaunchedEffect(items.isLoading()) {
|
||||
val activity = (context as MainActivity)
|
||||
if (!items.isLoading() && !activity.ready) {
|
||||
activity.ready = true
|
||||
}
|
||||
}
|
||||
|
||||
val drawerState = rememberDrawerState(
|
||||
initialValue = DrawerValue.Closed,
|
||||
confirmStateChange = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user