Project Wide Utilities: String resource management - devrath/RunTracer GitHub Wiki
UiText.kt
import android.content.Context
import androidx.annotation.StringRes
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
sealed interface UiText {
data class DynamicString(val value: String): UiText
class StringResource(
@StringRes val id: Int,
val args: Array<Any> = arrayOf()
): UiText
@Composable
fun asString(): String {
return when(this) {
is DynamicString -> value
is StringResource -> stringResource(id = id, *args)
}
}
fun asString(context: Context): String {
return when(this) {
is DynamicString -> value
is StringResource -> context.getString(id, *args)
}
}
}
DataErrorToText.kt
fun DataError.asUiText(): UiText {
return when(this) {
DataError.Local.DISK_FULL -> UiText.StringResource(
R.string.error_disk_full
)
DataError.Network.REQUEST_TIMEOUT -> UiText.StringResource(
R.string.error_request_timeout
)
DataError.Network.TOO_MANY_REQUESTS -> UiText.StringResource(
R.string.error_too_many_requests
)
DataError.Network.NO_INTERNET -> UiText.StringResource(
R.string.error_no_internet
)
DataError.Network.PAYLOAD_TOO_LARGE -> UiText.StringResource(
R.string.error_payload_too_large
)
DataError.Network.SERVER_ERROR -> UiText.StringResource(
R.string.error_server_error
)
DataError.Network.SERIALIZATION -> UiText.StringResource(
R.string.error_serialization
)
else -> UiText.StringResource(R.string.error_unknown)
}
}