From f242ffb2af5e9952390159a038908abfa7f2c8bd Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:30:45 +0530 Subject: [PATCH 1/8] common: cleanup Gradle build Signed-off-by: Harsh Shandilya --- common/build.gradle.kts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index ad258c60..70acc046 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -68,10 +68,14 @@ kotlin { } android { - buildFeatures { androidResources = true } + buildFeatures { + androidResources = true + } - sourceSets["main"].apply { - manifest.srcFile("src/androidMain/AndroidManifest.xml") - res.srcDir("src/androidMain/res") + sourceSets { + named("main") { + manifest.srcFile("src/androidMain/AndroidManifest.xml") + res.srcDirs("src/androidMain/res") + } } } From 5783210873d39d3834916e12f3e062cb8e78979c Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:34:18 +0530 Subject: [PATCH 2/8] app: add sun.misc.Unsafe to proguard rules Signed-off-by: Harsh Shandilya --- app/proguard-rules.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 3c4b1e36..bdd2168d 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -3,5 +3,6 @@ -dontwarn androidx.compose.animation.tooling.ComposeAnimation -dontwarn android.view.RenderNode -dontwarn android.view.DisplayListCanvas +-dontwarn sun.misc.Unsafe -dontobfuscate -dontoptimize From b19a9267f6bc098e197e85bd020de31339679c8f Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:38:44 +0530 Subject: [PATCH 3/8] common: link bug in code Signed-off-by: Harsh Shandilya --- .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 4 ++++ .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 4 ++++ .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 3883ee89..39a8c512 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -24,6 +24,10 @@ actual fun stringValue(enum: StringEnum): String { return stringResource(stringEnumMapper(enum)) } +/** + * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 + * + */ @Composable actual fun stringValue(enum: StringEnum, arg1: Any): String { return stringResource(stringEnumMapper(enum), arg1) diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index ebb1d95e..4aad62bc 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -5,6 +5,10 @@ import androidx.compose.runtime.Composable @Composable expect fun stringValue(enum: StringEnum): String +/** + * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 + * + */ @Composable expect fun stringValue(enum: StringEnum, arg1: Any): String diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 211da5ba..7399dfe3 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -22,6 +22,10 @@ actual fun stringValue(enum: StringEnum): String { return stringEnumMapper(enum) } +/** + * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 + * + */ @Composable actual fun stringValue(enum: StringEnum, arg1: Any): String { return stringEnumMapper(enum).format(arg1) From 00c1977f872da0ba0562eaa4b7a47167e226281d Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:43:47 +0530 Subject: [PATCH 4/8] common/app: rename StringEnum to Strings Signed-off-by: Harsh Shandilya --- .../lobsters/ui/posts/LobstersItem.kt | 10 +++---- .../msfjarvis/lobsters/ui/posts/SavedPosts.kt | 6 ++-- .../msfjarvis/lobsters/utils/StringValue.kt | 30 +++++++++---------- .../msfjarvis/lobsters/utils/StringValue.kt | 8 ++--- .../utils/{StringEnum.kt => Strings.kt} | 2 +- .../msfjarvis/lobsters/utils/StringValue.kt | 30 +++++++++---------- 6 files changed, 43 insertions(+), 43 deletions(-) rename common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/{StringEnum.kt => Strings.kt} (90%) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index 622285a1..bf840e56 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -36,7 +36,7 @@ import dev.msfjarvis.lobsters.data.local.SavedPost import dev.msfjarvis.lobsters.ui.theme.LobstersTheme import dev.msfjarvis.lobsters.ui.theme.titleColor import dev.msfjarvis.lobsters.util.IconResource -import dev.msfjarvis.lobsters.utils.StringEnum +import dev.msfjarvis.lobsters.utils.Strings import dev.msfjarvis.lobsters.utils.stringValue val TEST_POST = SavedPost( @@ -143,7 +143,7 @@ fun SubmitterAvatar( CoilImage( data = "${LobstersApi.BASE_URL}/$avatarUrl", contentDescription = stringValue( - StringEnum.AvatarContentDescription, + Strings.AvatarContentDescription, name, ), fadeIn = true, @@ -160,7 +160,7 @@ fun SubmitterNameText( name: String, ) { Text( - text = stringValue(StringEnum.SubmittedBy, name), + text = stringValue(Strings.SubmittedBy, name), modifier = Modifier .padding(start = 4.dp), ) @@ -181,7 +181,7 @@ fun SaveButton( ) { Crossfade(targetState = isSaved) { saved -> // Using if (saved) ... else ... throws an IllegalArgumentException - val contentDescriptionEnum = if (saved) StringEnum.RemoveFromSavedPosts else StringEnum.AddToSavedPosts + val contentDescriptionEnum = if (saved) Strings.RemoveFromSavedPosts else Strings.AddToSavedPosts IconResource( resourceId = if (saved) R.drawable.ic_favorite_24px else R.drawable.ic_favorite_border_24px, tint = MaterialTheme.colors.secondary, @@ -205,7 +205,7 @@ fun CommentsButton( IconResource( resourceId = R.drawable.ic_insert_comment_24px, tint = MaterialTheme.colors.secondary, - contentDescription = stringValue(StringEnum.OpenComments), + contentDescription = stringValue(Strings.OpenComments), ) } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt index 6ec72ea0..3dac9dfd 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt @@ -21,7 +21,7 @@ import dev.msfjarvis.lobsters.data.local.SavedPost import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher import dev.msfjarvis.lobsters.util.IconResource import dev.msfjarvis.lobsters.util.asZonedDateTime -import dev.msfjarvis.lobsters.utils.StringEnum +import dev.msfjarvis.lobsters.utils.Strings import dev.msfjarvis.lobsters.utils.stringValue import kotlinx.coroutines.flow.Flow @@ -47,9 +47,9 @@ fun SavedPosts( R.drawable.ic_favorite_border_24px, tint = Color(0xFFD97373), modifier = Modifier.padding(16.dp), - contentDescription = stringValue(StringEnum.AddToSavedPosts), + contentDescription = stringValue(Strings.AddToSavedPosts), ) - Text(stringValue(StringEnum.NoSavedPost)) + Text(stringValue(Strings.NoSavedPost)) } } else { LazyColumn( diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 39a8c512..207cccaa 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -4,23 +4,23 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import dev.msfjarvis.lobsters.common.R -private fun stringEnumMapper(stringEnum: StringEnum): Int { +private fun stringEnumMapper(stringEnum: Strings): Int { return when (stringEnum) { - StringEnum.AddToSavedPosts -> R.string.add_to_saved_posts - StringEnum.AppName -> R.string.app_name - StringEnum.AvatarContentDescription -> R.string.avatar_content_description - StringEnum.HottestPosts -> R.string.hottest_posts - StringEnum.Loading -> R.string.loading - StringEnum.NoSavedPost -> R.string.no_saved_posts - StringEnum.OpenComments -> R.string.open_comments - StringEnum.RefreshPostsContentDescription -> R.string.refresh_posts_content_description - StringEnum.RemoveFromSavedPosts -> R.string.remove_from_saved_posts - StringEnum.SubmittedBy -> R.string.submitted_by + Strings.AddToSavedPosts -> R.string.add_to_saved_posts + Strings.AppName -> R.string.app_name + Strings.AvatarContentDescription -> R.string.avatar_content_description + Strings.HottestPosts -> R.string.hottest_posts + Strings.Loading -> R.string.loading + Strings.NoSavedPost -> R.string.no_saved_posts + Strings.OpenComments -> R.string.open_comments + Strings.RefreshPostsContentDescription -> R.string.refresh_posts_content_description + Strings.RemoveFromSavedPosts -> R.string.remove_from_saved_posts + Strings.SubmittedBy -> R.string.submitted_by } } @Composable -actual fun stringValue(enum: StringEnum): String { +actual fun stringValue(enum: Strings): String { return stringResource(stringEnumMapper(enum)) } @@ -29,16 +29,16 @@ actual fun stringValue(enum: StringEnum): String { * */ @Composable -actual fun stringValue(enum: StringEnum, arg1: Any): String { +actual fun stringValue(enum: Strings, arg1: Any): String { return stringResource(stringEnumMapper(enum), arg1) } @Composable -actual fun stringValue(enum: StringEnum, arg1: Any, arg2: Any): String { +actual fun stringValue(enum: Strings, arg1: Any, arg2: Any): String { return stringResource(stringEnumMapper(enum), arg1, arg2) } @Composable -actual fun stringValue(enum: StringEnum, arg1: Any, arg2: Any, arg3: Any): String { +actual fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String { return stringResource(stringEnumMapper(enum), arg1, arg2, arg3) } diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 4aad62bc..5bfa0d0f 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -3,17 +3,17 @@ package dev.msfjarvis.lobsters.utils import androidx.compose.runtime.Composable @Composable -expect fun stringValue(enum: StringEnum): String +expect fun stringValue(enum: Strings): String /** * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 * */ @Composable -expect fun stringValue(enum: StringEnum, arg1: Any): String +expect fun stringValue(enum: Strings, arg1: Any): String @Composable -expect fun stringValue(enum: StringEnum, arg1: Any, arg2: Any): String +expect fun stringValue(enum: Strings, arg1: Any, arg2: Any): String @Composable -expect fun stringValue(enum: StringEnum, arg1: Any, arg2: Any, arg3: Any): String +expect fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringEnum.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt similarity index 90% rename from common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringEnum.kt rename to common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt index 9a5b5edf..3ff5f00f 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringEnum.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt @@ -1,6 +1,6 @@ package dev.msfjarvis.lobsters.utils -enum class StringEnum { +enum class Strings { AddToSavedPosts, AppName, AvatarContentDescription, diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 7399dfe3..006eb086 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -2,23 +2,23 @@ package dev.msfjarvis.lobsters.utils import androidx.compose.runtime.Composable -private fun stringEnumMapper(stringEnum: StringEnum): String { +private fun stringEnumMapper(stringEnum: Strings): String { return when (stringEnum) { - StringEnum.AddToSavedPosts -> "Add to saved posts" - StringEnum.AppName -> "Claw" - StringEnum.AvatarContentDescription -> "%1s's avatar" - StringEnum.HottestPosts -> "Hottest" - StringEnum.Loading -> "Loading posts…" - StringEnum.NoSavedPost -> "You don't have any saved posts" - StringEnum.OpenComments -> "Open comments" - StringEnum.RefreshPostsContentDescription -> "Refresh posts" - StringEnum.RemoveFromSavedPosts -> "Remove from saved posts" - StringEnum.SubmittedBy -> "submitted by %1s" + Strings.AddToSavedPosts -> "Add to saved posts" + Strings.AppName -> "Claw" + Strings.AvatarContentDescription -> "%1s's avatar" + Strings.HottestPosts -> "Hottest" + Strings.Loading -> "Loading posts…" + Strings.NoSavedPost -> "You don't have any saved posts" + Strings.OpenComments -> "Open comments" + Strings.RefreshPostsContentDescription -> "Refresh posts" + Strings.RemoveFromSavedPosts -> "Remove from saved posts" + Strings.SubmittedBy -> "submitted by %1s" } } @Composable -actual fun stringValue(enum: StringEnum): String { +actual fun stringValue(enum: Strings): String { return stringEnumMapper(enum) } @@ -27,16 +27,16 @@ actual fun stringValue(enum: StringEnum): String { * */ @Composable -actual fun stringValue(enum: StringEnum, arg1: Any): String { +actual fun stringValue(enum: Strings, arg1: Any): String { return stringEnumMapper(enum).format(arg1) } @Composable -actual fun stringValue(enum: StringEnum, arg1: Any, arg2: Any): String { +actual fun stringValue(enum: Strings, arg1: Any, arg2: Any): String { return stringEnumMapper(enum).format(arg1, arg2) } @Composable -actual fun stringValue(enum: StringEnum, arg1: Any, arg2: Any, arg3: Any): String { +actual fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String { return stringEnumMapper(enum).format(arg1, arg2, arg3) } From 56fd18be755b392118f4ca58cee03c8516758999 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:52:23 +0530 Subject: [PATCH 5/8] common: attempt extension backed string API Signed-off-by: Harsh Shandilya --- .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 10 ++++++++++ .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 6 ++++++ .../kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 207cccaa..f6ca2179 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -19,6 +19,16 @@ private fun stringEnumMapper(stringEnum: Strings): Int { } } +@Composable +actual fun Strings.get(): String { + return stringResource(stringEnumMapper(this)) +} + +@Composable +actual fun Strings.get(fmt: Any): String { + return stringResource(stringEnumMapper(this), fmt) +} + @Composable actual fun stringValue(enum: Strings): String { return stringResource(stringEnumMapper(enum)) diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 5bfa0d0f..afb25a2e 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -17,3 +17,9 @@ expect fun stringValue(enum: Strings, arg1: Any, arg2: Any): String @Composable expect fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String + +@Composable +expect fun Strings.get(): String + +@Composable +expect fun Strings.get(fmt: Any): String diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 006eb086..903c6dd0 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -17,6 +17,16 @@ private fun stringEnumMapper(stringEnum: Strings): String { } } +@Composable +actual fun Strings.get(): String { + return stringEnumMapper(this) +} + +@Composable +actual fun Strings.get(fmt: Any): String { + return stringEnumMapper(this).format(fmt) +} + @Composable actual fun stringValue(enum: Strings): String { return stringEnumMapper(enum) From 4016c22289e787091afd25dbded785801997df76 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:57:53 +0530 Subject: [PATCH 6/8] app: switch to extension API Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/ui/posts/LobstersItem.kt | 15 +++++---------- .../dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt | 6 +++--- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt index bf840e56..2fd62b26 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/LobstersItem.kt @@ -37,7 +37,7 @@ import dev.msfjarvis.lobsters.ui.theme.LobstersTheme import dev.msfjarvis.lobsters.ui.theme.titleColor import dev.msfjarvis.lobsters.util.IconResource import dev.msfjarvis.lobsters.utils.Strings -import dev.msfjarvis.lobsters.utils.stringValue +import dev.msfjarvis.lobsters.utils.get val TEST_POST = SavedPost( shortId = "zqyydb", @@ -142,10 +142,7 @@ fun SubmitterAvatar( ) { CoilImage( data = "${LobstersApi.BASE_URL}/$avatarUrl", - contentDescription = stringValue( - Strings.AvatarContentDescription, - name, - ), + contentDescription = Strings.AvatarContentDescription.get(name), fadeIn = true, requestBuilder = { transformations(CircleCropTransformation()) @@ -160,7 +157,7 @@ fun SubmitterNameText( name: String, ) { Text( - text = stringValue(Strings.SubmittedBy, name), + text = Strings.SubmittedBy.get(name), modifier = Modifier .padding(start = 4.dp), ) @@ -180,12 +177,10 @@ fun SaveButton( .then(modifier), ) { Crossfade(targetState = isSaved) { saved -> - // Using if (saved) ... else ... throws an IllegalArgumentException - val contentDescriptionEnum = if (saved) Strings.RemoveFromSavedPosts else Strings.AddToSavedPosts IconResource( resourceId = if (saved) R.drawable.ic_favorite_24px else R.drawable.ic_favorite_border_24px, tint = MaterialTheme.colors.secondary, - contentDescription = stringValue(contentDescriptionEnum), + contentDescription = if (saved) Strings.RemoveFromSavedPosts.get() else Strings.AddToSavedPosts.get(), ) } } @@ -205,7 +200,7 @@ fun CommentsButton( IconResource( resourceId = R.drawable.ic_insert_comment_24px, tint = MaterialTheme.colors.secondary, - contentDescription = stringValue(Strings.OpenComments), + contentDescription = Strings.OpenComments.get(), ) } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt index 3dac9dfd..1a8c15f9 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/posts/SavedPosts.kt @@ -22,7 +22,7 @@ import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher import dev.msfjarvis.lobsters.util.IconResource import dev.msfjarvis.lobsters.util.asZonedDateTime import dev.msfjarvis.lobsters.utils.Strings -import dev.msfjarvis.lobsters.utils.stringValue +import dev.msfjarvis.lobsters.utils.get import kotlinx.coroutines.flow.Flow @OptIn(ExperimentalFoundationApi::class) @@ -47,9 +47,9 @@ fun SavedPosts( R.drawable.ic_favorite_border_24px, tint = Color(0xFFD97373), modifier = Modifier.padding(16.dp), - contentDescription = stringValue(Strings.AddToSavedPosts), + contentDescription = Strings.AddToSavedPosts.get(), ) - Text(stringValue(Strings.NoSavedPost)) + Text(Strings.NoSavedPost.get()) } } else { LazyColumn( From cad53dcce502ac9af5109788d83ad0bebe6c61d5 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 10:58:38 +0530 Subject: [PATCH 7/8] common: remove old string API Signed-off-by: Harsh Shandilya --- .../msfjarvis/lobsters/utils/StringValue.kt | 24 ------------------- .../msfjarvis/lobsters/utils/StringValue.kt | 16 ------------- .../msfjarvis/lobsters/utils/StringValue.kt | 24 ------------------- 3 files changed, 64 deletions(-) diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index f6ca2179..cf5a9ed9 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -28,27 +28,3 @@ actual fun Strings.get(): String { actual fun Strings.get(fmt: Any): String { return stringResource(stringEnumMapper(this), fmt) } - -@Composable -actual fun stringValue(enum: Strings): String { - return stringResource(stringEnumMapper(enum)) -} - -/** - * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 - * - */ -@Composable -actual fun stringValue(enum: Strings, arg1: Any): String { - return stringResource(stringEnumMapper(enum), arg1) -} - -@Composable -actual fun stringValue(enum: Strings, arg1: Any, arg2: Any): String { - return stringResource(stringEnumMapper(enum), arg1, arg2) -} - -@Composable -actual fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String { - return stringResource(stringEnumMapper(enum), arg1, arg2, arg3) -} diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index afb25a2e..589a6a32 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -2,22 +2,6 @@ package dev.msfjarvis.lobsters.utils import androidx.compose.runtime.Composable -@Composable -expect fun stringValue(enum: Strings): String - -/** - * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 - * - */ -@Composable -expect fun stringValue(enum: Strings, arg1: Any): String - -@Composable -expect fun stringValue(enum: Strings, arg1: Any, arg2: Any): String - -@Composable -expect fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String - @Composable expect fun Strings.get(): String diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 903c6dd0..015af3dc 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -26,27 +26,3 @@ actual fun Strings.get(): String { actual fun Strings.get(fmt: Any): String { return stringEnumMapper(this).format(fmt) } - -@Composable -actual fun stringValue(enum: Strings): String { - return stringEnumMapper(enum) -} - -/** - * Workaround for https://youtrack.jetbrains.com/issue/KT-44499 - * - */ -@Composable -actual fun stringValue(enum: Strings, arg1: Any): String { - return stringEnumMapper(enum).format(arg1) -} - -@Composable -actual fun stringValue(enum: Strings, arg1: Any, arg2: Any): String { - return stringEnumMapper(enum).format(arg1, arg2) -} - -@Composable -actual fun stringValue(enum: Strings, arg1: Any, arg2: Any, arg3: Any): String { - return stringEnumMapper(enum).format(arg1, arg2, arg3) -} From 1abbd8baba4cb8ca0dbf872fad94ab7a647f1d4b Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 24 Mar 2021 11:30:04 +0530 Subject: [PATCH 8/8] common/app: migrate all string usages to common Strings API Signed-off-by: Harsh Shandilya --- .../dev/msfjarvis/lobsters/ui/main/LobstersApp.kt | 6 +++--- .../msfjarvis/lobsters/ui/main/LobstersTopAppBar.kt | 4 +++- .../msfjarvis/lobsters/ui/navigation/Destination.kt | 8 ++++---- app/src/main/res/values/strings.xml | 11 ----------- .../dev/msfjarvis/lobsters/utils/StringValue.kt | 3 ++- common/src/androidMain/res/values/strings.xml | 2 +- .../kotlin/dev/msfjarvis/lobsters/utils/Strings.kt | 3 ++- .../dev/msfjarvis/lobsters/utils/StringValue.kt | 3 ++- 8 files changed, 17 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt index ff243edb..f2bc3cba 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersApp.kt @@ -12,7 +12,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.KEY_ROUTE import androidx.navigation.compose.NavHost @@ -27,6 +26,7 @@ import dev.msfjarvis.lobsters.ui.posts.HottestPosts import dev.msfjarvis.lobsters.ui.posts.SavedPosts import dev.msfjarvis.lobsters.ui.viewmodel.LobstersViewModel import dev.msfjarvis.lobsters.util.IconResource +import dev.msfjarvis.lobsters.utils.get import kotlinx.coroutines.launch @Composable @@ -104,10 +104,10 @@ fun LobstersBottomNav( icon = { IconResource( resourceId = screen.badgeRes, - contentDescription = stringResource(screen.labelRes), + contentDescription = screen.labelRes.get(), ) }, - label = { Text(stringResource(id = screen.labelRes)) }, + label = { Text(screen.labelRes.get()) }, selected = currentDestination == screen, modifier = Modifier.testTag(screen.name), alwaysShowLabel = false, diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersTopAppBar.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersTopAppBar.kt index 8bc2bacf..4bbd216a 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersTopAppBar.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/main/LobstersTopAppBar.kt @@ -13,6 +13,8 @@ import androidx.compose.ui.unit.dp import dev.msfjarvis.lobsters.R import dev.msfjarvis.lobsters.ui.navigation.Destination import dev.msfjarvis.lobsters.util.IconResource +import dev.msfjarvis.lobsters.utils.Strings +import dev.msfjarvis.lobsters.utils.get import kotlinx.coroutines.launch @OptIn(ExperimentalAnimationApi::class) @@ -33,7 +35,7 @@ fun LobstersTopAppBar( if (currentDestination == Destination.Saved) { IconResource( resourceId = R.drawable.ic_sort_24px, - contentDescription = stringResource(id = R.string.change_sorting_order), + contentDescription = Strings.ChangeSortingOrder.get(), modifier = Modifier .padding(horizontal = 8.dp, vertical = 8.dp) .clickable { scope.launch { toggleSortingOrder() } }, diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt index 44d5708a..0d2e65d6 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/navigation/Destination.kt @@ -1,19 +1,19 @@ package dev.msfjarvis.lobsters.ui.navigation import androidx.annotation.DrawableRes -import androidx.annotation.StringRes import dev.msfjarvis.lobsters.R +import dev.msfjarvis.lobsters.utils.Strings /** * Destinations for navigation within the app. */ enum class Destination( val route: String, - @StringRes val labelRes: Int, + val labelRes: Strings, @DrawableRes val badgeRes: Int, ) { - Hottest("hottest", R.string.hottest_posts, R.drawable.ic_whatshot_24px), - Saved("saved", R.string.saved_posts, R.drawable.ic_favorite_24px), + Hottest("hottest", Strings.HottestPosts, R.drawable.ic_whatshot_24px), + Saved("saved", Strings.SavedPosts, R.drawable.ic_favorite_24px), ; companion object { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 95271949..c0c13ad5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,14 +1,3 @@ Claw - Loading posts… - You don\'t have any saved posts - Hottest - Saved - submitted by %1$s - %1$s\'s avatar - Add to saved posts - Remove from saved posts - Refresh posts - Open comments - Change sort order diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index cf5a9ed9..ad774903 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -9,12 +9,13 @@ private fun stringEnumMapper(stringEnum: Strings): Int { Strings.AddToSavedPosts -> R.string.add_to_saved_posts Strings.AppName -> R.string.app_name Strings.AvatarContentDescription -> R.string.avatar_content_description + Strings.ChangeSortingOrder -> R.string.change_sorting_order Strings.HottestPosts -> R.string.hottest_posts - Strings.Loading -> R.string.loading Strings.NoSavedPost -> R.string.no_saved_posts Strings.OpenComments -> R.string.open_comments Strings.RefreshPostsContentDescription -> R.string.refresh_posts_content_description Strings.RemoveFromSavedPosts -> R.string.remove_from_saved_posts + Strings.SavedPosts -> R.string.saved_posts Strings.SubmittedBy -> R.string.submitted_by } } diff --git a/common/src/androidMain/res/values/strings.xml b/common/src/androidMain/res/values/strings.xml index 75e20d9d..0916aedb 100644 --- a/common/src/androidMain/res/values/strings.xml +++ b/common/src/androidMain/res/values/strings.xml @@ -1,6 +1,5 @@ Claw - Loading posts… You don\'t have any saved posts Hottest Saved @@ -10,4 +9,5 @@ Remove from saved posts Refresh posts Open comments + Change sort order diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt index 3ff5f00f..031e77dc 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/utils/Strings.kt @@ -4,12 +4,13 @@ enum class Strings { AddToSavedPosts, AppName, AvatarContentDescription, + ChangeSortingOrder, HottestPosts, - Loading, NoSavedPost, OpenComments, RefreshPostsContentDescription, RemoveFromSavedPosts, + SavedPosts, SubmittedBy, ; } diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt index 015af3dc..d7d6e8b7 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/utils/StringValue.kt @@ -7,12 +7,13 @@ private fun stringEnumMapper(stringEnum: Strings): String { Strings.AddToSavedPosts -> "Add to saved posts" Strings.AppName -> "Claw" Strings.AvatarContentDescription -> "%1s's avatar" + Strings.ChangeSortingOrder -> "Change sorting order" Strings.HottestPosts -> "Hottest" - Strings.Loading -> "Loading posts…" Strings.NoSavedPost -> "You don't have any saved posts" Strings.OpenComments -> "Open comments" Strings.RefreshPostsContentDescription -> "Refresh posts" Strings.RemoveFromSavedPosts -> "Remove from saved posts" + Strings.SavedPosts -> "Saved" Strings.SubmittedBy -> "submitted by %1s" } }