Saved and favorites indicators in manga lists (Draft implementation)(#1286)
parent
cb5df0d73f
commit
d558c2fcc0
@ -0,0 +1,90 @@
|
||||
package org.koitharu.kotatsu.core.ui.widgets
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.AttributeSet
|
||||
import android.widget.ImageView
|
||||
import android.widget.LinearLayout
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.core.content.withStyledAttributes
|
||||
import androidx.core.view.isVisible
|
||||
import org.koitharu.kotatsu.R
|
||||
|
||||
class IconsView @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
) : LinearLayout(context, attrs) {
|
||||
|
||||
private var iconSize = LinearLayout.LayoutParams.WRAP_CONTENT
|
||||
private var iconSpacing = 0
|
||||
|
||||
val iconsCount: Int
|
||||
get() {
|
||||
var count = 0
|
||||
repeat(childCount) { i ->
|
||||
if (getChildAt(i).isVisible) {
|
||||
count++
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
init {
|
||||
context.withStyledAttributes(attrs, R.styleable.IconsView) {
|
||||
iconSize = getDimensionPixelSize(R.styleable.IconsView_iconSize, iconSize)
|
||||
iconSpacing = getDimensionPixelOffset(R.styleable.IconsView_iconSpacing, iconSpacing)
|
||||
}
|
||||
}
|
||||
|
||||
fun setIcons(icons: Iterable<Drawable>) {
|
||||
var index = 0
|
||||
for (icon in icons) {
|
||||
val imageView = (getChildAt(index) as ImageView?) ?: addImageView()
|
||||
imageView.setImageDrawable(icon)
|
||||
imageView.isVisible = true
|
||||
index++
|
||||
}
|
||||
for (i in index until childCount) {
|
||||
val imageView = getChildAt(i) as? ImageView ?: continue
|
||||
imageView.setImageDrawable(null)
|
||||
imageView.isVisible = false
|
||||
}
|
||||
}
|
||||
|
||||
fun clearIcons() {
|
||||
repeat(childCount) { i ->
|
||||
getChildAt(i).isVisible = false
|
||||
}
|
||||
}
|
||||
|
||||
fun addIcon(drawable: Drawable) {
|
||||
val imageView = getNextImageView()
|
||||
imageView.setImageDrawable(drawable)
|
||||
imageView.isVisible = true
|
||||
}
|
||||
|
||||
fun addIcon(@DrawableRes resId: Int) {
|
||||
val imageView = getNextImageView()
|
||||
imageView.setImageResource(resId)
|
||||
imageView.isVisible = true
|
||||
}
|
||||
|
||||
private fun getNextImageView(): ImageView {
|
||||
repeat(childCount) { i ->
|
||||
val child = getChildAt(i)
|
||||
if (child is ImageView && !child.isVisible) {
|
||||
return child
|
||||
}
|
||||
}
|
||||
return addImageView()
|
||||
}
|
||||
|
||||
private fun addImageView() = ImageView(context).also {
|
||||
it.scaleType = ImageView.ScaleType.FIT_CENTER
|
||||
val lp = LayoutParams(iconSize, iconSize)
|
||||
if (childCount != 0) {
|
||||
lp.marginStart = iconSpacing
|
||||
}
|
||||
addView(it, lp)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners
|
||||
android:bottomRightRadius="4dp"
|
||||
android:topRightRadius="4dp" />
|
||||
<solid android:color="?colorBackgroundFloating" />
|
||||
</shape>
|
||||
Loading…
Reference in New Issue