Skip to content

Commit 7ab1535

Browse files
committed
Revert "Adapt header handling changes from other recyclerview adapters to fix issue #4475 in StatisticsPlaylistFragment"
This reverts commit 2abe71c.
1 parent 3abaf00 commit 7ab1535

4 files changed

Lines changed: 29 additions & 40 deletions

File tree

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import static org.schabi.newpipe.ktx.ViewUtils.animateHideRecyclerViewAllowingScrolling;
2929
import static org.schabi.newpipe.util.ThemeHelper.getItemViewMode;
3030

31-
import java.util.function.Supplier;
32-
3331
/**
3432
* This fragment is design to be used with persistent data such as
3533
* {@link org.schabi.newpipe.database.LocalItem}, and does not cache the data contained
@@ -102,7 +100,7 @@ private void refreshItemViewMode() {
102100
//////////////////////////////////////////////////////////////////////////*/
103101

104102
@Nullable
105-
protected Supplier<View> getListHeaderSupplier() {
103+
protected ViewBinding getListHeader() {
106104
return null;
107105
}
108106

@@ -133,9 +131,9 @@ protected void initViews(final View rootView, final Bundle savedInstanceState) {
133131
itemsList = rootView.findViewById(R.id.items_list);
134132
refreshItemViewMode();
135133

136-
final Supplier<View> listHeaderSupplier = getListHeaderSupplier();
137-
if (listHeaderSupplier != null) {
138-
itemListAdapter.setHeaderSupplier(listHeaderSupplier);
134+
headerRootBinding = getListHeader();
135+
if (headerRootBinding != null) {
136+
itemListAdapter.setHeader(headerRootBinding.getRoot());
139137
}
140138
footerRootBinding = getListFooter();
141139
itemListAdapter.setFooter(footerRootBinding.getRoot());

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

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import android.content.Context;
44
import android.util.Log;
5-
import android.view.LayoutInflater;
65
import android.view.View;
76
import android.view.ViewGroup;
87

@@ -38,7 +37,6 @@
3837
import java.time.format.FormatStyle;
3938
import java.util.ArrayList;
4039
import java.util.List;
41-
import java.util.function.Supplier;
4240

4341
/*
4442
* Created by Christian Schabesberger on 01.08.16.
@@ -84,14 +82,13 @@ public class LocalItemListAdapter extends RecyclerView.Adapter<RecyclerView.View
8482
private static final int REMOTE_PLAYLIST_CARD_HOLDER_TYPE = 0x3002;
8583
private static final int REMOTE_BOOKMARK_PLAYLIST_HOLDER_TYPE = 0x3003;
8684

87-
private final LayoutInflater layoutInflater;
8885
private final LocalItemBuilder localItemBuilder;
8986
private final ArrayList<LocalItem> localItems;
9087
private final HistoryRecordManager recordManager;
9188
private final DateTimeFormatter dateTimeFormatter;
9289

9390
private boolean showFooter = false;
94-
private Supplier<View> headerSupplier = null;
91+
private View header = null;
9592
private View footer = null;
9693
private ItemViewMode itemViewMode = ItemViewMode.LIST;
9794
private boolean useItemHandle = false;
@@ -100,8 +97,6 @@ public LocalItemListAdapter(final Context context) {
10097
recordManager = new HistoryRecordManager(context);
10198
localItemBuilder = new LocalItemBuilder(context);
10299
localItems = new ArrayList<>();
103-
layoutInflater = LayoutInflater.from(context);
104-
105100
dateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
106101
.withLocale(Localization.getPreferredLocale(context));
107102
}
@@ -129,7 +124,7 @@ public void addItems(@Nullable final List<? extends LocalItem> data) {
129124
if (DEBUG) {
130125
Log.d(TAG, "addItems() after > offsetStart = " + offsetStart + ", "
131126
+ "localItems.size() = " + localItems.size() + ", "
132-
+ "header = " + hasHeader() + ", footer = " + footer + ", "
127+
+ "header = " + header + ", footer = " + footer + ", "
133128
+ "showFooter = " + showFooter);
134129
}
135130
notifyItemRangeInserted(offsetStart, data.size());
@@ -149,7 +144,7 @@ public void removeItem(final LocalItem data) {
149144
final int index = localItems.indexOf(data);
150145
if (index != -1) {
151146
localItems.remove(index);
152-
notifyItemRemoved(index + (hasHeader() ? 1 : 0));
147+
notifyItemRemoved(index + (header != null ? 1 : 0));
153148
} else {
154149
// this happens when
155150
// 1) removeItem is called on infoItemDuplicate as in showStreamItemDialog of
@@ -194,9 +189,9 @@ public void setUseItemHandle(final boolean useItemHandle) {
194189
this.useItemHandle = useItemHandle;
195190
}
196191

197-
public void setHeaderSupplier(@Nullable final Supplier<View> headerSupplier) {
198-
final boolean changed = headerSupplier != this.headerSupplier;
199-
this.headerSupplier = headerSupplier;
192+
public void setHeader(final View header) {
193+
final boolean changed = header != this.header;
194+
this.header = header;
200195
if (changed) {
201196
notifyDataSetChanged();
202197
}
@@ -206,10 +201,6 @@ public void setFooter(final View view) {
206201
this.footer = view;
207202
}
208203

209-
protected boolean hasHeader() {
210-
return this.headerSupplier != null;
211-
}
212-
213204
public void showFooter(final boolean show) {
214205
if (DEBUG) {
215206
Log.d(TAG, "showFooter() called with: show = [" + show + "]");
@@ -227,11 +218,11 @@ public void showFooter(final boolean show) {
227218
}
228219

229220
private int adapterOffsetWithoutHeader(final int offset) {
230-
return offset - (hasHeader() ? 1 : 0);
221+
return offset - (header != null ? 1 : 0);
231222
}
232223

233224
private int sizeConsideringHeader() {
234-
return localItems.size() + (hasHeader() ? 1 : 0);
225+
return localItems.size() + (header != null ? 1 : 0);
235226
}
236227

237228
public ArrayList<LocalItem> getItemsList() {
@@ -241,7 +232,7 @@ public ArrayList<LocalItem> getItemsList() {
241232
@Override
242233
public int getItemCount() {
243234
int count = localItems.size();
244-
if (hasHeader()) {
235+
if (header != null) {
245236
count++;
246237
}
247238
if (footer != null && showFooter) {
@@ -251,7 +242,7 @@ public int getItemCount() {
251242
if (DEBUG) {
252243
Log.d(TAG, "getItemCount() called, count = " + count + ", "
253244
+ "localItems.size() = " + localItems.size() + ", "
254-
+ "header = " + hasHeader() + ", footer = " + footer + ", "
245+
+ "header = " + header + ", footer = " + footer + ", "
255246
+ "showFooter = " + showFooter);
256247
}
257248
return count;
@@ -264,9 +255,9 @@ public int getItemViewType(int position) {
264255
Log.d(TAG, "getItemViewType() called with: position = [" + position + "]");
265256
}
266257

267-
if (hasHeader() && position == 0) {
258+
if (header != null && position == 0) {
268259
return HEADER_TYPE;
269-
} else if (hasHeader()) {
260+
} else if (header != null) {
270261
position--;
271262
}
272263
if (footer != null && position == localItems.size() && showFooter) {
@@ -327,7 +318,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull final ViewGroup paren
327318
}
328319
switch (type) {
329320
case HEADER_TYPE:
330-
return new HeaderFooterHolder(headerSupplier.get());
321+
return new HeaderFooterHolder(header);
331322
case FOOTER_TYPE:
332323
return new HeaderFooterHolder(footer);
333324
case LOCAL_PLAYLIST_HOLDER_TYPE:
@@ -375,14 +366,14 @@ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int
375366

376367
if (holder instanceof LocalItemHolder) {
377368
// If header isn't null, offset the items by -1
378-
if (hasHeader()) {
369+
if (header != null) {
379370
position--;
380371
}
381372

382373
((LocalItemHolder) holder)
383374
.updateFromItem(localItems.get(position), recordManager, dateTimeFormatter);
384-
} else if (holder instanceof HeaderFooterHolder && position == 0 && hasHeader()) {
385-
((HeaderFooterHolder) holder).view = headerSupplier.get();
375+
} else if (holder instanceof HeaderFooterHolder && position == 0 && header != null) {
376+
((HeaderFooterHolder) holder).view = header;
386377
} else if (holder instanceof HeaderFooterHolder && position == sizeConsideringHeader()
387378
&& footer != null && showFooter) {
388379
((HeaderFooterHolder) holder).view = footer;
@@ -396,10 +387,10 @@ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, fina
396387
for (final Object payload : payloads) {
397388
if (payload instanceof StreamStateEntity) {
398389
((LocalItemHolder) holder).updateState(localItems
399-
.get(hasHeader() ? position - 1 : position), recordManager);
390+
.get(header == null ? position : position - 1), recordManager);
400391
} else if (payload instanceof Boolean) {
401392
((LocalItemHolder) holder).updateState(localItems
402-
.get(hasHeader() ? position - 1 : position), recordManager);
393+
.get(header == null ? position : position - 1), recordManager);
403394
}
404395
}
405396
} else {

app/src/main/java/org/schabi/newpipe/local/history/StatisticsPlaylistFragment.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import androidx.annotation.NonNull;
1515
import androidx.annotation.Nullable;
16+
import androidx.viewbinding.ViewBinding;
1617

1718
import com.evernote.android.state.State;
1819
import com.google.android.material.snackbar.Snackbar;
@@ -44,7 +45,6 @@
4445
import java.util.Comparator;
4546
import java.util.List;
4647
import java.util.Objects;
47-
import java.util.function.Supplier;
4848

4949
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
5050
import io.reactivex.rxjava3.disposables.CompositeDisposable;
@@ -126,12 +126,12 @@ protected void initViews(final View rootView, final Bundle savedInstanceState) {
126126
}
127127

128128
@Override
129-
protected Supplier<View> getListHeaderSupplier() {
129+
protected ViewBinding getListHeader() {
130130
headerBinding = StatisticPlaylistControlBinding.inflate(activity.getLayoutInflater(),
131131
itemsList, false);
132132
playlistControlBinding = headerBinding.playlistControl;
133133

134-
return headerBinding::getRoot;
134+
return headerBinding;
135135
}
136136

137137
@Override

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import androidx.appcompat.app.AlertDialog;
3030
import androidx.recyclerview.widget.ItemTouchHelper;
3131
import androidx.recyclerview.widget.RecyclerView;
32+
import androidx.viewbinding.ViewBinding;
3233

3334
import com.evernote.android.state.State;
3435
import org.reactivestreams.Subscriber;
@@ -66,7 +67,6 @@
6667
import java.util.Collections;
6768
import java.util.List;
6869
import java.util.concurrent.atomic.AtomicBoolean;
69-
import java.util.function.Supplier;
7070
import java.util.stream.Collectors;
7171

7272
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
@@ -158,14 +158,14 @@ protected void initViews(final View rootView, final Bundle savedInstanceState) {
158158
}
159159

160160
@Override
161-
protected Supplier<View> getListHeaderSupplier() {
161+
protected ViewBinding getListHeader() {
162162
headerBinding = LocalPlaylistHeaderBinding.inflate(activity.getLayoutInflater(), itemsList,
163-
false);
163+
false);
164164
playlistControlBinding = headerBinding.playlistControl;
165165

166166
headerBinding.playlistTitleView.setSelected(true);
167167

168-
return headerBinding::getRoot;
168+
return headerBinding;
169169
}
170170

171171
@Override

0 commit comments

Comments
 (0)