Skip to content

Commit 8b6e110

Browse files
Jared234Stypox
authored andcommitted
Fixed the functionality, improved performance & general code cleanup
1 parent f5a1f91 commit 8b6e110

6 files changed

Lines changed: 60 additions & 48 deletions

File tree

app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ default Flowable<List<PlaylistStreamEntity>> listByService(final int serviceId)
5757
+ " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId "
5858
+ " AND " + STREAM_URL + " = :streamURL"
5959
)
60-
Flowable<Integer> getDuplicates(long playlistId, String streamURL);
60+
Flowable<Integer> getDuplicateCount(long playlistId, String streamURL);
6161

6262
@Query("SELECT " + JOIN_PLAYLIST_ID
6363
+ " FROM " + STREAM_TABLE
@@ -67,7 +67,6 @@ default Flowable<List<PlaylistStreamEntity>> listByService(final int serviceId)
6767
)
6868
Flowable<List<Long>> getDuplicatePlaylists(String streamURL);
6969

70-
7170
@Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)"
7271
+ " FROM " + PLAYLIST_STREAM_JOIN_TABLE
7372
+ " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId")

app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.schabi.newpipe.R;
1717
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
1818
import org.schabi.newpipe.database.stream.model.StreamEntity;
19-
import org.schabi.newpipe.fragments.OnScrollBelowItemsListener;
2019
import org.schabi.newpipe.local.LocalItemListAdapter;
2120
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
2221

@@ -28,8 +27,12 @@
2827
public final class PlaylistAppendDialog extends PlaylistDialog {
2928
private static final String TAG = PlaylistAppendDialog.class.getCanonicalName();
3029

30+
private static final float DEFAULT_ALPHA = 1f;
31+
private static final float GRAYED_OUT_ALPHA = 0.3f;
32+
3133
private RecyclerView playlistRecyclerView;
3234
private LocalItemListAdapter playlistAdapter;
35+
private List<Long> duplicateIds;
3336

3437
private final CompositeDisposable playlistDisposables = new CompositeDisposable();
3538

@@ -62,6 +65,9 @@ public void onViewCreated(@NonNull final View view, @Nullable final Bundle saved
6265
final LocalPlaylistManager playlistManager =
6366
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
6467

68+
duplicateIds = playlistManager.getDuplicatePlaylists(getStreamEntities().get(0).getUrl())
69+
.blockingFirst();
70+
6571
playlistAdapter = new LocalItemListAdapter(getActivity());
6672
playlistAdapter.setHasStableIds(true);
6773
playlistAdapter.setSelectedListener(selectedItem -> {
@@ -126,43 +132,43 @@ private void onPlaylistsReceived(@NonNull final List<PlaylistMetadataEntry> play
126132
playlistAdapter.addItems(playlists);
127133
playlistRecyclerView.setVisibility(View.VISIBLE);
128134

129-
playlistRecyclerView.addOnScrollListener(new DefaultItemListOnScrolledDownListener());
135+
playlistRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
136+
@Override
137+
public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx,
138+
final int dy) {
139+
showDuplicateIndicators(recyclerView);
140+
}
141+
});
130142
initDuplicateIndicators(playlistRecyclerView);
131143
}
132144
}
133145

134-
public class DefaultItemListOnScrolledDownListener extends OnScrollBelowItemsListener {
135-
@Override
136-
public void onScrolledDown(final RecyclerView recyclerView) {
137-
showDuplicateIndicators(recyclerView);
138-
}
139-
}
140-
141146
public void initDuplicateIndicators(@NonNull final RecyclerView view) {
142-
view.postDelayed(new Runnable() {
143-
@Override
144-
public void run() {
145-
showDuplicateIndicators(view);
146-
}
147-
}, 50);
148-
}
147+
showDuplicateIndicators(view);
149148

150-
public void showDuplicateIndicators(final RecyclerView view) {
151-
final LocalPlaylistManager playlistManager =
152-
new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext()));
153-
final List<Long> duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities()
154-
.get(0).getUrl()).blockingFirst();
149+
if (!duplicateIds.isEmpty()) {
150+
final View indicatorExplanation = getView()
151+
.findViewById(R.id.playlist_duplicate);
152+
indicatorExplanation.setVisibility(View.VISIBLE);
153+
}
154+
}
155155

156+
public void showDuplicateIndicators(@NonNull final RecyclerView view) {
156157
if (view.getAdapter() == null) {
157158
return;
158159
}
159160

160161
final int count = view.getAdapter().getItemCount();
161162
for (int i = 0; i < count; i++) {
162-
if (view.findViewHolderForAdapterPosition(i) != null
163-
&& duplicateIds.contains(playlistAdapter.getItemId(i))) {
164-
view.findViewHolderForAdapterPosition(i).itemView
165-
.findViewById(R.id.checkmark2).setVisibility(View.VISIBLE);
163+
164+
final RecyclerView.ViewHolder viewHolder = view.findViewHolderForAdapterPosition(i);
165+
if (viewHolder != null) {
166+
if (duplicateIds.contains(view.getAdapter().getItemId(i))) {
167+
viewHolder.itemView.setAlpha(GRAYED_OUT_ALPHA);
168+
} else {
169+
viewHolder.itemView.setAlpha(DEFAULT_ALPHA);
170+
}
171+
166172
}
167173
}
168174
}
@@ -171,10 +177,10 @@ private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager,
171177
@NonNull final PlaylistMetadataEntry playlist,
172178
@NonNull final List<StreamEntity> streams) {
173179

174-
final int numOfDuplicates = manager.getPlaylistDuplicates(playlist.uid,
180+
final int numberOfDuplicates = manager.getPlaylistDuplicateCount(playlist.uid,
175181
streams.get(0).getUrl()).blockingFirst();
176-
if (numOfDuplicates > 0) {
177-
createDuplicateDialog(numOfDuplicates, manager, playlist, streams);
182+
if (numberOfDuplicates > 0) {
183+
createDuplicateDialog(numberOfDuplicates, manager, playlist, streams);
178184
} else {
179185
addStreamToPlaylist(manager, playlist, streams);
180186
}
@@ -197,22 +203,24 @@ private void addStreamToPlaylist(@NonNull final LocalPlaylistManager manager,
197203
playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
198204
.observeOn(AndroidSchedulers.mainThread())
199205
.subscribe(ignored -> successToast.show()));
206+
200207
requireDialog().dismiss();
201208
}
202209

203-
private void createDuplicateDialog(final int duplicates,
210+
private void createDuplicateDialog(final int numberOfDuplicates,
204211
@NonNull final LocalPlaylistManager manager,
205212
@NonNull final PlaylistMetadataEntry playlist,
206213
@NonNull final List<StreamEntity> streams) {
207214
final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity());
208215
builder.setTitle(R.string.duplicate_stream_in_playlist_title);
209216
builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description,
210-
duplicates));
217+
numberOfDuplicates));
211218

212219
builder.setPositiveButton(android.R.string.yes, (dialog, i) -> {
213220
addStreamToPlaylist(manager, playlist, streams);
214221
});
215222
builder.setNeutralButton(R.string.cancel, null);
223+
216224
builder.create().show();
217225
}
218226
}

app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,12 @@ public Flowable<List<PlaylistStreamEntry>> getPlaylistStreams(final long playlis
9191
return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io());
9292
}
9393

94-
public Flowable<Integer> getPlaylistDuplicates(final long playlistId, final String streamURL) {
95-
return playlistStreamTable.getDuplicates(playlistId, streamURL);
94+
public Flowable<Integer> getPlaylistDuplicateCount(final long playlistId,
95+
final String streamURL) {
96+
return playlistStreamTable.getDuplicateCount(playlistId, streamURL);
9697
}
9798

98-
public Flowable<List<Long>> getDuplicatePlaylist(final String streamURL) {
99+
public Flowable<List<Long>> getDuplicatePlaylists(final String streamURL) {
99100
return playlistStreamTable.getDuplicatePlaylists(streamURL);
100101
}
101102

app/src/main/res/layout/dialog_playlists.xml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,26 @@
3434
tools:ignore="RtlHardcoded" />
3535
</RelativeLayout>
3636

37+
<org.schabi.newpipe.views.NewPipeTextView
38+
android:id="@+id/playlist_duplicate"
39+
android:layout_width="match_parent"
40+
android:layout_height="40dp"
41+
android:layout_below="@+id/newPlaylist"
42+
android:text="@string/duplicate_in_playlist"
43+
android:textAppearance="?android:attr/textAppearanceLarge"
44+
android:textSize="15sp"
45+
android:layout_marginStart="10dp"
46+
android:layout_marginEnd="10dp"
47+
android:inputType="textMultiLine"
48+
android:layout_centerHorizontal="true"
49+
android:layout_marginBottom="@dimen/video_item_search_padding"
50+
android:visibility="gone" />
51+
3752
<View
3853
android:id="@+id/separator"
3954
android:layout_width="match_parent"
4055
android:layout_height="1dp"
41-
android:layout_below="@+id/newPlaylist"
56+
android:layout_below="@+id/playlist_duplicate"
4257
android:layout_marginLeft="@dimen/video_item_search_padding"
4358
android:layout_marginRight="@dimen/video_item_search_padding"
4459
android:background="?attr/separator_color" />

app/src/main/res/layout/list_playlist_mini_item.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
43
xmlns:tools="http://schemas.android.com/tools"
54
android:id="@+id/itemRoot"
65
android:layout_width="match_parent"
@@ -22,17 +21,6 @@
2221
android:src="@drawable/placeholder_thumbnail_playlist"
2322
tools:ignore="RtlHardcoded" />
2423

25-
26-
<ImageView
27-
android:id="@+id/checkmark2"
28-
android:layout_width="20dp"
29-
android:layout_height="20dp"
30-
android:layout_alignBottom="@id/itemThumbnailView"
31-
android:layout_marginBottom="-1dp"
32-
android:src="@drawable/ic_done"
33-
android:visibility="gone"
34-
app:tint="#E81111" />
35-
3624
<org.schabi.newpipe.views.NewPipeTextView
3725
android:id="@+id/itemStreamCountView"
3826
android:layout_width="45dp"

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@
432432
<string name="preferred_player_fetcher_notification_message">"Loading requested content"</string>
433433
<!-- Local Playlist -->
434434
<string name="create_playlist">New Playlist</string>
435+
<string name="duplicate_in_playlist">The playlists that are grayed out already contain this item.</string>
435436
<string name="rename_playlist">Rename</string>
436437
<string name="name">Name</string>
437438
<string name="add_to_playlist">Add to playlist</string>

0 commit comments

Comments
 (0)