diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 36e7a206c44..3590b1281be 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -694,6 +694,18 @@ public boolean onOptionsItemSelected(final MenuItem item) { currentInfo.getOriginalUrl()); } return true; + case R.id.menu_item_share_stream: + if (currentInfo != null) { + final Stream stream; + if (currentInfo.getVideoStreams().isEmpty() + && currentInfo.getVideoOnlyStreams().isEmpty()) { + stream = getDefaultAudioStream(); + } else { + stream = getSelectedVideoStream(); + } + ShareUtils.shareUrl(requireContext(), currentInfo.getName(), stream.getUrl()); + } + return true; case R.id.menu_item_openInBrowser: if (currentInfo != null) { ShareUtils.openUrlInBrowser(requireContext(), currentInfo.getOriginalUrl()); @@ -927,10 +939,10 @@ private boolean shouldShowComments() { //////////////////////////////////////////////////////////////////////////*/ private void openBackgroundPlayer(final boolean append) { - AudioStream audioStream = currentInfo.getAudioStreams() - .get(ListHelper.getDefaultAudioFormat(activity, currentInfo.getAudioStreams())); + final AudioStream audioStream = getDefaultAudioStream(); - boolean useExternalAudioPlayer = PreferenceManager.getDefaultSharedPreferences(activity) + final boolean useExternalAudioPlayer = PreferenceManager + .getDefaultSharedPreferences(activity) .getBoolean(activity.getString(R.string.use_external_audio_player_key), false); if (!useExternalAudioPlayer && android.os.Build.VERSION.SDK_INT >= 16) { @@ -1014,6 +1026,20 @@ private VideoStream getSelectedVideoStream() { return sortedVideoStreams != null ? sortedVideoStreams.get(selectedVideoStreamIndex) : null; } + /** + * Get the stream to play when the current stream is an audio-only stream. + * + * This is the audio-only equivalent of getSelectedVideoStream, + * without the ability for the user to select a custom stream quality. + * + * @return AudioStream instance according to user settings + */ + private AudioStream getDefaultAudioStream() { + final List audioStreams = currentInfo.getAudioStreams(); + final int streamIndex = ListHelper.getDefaultAudioFormat(activity, audioStreams); + return audioStreams.get(streamIndex); + } + private void prepareDescription(final Description description) { if (TextUtils.isEmpty(description.getContent()) || description == Description.emptyDescription) { diff --git a/app/src/main/res/menu/video_detail_menu.xml b/app/src/main/res/menu/video_detail_menu.xml index 609b5a08c44..6fd00b13f28 100644 --- a/app/src/main/res/menu/video_detail_menu.xml +++ b/app/src/main/res/menu/video_detail_menu.xml @@ -25,4 +25,10 @@ android:orderInCategory="2" android:title="@string/open_in_browser" app:showAsAction="never"/> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2e79a79b39..5124a3dacb9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,6 +11,7 @@ Open in browser Open in popup mode Share + Share stream link Download Download stream file Search