feat: speed up transitions & home screen
This commit is contained in:
parent
c978ab727f
commit
46fed98175
4 changed files with 21 additions and 77 deletions
|
|
@ -9,22 +9,23 @@ import android.os.Bundle
|
|||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.core.*
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.core.view.WindowCompat
|
||||
import cafe.adriel.voyager.core.annotation.ExperimentalVoyagerApi
|
||||
import cafe.adriel.voyager.core.stack.StackEvent
|
||||
import cafe.adriel.voyager.navigator.*
|
||||
import cafe.adriel.voyager.transitions.ScreenTransition
|
||||
import cafe.adriel.voyager.transitions.SlideTransition
|
||||
import com.aliucord.manager.manager.PreferencesManager
|
||||
import com.aliucord.manager.ui.components.*
|
||||
import com.aliucord.manager.ui.components.ManagerTheme
|
||||
import com.aliucord.manager.ui.components.Theme
|
||||
import com.aliucord.manager.ui.components.dialogs.StoragePermissionsDialog
|
||||
import com.aliucord.manager.ui.screens.home.HomeScreen
|
||||
import com.aliucord.manager.ui.widgets.updater.UpdaterDialog
|
||||
import com.aliucord.manager.util.IS_CUSTOM_BUILD
|
||||
import com.aliucord.manager.util.back
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
|
|
@ -60,28 +61,17 @@ class MainActivity : ComponentActivity() {
|
|||
navigator.back(this@MainActivity)
|
||||
}
|
||||
|
||||
ScreenTransition(
|
||||
SlideTransition(
|
||||
navigator = navigator,
|
||||
transition = { unifiedScreenTransition(navigator.lastEvent) }
|
||||
disposeScreenAfterTransitionEnd = true,
|
||||
animationSpec = spring(
|
||||
stiffness = Spring.StiffnessMedium,
|
||||
visibilityThreshold = IntOffset.VisibilityThreshold,
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun unifiedScreenTransition(lastEvent: StackEvent): ContentTransform = when (lastEvent) {
|
||||
StackEvent.Push, StackEvent.Replace -> ContentTransform(
|
||||
targetContentEnter = slideInHorizontally { it * 2 } + fadeIn(tween(durationMillis = 400)),
|
||||
initialContentExit = fadeOut(tween(durationMillis = 400, delayMillis = 300)),
|
||||
)
|
||||
|
||||
StackEvent.Pop -> ContentTransform(
|
||||
targetContentEnter = EnterTransition.None,
|
||||
targetContentZIndex = -1f,
|
||||
initialContentExit = slideOutHorizontally { it * 2 } + fadeOut(tween(durationMillis = 400, delayMillis = 300)),
|
||||
)
|
||||
|
||||
StackEvent.Idle -> fadeIn() togetherWith fadeOut()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
package com.aliucord.manager.ui.components
|
||||
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.ui.util.DiscordVersion
|
||||
|
||||
@Composable
|
||||
fun AnimatedVersionDisplay(
|
||||
version: DiscordVersion,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
AnimatedVisibility(
|
||||
enter = fadeIn() + slideInVertically { it * -2 },
|
||||
exit = fadeOut() + slideOutVertically { it * -2 },
|
||||
visible = version !is DiscordVersion.None,
|
||||
modifier = modifier,
|
||||
) {
|
||||
VersionDisplay(
|
||||
version = version,
|
||||
prefix = {
|
||||
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
||||
append(stringResource(R.string.version_supported))
|
||||
append(" ")
|
||||
}
|
||||
},
|
||||
modifier = Modifier.alpha(.5f),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,6 @@ import android.content.res.Configuration
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.aliucord.manager.ui.components.ManagerTheme
|
||||
import com.aliucord.manager.ui.screens.logs.components.dialogs.DeleteLogsDialog
|
||||
import com.aliucord.manager.ui.screens.plugins.components.dialogs.UninstallPluginDialog
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ import cafe.adriel.voyager.koin.koinScreenModel
|
|||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import com.aliucord.manager.R
|
||||
import com.aliucord.manager.ui.components.*
|
||||
import com.aliucord.manager.ui.components.LoadFailure
|
||||
import com.aliucord.manager.ui.components.ProjectHeader
|
||||
import com.aliucord.manager.ui.screens.home.components.*
|
||||
import com.aliucord.manager.ui.screens.patchopts.PatchOptionsScreen
|
||||
import com.aliucord.manager.ui.screens.plugins.PluginsScreen
|
||||
|
|
@ -145,34 +146,24 @@ fun HomeScreenLoadedContent(
|
|||
secondaryInstall = true,
|
||||
onClick = onClickInstall,
|
||||
modifier = Modifier
|
||||
.padding(top = 10.dp)
|
||||
.padding(vertical = 10.dp)
|
||||
.height(50.dp)
|
||||
.fillMaxWidth()
|
||||
)
|
||||
}
|
||||
|
||||
item(key = "SUPPORTED_VERSION") {
|
||||
AnimatedVersionDisplay(
|
||||
version = supportedVersion,
|
||||
modifier = Modifier.padding(bottom = 30.dp),
|
||||
)
|
||||
}
|
||||
|
||||
val installations = (state as? InstallsState.Fetched)?.data
|
||||
?: return@LazyColumn
|
||||
|
||||
items(installations, key = { it.packageName }) {
|
||||
items(state.data, key = { it.packageName }) { item ->
|
||||
AnimatedVisibility(
|
||||
enter = fadeIn() + slideInHorizontally { it * -2 },
|
||||
exit = fadeOut() + slideOutHorizontally { it * 2 },
|
||||
visible = supportedVersion !is DiscordVersion.None,
|
||||
) {
|
||||
InstalledItemCard(
|
||||
data = it,
|
||||
onUpdate = { onUpdate(it.packageName) },
|
||||
onOpenApp = { onOpenApp(it.packageName) },
|
||||
onOpenInfo = { onOpenAppInfo(it.packageName) },
|
||||
onOpenPlugins = { onOpenPlugins(it.packageName) },
|
||||
data = item,
|
||||
onUpdate = { onUpdate(item.packageName) },
|
||||
onOpenApp = { onOpenApp(item.packageName) },
|
||||
onOpenInfo = { onOpenAppInfo(item.packageName) },
|
||||
onOpenPlugins = { onOpenPlugins(item.packageName) },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue