129 lines
4.8 KiB
Kotlin
129 lines
4.8 KiB
Kotlin
package org.mosad.teapod.ui.activity.player.fragment
|
|
|
|
import android.content.DialogInterface
|
|
import android.graphics.Color
|
|
import android.graphics.Typeface
|
|
import android.os.Bundle
|
|
import android.util.TypedValue
|
|
import android.view.Gravity
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.TextView
|
|
import androidx.core.view.children
|
|
import androidx.fragment.app.DialogFragment
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import org.mosad.teapod.R
|
|
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
|
|
import org.mosad.teapod.ui.activity.player.PlayerViewModel
|
|
import org.mosad.teapod.util.hideBars
|
|
import java.util.*
|
|
|
|
class LanguageSettingsDialogFragment : DialogFragment() {
|
|
|
|
private lateinit var model: PlayerViewModel
|
|
private lateinit var binding: PlayerLanguageSettingsBinding
|
|
|
|
private var selectedLocale = Locale.ROOT
|
|
private var selectedView: View? = null
|
|
|
|
companion object {
|
|
const val TAG = "LanguageSettingsDialogFragment"
|
|
}
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setStyle(STYLE_NO_TITLE, R.style.FullScreenDialogStyle)
|
|
model = ViewModelProvider(requireActivity())[PlayerViewModel::class.java]
|
|
selectedLocale = model.currentLanguage
|
|
}
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
|
binding = PlayerLanguageSettingsBinding.inflate(inflater, container, false)
|
|
return binding.root
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
model.currentPlayback.streams.adaptive_hls.keys.forEach { languageTag ->
|
|
val locale = Locale.forLanguageTag(languageTag)
|
|
addLanguage(locale, locale == model.currentLanguage) { v ->
|
|
selectedLocale = locale
|
|
updateSelectedLanguage(v as TextView)
|
|
}
|
|
}
|
|
|
|
binding.buttonCloseLanguageSettings.setOnClickListener { dismiss() }
|
|
binding.buttonCancel.setOnClickListener { dismiss() }
|
|
binding.buttonSelect.setOnClickListener {
|
|
model.setLanguage(selectedLocale)
|
|
dismiss()
|
|
}
|
|
|
|
// initially hide the status and navigation bar
|
|
hideBars(requireDialog().window, binding.root)
|
|
|
|
// scroll to the position of the view, if it's the selected language
|
|
binding.scrollLanguages.post {
|
|
println("top: ${selectedView?.top}")
|
|
binding.scrollLanguages.scrollTo(0, selectedView?.top ?: 0)
|
|
}
|
|
}
|
|
|
|
override fun onDismiss(dialog: DialogInterface) {
|
|
super.onDismiss(dialog)
|
|
model.player.play()
|
|
}
|
|
|
|
private fun addLanguage(locale: Locale, isSelected: Boolean, onClick: View.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
|
|
|
|
selectedView = this
|
|
} 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.player_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
|
|
}
|
|
}
|
|
}
|