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