2022-04-15 13:32:16 +02:00
package org.mosad.teapod.ui.activity.player.fragment
2020-12-20 20:21:27 +01:00
2022-04-15 13:32:16 +02:00
import android.content.DialogInterface
2020-12-20 20:21:27 +01:00
import android.graphics.Color
import android.graphics.Typeface
2022-04-15 13:32:16 +02:00
import android.os.Bundle
2020-12-20 20:21:27 +01:00
import android.util.TypedValue
import android.view.Gravity
import android.view.LayoutInflater
2022-04-15 13:32:16 +02:00
import android.view.View
2020-12-20 20:21:27 +01:00
import android.view.ViewGroup
import android.widget.TextView
2020-12-26 20:09:35 +01:00
import androidx.core.view.children
2022-04-15 13:32:16 +02:00
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.ViewModelProvider
2020-12-20 20:21:27 +01:00
import org.mosad.teapod.R
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
2021-02-06 19:02:12 +01:00
import org.mosad.teapod.ui.activity.player.PlayerViewModel
2022-04-15 13:32:16 +02:00
import org.mosad.teapod.util.hideBars
2020-12-27 20:11:01 +01:00
import java.util.*
2020-12-20 20:21:27 +01:00
2022-04-15 13:32:16 +02:00
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 )
2021-12-29 20:51:53 +01:00
}
2020-12-26 20:09:35 +01:00
}
2020-12-20 20:21:27 +01:00
2022-04-15 13:32:16 +02:00
binding . buttonCloseLanguageSettings . setOnClickListener { dismiss ( ) }
binding . buttonCancel . setOnClickListener { dismiss ( ) }
2020-12-26 20:09:35 +01:00
binding . buttonSelect . setOnClickListener {
2022-04-15 13:32:16 +02:00
model . setLanguage ( selectedLocale )
dismiss ( )
2020-12-26 20:09:35 +01:00
}
2022-04-15 13:32:16 +02:00
// initially hide the status and navigation bar
hideBars ( requireDialog ( ) . window , binding . root )
}
override fun onDismiss ( dialog : DialogInterface ) {
super . onDismiss ( dialog )
model . player . play ( )
2020-12-20 20:21:27 +01:00
}
2022-04-15 13:32:16 +02:00
private fun addLanguage ( locale : Locale , isSelected : Boolean , onClick : View . OnClickListener ) {
2020-12-20 20:21:27 +01:00
val text = TextView ( context ) . apply {
height = 96
gravity = Gravity . CENTER _VERTICAL
2021-12-29 20:51:53 +01:00
text = if ( locale == Locale . ROOT ) context . getString ( R . string . no _subtitles ) else locale . displayLanguage
2020-12-20 20:21:27 +01:00
setTextSize ( TypedValue . COMPLEX _UNIT _SP , 16f )
if ( isSelected ) {
2022-04-10 21:24:09 +02:00
setTextColor ( context . resources . getColor ( R . color . textPrimaryDark , context . theme ) )
2020-12-20 20:21:27 +01:00
setTypeface ( null , Typeface . BOLD )
setCompoundDrawablesRelativeWithIntrinsicBounds ( R . drawable . ic _baseline _check _24 , 0 , 0 , 0 )
compoundDrawablesRelative . getOrNull ( 0 ) ?. setTint ( Color . WHITE )
compoundDrawablePadding = 12
} else {
2022-04-10 21:24:09 +02:00
setTextColor ( context . resources . getColor ( R . color . textSecondaryDark , context . theme ) )
2020-12-20 20:21:27 +01:00
setPadding ( 75 , 0 , 0 , 0 )
}
setOnClickListener ( onClick )
}
binding . linearLanguages . addView ( text )
}
2020-12-26 20:09:35 +01:00
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 {
2022-04-15 13:32:16 +02:00
setTextColor ( context . resources . getColor ( R . color . player _white , context . theme ) )
2020-12-26 20:09:35 +01:00
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
}
}
2022-04-15 16:28:15 +02:00
}