diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index a4d52592f..a382908f0 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -1,5 +1,7 @@ package org.schabi.newpipe.settings; +import static org.schabi.newpipe.ui.components.menu.LongPressMenuSettingsKt.addOrRemoveKodiLongPressAction; + import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; @@ -49,6 +51,8 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { updateSeekOptions(); } else if (getString(R.string.show_higher_resolutions_key).equals(key)) { updateResolutionOptions(); + } else if (getString(R.string.show_play_with_kodi_key).equals(key)) { + addOrRemoveKodiLongPressAction(requireContext()); } }; } diff --git a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressAction.kt b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressAction.kt index 71c487165..6b58896ce 100644 --- a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressAction.kt +++ b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressAction.kt @@ -106,16 +106,6 @@ data class LongPressAction( enabled: () -> Boolean = { true }, action: suspend (context: Context) -> Unit ) = LongPressAction(this, action, enabled) - - companion object { - // ShowChannelDetails is not enabled by default, since navigating to channel details can - // also be done by clicking on the uploader name in the long press menu header - val DefaultEnabledActions: List = listOf( - ShowDetails, Enqueue, EnqueueNext, Background, Popup, BackgroundFromHere, - BackgroundShuffled, Download, AddToPlaylist, Share, OpenInBrowser, MarkAsWatched, - Rename, SetAsPlaylistThumbnail, UnsetPlaylistThumbnail, Delete, Unsubscribe, Remove - ) - } } companion object { @@ -249,11 +239,17 @@ data class LongPressAction( withContext(Dispatchers.IO) { HistoryRecordManager(context).markAsWatched(item).await() } - }, - Type.PlayWithKodi.buildAction { context -> - KoreUtils.playWithKore(context, item.url.toUri()) } - ) + ) + + if (KoreUtils.isServiceSupportedByKore(item.serviceId)) { + listOf( + Type.PlayWithKodi.buildAction( + enabled = { KoreUtils.isServiceSupportedByKore(item.serviceId) } + ) { context -> KoreUtils.playWithKore(context, item.url.toUri()) } + ) + } else { + listOf() + } } /** @@ -264,7 +260,6 @@ data class LongPressAction( fun fromStreamInfoItem( item: StreamInfoItem, queueFromHere: (() -> PlayQueue)? - /* TODO isKodiEnabled: Boolean, */ ): List { return buildPlayerActionList { context -> fetchItemInfoIfSparse(context, item) } + (queueFromHere?.let { buildPlayerFromHereActionList(queueFromHere) } ?: listOf()) + diff --git a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditor.kt b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditor.kt index 36bfd5fa6..c790e8d80 100644 --- a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditor.kt +++ b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditor.kt @@ -114,7 +114,7 @@ fun LongPressMenuEditorPage(onBackClick: () -> Unit) { title = stringResource(R.string.long_press_menu_actions_editor), onBackClick = onBackClick, actions = { - ResetToDefaultsButton(state::resetToDefaults) + ResetToDefaultsButton { state.resetToDefaults(context) } } ) { paddingValues -> // test scrolling on Android TV by adding `.padding(horizontal = 350.dp)` here diff --git a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditorState.kt b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditorState.kt index 89f005105..c1b9abbc0 100644 --- a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditorState.kt +++ b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuEditorState.kt @@ -88,9 +88,9 @@ class LongPressMenuEditorState( }.toList() } - fun resetToDefaults() { + fun resetToDefaults(context: Context) { items.clear() - items.addAll(buildItemsInList(true, LongPressAction.Type.DefaultEnabledActions)) + items.addAll(buildItemsInList(true, getDefaultEnabledLongPressActions(context))) } private fun findItemForOffsetOrClosestInRow(offset: IntOffset): LazyGridItemInfo? { diff --git a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuSettings.kt b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuSettings.kt index be14125dc..16eaddd16 100644 --- a/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuSettings.kt +++ b/app/src/main/java/org/schabi/newpipe/ui/components/menu/LongPressMenuSettings.kt @@ -5,6 +5,25 @@ import android.util.Log import androidx.core.content.edit import androidx.preference.PreferenceManager import org.schabi.newpipe.R +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.AddToPlaylist +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Background +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.BackgroundFromHere +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.BackgroundShuffled +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Delete +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Download +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Enqueue +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.EnqueueNext +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.MarkAsWatched +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.OpenInBrowser +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.PlayWithKodi +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Popup +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Remove +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Rename +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.SetAsPlaylistThumbnail +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Share +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.ShowDetails +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.UnsetPlaylistThumbnail +import org.schabi.newpipe.ui.components.menu.LongPressAction.Type.Unsubscribe private const val TAG: String = "LongPressMenuSettings" @@ -20,12 +39,35 @@ fun storeIsHeaderEnabledToSettings(context: Context, enabled: Boolean) { } } +// ShowChannelDetails is not enabled by default, since navigating to channel details can +// also be done by clicking on the uploader name in the long press menu header. +// PlayWithKodi is only added by default if it is enabled in settings. +private val DefaultEnabledActions: List = listOf( + ShowDetails, Enqueue, EnqueueNext, Background, Popup, BackgroundFromHere, + BackgroundShuffled, Download, AddToPlaylist, Share, OpenInBrowser, MarkAsWatched, + Rename, SetAsPlaylistThumbnail, UnsetPlaylistThumbnail, Delete, Unsubscribe, Remove +) + +private fun getShowPlayWithKodi(context: Context): Boolean { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.show_play_with_kodi_key), false) +} + +fun getDefaultEnabledLongPressActions(context: Context): List { + return if (getShowPlayWithKodi(context)) { + // only include Kodi in the default actions if it is enabled in settings + DefaultEnabledActions + listOf(PlayWithKodi) + } else { + DefaultEnabledActions + } +} + fun loadLongPressActionArrangementFromSettings(context: Context): List { val key = context.getString(R.string.long_press_menu_action_arrangement_key) val items = PreferenceManager.getDefaultSharedPreferences(context) .getString(key, null) if (items == null) { - return LongPressAction.Type.DefaultEnabledActions + return getDefaultEnabledLongPressActions(context) } try { @@ -45,7 +87,7 @@ fun loadLongPressActionArrangementFromSettings(context: Context): List