From 5dc9f9ce8999d24d760f13ca3341b1c85c563fed Mon Sep 17 00:00:00 2001 From: Yuichiro Kinoshita Date: Fri, 22 Dec 2023 01:05:17 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20context=E3=81=AB=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E4=BE=9D=E5=AD=98=E3=81=97=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common_android/resource/StringResource.kt | 43 +++++++++++++------ .../milktea/common_android/ui/StringHelper.kt | 1 + .../ui/text/DateFormatHelper.kt | 1 + .../src/main/java/StringSourceHelper.kt | 1 + .../note/emojis/EmojiPickerFragment.kt | 1 + .../note/timeline/TimelineErrorHandler.kt | 1 + .../milktea/note/view/ContentFoldingHelper.kt | 1 + .../milktea/note/view/NoteActionHandler.kt | 1 + .../milktea/note/view/StatusMessageHelper.kt | 1 + .../notification/NotificationErrorHandler.kt | 1 + .../NotificationMentionFragment.kt | 1 + .../FollowRequestsErrorHandler.kt | 1 + .../user/profile/UserDetailErrorHandler.kt | 1 + 13 files changed, 43 insertions(+), 12 deletions(-) diff --git a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/resource/StringResource.kt b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/resource/StringResource.kt index b29d119f26..0a5fa83127 100644 --- a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/resource/StringResource.kt +++ b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/resource/StringResource.kt @@ -3,21 +3,23 @@ package net.pantasystem.milktea.common_android.resource import android.content.Context import androidx.annotation.StringRes -sealed class StringSource { - abstract fun getString(context: Context): String +sealed interface StringSource { + fun build(getStringResource: GetStringResource): String - private data class Raw(private val text: String) : StringSource() { - override fun getString(context: Context): String = text + private data class Raw(private val text: String) : StringSource { + + override fun build(getStringResource: GetStringResource): String = text } - private data class Resource(@StringRes private val textRes: Int) : StringSource() { - override fun getString(context: Context): String = context.getString(textRes) + private data class Resource(@StringRes private val textRes: Int) : StringSource { + + override fun build(getStringResource: GetStringResource): String = getStringResource(textRes) } - private class FormatResource(@StringRes private val textRes: Int, private vararg val formatArgs: Any) : StringSource() { - override fun getString(context: Context): String { - val formatArgs = formatArgs.map { if (it is StringSource) it.getString(context) else it }.toTypedArray() - return context.getString(textRes, *formatArgs) + private class FormatResource(@StringRes private val textRes: Int, private vararg val formatArgs: Any) : StringSource { + override fun build(getStringResource: GetStringResource): String { + val formatArgs = formatArgs.map { if (it is StringSource) it.build(getStringResource) else it }.toTypedArray() + return getStringResource(textRes, *formatArgs) } override fun equals(other: Any?): Boolean { @@ -39,8 +41,10 @@ sealed class StringSource { } } - private data class StringSourceList(private val list: List) : StringSource() { - override fun getString(context: Context): String = list.joinToString(separator = "") { it.getString(context) } + private data class StringSourceList(private val list: List) : StringSource { + override fun build(getStringResource: GetStringResource): String { + return list.joinToString(separator = "") { it.build(getStringResource) } + } } operator fun plus(other: StringSource): StringSource = StringSourceList(listOf(this, other)) @@ -52,4 +56,19 @@ sealed class StringSource { operator fun invoke(@StringRes textRes: Int, vararg formatArgs: Any): StringSource = FormatResource(textRes, *formatArgs) } +} + +interface GetStringResource { + operator fun invoke(@StringRes textRes: Int): String + + operator fun invoke(@StringRes textRes: Int, vararg formatArgs: Any): String + +} + +fun StringSource.getString(context: Context): String { + return build(object : GetStringResource { + override fun invoke(textRes: Int): String = context.getString(textRes) + + override fun invoke(textRes: Int, vararg formatArgs: Any): String = context.getString(textRes, *formatArgs) + }) } \ No newline at end of file diff --git a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/StringHelper.kt b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/StringHelper.kt index 12019baaf6..3e946564b2 100644 --- a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/StringHelper.kt +++ b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/StringHelper.kt @@ -3,6 +3,7 @@ package net.pantasystem.milktea.common_android.ui import android.widget.TextView import androidx.databinding.BindingAdapter import net.pantasystem.milktea.common_android.resource.StringSource +import net.pantasystem.milktea.common_android.resource.getString @BindingAdapter("stringSource") fun TextView.setStringSource(source: StringSource?) { diff --git a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/text/DateFormatHelper.kt b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/text/DateFormatHelper.kt index d3d5e2ad0c..d07b5906ab 100644 --- a/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/text/DateFormatHelper.kt +++ b/modules/common_android/src/main/java/net/pantasystem/milktea/common_android/ui/text/DateFormatHelper.kt @@ -9,6 +9,7 @@ import kotlinx.datetime.Instant import net.pantasystem.milktea.common.glide.GlideApp import net.pantasystem.milktea.common.ui.SimpleElapsedTime import net.pantasystem.milktea.common_android.R +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.model.note.Visibility import java.text.SimpleDateFormat import java.util.* diff --git a/modules/common_android_ui/src/main/java/StringSourceHelper.kt b/modules/common_android_ui/src/main/java/StringSourceHelper.kt index c8707804c9..01b6eb8f7a 100644 --- a/modules/common_android_ui/src/main/java/StringSourceHelper.kt +++ b/modules/common_android_ui/src/main/java/StringSourceHelper.kt @@ -1,6 +1,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import net.pantasystem.milktea.common_android.resource.StringSource +import net.pantasystem.milktea.common_android.resource.getString @Composable fun getStringFromStringSource(src: StringSource): String { diff --git a/modules/features/note/src/main/java/net/pantasystem/milktea/note/emojis/EmojiPickerFragment.kt b/modules/features/note/src/main/java/net/pantasystem/milktea/note/emojis/EmojiPickerFragment.kt index ffb2ee4361..b8fbeb820e 100644 --- a/modules/features/note/src/main/java/net/pantasystem/milktea/note/emojis/EmojiPickerFragment.kt +++ b/modules/features/note/src/main/java/net/pantasystem/milktea/note/emojis/EmojiPickerFragment.kt @@ -25,6 +25,7 @@ import kotlinx.coroutines.flow.filterNot import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.tab.TabbedFlexboxListMediator import net.pantasystem.milktea.model.note.reaction.LegacyReaction import net.pantasystem.milktea.model.note.reaction.Reaction diff --git a/modules/features/note/src/main/java/net/pantasystem/milktea/note/timeline/TimelineErrorHandler.kt b/modules/features/note/src/main/java/net/pantasystem/milktea/note/timeline/TimelineErrorHandler.kt index f9078f6ccb..c41dedfe00 100644 --- a/modules/features/note/src/main/java/net/pantasystem/milktea/note/timeline/TimelineErrorHandler.kt +++ b/modules/features/note/src/main/java/net/pantasystem/milktea/note/timeline/TimelineErrorHandler.kt @@ -3,6 +3,7 @@ package net.pantasystem.milktea.note.timeline import android.content.Context import android.widget.Toast import net.pantasystem.milktea.common.APIError +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.APIErrorStringConverter import net.pantasystem.milktea.model.account.UnauthorizedException import net.pantasystem.milktea.note.R diff --git a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/ContentFoldingHelper.kt b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/ContentFoldingHelper.kt index c9c9ed4bd0..fb450e5b1e 100644 --- a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/ContentFoldingHelper.kt +++ b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/ContentFoldingHelper.kt @@ -5,6 +5,7 @@ import android.view.ViewGroup import android.widget.TextView import androidx.core.view.isVisible import androidx.databinding.BindingAdapter +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android.ui.VisibilityHelper.setMemoVisibility import net.pantasystem.milktea.note.viewmodel.CwTextGenerator import net.pantasystem.milktea.note.viewmodel.PlaneNoteViewData diff --git a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/NoteActionHandler.kt b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/NoteActionHandler.kt index fe8b4a679f..b2bc299ed8 100644 --- a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/NoteActionHandler.kt +++ b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/NoteActionHandler.kt @@ -10,6 +10,7 @@ import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.report.ReportDialog import net.pantasystem.milktea.note.NoteEditorActivity import net.pantasystem.milktea.note.dialog.ConfirmDeleteAndEditNoteDialog diff --git a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/StatusMessageHelper.kt b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/StatusMessageHelper.kt index 273d8bc015..69e767ae20 100644 --- a/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/StatusMessageHelper.kt +++ b/modules/features/note/src/main/java/net/pantasystem/milktea/note/view/StatusMessageHelper.kt @@ -7,6 +7,7 @@ import androidx.core.content.ContextCompat import androidx.databinding.BindingAdapter import com.bumptech.glide.Glide import dagger.hilt.android.EntryPointAccessors +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android.ui.text.CustomEmojiDecorator import net.pantasystem.milktea.common_android.ui.text.DrawableEmojiSpan import net.pantasystem.milktea.common_android.ui.text.EmojiAdapter diff --git a/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationErrorHandler.kt b/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationErrorHandler.kt index 6190bb3def..63f6075307 100644 --- a/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationErrorHandler.kt +++ b/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationErrorHandler.kt @@ -3,6 +3,7 @@ package net.pantasystem.milktea.notification import android.content.Context import android.widget.Toast import net.pantasystem.milktea.common.APIError +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.APIErrorStringConverter class NotificationErrorHandler( diff --git a/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationMentionFragment.kt b/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationMentionFragment.kt index 62b030c4b0..581988bdfa 100644 --- a/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationMentionFragment.kt +++ b/modules/features/notification/src/main/java/net/pantasystem/milktea/notification/NotificationMentionFragment.kt @@ -17,6 +17,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import net.pantasystem.milktea.app_store.account.AccountStore import net.pantasystem.milktea.common.ui.ToolbarSetter +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.PageableFragmentFactory import net.pantasystem.milktea.common_android_ui.user.FollowRequestsFragmentFactory import net.pantasystem.milktea.notification.databinding.FragmentNotificationMentionBinding diff --git a/modules/features/user/src/main/java/net/pantasystem/milktea/user/followrequests/FollowRequestsErrorHandler.kt b/modules/features/user/src/main/java/net/pantasystem/milktea/user/followrequests/FollowRequestsErrorHandler.kt index 552f08853a..fa91075598 100644 --- a/modules/features/user/src/main/java/net/pantasystem/milktea/user/followrequests/FollowRequestsErrorHandler.kt +++ b/modules/features/user/src/main/java/net/pantasystem/milktea/user/followrequests/FollowRequestsErrorHandler.kt @@ -3,6 +3,7 @@ package net.pantasystem.milktea.user.followrequests import android.content.Context import android.widget.Toast import net.pantasystem.milktea.common.APIError +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.APIErrorStringConverter import net.pantasystem.milktea.model.account.UnauthorizedException import net.pantasystem.milktea.note.R diff --git a/modules/features/user/src/main/java/net/pantasystem/milktea/user/profile/UserDetailErrorHandler.kt b/modules/features/user/src/main/java/net/pantasystem/milktea/user/profile/UserDetailErrorHandler.kt index 606fc15c55..c4e8085202 100644 --- a/modules/features/user/src/main/java/net/pantasystem/milktea/user/profile/UserDetailErrorHandler.kt +++ b/modules/features/user/src/main/java/net/pantasystem/milktea/user/profile/UserDetailErrorHandler.kt @@ -3,6 +3,7 @@ package net.pantasystem.milktea.user.profile import android.content.Context import android.widget.Toast import net.pantasystem.milktea.common.APIError +import net.pantasystem.milktea.common_android.resource.getString import net.pantasystem.milktea.common_android_ui.APIErrorStringConverter import net.pantasystem.milktea.model.account.UnauthorizedException import net.pantasystem.milktea.note.R