From f3cac7cac8c2e51467d3f3b4347fa766c30f9367 Mon Sep 17 00:00:00 2001 From: Ahmad Ansori Palembani Date: Tue, 24 Dec 2024 07:05:01 +0700 Subject: [PATCH] refactor: Transform LocalSource icon from XML vector to ImageVector --- .../source/browse/BrowseSourceController.kt | 5 ++- .../eu/kanade/tachiyomi/widget/EmptyView.kt | 29 +++----------- .../component/icons/LocalSource.kt | 39 +++++++++++++++++++ 3 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 app/src/main/java/yokai/presentation/component/icons/LocalSource.kt diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt index cbf0973b0c..89989372e0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt @@ -69,6 +69,7 @@ import kotlinx.coroutines.launch import uy.kohesive.injekt.injectLazy import yokai.domain.manga.interactor.GetManga import yokai.i18n.MR +import yokai.presentation.component.icons.LocalSource import yokai.util.lang.getString /** @@ -607,9 +608,9 @@ open class BrowseSourceController(bundle: Bundle) : binding.emptyView.show( if (presenter.source is HttpSource) { - EmptyView.Image.Vector(Icons.Filled.ExploreOff) + Icons.Filled.ExploreOff } else { - EmptyView.Image.ResourceVector(R.drawable.ic_local_library_24dp) + Icons.Filled.LocalSource }, message, actions, diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/EmptyView.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/EmptyView.kt index 7a419059d3..c62ddbcaa8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/EmptyView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/EmptyView.kt @@ -14,7 +14,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.AbstractComposeView import androidx.compose.ui.platform.ViewCompositionStrategy -import androidx.compose.ui.res.vectorResource import androidx.core.view.isVisible import dev.icerock.moko.resources.StringResource import eu.kanade.tachiyomi.util.isTablet @@ -28,7 +27,7 @@ class EmptyView @JvmOverloads constructor( defStyleAttr: Int = 0, ) : AbstractComposeView(context, attrs, defStyleAttr) { - private var image by mutableStateOf(Image.Vector(Icons.Filled.Download)) + private var image by mutableStateOf(Icons.Filled.Download) private var message by mutableStateOf("") private var actions by mutableStateOf(emptyList()) @@ -37,19 +36,11 @@ class EmptyView @JvmOverloads constructor( setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool) } - @Composable - fun image(): ImageVector { - return when (image) { - is Image.Vector -> (image as Image.Vector).image - is Image.ResourceVector -> ImageVector.vectorResource((image as Image.ResourceVector).id) - } - } - @Composable override fun Content() { YokaiTheme { EmptyScreen( - image = image(), + image = image, message = message, isTablet = isTablet(), actions = actions, @@ -69,7 +60,7 @@ class EmptyView @JvmOverloads constructor( * @param textResource text of information view */ fun show(image: ImageVector, textResource: StringResource, actions: List = emptyList()) { - show(Image.Vector(image), context.getString(textResource), actions) + show(image, context.getString(textResource), actions) } /** @@ -77,12 +68,7 @@ class EmptyView @JvmOverloads constructor( * @param textResource text of information view */ fun show(image: ImageVector, @StringRes textResource: Int, actions: List = emptyList()) { - show(Image.Vector(image), context.getString(textResource), actions) - } - - @Deprecated("Use EmptyView.Image instead of passing ImageVector directly") - fun show(image: ImageVector, message: String, actions: List = emptyList()) { - show(Image.Vector(image), message, actions) + show(image, context.getString(textResource), actions) } /** @@ -90,7 +76,7 @@ class EmptyView @JvmOverloads constructor( * @param drawable icon of information view * @param textResource text of information view */ - fun show(image: Image, message: String, actions: List = emptyList()) { + fun show(image: ImageVector, message: String, actions: List = emptyList()) { this.image = image this.message = message this.actions = actions @@ -101,9 +87,4 @@ class EmptyView @JvmOverloads constructor( val resId: StringResource, val listener: () -> Unit, ) - - sealed class Image { - data class Vector(val image: ImageVector) : Image() - data class ResourceVector(val id: Int) : Image() - } } diff --git a/app/src/main/java/yokai/presentation/component/icons/LocalSource.kt b/app/src/main/java/yokai/presentation/component/icons/LocalSource.kt new file mode 100644 index 0000000000..8d579b2cc1 --- /dev/null +++ b/app/src/main/java/yokai/presentation/component/icons/LocalSource.kt @@ -0,0 +1,39 @@ +package yokai.presentation.component.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.path +import androidx.compose.ui.unit.dp + +private var _localSource: ImageVector? = null + +val Icons.Filled.LocalSource: ImageVector get() { + if (_localSource != null) return _localSource!! + _localSource = ImageVector.Builder( + name = "localSource", + defaultWidth = 24.0.dp, + defaultHeight = 24.0.dp, + viewportWidth = 24.0f, + viewportHeight = 24.0f, + ).apply { + path(fill = SolidColor(Color.Black)) { + moveTo(12f, 11.55f) + curveTo(9.64f, 9.35f, 6.48f, 8f, 3f, 8f) + verticalLineToRelative(11f) + curveToRelative(3.48f, 0f, 6.64f, 1.35f, 9f, 3.55f) + curveToRelative(2.36f, -2.19f, 5.52f, -3.55f, 9f, -3.55f) + verticalLineTo(8f) + curveToRelative(-3.48f, 0f, -6.64f, 1.35f, -9f, 3.55f) + close() + moveTo(12f, 8f) + curveToRelative(1.66f, 0f, 3f, -1.34f, 3f, -3f) + reflectiveCurveToRelative(-1.34f, -3f, -3f, -3f) + reflectiveCurveToRelative(-3f, 1.34f, -3f, 3f) + reflectiveCurveToRelative(1.34f, 3f, 3f, 3f) + close() + } + }.build() + return _localSource!! +}