diff --git a/app/src/main/java/org/mosad/teapod/MainActivity.kt b/app/src/main/java/org/mosad/teapod/MainActivity.kt
index efc049f..5ae7a4e 100644
--- a/app/src/main/java/org/mosad/teapod/MainActivity.kt
+++ b/app/src/main/java/org/mosad/teapod/MainActivity.kt
@@ -35,6 +35,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.mosad.teapod.parser.AoDParser
import org.mosad.teapod.preferences.EncryptedPreferences
+import org.mosad.teapod.preferences.Preferences
import org.mosad.teapod.ui.components.LoginDialog
import org.mosad.teapod.ui.fragments.*
import org.mosad.teapod.util.StorageController
@@ -104,7 +105,9 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
private fun load() {
// running login and list in parallel does not bring any speed improvements
val time = measureTimeMillis {
- // make sure credentials are set
+ Preferences.load(this)
+
+ // make sure credentials are set
EncryptedPreferences.readCredentials(this)
if (EncryptedPreferences.password.isEmpty()) {
showLoginDialog(true)
diff --git a/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt b/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt
index 7e895c3..d05a3bf 100644
--- a/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt
+++ b/app/src/main/java/org/mosad/teapod/preferences/Preferences.kt
@@ -1,22 +1,40 @@
package org.mosad.teapod.preferences
+import android.content.Context
+import org.mosad.teapod.R
+
object Preferences {
- var login = ""
- internal set
- var password = ""
+ var preferSecondary = false
internal set
+ fun savePreferSecondary(context: Context, preferSecondary: Boolean) {
+ val sharedPref = context.getSharedPreferences(
+ context.getString(R.string.preference_file_key),
+ Context.MODE_PRIVATE
+ )
- fun saveCredentials(login: String, password: String) {
- this.login = login
- this.password = password
+ with(sharedPref.edit()) {
+ putBoolean(context.getString(R.string.save_key_prefer_secondary), preferSecondary)
+ apply()
+ }
- // TODO save
+ this.preferSecondary = preferSecondary
}
- fun load() {
- // TODO
+ /**
+ * initially load the stored values
+ */
+ fun load(context: Context) {
+ val sharedPref = context.getSharedPreferences(
+ context.getString(R.string.preference_file_key),
+ Context.MODE_PRIVATE
+ )
+ preferSecondary = sharedPref.getBoolean(
+ context.getString(R.string.save_key_prefer_secondary), false
+ )
}
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt b/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt
index da90bb6..d5d87e1 100644
--- a/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/fragments/AccountFragment.kt
@@ -13,6 +13,7 @@ import org.mosad.teapod.BuildConfig
import org.mosad.teapod.R
import org.mosad.teapod.parser.AoDParser
import org.mosad.teapod.preferences.EncryptedPreferences
+import org.mosad.teapod.preferences.Preferences
import org.mosad.teapod.ui.components.LoginDialog
class AccountFragment : Fragment() {
@@ -26,6 +27,7 @@ class AccountFragment : Fragment() {
text_account_login.text = EncryptedPreferences.login
text_info_about_desc.text = getString(R.string.info_about_desc, BuildConfig.VERSION_NAME, getString(R.string.build_time))
+ switch_secondary.isChecked = Preferences.preferSecondary
initActions()
}
@@ -51,6 +53,10 @@ class AccountFragment : Fragment() {
.build()
.show()
}
+
+ switch_secondary.setOnClickListener {
+ Preferences.savePreferSecondary(requireContext(), switch_secondary.isChecked)
+ }
}
private fun showLoginDialog(firstTry: Boolean) {
diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt
index e121eac..8bf795c 100644
--- a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt
@@ -17,7 +17,9 @@ import kotlinx.android.synthetic.main.fragment_media.*
import org.mosad.teapod.MainActivity
import org.mosad.teapod.R
import org.mosad.teapod.parser.AoDParser
+import org.mosad.teapod.preferences.Preferences
import org.mosad.teapod.util.DataTypes.MediaType
+import org.mosad.teapod.util.Episode
import org.mosad.teapod.util.Media
import org.mosad.teapod.util.StorageController
import org.mosad.teapod.util.TMDBResponse
@@ -88,8 +90,8 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
private fun initActions() {
button_play.setOnClickListener {
when (media.type) {
- MediaType.MOVIE -> playStream(media.episodes.first().priStreamUrl)
- MediaType.TVSHOW -> playStream(media.episodes.first().priStreamUrl)
+ MediaType.MOVIE -> playStream(media.episodes.first())
+ MediaType.TVSHOW -> playStream(media.episodes.first())
else -> Log.e(javaClass.name, "Wrong Type: $media.type")
}
}
@@ -114,13 +116,7 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
// set onItemClick only in adapter is initialized
if (this::adapterRecEpisodes.isInitialized) {
adapterRecEpisodes.onImageClick = { _, position ->
- // TODO add option to prefer secondary stream
- // try to use secondary stream if primary is missing
- if (media.episodes[position].priStreamUrl.isNotEmpty()) {
- playStream(media.episodes[position].priStreamUrl)
- } else if (media.episodes[position].secStreamUrl.isNotEmpty()) {
- playStream(media.episodes[position].secStreamUrl)
- }
+ playStream(media.episodes[position])
// update watched state
AoDParser.sendCallback(media.episodes[position].watchedCallback)
@@ -130,9 +126,23 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
}
}
- private fun playStream(url: String) {
- Log.d(javaClass.name, "Playing stream: $url")
- (activity as MainActivity).startPlayer(url)
+ /**
+ * Play the media's stream
+ * If prefer secondary or primary is empty and secondary is present (secStreamOmU),
+ * use the secondary stream. Else, if the primary stream is set use the primary stream.
+ */
+ private fun playStream(ep: Episode) {
+ val streamUrl = if ((Preferences.preferSecondary || ep.priStreamUrl.isEmpty()) && ep.secStreamOmU) {
+ ep.secStreamUrl
+ } else if (ep.priStreamUrl.isNotEmpty()) {
+ ep.priStreamUrl
+ } else {
+ Log.e(javaClass.name, "No stream url set.")
+ ""
+ }
+
+ Log.d(javaClass.name, "Playing stream: $streamUrl")
+ (activity as MainActivity).startPlayer(streamUrl)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_baseline_subtitles_24.xml b/app/src/main/res/drawable/ic_baseline_subtitles_24.xml
new file mode 100644
index 0000000..a363555
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_subtitles_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_account.xml b/app/src/main/res/layout/fragment_account.xml
index fc6102c..e72fa30 100644
--- a/app/src/main/res/layout/fragment_account.xml
+++ b/app/src/main/res/layout/fragment_account.xml
@@ -81,6 +81,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml
index 4199f0e..7b56b4f 100644
--- a/app/src/main/res/values-de-rDE/strings.xml
+++ b/app/src/main/res/values-de-rDE/strings.xml
@@ -26,6 +26,9 @@
Version %1$s (%2$s)
Diese App wird unter den Bedingungen der GNU GPL 3 oder höher zur Verfügung gestellt. Weiter Informationen findest du unter: \ngit.mosad.xyz/Seil0/teapod \n\n© 2020 seil0@mosad.xyz
Lizenzen
+ Einstellungen
+ Bevorzuge alternativen Stream
+ Untertitle-Stream verwenden, sofern vorhanden
speichern
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d4e9f2c..52a896b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -35,6 +35,9 @@
Version %1$s (%2$s)
This app is published under the terms and conditions of the GNU GPL 3 or later. For further information visit: \ngit.mosad.xyz/Seil0/teapod \n\n© 2020 seil0@mosad.xyz
Licenses
+ Settings
+ Prefer secondary (sub) stream
+ Use the subtitles stream if present
save
@@ -48,8 +51,10 @@
org.mosad.teapod.encrypted_preferences
+ org.mosad.teapod.preferences
org.mosad.teapod.user_login
org.mosad.teapod.user_password
+ org.mosad.teapod.prefer_secondary
intent_stream_url