From 925a8fc9ca7e11d10c67792d619636499a13cb1e Mon Sep 17 00:00:00 2001 From: Eugene Date: Sun, 26 Jul 2026 16:18:15 +0300 Subject: [PATCH] update icons --- .../vbox/backend/data/BackendUpdateFetcher.kt | 1 - .../vbox/backend/presentation/Jwt.kt | 19 ++---- .../composeResources/drawable/eye.xml | 6 +- .../composeResources/drawable/home.xml | 8 +-- .../composeResources/drawable/search.xml | 8 +-- .../composeResources/drawable/settings.xml | 8 +-- .../drawable/star-unchecked.xml | 6 +- .../composeResources/drawable/star.xml | 6 +- .../composeResources/values/strings.xml | 2 +- .../vbox/shared/presentation/BottomBar.kt | 4 +- .../presentation/saved/SavedMovieScreen.kt | 66 +++++++++---------- .../kotlin/ru/shadowsparky/ui/BaseScreen.kt | 6 +- .../ui/theme/ComponentDefaults.kt | 8 +++ .../updater/presentation/UpdateDialog.kt | 6 +- 14 files changed, 67 insertions(+), 87 deletions(-) diff --git a/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/data/BackendUpdateFetcher.kt b/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/data/BackendUpdateFetcher.kt index 12be940..2198ece 100644 --- a/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/data/BackendUpdateFetcher.kt +++ b/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/data/BackendUpdateFetcher.kt @@ -22,7 +22,6 @@ class BackendUpdateFetcherFactory( } } -@Factory(binds = [BackendUpdateFetcher::class]) class BackendUpdateFetcher( private val envFetcher: EnvFetcher, private val json: Json, diff --git a/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/presentation/Jwt.kt b/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/presentation/Jwt.kt index e805ba5..f6f5e85 100644 --- a/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/presentation/Jwt.kt +++ b/apps/vbox/backend/src/main/kotlin/ru/shadowsparky/vbox/backend/presentation/Jwt.kt @@ -1,12 +1,11 @@ package ru.shadowsparky.vbox.backend.presentation -import com.auth0.jwt.JWT -import com.auth0.jwt.interfaces.DecodedJWT import io.ktor.http.HttpStatusCode import io.ktor.server.application.Application import io.ktor.server.application.ApplicationCall import io.ktor.server.application.install import io.ktor.server.auth.Authentication +import io.ktor.server.auth.authentication import io.ktor.server.auth.jwt.JWTPrincipal import io.ktor.server.auth.jwt.jwt import io.ktor.server.response.respond @@ -43,7 +42,7 @@ fun Application.configureJwt(authEntryPoint: AuthEntryPoint) { null } } - challenge { defaultScheme, realm -> + challenge { _, _ -> call.respond( HttpStatusCode.Unauthorized, ServerExceptionInfo(INVALID_TOKEN_MSG) @@ -53,18 +52,10 @@ fun Application.configureJwt(authEntryPoint: AuthEntryPoint) { } } -private fun String?.obtainToken(): DecodedJWT { - val token = this?.removePrefix("Bearer ") - ?: throw VerifyTokenException(INVALID_TOKEN_MSG) - return JWT.decode(token) -} - -fun ApplicationCall.obtainToken(): DecodedJWT { - return request.headers["Authorization"].obtainToken() -} - fun ApplicationCall.obtainUserId(): Long { - return obtainToken() + val principal = authentication.principal() + ?: throw VerifyTokenException(INVALID_TOKEN_MSG) + return principal.payload .getClaim(USER_ID_ARG) .asLong() } diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/eye.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/eye.xml index 78d703e..19afff0 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/eye.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/eye.xml @@ -1,10 +1,10 @@ + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> + android:pathData="M424,664L706,382L650,326L424,552L310,438L254,494L424,664ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/home.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/home.xml index 7548a20..5022d9d 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/home.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/home.xml @@ -1,12 +1,10 @@ - + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> - + android:pathData="M240,760L360,760L360,520L600,520L600,760L720,760L720,400L480,220L240,400L240,760ZM160,840L160,360L480,120L800,360L800,840L520,840L520,600L440,600L440,840L160,840ZM480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490L480,490Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/search.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/search.xml index 6b159ad..bd2d386 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/search.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/search.xml @@ -1,12 +1,10 @@ - + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> - + android:pathData="M784,840L532,588Q502,612 463,626Q424,640 380,640Q271,640 195.5,564.5Q120,489 120,380Q120,271 195.5,195.5Q271,120 380,120Q489,120 564.5,195.5Q640,271 640,380Q640,424 626,463Q612,502 588,532L840,784L784,840ZM380,560Q455,560 507.5,507.5Q560,455 560,380Q560,305 507.5,252.5Q455,200 380,200Q305,200 252.5,252.5Q200,305 200,380Q200,455 252.5,507.5Q305,560 380,560Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/settings.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/settings.xml index dc9ca78..6399527 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/settings.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/settings.xml @@ -1,12 +1,10 @@ - + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> - + android:pathData="M370,880L354,752Q341,747 329.5,740Q318,733 307,725L188,775L78,585L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L78,375L188,185L307,235Q318,227 330,220Q342,213 354,208L370,80L590,80L606,208Q619,213 630.5,220Q642,227 653,235L772,185L882,375L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L881,585L771,775L653,725Q642,733 630,740Q618,747 606,752L590,880L370,880ZM440,800L519,800L533,694Q564,686 590.5,670.5Q617,655 639,633L738,674L777,606L691,541Q696,527 698,511.5Q700,496 700,480Q700,464 698,448.5Q696,433 691,419L777,354L738,286L639,328Q617,305 590.5,289.5Q564,274 533,266L520,160L441,160L427,266Q396,274 369.5,289.5Q343,305 321,327L222,286L183,354L269,418Q264,433 262,448Q260,463 260,480Q260,496 262,511Q264,526 269,541L183,606L222,674L321,632Q343,655 369.5,670.5Q396,686 427,694L440,800ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620ZM480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star-unchecked.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star-unchecked.xml index cf44d95..18403e7 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star-unchecked.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star-unchecked.xml @@ -1,10 +1,10 @@ + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> + android:pathData="M480,840L422,788Q321,697 255,631Q189,565 150,512.5Q111,460 95.5,416Q80,372 80,326Q80,232 143,169Q206,106 300,106Q352,106 399,128Q446,150 480,190Q514,150 561,128Q608,106 660,106Q754,106 817,169Q880,232 880,326Q880,372 864.5,416Q849,460 810,512.5Q771,565 705,631Q639,697 538,788L480,840ZM480,732Q576,646 638,584.5Q700,523 736,477.5Q772,432 786,396.5Q800,361 800,326Q800,266 760,226Q720,186 660,186Q613,186 573,212.5Q533,239 518,280L518,280L442,280L442,280Q427,239 387,212.5Q347,186 300,186Q240,186 200,226Q160,266 160,326Q160,361 174,396.5Q188,432 224,477.5Q260,523 322,584.5Q384,646 480,732ZM480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459L480,459L480,459L480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star.xml b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star.xml index b6caf0d..4b3312f 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/drawable/star.xml @@ -1,10 +1,10 @@ + android:viewportHeight="960" + android:tint="?attr/colorControlNormal"> + android:pathData="M480,840L422,788Q321,697 255,631Q189,565 150,512.5Q111,460 95.5,416Q80,372 80,326Q80,232 143,169Q206,106 300,106Q352,106 399,128Q446,150 480,190Q514,150 561,128Q608,106 660,106Q754,106 817,169Q880,232 880,326Q880,372 864.5,416Q849,460 810,512.5Q771,565 705,631Q639,697 538,788L480,840Z"/> diff --git a/apps/vbox/client/shared/src/commonMain/composeResources/values/strings.xml b/apps/vbox/client/shared/src/commonMain/composeResources/values/strings.xml index 2961ce5..463d264 100644 --- a/apps/vbox/client/shared/src/commonMain/composeResources/values/strings.xml +++ b/apps/vbox/client/shared/src/commonMain/composeResources/values/strings.xml @@ -36,7 +36,7 @@ Логин не может быть пустым Пароль не может быть пустым Тема активна на данный момент - Сохранённые + Любимое Вы ничего не сохраняли. Может исправите это недоразумение? Ссылка скопирована Скопировать diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/BottomBar.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/BottomBar.kt index e31d7e3..6599f45 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/BottomBar.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/BottomBar.kt @@ -6,7 +6,7 @@ import androiddev.apps.vbox.client.shared.generated.resources.recommendations import androiddev.apps.vbox.client.shared.generated.resources.saved_movies import androiddev.apps.vbox.client.shared.generated.resources.search import androiddev.apps.vbox.client.shared.generated.resources.settings -import androiddev.apps.vbox.client.shared.generated.resources.star +import androiddev.apps.vbox.client.shared.generated.resources.star_unchecked import androidx.compose.runtime.Composable import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @@ -24,7 +24,7 @@ fun createNavigationList(): List> { NavigationEntry( Route.Bookmark(), stringResource(Res.string.saved_movies), - painterResource(Res.drawable.star) + painterResource(Res.drawable.star_unchecked) ), NavigationEntry( Route.SearchVideos(), diff --git a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/saved/SavedMovieScreen.kt b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/saved/SavedMovieScreen.kt index 94e93eb..ae6d17c 100644 --- a/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/saved/SavedMovieScreen.kt +++ b/apps/vbox/client/shared/src/commonMain/kotlin/ru/shadowsparky/vbox/shared/presentation/saved/SavedMovieScreen.kt @@ -6,7 +6,6 @@ import androiddev.apps.vbox.client.shared.generated.resources.saved_movies import androiddev.apps.vbox.client.shared.generated.resources.saved_movies_not_found import androiddev.apps.vbox.client.shared.generated.resources.user_tags import androiddev.apps.vbox.client.shared.generated.resources.user_tags_filter_disable -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -16,13 +15,13 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.BasicAlertDialog import androidx.compose.material3.Checkbox import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults @@ -33,7 +32,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.jetbrains.compose.resources.painterResource @@ -67,7 +65,7 @@ fun SavedMovieScreen(comp: SavedMovieScreenComponent, route: Route, onNavigate: } }, colors = ComponentDefaults.topAppBarColors(), - modifier = Modifier.applyBlurEffect(LocalBlurState.current) + modifier = ComponentDefaults.roundedClip().applyBlurEffect(LocalBlurState.current) ) }, route = route, @@ -111,38 +109,36 @@ private fun FilterDialog( ) { allTags ?: return BasicAlertDialog(onDismissRequest = onDismiss) { - Column( - modifier = Modifier.clip(RoundedCornerShape(28.dp)) - .background(MaterialTheme.colorScheme.surfaceContainerHigh) - .padding(16.dp) - ) { - Text( - text = stringResource(Res.string.user_tags), - style = MaterialTheme.typography.titleLarge, - color = MaterialTheme.colorScheme.onSurface - ) - Spacer(Modifier.height(16.dp)) - LazyColumn(modifier = Modifier.fillMaxWidth()) { - item { - FilterItemCheckBox( - isChecked = filterTag == null, - name = stringResource(Res.string.user_tags_filter_disable) - ) { - onFilterBy(null) - onDismiss() + Surface(shape = MaterialTheme.shapes.extraLarge) { + Column(modifier = Modifier.padding(16.dp)) { + Text( + text = stringResource(Res.string.user_tags), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface + ) + Spacer(Modifier.height(16.dp)) + LazyColumn(modifier = Modifier.fillMaxWidth()) { + item { + FilterItemCheckBox( + isChecked = filterTag == null, + name = stringResource(Res.string.user_tags_filter_disable) + ) { + onFilterBy(null) + onDismiss() + } } - } - items( - items = allTags.filter { it.id != null }, - key = { tag -> tag.id ?: tag.tag } - ) { tag -> - Spacer(Modifier.height(4.dp)) - FilterItemCheckBox( - isChecked = filterTag == tag.tag, - name = tag.tag - ) { - onFilterBy(tag.tag) - onDismiss() + items( + items = allTags.filter { it.id != null }, + key = { tag -> tag.id ?: tag.tag } + ) { tag -> + Spacer(Modifier.height(4.dp)) + FilterItemCheckBox( + isChecked = filterTag == tag.tag, + name = tag.tag + ) { + onFilterBy(tag.tag) + onDismiss() + } } } } diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/BaseScreen.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/BaseScreen.kt index 80ab28f..fb077c5 100644 --- a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/BaseScreen.kt +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/BaseScreen.kt @@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.calculateEndPadding -import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing @@ -118,7 +117,7 @@ private fun BottomBar( navigationEntries?.let { NavigationBar( containerColor = ComponentDefaults.navBarContentColor(), - modifier = Modifier.applyBlurEffect(blurState) + modifier = ComponentDefaults.roundedClip().applyBlurEffect(blurState) ) { it.forEach { entry -> NavigationBarItem( @@ -143,7 +142,6 @@ private fun ExpandedContent( ) { val topPadding = values.calculateTopPadding() val bottomPadding = values.calculateBottomPadding() - val startPadding = values.calculateStartPadding(LayoutDirection.Ltr) val endPadding = values.calculateEndPadding(LayoutDirection.Ltr) Row(modifier = Modifier.fillMaxSize().padding(top = topPadding)) { NavigationRail(modifier = Modifier.padding(horizontal = 4.dp)) { @@ -159,8 +157,6 @@ private fun ExpandedContent( Box(modifier = Modifier.weight(1f)) { content( PaddingValues( - start = startPadding, - top = 0.dp, end = endPadding, bottom = bottomPadding ) diff --git a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/theme/ComponentDefaults.kt b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/theme/ComponentDefaults.kt index 36d1ab1..5fffd79 100644 --- a/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/theme/ComponentDefaults.kt +++ b/libs/ui/src/commonMain/kotlin/ru/shadowsparky/ui/theme/ComponentDefaults.kt @@ -1,5 +1,6 @@ package ru.shadowsparky.ui.theme +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.AppBarWithSearchColors import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.NavigationBarDefaults @@ -7,7 +8,10 @@ import androidx.compose.material3.SearchBarDefaults import androidx.compose.material3.TopAppBarColors import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp import ru.shadowsparky.ui.isBlurEnabled object ComponentDefaults { @@ -44,4 +48,8 @@ object ComponentDefaults { SearchBarDefaults.appBarWithSearchColors() } } + + fun roundedClip(modifier: Modifier = Modifier): Modifier { + return modifier.clip(RoundedCornerShape(24.dp)) + } } diff --git a/libs/updater/updater-client/src/commonMain/kotlin/ru/shadowsparky/updater/presentation/UpdateDialog.kt b/libs/updater/updater-client/src/commonMain/kotlin/ru/shadowsparky/updater/presentation/UpdateDialog.kt index 3d563e8..f14b306 100644 --- a/libs/updater/updater-client/src/commonMain/kotlin/ru/shadowsparky/updater/presentation/UpdateDialog.kt +++ b/libs/updater/updater-client/src/commonMain/kotlin/ru/shadowsparky/updater/presentation/UpdateDialog.kt @@ -63,11 +63,7 @@ fun UpdateDialog( canDismiss, ), content = { - Surface( - shape = MaterialTheme.shapes.extraLarge, - color = MaterialTheme.colorScheme.surface, - contentColor = MaterialTheme.colorScheme.onSurface - ) { + Surface(shape = MaterialTheme.shapes.extraLarge) { Box(modifier = Modifier.padding(16.dp)) { when (val currentState = state) { is UpdateState.Checking -> UpdateCheckingContent()