105 lines
3.8 KiB
Kotlin
105 lines
3.8 KiB
Kotlin
package org.mosad.teapod.ui.components
|
|
|
|
import android.content.Context
|
|
import android.graphics.Color
|
|
import android.graphics.Typeface
|
|
import android.util.AttributeSet
|
|
import android.util.TypedValue
|
|
import android.view.Gravity
|
|
import android.view.LayoutInflater
|
|
import android.view.ViewGroup
|
|
import android.widget.LinearLayout
|
|
import android.widget.TextView
|
|
import androidx.core.view.children
|
|
import org.mosad.teapod.R
|
|
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
|
|
import org.mosad.teapod.ui.activity.player.PlayerViewModel
|
|
import java.util.*
|
|
|
|
// TODO port to DialogFragment
|
|
class LanguageSettingsPlayer @JvmOverloads constructor(
|
|
context: Context,
|
|
attrs: AttributeSet? = null,
|
|
defStyleAttr: Int = 0,
|
|
model: PlayerViewModel? = null
|
|
) : LinearLayout(context, attrs, defStyleAttr) {
|
|
|
|
private val binding = PlayerLanguageSettingsBinding.inflate(LayoutInflater.from(context), this, true)
|
|
var onViewRemovedAction: (() -> Unit)? = null
|
|
|
|
private var selectedLocale = model?.currentLanguage ?: Locale.ROOT
|
|
|
|
init {
|
|
model?.let { m ->
|
|
m.currentPlayback.streams.adaptive_hls.keys.forEach { languageTag ->
|
|
val locale = Locale.forLanguageTag(languageTag)
|
|
addLanguage(locale, locale == m.currentLanguage) { v ->
|
|
selectedLocale = locale
|
|
updateSelectedLanguage(v as TextView)
|
|
}
|
|
}
|
|
}
|
|
|
|
binding.buttonCloseLanguageSettings.setOnClickListener { close() }
|
|
binding.buttonCancel.setOnClickListener { close() }
|
|
binding.buttonSelect.setOnClickListener {
|
|
model?.setLanguage(selectedLocale)
|
|
close()
|
|
}
|
|
}
|
|
|
|
private fun addLanguage(locale: Locale, isSelected: Boolean, onClick: OnClickListener) {
|
|
val text = TextView(context).apply {
|
|
height = 96
|
|
gravity = Gravity.CENTER_VERTICAL
|
|
text = if (locale == Locale.ROOT) context.getString(R.string.no_subtitles) else locale.displayLanguage
|
|
setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
|
|
|
|
if (isSelected) {
|
|
setTextColor(context.resources.getColor(R.color.textPrimaryDark, context.theme))
|
|
setTypeface(null, Typeface.BOLD)
|
|
setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_baseline_check_24, 0, 0, 0)
|
|
compoundDrawablesRelative.getOrNull(0)?.setTint(Color.WHITE)
|
|
compoundDrawablePadding = 12
|
|
} else {
|
|
setTextColor(context.resources.getColor(R.color.textSecondaryDark, context.theme))
|
|
setPadding(75, 0, 0, 0)
|
|
}
|
|
|
|
setOnClickListener(onClick)
|
|
}
|
|
|
|
binding.linearLanguages.addView(text)
|
|
}
|
|
|
|
private fun updateSelectedLanguage(selected: TextView) {
|
|
// rest all tf to not selected style
|
|
binding.linearLanguages.children.forEach { child ->
|
|
if (child is TextView) {
|
|
child.apply {
|
|
setTextColor(context.resources.getColor(R.color.textPrimaryDark, context.theme))
|
|
setTypeface(null, Typeface.NORMAL)
|
|
setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0)
|
|
setPadding(75, 0, 0, 0)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// set selected to selected style
|
|
selected.apply {
|
|
setTextColor(context.resources.getColor(R.color.exo_white, context.theme))
|
|
setTypeface(null, Typeface.BOLD)
|
|
setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_baseline_check_24, 0, 0, 0)
|
|
setPadding(0, 0, 0, 0)
|
|
compoundDrawablesRelative.getOrNull(0)?.setTint(Color.WHITE)
|
|
compoundDrawablePadding = 12
|
|
}
|
|
}
|
|
|
|
private fun close() {
|
|
(this.parent as ViewGroup).removeView(this)
|
|
onViewRemovedAction?.invoke()
|
|
}
|
|
|
|
} |