From 00699aaec7ce57a07287f0ab7edec4842d83366c Mon Sep 17 00:00:00 2001 From: Jannik Date: Sun, 20 Dec 2020 20:21:27 +0100 Subject: [PATCH] add language settings to player [Part 1] --- app/build.gradle | 2 +- .../java/org/mosad/teapod/parser/AoDParser.kt | 6 +- .../org/mosad/teapod/player/PlayerActivity.kt | 15 ++- .../mosad/teapod/player/PlayerViewModel.kt | 4 + .../ui/components/LanguageSettingsPlayer.kt | 64 ++++++++++++ .../main/res/layout/item_episode_player.xml | 3 +- app/src/main/res/layout/player_controls.xml | 25 ++++- .../main/res/layout/player_episodes_list.xml | 7 +- .../res/layout/player_language_settings.xml | 99 +++++++++++++++++++ app/src/main/res/values-de-rDE/strings.xml | 3 +- app/src/main/res/values/strings.xml | 3 +- 11 files changed, 217 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt create mode 100644 app/src/main/res/layout/player_language_settings.xml diff --git a/app/build.gradle b/app/build.gradle index daecde2..ed80aa9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 30 - buildToolsVersion "30.0.2" + buildToolsVersion "30.0.3" defaultConfig { applicationId "org.mosad.teapod" diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt index b3e7fec..98facbb 100644 --- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt +++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt @@ -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,"", "")) + } } } } diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt index b671f9f..72fbf5f 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/player/PlayerActivity.kt @@ -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() diff --git a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt index 14c9803..b7b61d9 100644 --- a/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/player/PlayerViewModel.kt @@ -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 diff --git a/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt b/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt new file mode 100644 index 0000000..5eb2ace --- /dev/null +++ b/app/src/main/java/org/mosad/teapod/ui/components/LanguageSettingsPlayer.kt @@ -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() + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/item_episode_player.xml b/app/src/main/res/layout/item_episode_player.xml index 7dbd581..da4c9b3 100644 --- a/app/src/main/res/layout/item_episode_player.xml +++ b/app/src/main/res/layout/item_episode_player.xml @@ -1,11 +1,10 @@ + android:padding="7dp"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/player_episodes_list.xml b/app/src/main/res/layout/player_episodes_list.xml index 00f5fb9..b4e5f95 100644 --- a/app/src/main/res/layout/player_episodes_list.xml +++ b/app/src/main/res/layout/player_episodes_list.xml @@ -4,7 +4,9 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#73000000"> + android:background="#73000000" + android:clickable="true" + android:focusable="true"> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index b47ef38..c407343 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -52,8 +52,9 @@ Abspielen/Pause 10 Sekunden vorwärts Nächste Folge - Folge + Sprache Folgen + Folge speichern diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b0cc6b..f8eae25 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,8 +67,9 @@ Next Episode %1$02d:%2$02d %1$d:%2$02d:%3$02d - Episode + Language Episodes + Episode save