mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2024-09-30 16:00:50 +00:00
Address review comments
- Removed the setting item to update the playlist sharing preference. - Removed the option to save user's playlist sharing preference. Video demo: - https://github.com/TeamNewPipe/NewPipe/assets/87667048/5ac5ab6f-163d-4407-bd67-a078a8b55bbb PR Commit Message Add playlist name and video name in playlist sharing content - Currently, only a list of videos separated by newline are added in the share content. - This makes it difficult to identify a specific video in a list of Urls. - Used string resources for the sharing content formats. - Added a confirmation dialog for users to choose between sharing playlist formats. - Added Playlist name as the header and corresponding video name for each video url in following format. Playlist - Music1: https://media-url1 - Music2: https://media-url2 - Music3: https://media-url3 Screenshots: | Before | After | | --- | --- | | <img src="https://github.com/TeamNewPipe/NewPipe/assets/87667048/fa7b27b2-91d6-491d-8f93-a8b447263de6" width=320> | <img src="https://github.com/TeamNewPipe/NewPipe/assets/87667048/e7ddde18-1d3a-4ccb-8c35-f5bf14e48bec" width=320> | Video demo: - https://github.com/TeamNewPipe/NewPipe/assets/87667048/5ac5ab6f-163d-4407-bd67-a078a8b55bbb
This commit is contained in:
parent
118ed48a89
commit
9b48adbc75
@ -5,7 +5,6 @@ import static org.schabi.newpipe.ktx.ViewUtils.animate;
|
|||||||
import static org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout;
|
import static org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
@ -23,7 +22,6 @@ import android.widget.Toast;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.preference.PreferenceManager;
|
|
||||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import androidx.viewbinding.ViewBinding;
|
import androidx.viewbinding.ViewBinding;
|
||||||
@ -38,7 +36,6 @@ import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
|
|||||||
import org.schabi.newpipe.database.playlist.model.PlaylistEntity;
|
import org.schabi.newpipe.database.playlist.model.PlaylistEntity;
|
||||||
import org.schabi.newpipe.database.stream.model.StreamEntity;
|
import org.schabi.newpipe.database.stream.model.StreamEntity;
|
||||||
import org.schabi.newpipe.databinding.DialogEditTextBinding;
|
import org.schabi.newpipe.databinding.DialogEditTextBinding;
|
||||||
import org.schabi.newpipe.databinding.DialogSharePlaylistBinding;
|
|
||||||
import org.schabi.newpipe.databinding.LocalPlaylistHeaderBinding;
|
import org.schabi.newpipe.databinding.LocalPlaylistHeaderBinding;
|
||||||
import org.schabi.newpipe.databinding.PlaylistControlBinding;
|
import org.schabi.newpipe.databinding.PlaylistControlBinding;
|
||||||
import org.schabi.newpipe.error.ErrorInfo;
|
import org.schabi.newpipe.error.ErrorInfo;
|
||||||
@ -54,8 +51,8 @@ import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
|
|||||||
import org.schabi.newpipe.util.Localization;
|
import org.schabi.newpipe.util.Localization;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.OnClickGesture;
|
import org.schabi.newpipe.util.OnClickGesture;
|
||||||
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
|
||||||
import org.schabi.newpipe.util.PlayButtonHelper;
|
import org.schabi.newpipe.util.PlayButtonHelper;
|
||||||
|
import org.schabi.newpipe.util.external_communication.ShareUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -102,8 +99,6 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
/* Flag to prevent simultaneous rewrites of the playlist */
|
/* Flag to prevent simultaneous rewrites of the playlist */
|
||||||
private boolean isRewritingPlaylist = false;
|
private boolean isRewritingPlaylist = false;
|
||||||
|
|
||||||
private SharedPreferences sharedPreferences;
|
|
||||||
|
|
||||||
public static LocalPlaylistFragment getInstance(final long playlistId, final String name) {
|
public static LocalPlaylistFragment getInstance(final long playlistId, final String name) {
|
||||||
final LocalPlaylistFragment instance = new LocalPlaylistFragment();
|
final LocalPlaylistFragment instance = new LocalPlaylistFragment();
|
||||||
instance.setInitialData(playlistId, name);
|
instance.setInitialData(playlistId, name);
|
||||||
@ -124,7 +119,6 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
|
|
||||||
isLoadingComplete = new AtomicBoolean();
|
isLoadingComplete = new AtomicBoolean();
|
||||||
isModified = new AtomicBoolean();
|
isModified = new AtomicBoolean();
|
||||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -352,12 +346,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(final MenuItem item) {
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
if (item.getItemId() == R.id.menu_item_share_playlist) {
|
if (item.getItemId() == R.id.menu_item_share_playlist) {
|
||||||
if (!sharedPreferences.getBoolean(requireContext().getString(
|
|
||||||
R.string.remember_local_playlist_sharing_option_key), false)) {
|
|
||||||
createShareConfirmationDialog();
|
createShareConfirmationDialog();
|
||||||
} else {
|
|
||||||
sharePlaylist();
|
|
||||||
}
|
|
||||||
} else if (item.getItemId() == R.id.menu_item_rename_playlist) {
|
} else if (item.getItemId() == R.id.menu_item_rename_playlist) {
|
||||||
createRenameDialog();
|
createRenameDialog();
|
||||||
} else if (item.getItemId() == R.id.menu_item_remove_watched) {
|
} else if (item.getItemId() == R.id.menu_item_remove_watched) {
|
||||||
@ -385,16 +374,19 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Share the playlist as a newline-separated list of stream URLs and video names.
|
* Shares the playlist as a list of stream URLs if {@code shouldSharePlaylistDetails} is
|
||||||
|
* set to {@code false}. Shares the playlist name along with a list of video titles and URLs
|
||||||
|
* if {@code shouldSharePlaylistDetails} is set to {@code true}.
|
||||||
|
*
|
||||||
|
* @param shouldSharePlaylistDetails Whether the playlist details should be included in the
|
||||||
|
* shared content.
|
||||||
*/
|
*/
|
||||||
private void sharePlaylist() {
|
private void sharePlaylist(final boolean shouldSharePlaylistDetails) {
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
if (context == null) {
|
if (context == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean shouldSharePlaylistDetails = sharedPreferences.getBoolean(
|
|
||||||
context.getString(R.string.share_playlist_with_details_key), false);
|
|
||||||
disposables.add(playlistManager.getPlaylistStreams(playlistId)
|
disposables.add(playlistManager.getPlaylistStreams(playlistId)
|
||||||
.flatMapSingle(playlist -> Single.just(playlist.stream()
|
.flatMapSingle(playlist -> Single.just(playlist.stream()
|
||||||
.map(PlaylistStreamEntry::getStreamEntity)
|
.map(PlaylistStreamEntry::getStreamEntity)
|
||||||
@ -875,34 +867,17 @@ public class LocalPlaylistFragment extends BaseLocalListFragment<List<PlaylistSt
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final DialogSharePlaylistBinding dialogBinding = DialogSharePlaylistBinding
|
|
||||||
.inflate(getLayoutInflater());
|
|
||||||
|
|
||||||
new AlertDialog.Builder(getContext())
|
new AlertDialog.Builder(getContext())
|
||||||
.setTitle(R.string.share_playlist)
|
.setTitle(R.string.share_playlist)
|
||||||
|
.setMessage(R.string.share_playlist_with_details_message)
|
||||||
.setCancelable(true)
|
.setCancelable(true)
|
||||||
.setView(dialogBinding.getRoot())
|
|
||||||
.setPositiveButton(R.string.share_playlist_with_details, (dialog, which) -> {
|
.setPositiveButton(R.string.share_playlist_with_details, (dialog, which) -> {
|
||||||
savePreferencesAndSharePlaylist(
|
sharePlaylist(/* shouldSharePlaylistDetails= */ true);
|
||||||
dialogBinding.rememberChoiceCheckBox.isChecked(), true);
|
|
||||||
})
|
})
|
||||||
.setNegativeButton(R.string.share_playlist_with_list, (dialog, which) -> {
|
.setNegativeButton(R.string.share_playlist_with_list, (dialog, which) -> {
|
||||||
savePreferencesAndSharePlaylist(
|
sharePlaylist(/* shouldSharePlaylistDetails= */ false);
|
||||||
dialogBinding.rememberChoiceCheckBox.isChecked(), false);
|
|
||||||
})
|
})
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void savePreferencesAndSharePlaylist(final boolean rememberPlaylistSharingOption,
|
|
||||||
final boolean sharePlaylistWithDetails) {
|
|
||||||
sharedPreferences.edit()
|
|
||||||
.putBoolean(requireContext().getString(
|
|
||||||
R.string.remember_local_playlist_sharing_option_key),
|
|
||||||
rememberPlaylistSharingOption)
|
|
||||||
.putBoolean(requireContext().getString(
|
|
||||||
R.string.share_playlist_with_details_key), sharePlaylistWithDetails)
|
|
||||||
.apply();
|
|
||||||
sharePlaylist();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:id="@+id/itemRoot"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:clickable="false"
|
|
||||||
android:paddingStart="@dimen/video_item_search_padding"
|
|
||||||
android:paddingTop="@dimen/video_item_search_padding"
|
|
||||||
android:paddingEnd="@dimen/video_item_search_padding">
|
|
||||||
|
|
||||||
<org.schabi.newpipe.views.NewPipeTextView
|
|
||||||
android:id="@+id/sharePlaylistMessageText"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:scrollHorizontally="true"
|
|
||||||
android:text="@string/share_playlist_with_details_message"
|
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
|
||||||
android:textSize="@dimen/channel_item_detail_title_text_size" />
|
|
||||||
|
|
||||||
<CheckBox
|
|
||||||
android:id="@+id/rememberChoiceCheckBox"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@id/sharePlaylistMessageText"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:text="@string/remember_my_choice" />
|
|
||||||
</RelativeLayout>
|
|
@ -24,8 +24,6 @@
|
|||||||
<string name="screen_brightness_timestamp_key">screen_brightness_timestamp_key</string>
|
<string name="screen_brightness_timestamp_key">screen_brightness_timestamp_key</string>
|
||||||
<string name="clear_queue_confirmation_key">clear_queue_confirmation_key</string>
|
<string name="clear_queue_confirmation_key">clear_queue_confirmation_key</string>
|
||||||
<string name="ignore_hardware_media_buttons_key">ignore_hardware_media_buttons_key</string>
|
<string name="ignore_hardware_media_buttons_key">ignore_hardware_media_buttons_key</string>
|
||||||
<string name="share_playlist_with_details_key">share_playlist_with_details_key</string>
|
|
||||||
<string name="remember_local_playlist_sharing_option_key">remember_local_playlist_sharing_option_key</string>
|
|
||||||
|
|
||||||
<string name="popup_saved_width_key">popup_saved_width</string>
|
<string name="popup_saved_width_key">popup_saved_width</string>
|
||||||
<string name="popup_saved_x_key">popup_saved_x</string>
|
<string name="popup_saved_x_key">popup_saved_x</string>
|
||||||
|
@ -836,8 +836,6 @@
|
|||||||
<string name="share_playlist_with_details_message">Share playlist with details such as playlist name and video titles or as a simple list of video URLs</string>
|
<string name="share_playlist_with_details_message">Share playlist with details such as playlist name and video titles or as a simple list of video URLs</string>
|
||||||
<string name="share_playlist_with_details">Share with details</string>
|
<string name="share_playlist_with_details">Share with details</string>
|
||||||
<string name="share_playlist_with_list">Share URL list</string>
|
<string name="share_playlist_with_list">Share URL list</string>
|
||||||
<string name="remember_my_choice">Remember my choice</string>
|
|
||||||
<string name="share_playlist_with_details_settings_item">Share playlist with details such as playlist name and video titles</string>
|
|
||||||
<string name="video_details_list_item">- %s: %s</string>
|
<string name="video_details_list_item">- %s: %s</string>
|
||||||
<string name="share_playlist_content_details">%s\n%s</string>
|
<string name="share_playlist_content_details">%s\n%s</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -249,13 +249,5 @@
|
|||||||
android:title="@string/ignore_hardware_media_buttons_title"
|
android:title="@string/ignore_hardware_media_buttons_title"
|
||||||
app:singleLineTitle="false"
|
app:singleLineTitle="false"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
android:defaultValue="false"
|
|
||||||
android:key="@string/share_playlist_with_details_key"
|
|
||||||
android:summary="@string/share_playlist_with_details_settings_item"
|
|
||||||
android:title="@string/share_playlist"
|
|
||||||
app:singleLineTitle="false"
|
|
||||||
app:iconSpaceReserved="false" />
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
Loading…
Reference in New Issue
Block a user