Use TV Lottie loading spinner

This commit is contained in:
tapframe 2026-07-06 14:50:51 +05:30
parent 9d41e9f769
commit deddcc6744
27 changed files with 116 additions and 81 deletions

View file

@ -416,6 +416,7 @@ kotlin {
implementation(libs.compose.ui)
implementation(libs.compose.components.resources)
implementation(libs.compose.uiToolingPreview)
implementation(libs.compottie)
implementation(libs.androidx.lifecycle.viewmodelCompose)
implementation(libs.androidx.lifecycle.runtimeCompose)
implementation(libs.kotlinx.serialization.json)

File diff suppressed because one or more lines are too long

View file

@ -28,7 +28,7 @@ import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Home
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@ -585,7 +585,7 @@ fun App() {
.background(MaterialTheme.nuvio.colors.background),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(color = MaterialTheme.nuvio.colors.accent)
NuvioLoadingIndicator(color = MaterialTheme.nuvio.colors.accent)
}
}
AppGateScreen.Auth.name -> {
@ -2224,7 +2224,7 @@ private fun MainAppContent(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(color = MaterialTheme.nuvio.colors.accent)
NuvioLoadingIndicator(color = MaterialTheme.nuvio.colors.accent)
}
return@composable
}
@ -2437,7 +2437,7 @@ private fun MainAppContent(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(MaterialTheme.nuvio.spacing.cardPadding),
) {
CircularProgressIndicator(color = MaterialTheme.nuvio.colors.playerControlsForeground)
NuvioLoadingIndicator(color = MaterialTheme.nuvio.colors.playerControlsForeground)
Text(
text = stringResource(Res.string.streams_finding_source),
color = MaterialTheme.nuvio.colors.playerControlsForeground.copy(alpha = MaterialTheme.nuvio.opacity.overlayHeavy),
@ -3297,7 +3297,7 @@ private fun AppLaunchOverlay(
contentScale = ContentScale.Fit,
)
Spacer(modifier = Modifier.height(tokens.spacing.sectionGap))
CircularProgressIndicator(color = tokens.colors.accent)
NuvioLoadingIndicator(color = tokens.colors.accent)
}
}
}

View file

@ -35,7 +35,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -431,9 +430,8 @@ fun NuvioStatusModal(
modifier = Modifier.padding(tokens.spacing.dialogPadding),
) {
if (isBusy) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = tokens.colors.accent,
strokeWidth = NuvioTokens.Border.medium + NuvioTokens.Space.hairline,
)
Spacer(modifier = Modifier.height(NuvioTokens.Space.s16))
}

View file

@ -0,0 +1,57 @@
package com.nuvio.app.core.ui
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.unit.Dp
import io.github.alexzhirkevich.compottie.Compottie
import io.github.alexzhirkevich.compottie.LottieCompositionSpec
import io.github.alexzhirkevich.compottie.animateLottieCompositionAsState
import io.github.alexzhirkevich.compottie.rememberLottieComposition
import io.github.alexzhirkevich.compottie.rememberLottiePainter
import nuvio.composeapp.generated.resources.Res
@Composable
fun NuvioLoadingIndicator(
modifier: Modifier = Modifier,
color: Color = MaterialTheme.nuvio.colors.textSecondary,
size: Dp = NuvioTokens.Space.s40,
) {
Box(
modifier = modifier.size(size),
contentAlignment = Alignment.Center,
) {
val composition by rememberLottieComposition {
LottieCompositionSpec.JsonString(
Res.readBytes("files/nuvio_loading_indicator.json").decodeToString()
)
}
val progress by animateLottieCompositionAsState(
composition = composition,
iterations = Compottie.IterateForever,
)
Image(
painter = rememberLottiePainter(
composition = composition,
progress = { progress },
),
contentDescription = null,
colorFilter = ColorFilter.tint(color),
modifier = Modifier
.fillMaxSize()
.graphicsLayer {
clip = false
},
)
}
}

View file

@ -18,7 +18,6 @@ import androidx.compose.material.icons.rounded.Check
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
@ -92,8 +91,7 @@ fun TraktListPickerDialog(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(tokens.spacing.listGap),
) {
CircularProgressIndicator(
strokeWidth = tokens.borders.medium,
NuvioLoadingIndicator(
modifier = Modifier.size(tokens.icons.lg),
)
Text(
@ -164,9 +162,8 @@ fun TraktListPickerDialog(
enabled = !isPending,
) {
if (isPending) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = tokens.colors.onAccent,
strokeWidth = tokens.borders.medium,
modifier = Modifier.size(tokens.icons.sm),
)
} else {

View file

@ -42,7 +42,7 @@ import androidx.compose.material.icons.rounded.Visibility
import androidx.compose.material.icons.rounded.VisibilityOff
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -872,10 +872,9 @@ private fun AuthPrimaryButton(
),
) {
if (isLoading) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(20.dp * scale),
color = AuthPrimaryButtonText,
strokeWidth = 2.dp * scale,
)
} else {
Text(

View file

@ -19,7 +19,7 @@ import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -379,10 +379,9 @@ private fun CatalogLoadingFooter() {
.padding(vertical = 12.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(22.dp),
color = MaterialTheme.colorScheme.primary,
strokeWidth = 2.dp,
)
}
}

View file

@ -23,7 +23,7 @@ import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.LocalRippleConfiguration
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ScrollableTabRow
import androidx.compose.material3.Tab
@ -370,10 +370,9 @@ private fun PaginationLoadingFooter() {
.padding(vertical = 8.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(28.dp),
color = MaterialTheme.colorScheme.primary,
strokeWidth = 3.dp,
)
}
}
@ -393,10 +392,9 @@ private fun LoadingIndicator() {
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(32.dp),
color = MaterialTheme.colorScheme.primary,
strokeWidth = 3.dp,
)
}
}

View file

@ -36,7 +36,7 @@ import androidx.compose.material.icons.filled.CheckCircle
import androidx.compose.material.icons.filled.CheckCircleOutline
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -310,7 +310,7 @@ fun MetaDetailsScreen(
) {
when {
displayedMeta == null && uiState.isLoading -> {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.align(Alignment.Center),
color = MaterialTheme.colorScheme.primary,
)

View file

@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.rounded.Close
import androidx.compose.material.icons.Icons
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -140,7 +140,7 @@ fun TrailerPlayerPopup(
) {
when {
isLoading -> {
CircularProgressIndicator(color = MaterialTheme.colorScheme.primary)
NuvioLoadingIndicator(color = MaterialTheme.colorScheme.primary)
}
activeError != null -> {

View file

@ -30,7 +30,7 @@ import androidx.compose.material.icons.automirrored.filled.InsertDriveFile
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
import androidx.compose.material.icons.rounded.PlayArrow
import androidx.compose.material.icons.rounded.Refresh
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator
@ -591,9 +591,8 @@ private fun LibraryChip(
horizontalArrangement = Arrangement.spacedBy(6.dp),
) {
if (loading) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(12.dp),
strokeWidth = 1.5.dp,
color = colorScheme.primary,
)
}

View file

@ -34,7 +34,7 @@ import androidx.compose.material.icons.rounded.Replay10
import androidx.compose.material.icons.rounded.Speed
import androidx.compose.material.icons.rounded.SwapHoriz
import androidx.compose.material.icons.rounded.VideoLibrary
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Slider
@ -463,9 +463,8 @@ private fun PlayPauseControlButton(
contentAlignment = Alignment.Center,
) {
if (isBuffering) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = Color.White,
strokeWidth = 3.dp,
modifier = Modifier.size(metrics.playIconSize),
)
} else {

View file

@ -32,7 +32,7 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.ArrowBack
import androidx.compose.material.icons.rounded.Refresh
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -576,9 +576,8 @@ private fun EpisodeStreamsSubView(
.padding(vertical = NuvioTokens.Space.s40),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = tokens.colors.accent,
strokeWidth = tokens.borders.medium,
modifier = Modifier.size(tokens.icons.lg + NuvioTokens.Space.s4),
)
}

View file

@ -40,7 +40,7 @@ import androidx.compose.material.icons.rounded.ErrorOutline
import androidx.compose.material.icons.rounded.FastForward
import androidx.compose.material.icons.rounded.FastRewind
import androidx.compose.material.icons.rounded.Speed
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
@ -238,9 +238,8 @@ internal fun OpeningOverlay(
},
)
} else {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = Color(0xFFE50914),
strokeWidth = 3.dp,
modifier = Modifier.size(54.dp),
)
}

View file

@ -26,7 +26,7 @@ import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Refresh
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -176,9 +176,8 @@ fun PlayerSourcesPanel(
.padding(vertical = NuvioTokens.Space.s40),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = tokens.colors.accent,
strokeWidth = tokens.borders.medium,
modifier = Modifier.size(tokens.icons.lg + NuvioTokens.Space.s4),
)
}
@ -272,9 +271,8 @@ internal fun AddonFilterChip(
horizontalArrangement = Arrangement.spacedBy(NuvioTokens.Space.s6),
) {
if (isLoading) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = tokens.colors.accent,
strokeWidth = tokens.borders.thin + NuvioTokens.Space.hairline,
modifier = Modifier.size(NuvioTokens.Icon.xs),
)
}

View file

@ -29,7 +29,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Check
import androidx.compose.material.icons.rounded.CloudDownload
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -317,9 +317,8 @@ private fun AddonSubtitleList(
.padding(40.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = colorScheme.primary,
strokeWidth = 2.dp,
modifier = Modifier.size(32.dp),
)
}

View file

@ -28,7 +28,7 @@ import androidx.compose.material.icons.rounded.Replay
import androidx.compose.material.icons.rounded.Send
import androidx.compose.material.icons.rounded.StopCircle
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -228,10 +228,9 @@ fun SubmitIntroDialog(
contentAlignment = Alignment.Center
) {
if (isSubmitting) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier.size(24.dp),
strokeWidth = 2.dp
)
} else {
Row(

View file

@ -18,7 +18,7 @@ import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -319,10 +319,9 @@ private fun CatalogLoadingFooter(modifier: Modifier = Modifier) {
.padding(vertical = 8.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(22.dp),
color = MaterialTheme.colorScheme.primary,
strokeWidth = 2.dp,
)
}
}

View file

@ -23,7 +23,7 @@ import androidx.compose.material.icons.rounded.Visibility
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.Checkbox
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -1585,7 +1585,7 @@ private fun DebridDeviceAuthDialog(
horizontalArrangement = Arrangement.spacedBy(12.dp),
verticalAlignment = Alignment.CenterVertically,
) {
CircularProgressIndicator(strokeWidth = 2.dp, modifier = Modifier.size(18.dp))
NuvioLoadingIndicator(modifier = Modifier.size(18.dp))
Text(
text = startingMessage,
style = MaterialTheme.typography.bodyMedium,
@ -1633,7 +1633,7 @@ private fun DebridDeviceAuthDialog(
verticalAlignment = Alignment.CenterVertically,
) {
if (isPolling) {
CircularProgressIndicator(strokeWidth = 2.dp, modifier = Modifier.size(16.dp))
NuvioLoadingIndicator(modifier = Modifier.size(16.dp))
}
Text(
text = message,

View file

@ -24,7 +24,7 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Check
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@ -3302,9 +3302,8 @@ private fun IntroDbApiKeyDialog(
enabled = !isVerifying
) {
if (isVerifying) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(16.dp),
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.primary
)
} else {

View file

@ -21,7 +21,7 @@ import androidx.compose.material.icons.rounded.Delete
import androidx.compose.material.icons.rounded.Visibility
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@ -306,8 +306,7 @@ private fun BadgeUrlManagerDialog(
},
) {
if (isImporting) {
CircularProgressIndicator(
strokeWidth = tokens.borders.medium,
NuvioLoadingIndicator(
modifier = Modifier.size(tokens.icons.sm),
color = tokens.colors.onAccent,
)

View file

@ -27,7 +27,7 @@ import androidx.compose.material.icons.rounded.Favorite
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.LinearProgressIndicator
@ -858,7 +858,7 @@ private fun LoadingState(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(12.dp),
) {
CircularProgressIndicator(strokeWidth = 2.dp)
NuvioLoadingIndicator()
Text(
text = label,
style = MaterialTheme.typography.bodyMedium,

View file

@ -18,7 +18,7 @@ import androidx.compose.material.icons.rounded.Check
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@ -704,9 +704,8 @@ private fun TraktConnectionCard(
),
) {
if (uiState.isLoading) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = MaterialTheme.colorScheme.onSurface,
strokeWidth = 2.dp,
modifier = Modifier.size(18.dp),
)
} else {
@ -774,9 +773,8 @@ private fun TraktConnectionCard(
enabled = uiState.credentialsConfigured && !uiState.isLoading,
) {
if (uiState.isLoading) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = MaterialTheme.colorScheme.onPrimary,
strokeWidth = 2.dp,
modifier = Modifier.size(18.dp),
)
} else {

View file

@ -43,7 +43,7 @@ import androidx.compose.material.icons.rounded.ContentCopy
import androidx.compose.material.icons.rounded.Download
import androidx.compose.material.icons.rounded.Refresh
import androidx.compose.material.icons.rounded.SearchOff
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@ -336,10 +336,9 @@ fun StreamsScreen(
modifier = Modifier.padding(horizontal = 24.dp),
)
}
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(32.dp),
color = Color.White,
strokeWidth = 2.5.dp,
)
Text(
text = uiState.overlayMessage
@ -1048,9 +1047,8 @@ private fun StreamSectionHeader(
)
AnimatedVisibility(visible = isLoading, enter = fadeIn(), exit = fadeOut()) {
Row(verticalAlignment = Alignment.CenterVertically) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(12.dp),
strokeWidth = 1.5.dp,
color = MaterialTheme.colorScheme.primary,
)
Spacer(modifier = Modifier.width(6.dp))
@ -1214,7 +1212,7 @@ private fun LoadingStateBlock(modifier: Modifier = Modifier) {
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(12.dp),
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
color = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(32.dp),
)
@ -1299,9 +1297,8 @@ private fun FooterLoadingBlock(modifier: Modifier = Modifier) {
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(14.dp),
strokeWidth = 2.dp,
color = MaterialTheme.colorScheme.primary,
)
Spacer(modifier = Modifier.width(8.dp))

View file

@ -15,7 +15,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import com.nuvio.app.core.ui.NuvioLoadingIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
@ -488,9 +488,8 @@ fun AppUpdaterHost(
verticalAlignment = Alignment.CenterVertically,
) {
if (state.isChecking) {
CircularProgressIndicator(
NuvioLoadingIndicator(
modifier = Modifier.size(18.dp),
strokeWidth = 2.dp,
)
Spacer(modifier = Modifier.width(10.dp))
}

View file

@ -15,6 +15,7 @@ androidx-work = "2.10.3"
androidx-testExt = "1.3.0"
composeMultiplatform = "1.11.1"
coil = "3.5.0-beta01"
compottie = "2.1.0"
kermit = "2.0.5"
junit = "4.13.2"
kotlin = "2.3.0"
@ -54,6 +55,7 @@ compose-material3 = { module = "org.jetbrains.compose.material3:material3", vers
compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatform" }
compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatform" }
compose-uiToolingPreview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatform" }
compottie = { module = "io.github.alexzhirkevich:compottie", version.ref = "compottie" }
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-gif = { module = "io.coil-kt.coil3:coil-gif", version.ref = "coil" }
coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" }