@ -1,54 +1,75 @@
package org.mosad.teapod.ui.components
package org.mosad.teapod.ui.activity.player.fragment
import android.content.Context
import android.content.DialogInterface
import android.graphics.Color
import android.graphics.Typeface
import android.util.AttributeSet
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.LinearLayout
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.*
// 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 )
}
class LanguageSettingsDialogFragment : DialogFragment ( ) {
private lateinit var model : PlayerViewModel
private lateinit var binding : PlayerLanguageSettingsBinding
private var selectedLocale = Locale . ROOT
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 { close ( ) }
binding . buttonCancel . setOnClickListener { close ( ) }
binding . buttonCloseLanguageSettings . setOnClickListener { dismiss ( ) }
binding . buttonCancel . setOnClickListener { dismiss ( ) }
binding . buttonSelect . setOnClickListener {
model ?. setLanguage ( selectedLocale )
close ( )
model . setLanguage ( selectedLocale )
dismiss ( )
}
// initially hide the status and navigation bar
hideBars ( requireDialog ( ) . window , binding . root )
}
override fun onDismiss ( dialog : DialogInterface ) {
super . onDismiss ( dialog )
model . player . play ( )
}
private fun addLanguage ( locale : Locale , isSelected : Boolean , onClick : OnClickListener ) {
private fun addLanguage ( locale : Locale , isSelected : Boolean , onClick : View . OnClickListener ) {
val text = TextView ( context ) . apply {
height = 96
gravity = Gravity . CENTER _VERTICAL
@ -83,12 +104,11 @@ class LanguageSettingsPlayer @JvmOverloads constructor(
setPadding ( 75 , 0 , 0 , 0 )
}
}
}
// set selected to selected style
selected . apply {
setTextColor ( context . resources . getColor ( R . color . exo _white , context . theme ) )
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 )
@ -96,10 +116,4 @@ class LanguageSettingsPlayer @JvmOverloads constructor(
compoundDrawablePadding = 12
}
}
private fun close ( ) {
( this . parent as ViewGroup ) . removeView ( this )
onViewRemovedAction ?. invoke ( )
}
}