Skip to content

Commit

Permalink
chore: use composeResources for strings
Browse files Browse the repository at this point in the history
  • Loading branch information
alvr committed Jan 31, 2024
1 parent 972a03f commit 752def8
Show file tree
Hide file tree
Showing 54 changed files with 321 additions and 523 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import androidx.compose.runtime.referentialEqualityPolicy
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import androidx.navigation.NavGraph
Expand All @@ -33,6 +32,8 @@ import dev.alvr.katana.ui.main.navigation.items.HomeNavigationBarItem
import dev.alvr.katana.ui.main.navigation.items.NavigationBarItem
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.stringResource

@Composable
internal fun NavigationBar(
Expand Down Expand Up @@ -160,6 +161,7 @@ private fun RailNavigationBar(
}

@Composable
@OptIn(ExperimentalResourceApi::class)
private fun NavigationBarIcon(destination: NavigationBarItem) {
Icon(
imageVector = destination.icon,
Expand All @@ -168,6 +170,7 @@ private fun NavigationBarIcon(destination: NavigationBarItem) {
}

@Composable
@OptIn(ExperimentalResourceApi::class)
private fun NavigationBarLabel(destination: NavigationBarItem) {
Text(text = stringResource(destination.label))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,27 @@ import androidx.compose.material.icons.twotone.Explore
import androidx.compose.material.icons.twotone.VideoLibrary
import androidx.compose.ui.graphics.vector.ImageVector
import com.ramcosta.composedestinations.spec.NavGraphSpec
import dev.alvr.katana.R
import dev.alvr.katana.ui.account.navigation.AccountNavGraph
import dev.alvr.katana.ui.explore.navigation.ExploreNavGraph
import dev.alvr.katana.ui.lists.navigation.AnimeNavGraph
import dev.alvr.katana.ui.lists.navigation.MangaNavGraph
import dev.alvr.katana.ui.social.navigation.SocialNavGraph
import katana.app.generated.resources.Res
import kotlinx.collections.immutable.persistentListOf
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.StringResource

@OptIn(ExperimentalResourceApi::class)
internal enum class HomeNavigationBarItem(
override val direction: NavGraphSpec,
override val icon: ImageVector,
override val label: Int,
override val label: StringResource,
) : NavigationBarItem {
Anime(AnimeNavGraph, Icons.TwoTone.VideoLibrary, R.string.navigation_bar_destination_anime_lists),
Manga(MangaNavGraph, Icons.AutoMirrored.TwoTone.LibraryBooks, R.string.navigation_bar_destination_manga_lists),
Explore(ExploreNavGraph, Icons.TwoTone.Explore, R.string.navigation_bar_destination_explore),
Social(SocialNavGraph, Icons.TwoTone.Dashboard, R.string.navigation_bar_destination_social),
Account(AccountNavGraph, Icons.TwoTone.AccountCircle, R.string.navigation_bar_destination_account);
Anime(AnimeNavGraph, Icons.TwoTone.VideoLibrary, Res.string.navigation_bar_destination_anime_lists),
Manga(MangaNavGraph, Icons.AutoMirrored.TwoTone.LibraryBooks, Res.string.navigation_bar_destination_manga_lists),
Explore(ExploreNavGraph, Icons.TwoTone.Explore, Res.string.navigation_bar_destination_explore),
Social(SocialNavGraph, Icons.TwoTone.Dashboard, Res.string.navigation_bar_destination_social),
Account(AccountNavGraph, Icons.TwoTone.AccountCircle, Res.string.navigation_bar_destination_account);

companion object {
@JvmField
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package dev.alvr.katana.ui.main.navigation.items

import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector
import com.ramcosta.composedestinations.spec.NavGraphSpec
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.StringResource

@OptIn(ExperimentalResourceApi::class)
internal sealed interface NavigationBarItem {
val direction: NavGraphSpec
val icon: ImageVector
@get:StringRes val label: Int
val label: StringResource
}
10 changes: 0 additions & 10 deletions app/src/androidMain/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Katana</string>

<string name="navigation_bar_destination_anime_lists">Anime</string>
<string name="navigation_bar_destination_manga_lists">Manga</string>
<string name="navigation_bar_destination_social">Social</string>
<string name="navigation_bar_destination_explore">Explore</string>
<string name="navigation_bar_destination_account">Account</string>

<string name="session_expired_error_title">Session expired</string>
<string name="session_expired_error_message">Anilist\'s session has expired. To continue using Katana you need to log in again.</string>
<string name="session_expired_error_confirm_button">Log in</string>
</resources>
12 changes: 12 additions & 0 deletions app/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="navigation_bar_destination_anime_lists">Anime</string>
<string name="navigation_bar_destination_manga_lists">Manga</string>
<string name="navigation_bar_destination_social">Social</string>
<string name="navigation_bar_destination_explore">Explore</string>
<string name="navigation_bar_destination_account">Account</string>

<string name="session_expired_error_title">Session expired</string>
<string name="session_expired_error_message">Anilist\'s session has expired. To continue using Katana you need to log in again.</string>
<string name="session_expired_error_confirm_button">Log in</string>
</resources>
32 changes: 1 addition & 31 deletions app/src/commonMain/kotlin/dev/alvr/katana/ui/main/KatanaApp.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,13 @@
package dev.alvr.katana.ui.main

import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import co.touchlab.kermit.DefaultFormatter
import co.touchlab.kermit.LogWriter
import co.touchlab.kermit.Logger
import co.touchlab.kermit.Severity
import co.touchlab.kermit.platformLogWriter
import dev.alvr.katana.KatanaBuildConfig
import dev.alvr.katana.ui.account.strings.LocalAccountStrings
import dev.alvr.katana.ui.account.strings.rememberAccountStrings
import dev.alvr.katana.ui.base.design.KatanaTheme
import dev.alvr.katana.ui.base.strings.LocalBaseStrings
import dev.alvr.katana.ui.base.strings.rememberBaseStrings
import dev.alvr.katana.ui.explore.strings.LocalExploreStrings
import dev.alvr.katana.ui.explore.strings.rememberExploreStrings
import dev.alvr.katana.ui.lists.strings.LocalListsStrings
import dev.alvr.katana.ui.lists.strings.rememberListsStrings
import dev.alvr.katana.ui.login.strings.LocalLoginStrings
import dev.alvr.katana.ui.login.strings.rememberLoginStrings
import dev.alvr.katana.ui.social.strings.LocalSocialStrings
import dev.alvr.katana.ui.social.strings.rememberSocialStrings
import io.sentry.kotlin.multiplatform.Sentry
import io.sentry.kotlin.multiplatform.SentryLevel
import io.sentry.kotlin.multiplatform.protocol.Breadcrumb
Expand All @@ -33,27 +20,10 @@ internal fun KatanaApp() {
initApp()

KatanaTheme {
KatanaStrings {
KatanaContent()
}
KatanaContent()
}
}

@Composable
private fun KatanaStrings(
content: @Composable () -> Unit,
) {
CompositionLocalProvider(
LocalAccountStrings provides rememberAccountStrings(),
LocalBaseStrings provides rememberBaseStrings(),
LocalExploreStrings provides rememberExploreStrings(),
LocalListsStrings provides rememberListsStrings(),
LocalLoginStrings provides rememberLoginStrings(),
LocalSocialStrings provides rememberSocialStrings(),
content = content,
)
}

private fun initApp() {
initSentry()
initNapier()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import dev.alvr.katana.R
import katana.app.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.stringResource

@Composable
@OptIn(ExperimentalResourceApi::class)
internal fun SessionExpiredDialog(
visible: Boolean,
onAccept: () -> Unit,
Expand All @@ -20,11 +22,11 @@ internal fun SessionExpiredDialog(
},
confirmButton = {
TextButton(onClick = onAccept) {
Text(text = stringResource(R.string.session_expired_error_confirm_button))
Text(text = stringResource(Res.string.session_expired_error_confirm_button))
}
},
title = { Text(text = stringResource(R.string.session_expired_error_title)) },
text = { Text(text = stringResource(R.string.session_expired_error_message)) },
title = { Text(text = stringResource(Res.string.session_expired_error_title)) },
text = { Text(text = stringResource(Res.string.session_expired_error_message)) },
properties = DialogProperties(
dismissOnBackPress = false,
dismissOnClickOutside = false,
Expand Down
2 changes: 1 addition & 1 deletion config/detekt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -980,7 +980,7 @@ Compose:
active: true
CompositionLocalAllowlist:
active: true
allowedCompositionLocals: LocalAccountStrings,LocalBaseStrings,LocalExploreStrings,LocalListsStrings,LocalLoginStrings,LocalSocialStrings
allowedCompositionLocals:
CompositionLocalNaming:
active: true
ContentEmitterReturningValues:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Cuenta</string>
<string name="logout_button">Cerrar sesión</string>
</resources>
5 changes: 5 additions & 0 deletions ui/account/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Cuenta</string>
<string name="logout_button">Cerrar sesión</string>
</resources>

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import dev.alvr.katana.ui.account.entities.UserInfoUi
import dev.alvr.katana.ui.account.navigation.AccountNavigator
import dev.alvr.katana.ui.account.strings.LocalAccountStrings
import dev.alvr.katana.ui.account.viewmodel.AccountViewModel
import dev.alvr.katana.ui.base.components.home.KatanaHomeTopAppBar
import dev.alvr.katana.ui.base.navigation.Destination
import dev.alvr.katana.ui.base.viewmodel.collectAsState
import katana.ui.account.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject

@Composable
Expand All @@ -32,14 +34,15 @@ internal fun AccountScreen(
}

@Composable
@OptIn(ExperimentalResourceApi::class)
private fun AccountScreen(
userInfo: UserInfoUi,
onLogoutClick: () -> Unit,
) {
Scaffold(
topBar = {
KatanaHomeTopAppBar(
title = LocalAccountStrings.current.title,
title = stringResource(Res.string.title),
subtitle = null,
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,14 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import dev.alvr.katana.ui.account.entities.UserInfoUi
import dev.alvr.katana.ui.account.strings.LocalAccountStrings
import io.kamel.image.KamelImage
import io.kamel.image.asyncPainterResource
import katana.ui.account.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.stringResource

@Composable
@OptIn(ExperimentalResourceApi::class)
internal fun UserInfo(
userInfo: UserInfoUi,
onLogoutClick: () -> Unit,
Expand All @@ -38,7 +41,7 @@ internal fun UserInfo(
)

Button(onClick = onLogoutClick) {
Text(text = LocalAccountStrings.current.logoutButton)
Text(text = stringResource(Res.string.logout_button))
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions ui/base/src/commonMain/composeResources/values-es/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="component_empty_state">No se han encontrado datos.</string>
<string name="component_error_state">Ha ocurrido un error.</string>
<string name="component_error_state_retry_button">Intentar de nuevo.</string>

<string name="toolbar_menu_search">Menú de búsqueda</string>
<string name="toolbar_menu_filter">Menú de filtrado</string>

<string name="toolbar_search_close">Cerrar búsqueda</string>
<string name="toolbar_search_clear">Limpiar búsqueda</string>
</resources>
12 changes: 12 additions & 0 deletions ui/base/src/commonMain/composeResources/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="component_empty_state">No data has been found.</string>
<string name="component_error_state">An error occurred.</string>
<string name="component_error_state_retry_button">Retry again.</string>

<string name="toolbar_menu_search">Search menu</string>
<string name="toolbar_menu_filter">Filter menu</string>

<string name="toolbar_search_close">Close search</string>
<string name="toolbar_search_clear">Clear search input</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import dev.alvr.katana.common.core.empty
import dev.alvr.katana.ui.base.strings.LocalBaseStrings
import katana.ui.base.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.stringResource

@Composable
@OptIn(ExperimentalResourceApi::class)
Expand All @@ -45,8 +46,6 @@ fun KatanaSearchTopAppBar(
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }

val strings = LocalBaseStrings.current

// Request focus only the first time
if (!focusRequested) {
LaunchedEffect(Unit) {
Expand All @@ -68,8 +67,8 @@ fun KatanaSearchTopAppBar(
leadingIcon = {
IconButton(onClick = onBack) {
Icon(
contentDescription = strings.toolbarSearchClose,
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
contentDescription = stringResource(Res.string.toolbar_search_close),
)
}
},
Expand All @@ -82,7 +81,7 @@ fun KatanaSearchTopAppBar(
) {
Icon(
imageVector = Icons.Outlined.Clear,
contentDescription = strings.toolbarSearchClear,
contentDescription = stringResource(Res.string.toolbar_search_clear),
)
}
},
Expand Down
Loading

0 comments on commit 752def8

Please sign in to comment.