mihon/app/src/main/java/eu/kanade/tachiyomi/widget/EmptyView.kt

90 lines
2.6 KiB
Kotlin
Raw Normal View History

2016-05-13 09:45:36 -04:00
package eu.kanade.tachiyomi.widget
import android.content.Context
import android.content.res.ColorStateList
import android.graphics.Color
2016-05-13 09:45:36 -04:00
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
2016-05-13 09:45:36 -04:00
import android.widget.RelativeLayout
import androidx.annotation.DrawableRes
2020-03-09 18:59:17 -04:00
import androidx.annotation.StringRes
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.view.isVisible
import com.google.android.material.button.MaterialButton
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.databinding.CommonViewEmptyBinding
import kotlin.random.Random
2016-05-13 09:45:36 -04:00
class EmptyView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
2020-04-25 14:24:45 -04:00
RelativeLayout(context, attrs) {
2016-05-13 09:45:36 -04:00
private val binding: CommonViewEmptyBinding =
CommonViewEmptyBinding.inflate(LayoutInflater.from(context), this, true)
2016-05-13 09:45:36 -04:00
/**
* Hide the information view
*/
fun hide() {
this.isVisible = false
2016-05-13 09:45:36 -04:00
}
/**
* Show the information view
* @param textResource text of information view
*/
fun show(@StringRes textResource: Int, actions: List<Action>? = null) {
show(context.getString(textResource), actions)
}
fun show(message: String, actions: List<Action>? = null) {
binding.textFace.text = getRandomErrorFace()
binding.textLabel.text = message
binding.actionsContainer.removeAllViews()
actions?.forEach {
val button = MaterialButton(ContextThemeWrapper(context, R.style.Theme_Widget_Button_Action)).apply {
layoutParams = LinearLayout.LayoutParams(
0,
LinearLayout.LayoutParams.WRAP_CONTENT,
1f / actions.size
)
backgroundTintList = ColorStateList.valueOf(Color.TRANSPARENT)
stateListAnimator = null
elevation = 0f
setIconResource(it.iconResId)
setText(it.stringResId)
setOnClickListener(it.listener)
}
binding.actionsContainer.addView(button)
}
this.isVisible = true
2020-03-09 18:59:17 -04:00
}
companion object {
private val ERROR_FACES = listOf(
"(・o・;)",
"Σ(ಠ_ಠ)",
"ಥ_ಥ",
"(˘・_・˘)",
"(; ̄Д ̄)",
"(・Д・。"
2020-03-09 18:59:17 -04:00
)
fun getRandomErrorFace(): String {
return ERROR_FACES[Random.nextInt(ERROR_FACES.size)]
}
2016-05-13 09:45:36 -04:00
}
data class Action(
@StringRes val stringResId: Int,
@DrawableRes val iconResId: Int,
val listener: OnClickListener
)
2016-05-13 09:45:36 -04:00
}