Skip to content

Commit 0aa08a5

Browse files
committed
Use new item holder
1 parent 3c48825 commit 0aa08a5

6 files changed

Lines changed: 163 additions & 49 deletions

File tree

app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
import org.schabi.newpipe.database.LocalItem;
1414
import org.schabi.newpipe.database.stream.model.StreamStateEntity;
1515
import org.schabi.newpipe.local.history.HistoryRecordManager;
16+
import org.schabi.newpipe.local.holder.LocalBookmarkPlaylistItemHolder;
1617
import org.schabi.newpipe.local.holder.LocalItemHolder;
1718
import org.schabi.newpipe.local.holder.LocalPlaylistGridItemHolder;
1819
import org.schabi.newpipe.local.holder.LocalPlaylistItemHolder;
1920
import org.schabi.newpipe.local.holder.LocalPlaylistStreamGridItemHolder;
2021
import org.schabi.newpipe.local.holder.LocalPlaylistStreamItemHolder;
2122
import org.schabi.newpipe.local.holder.LocalStatisticStreamGridItemHolder;
2223
import org.schabi.newpipe.local.holder.LocalStatisticStreamItemHolder;
24+
import org.schabi.newpipe.local.holder.RemoteBookmarkPlaylistItemHolder;
2325
import org.schabi.newpipe.local.holder.RemotePlaylistGridItemHolder;
2426
import org.schabi.newpipe.local.holder.RemotePlaylistItemHolder;
2527
import org.schabi.newpipe.util.FallbackViewHolder;
@@ -66,6 +68,8 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
6668
private static final int REMOTE_PLAYLIST_HOLDER_TYPE = 0x2001;
6769
private static final int LOCAL_PLAYLIST_GRID_HOLDER_TYPE = 0x2002;
6870
private static final int REMOTE_PLAYLIST_GRID_HOLDER_TYPE = 0x2004;
71+
private static final int LOCAL_BOOKMARK_PLAYLIST_HOLDER_TYPE = 0x2008;
72+
private static final int REMOTE_BOOKMARK_PLAYLIST_HOLDER_TYPE = 0x2010;
6973

7074
private final LocalItemBuilder localItemBuilder;
7175
private final ArrayList<LocalItem> localItems;
@@ -74,6 +78,7 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
7478

7579
private boolean showFooter = false;
7680
private boolean useGridVariant = false;
81+
private boolean useItemHandle = false;
7782
private View header = null;
7883
private View footer = null;
7984

@@ -169,6 +174,10 @@ public void setUseGridVariant(final boolean useGridVariant) {
169174
this.useGridVariant = useGridVariant;
170175
}
171176

177+
public void setUseItemHandle(final boolean useItemHandle) {
178+
this.useItemHandle = useItemHandle;
179+
}
180+
172181
public void setHeader(final View header) {
173182
final boolean changed = header != this.header;
174183
this.header = header;
@@ -247,11 +256,11 @@ public int getItemViewType(int position) {
247256

248257
switch (item.getLocalItemType()) {
249258
case PLAYLIST_LOCAL_ITEM:
250-
return useGridVariant
251-
? LOCAL_PLAYLIST_GRID_HOLDER_TYPE : LOCAL_PLAYLIST_HOLDER_TYPE;
259+
return useItemHandle ? LOCAL_BOOKMARK_PLAYLIST_HOLDER_TYPE : (useGridVariant
260+
? LOCAL_PLAYLIST_GRID_HOLDER_TYPE : LOCAL_PLAYLIST_HOLDER_TYPE);
252261
case PLAYLIST_REMOTE_ITEM:
253-
return useGridVariant
254-
? REMOTE_PLAYLIST_GRID_HOLDER_TYPE : REMOTE_PLAYLIST_HOLDER_TYPE;
262+
return useItemHandle ? REMOTE_BOOKMARK_PLAYLIST_HOLDER_TYPE : (useGridVariant
263+
? REMOTE_PLAYLIST_GRID_HOLDER_TYPE : REMOTE_PLAYLIST_HOLDER_TYPE);
255264

256265
case PLAYLIST_STREAM_ITEM:
257266
return useGridVariant
@@ -283,10 +292,14 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull final ViewGroup paren
283292
return new LocalPlaylistItemHolder(localItemBuilder, parent);
284293
case LOCAL_PLAYLIST_GRID_HOLDER_TYPE:
285294
return new LocalPlaylistGridItemHolder(localItemBuilder, parent);
295+
case LOCAL_BOOKMARK_PLAYLIST_HOLDER_TYPE:
296+
return new LocalBookmarkPlaylistItemHolder(localItemBuilder, parent);
286297
case REMOTE_PLAYLIST_HOLDER_TYPE:
287298
return new RemotePlaylistItemHolder(localItemBuilder, parent);
288299
case REMOTE_PLAYLIST_GRID_HOLDER_TYPE:
289300
return new RemotePlaylistGridItemHolder(localItemBuilder, parent);
301+
case REMOTE_BOOKMARK_PLAYLIST_HOLDER_TYPE:
302+
return new RemoteBookmarkPlaylistItemHolder(localItemBuilder, parent);
290303
case STREAM_PLAYLIST_HOLDER_TYPE:
291304
return new LocalPlaylistStreamItemHolder(localItemBuilder, parent);
292305
case STREAM_PLAYLIST_GRID_HOLDER_TYPE:

app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
import org.schabi.newpipe.error.ErrorInfo;
3232
import org.schabi.newpipe.error.UserAction;
3333
import org.schabi.newpipe.local.BaseLocalListFragment;
34-
import org.schabi.newpipe.local.holder.LocalPlaylistItemHolder;
35-
import org.schabi.newpipe.local.holder.RemotePlaylistItemHolder;
34+
import org.schabi.newpipe.local.holder.LocalBookmarkPlaylistItemHolder;
35+
import org.schabi.newpipe.local.holder.RemoteBookmarkPlaylistItemHolder;
3636
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
3737
import org.schabi.newpipe.local.playlist.RemotePlaylistManager;
3838
import org.schabi.newpipe.util.NavigationHelper;
@@ -53,7 +53,6 @@
5353
import io.reactivex.rxjava3.subjects.PublishSubject;
5454

5555
public final class BookmarkFragment extends BaseLocalListFragment<List<PlaylistLocalItem>, Void> {
56-
// todo: add to playlists, item handle should be invisible
5756

5857
// Save the list 10s after the last change occurred
5958
private static final long SAVE_DEBOUNCE_MILLIS = 10000;
@@ -126,6 +125,8 @@ public void onResume() {
126125
@Override
127126
protected void initViews(final View rootView, final Bundle savedInstanceState) {
128127
super.initViews(rootView, savedInstanceState);
128+
129+
itemListAdapter.setUseItemHandle(true);
129130
}
130131

131132
@Override
@@ -530,15 +531,16 @@ public boolean onMove(@NonNull final RecyclerView recyclerView,
530531
@NonNull final RecyclerView.ViewHolder target) {
531532
if (source.getItemViewType() != target.getItemViewType()
532533
|| itemListAdapter == null) {
533-
// Allow swap LocalPlaylistItemHolder and RemotePlaylistItemHolder.
534+
// Allow swap LocalBookmarkPlaylistItemHolder and
535+
// RemoteBookmarkPlaylistItemHolder.
534536
if (!(
535537
(
536-
(source instanceof LocalPlaylistItemHolder)
537-
|| (source instanceof RemotePlaylistItemHolder)
538+
(source instanceof LocalBookmarkPlaylistItemHolder)
539+
|| (source instanceof RemoteBookmarkPlaylistItemHolder)
538540
)
539541
&& (
540-
(target instanceof LocalPlaylistItemHolder)
541-
|| (target instanceof RemotePlaylistItemHolder)
542+
(target instanceof LocalBookmarkPlaylistItemHolder)
543+
|| (target instanceof RemoteBookmarkPlaylistItemHolder)
542544
)
543545
)) {
544546
return false;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.schabi.newpipe.local.holder;
2+
3+
import android.view.MotionEvent;
4+
import android.view.View;
5+
import android.view.ViewGroup;
6+
7+
import org.schabi.newpipe.R;
8+
import org.schabi.newpipe.database.LocalItem;
9+
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
10+
import org.schabi.newpipe.local.LocalItemBuilder;
11+
import org.schabi.newpipe.local.history.HistoryRecordManager;
12+
import org.schabi.newpipe.util.Localization;
13+
import org.schabi.newpipe.util.PicassoHelper;
14+
15+
import java.time.format.DateTimeFormatter;
16+
17+
public class LocalBookmarkPlaylistItemHolder extends PlaylistItemHolder {
18+
private final View itemHandleView;
19+
20+
public LocalBookmarkPlaylistItemHolder(final LocalItemBuilder infoItemBuilder,
21+
final ViewGroup parent) {
22+
this(infoItemBuilder, R.layout.list_playlist_bookmark_item, parent);
23+
}
24+
25+
LocalBookmarkPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final int layoutId,
26+
final ViewGroup parent) {
27+
super(infoItemBuilder, layoutId, parent);
28+
itemHandleView = itemView.findViewById(R.id.itemHandle);
29+
}
30+
31+
@Override
32+
public void updateFromItem(final LocalItem localItem,
33+
final HistoryRecordManager historyRecordManager,
34+
final DateTimeFormatter dateTimeFormatter) {
35+
if (!(localItem instanceof PlaylistMetadataEntry)) {
36+
return;
37+
}
38+
final PlaylistMetadataEntry item = (PlaylistMetadataEntry) localItem;
39+
40+
itemTitleView.setText(item.name);
41+
itemStreamCountView.setText(Localization.localizeStreamCountMini(
42+
itemStreamCountView.getContext(), item.streamCount));
43+
itemUploaderView.setVisibility(View.INVISIBLE);
44+
45+
PicassoHelper.loadPlaylistThumbnail(item.thumbnailUrl).into(itemThumbnailView);
46+
47+
itemHandleView.setOnTouchListener(getOnTouchListener(item));
48+
49+
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
50+
}
51+
52+
private View.OnTouchListener getOnTouchListener(final PlaylistMetadataEntry item) {
53+
return (view, motionEvent) -> {
54+
view.performClick();
55+
if (itemBuilder != null && itemBuilder.getOnItemSelectedListener() != null
56+
&& motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
57+
itemBuilder.getOnItemSelectedListener().drag(item,
58+
LocalBookmarkPlaylistItemHolder.this);
59+
}
60+
return false;
61+
};
62+
}
63+
}
Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.schabi.newpipe.local.holder;
22

3-
import android.view.MotionEvent;
43
import android.view.View;
54
import android.view.ViewGroup;
65

@@ -15,16 +14,14 @@
1514
import java.time.format.DateTimeFormatter;
1615

1716
public class LocalPlaylistItemHolder extends PlaylistItemHolder {
18-
private final View itemHandleView;
1917

2018
public LocalPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final ViewGroup parent) {
21-
this(infoItemBuilder, R.layout.list_playlist_bookmark_item, parent);
19+
this(infoItemBuilder, R.layout.list_playlist_mini_item, parent);
2220
}
2321

2422
LocalPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final int layoutId,
2523
final ViewGroup parent) {
2624
super(infoItemBuilder, layoutId, parent);
27-
itemHandleView = itemView.findViewById(R.id.itemHandle);
2825
}
2926

3027
@Override
@@ -43,20 +40,6 @@ public void updateFromItem(final LocalItem localItem,
4340

4441
PicassoHelper.loadPlaylistThumbnail(item.thumbnailUrl).into(itemThumbnailView);
4542

46-
itemHandleView.setOnTouchListener(getOnTouchListener(item));
47-
4843
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
4944
}
50-
51-
private View.OnTouchListener getOnTouchListener(final PlaylistMetadataEntry item) {
52-
return (view, motionEvent) -> {
53-
view.performClick();
54-
if (itemBuilder != null && itemBuilder.getOnItemSelectedListener() != null
55-
&& motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
56-
itemBuilder.getOnItemSelectedListener().drag(item,
57-
LocalPlaylistItemHolder.this);
58-
}
59-
return false;
60-
};
61-
}
6245
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.schabi.newpipe.local.holder;
2+
3+
import android.text.TextUtils;
4+
import android.view.MotionEvent;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
8+
import org.schabi.newpipe.R;
9+
import org.schabi.newpipe.database.LocalItem;
10+
import org.schabi.newpipe.database.playlist.model.PlaylistRemoteEntity;
11+
import org.schabi.newpipe.extractor.NewPipe;
12+
import org.schabi.newpipe.local.LocalItemBuilder;
13+
import org.schabi.newpipe.local.history.HistoryRecordManager;
14+
import org.schabi.newpipe.util.Localization;
15+
import org.schabi.newpipe.util.PicassoHelper;
16+
17+
import java.time.format.DateTimeFormatter;
18+
19+
public class RemoteBookmarkPlaylistItemHolder extends PlaylistItemHolder {
20+
private final View itemHandleView;
21+
22+
public RemoteBookmarkPlaylistItemHolder(final LocalItemBuilder infoItemBuilder,
23+
final ViewGroup parent) {
24+
this(infoItemBuilder, R.layout.list_playlist_bookmark_item, parent);
25+
}
26+
27+
RemoteBookmarkPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final int layoutId,
28+
final ViewGroup parent) {
29+
super(infoItemBuilder, layoutId, parent);
30+
itemHandleView = itemView.findViewById(R.id.itemHandle);
31+
}
32+
33+
@Override
34+
public void updateFromItem(final LocalItem localItem,
35+
final HistoryRecordManager historyRecordManager,
36+
final DateTimeFormatter dateTimeFormatter) {
37+
if (!(localItem instanceof PlaylistRemoteEntity)) {
38+
return;
39+
}
40+
final PlaylistRemoteEntity item = (PlaylistRemoteEntity) localItem;
41+
42+
itemTitleView.setText(item.getName());
43+
itemStreamCountView.setText(Localization.localizeStreamCountMini(
44+
itemStreamCountView.getContext(), item.getStreamCount()));
45+
// Here is where the uploader name is set in the bookmarked playlists library
46+
if (!TextUtils.isEmpty(item.getUploader())) {
47+
itemUploaderView.setText(Localization.concatenateStrings(item.getUploader(),
48+
NewPipe.getNameOfService(item.getServiceId())));
49+
} else {
50+
itemUploaderView.setText(NewPipe.getNameOfService(item.getServiceId()));
51+
}
52+
53+
PicassoHelper.loadPlaylistThumbnail(item.getThumbnailUrl()).into(itemThumbnailView);
54+
55+
itemHandleView.setOnTouchListener(getOnTouchListener(item));
56+
57+
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
58+
}
59+
60+
private View.OnTouchListener getOnTouchListener(final PlaylistRemoteEntity item) {
61+
return (view, motionEvent) -> {
62+
view.performClick();
63+
if (itemBuilder != null && itemBuilder.getOnItemSelectedListener() != null
64+
&& motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
65+
itemBuilder.getOnItemSelectedListener().drag(item,
66+
RemoteBookmarkPlaylistItemHolder.this);
67+
}
68+
return false;
69+
};
70+
}
71+
}

app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistItemHolder.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.schabi.newpipe.local.holder;
22

33
import android.text.TextUtils;
4-
import android.view.MotionEvent;
5-
import android.view.View;
64
import android.view.ViewGroup;
75

86
import org.schabi.newpipe.R;
@@ -17,17 +15,15 @@
1715
import java.time.format.DateTimeFormatter;
1816

1917
public class RemotePlaylistItemHolder extends PlaylistItemHolder {
20-
private final View itemHandleView;
2118

2219
public RemotePlaylistItemHolder(final LocalItemBuilder infoItemBuilder,
2320
final ViewGroup parent) {
24-
this(infoItemBuilder, R.layout.list_playlist_bookmark_item, parent);
21+
this(infoItemBuilder, R.layout.list_playlist_mini_item, parent);
2522
}
2623

2724
RemotePlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final int layoutId,
2825
final ViewGroup parent) {
2926
super(infoItemBuilder, layoutId, parent);
30-
itemHandleView = itemView.findViewById(R.id.itemHandle);
3127
}
3228

3329
@Override
@@ -52,20 +48,6 @@ public void updateFromItem(final LocalItem localItem,
5248

5349
PicassoHelper.loadPlaylistThumbnail(item.getThumbnailUrl()).into(itemThumbnailView);
5450

55-
itemHandleView.setOnTouchListener(getOnTouchListener(item));
56-
5751
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
5852
}
59-
60-
private View.OnTouchListener getOnTouchListener(final PlaylistRemoteEntity item) {
61-
return (view, motionEvent) -> {
62-
view.performClick();
63-
if (itemBuilder != null && itemBuilder.getOnItemSelectedListener() != null
64-
&& motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
65-
itemBuilder.getOnItemSelectedListener().drag(item,
66-
RemotePlaylistItemHolder.this);
67-
}
68-
return false;
69-
};
70-
}
7153
}

0 commit comments

Comments
 (0)