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 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) } 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 } 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 } } }