add language settings to player [Part 1]

This commit is contained in:
2020-12-20 20:21:27 +01:00
parent bba642e9e3
commit 00699aaec7
11 changed files with 217 additions and 14 deletions

View File

@ -250,7 +250,11 @@ object AoDParser {
// if highlights is empty, add a random new title
if (highlightsList.isEmpty()) {
highlightsList.add(newTitlesList[Random.nextInt(0, newTitlesList.size)])
if (newTitlesList.isNotEmpty()) {
highlightsList.add(newTitlesList[Random.nextInt(0, newTitlesList.size)])
} else {
highlightsList.add(ItemMedia(0,"", ""))
}
}
}
}

View File

@ -30,6 +30,7 @@ import kotlinx.coroutines.withContext
import org.mosad.teapod.R
import org.mosad.teapod.preferences.Preferences
import org.mosad.teapod.ui.components.EpisodesListPlayer
import org.mosad.teapod.ui.components.LanguageSettingsPlayer
import org.mosad.teapod.util.DataTypes
import java.util.*
import java.util.concurrent.TimeUnit
@ -192,8 +193,9 @@ class PlayerActivity : AppCompatActivity() {
rwd_10.setOnButtonClickListener { rewind() }
ffwd_10.setOnButtonClickListener { fastForward() }
button_next_ep.setOnClickListener { playNextEpisode() }
button_next_ep_c.setOnClickListener { playNextEpisode() }
button_language.setOnClickListener { showLanguageSettings() }
button_episodes.setOnClickListener { showEpisodesList() }
button_next_ep_c.setOnClickListener { playNextEpisode() }
}
private fun initTimeUpdates() {
@ -395,6 +397,17 @@ class PlayerActivity : AppCompatActivity() {
}
player_layout.addView(episodesList)
// hide player controls and pause playback
player.pause()
controller.hide()
}
private fun showLanguageSettings() {
val languageSettings = LanguageSettingsPlayer(this, model = model).apply {
onViewRemovedAction = { player.play() }
}
player_layout.addView(languageSettings)
// hide player controls and pause playback
player.pause()
controller.hideImmediately()

View File

@ -65,6 +65,10 @@ class PlayerViewModel : ViewModel() {
}
}
fun changeLanguage(id: Int) {
println("new Language is ABC with id $id")
}
/**
* update currentEpisode, episodeId, nextEpisode to new episode
* updateWatchedState for the next (now current) episode

View File

@ -0,0 +1,64 @@
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 org.mosad.teapod.R
import org.mosad.teapod.databinding.PlayerLanguageSettingsBinding
import org.mosad.teapod.player.PlayerViewModel
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 // TODO find a better solution for this
init {
addLanguage("primary", true) { model?.changeLanguage(0) }
addLanguage("secondary", false ) { model?.changeLanguage(1) }
binding.buttonCloseLanguageSettings.setOnClickListener { close() }
binding.buttonCancel.setOnClickListener { close() }
}
private fun addLanguage(str: String, isSelected: Boolean, onClick: OnClickListener) {
val text = TextView(context).apply {
height = 96
gravity = Gravity.CENTER_VERTICAL
text = str
setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
if (isSelected) {
setTextColor(context.resources.getColor(R.color.exo_white, 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.textPrimaryDark, context.theme))
setPadding(75, 0, 0, 0)
}
setOnClickListener(onClick)
}
binding.linearLanguages.addView(text)
}
private fun close() {
(this.parent as ViewGroup).removeView(this)
onViewRemovedAction?.invoke()
}
}