diff --git a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt index 4354a21d..b8e78c61 100644 --- a/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt +++ b/app/src/main/java/ani/dantotsu/media/anime/ExoplayerView.kt @@ -1079,17 +1079,17 @@ class ExoplayerView : AppCompatActivity(), Player.Listener, SessionAvailabilityL //Cast if (PrefManager.getVal(PrefName.Cast)) { - playerView.findViewById(R.id.exo_cast).apply { + playerView.findViewById(R.id.exo_cast).apply { visibility = View.VISIBLE - try { - CastButtonFactory.setUpMediaRouteButton(context, this) - dialogFactory = CustomCastThemeFactory() - } catch (e: Exception) { - isCastApiAvailable = false - } - setOnLongClickListener { - cast() - true + if(PrefManager.getVal(PrefName.UseInternalCast)) { + try { + CastButtonFactory.setUpMediaRouteButton(context, this) + dialogFactory = CustomCastThemeFactory() + } catch (e: Exception) { + isCastApiAvailable = false + } + } else { + setCastCallback { cast() } } } } @@ -2004,3 +2004,31 @@ class ExoplayerView : AppCompatActivity(), Player.Listener, SessionAvailabilityL } } } + +class CustomCastButton : MediaRouteButton { + + private var castCallback: (() -> Unit)? = null + + fun setCastCallback(castCallback: () -> Unit) { + this.castCallback = castCallback + } + constructor(context: Context) : super(context) + + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + + constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) + + constructor(context: Context, attrs: AttributeSet, castCallback: () -> Unit) : super(context, attrs) { + this.castCallback = castCallback + } + + + override fun performClick(): Boolean { + return if (PrefManager.getVal(PrefName.UseInternalCast)) { + super.performClick() + } else { + castCallback?.let { it() } + true + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt index 9ae30a27..b7a40da9 100644 --- a/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt +++ b/app/src/main/java/ani/dantotsu/settings/PlayerSettingsActivity.kt @@ -234,6 +234,11 @@ class PlayerSettingsActivity : AppCompatActivity() { PrefManager.setVal(PrefName.Cast, isChecked) } + binding.playerSettingsInternalCast.isChecked = PrefManager.getVal(PrefName.UseInternalCast) + binding.playerSettingsInternalCast.setOnCheckedChangeListener { _, isChecked -> + PrefManager.setVal(PrefName.UseInternalCast, isChecked) + } + binding.playerSettingsRotate.isChecked = PrefManager.getVal(PrefName.RotationPlayer) binding.playerSettingsRotate.setOnCheckedChangeListener { _, isChecked -> PrefManager.setVal(PrefName.RotationPlayer, isChecked) diff --git a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt index 739f57de..3810cf3f 100644 --- a/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt +++ b/app/src/main/java/ani/dantotsu/settings/saving/Preferences.kt @@ -94,6 +94,7 @@ enum class PrefName(val data: Pref) { //TODO: Split this into multiple files SeekTime(Pref(Location.Player, Int::class, 10)), SkipTime(Pref(Location.Player, Int::class, 85)), Cast(Pref(Location.Player, Boolean::class, true)), + UseInternalCast(Pref(Location.Player, Boolean::class, false)), Pip(Pref(Location.Player, Boolean::class, true)), RotationPlayer(Pref(Location.Player, Boolean::class, true)), ContinuedAnime(Pref(Location.Player, List::class, listOf())), diff --git a/app/src/main/res/layout/activity_player_settings.xml b/app/src/main/res/layout/activity_player_settings.xml index 8b76081c..6f7102a5 100644 --- a/app/src/main/res/layout/activity_player_settings.xml +++ b/app/src/main/res/layout/activity_player_settings.xml @@ -1072,6 +1072,28 @@ + + + + - Pinned Sources Import/Export Settings Import Settings + Try Internal Cast (Experimental)