Optimize keep and history

release
jhengazuki 8 months ago
parent bef28f7d5a
commit 51e84aaf8c
  1. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 32
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeepAdapter.java
  3. 28
      app/src/main/java/com/fongmi/android/tv/ui/adapter/diff/BaseDiffCallback.java
  4. 18
      app/src/main/java/com/fongmi/android/tv/ui/adapter/diff/HistoryDiffCallback.java
  5. 18
      app/src/main/java/com/fongmi/android/tv/ui/adapter/diff/KeepDiffCallback.java

@ -43,6 +43,7 @@ import com.fongmi.android.tv.impl.ChainTask;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.adapter.diff.HistoryDiffCallback;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomSelector;
@ -266,7 +267,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
if (renew) mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this));
if ((items.isEmpty() && exist) || (renew && exist)) mAdapter.removeItems(historyIndex, 1);
if ((!items.isEmpty() && !exist) || (renew && exist)) mAdapter.add(historyIndex, new ListRow(mHistoryAdapter));
mHistoryAdapter.setItems(items, null);
mHistoryAdapter.setItems(items, new HistoryDiffCallback());
}
private void setHistoryDelete(boolean delete) {

@ -5,11 +5,13 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.AsyncListDiffer;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.databinding.AdapterVodBinding;
import com.fongmi.android.tv.ui.adapter.diff.KeepDiffCallback;
import com.fongmi.android.tv.utils.ImgUtil;
import com.fongmi.android.tv.utils.ResUtil;
@ -18,14 +20,14 @@ import java.util.List;
public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
private final OnClickListener mListener;
private final List<Keep> mItems;
private final AsyncListDiffer<Keep> differ;
private final OnClickListener listener;
private int width, height;
private boolean delete;
public KeepAdapter(OnClickListener listener) {
this.mItems = new ArrayList<>();
this.mListener = listener;
this.differ = new AsyncListDiffer<>(this, new KeepDiffCallback().asItemCallback());
this.listener = listener;
setLayoutSize();
}
@ -46,16 +48,12 @@ public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
}
public void addAll(List<Keep> items) {
mItems.clear();
mItems.addAll(items);
notifyDataSetChanged();
differ.submitList(items);
}
public void delete(Keep item) {
int index = mItems.indexOf(item);
if (index == -1) return;
mItems.remove(index);
notifyItemRemoved(index);
List<Keep> current = new ArrayList<>(differ.getCurrentList());
if (current.remove(item)) differ.submitList(current);
}
public boolean isDelete() {
@ -64,12 +62,12 @@ public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
public void setDelete(boolean delete) {
this.delete = delete;
notifyItemRangeChanged(0, mItems.size());
notifyItemRangeChanged(0, getItemCount());
}
@Override
public int getItemCount() {
return mItems.size();
return differ.getCurrentList().size();
}
@NonNull
@ -83,7 +81,7 @@ public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Keep item = mItems.get(position);
Keep item = differ.getCurrentList().get(position);
setClickListener(holder.itemView, item);
holder.binding.name.setText(item.getVodName());
holder.binding.remark.setVisibility(View.GONE);
@ -94,10 +92,10 @@ public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
}
private void setClickListener(View root, Keep item) {
root.setOnLongClickListener(view -> mListener.onLongClick());
root.setOnLongClickListener(view -> listener.onLongClick());
root.setOnClickListener(view -> {
if (isDelete()) mListener.onItemDelete(item);
else mListener.onItemClick(item);
if (isDelete()) listener.onItemDelete(item);
else listener.onItemClick(item);
});
}

@ -0,0 +1,28 @@
package com.fongmi.android.tv.ui.adapter.diff;
import androidx.annotation.NonNull;
import androidx.leanback.widget.DiffCallback;
import androidx.recyclerview.widget.DiffUtil;
public abstract class BaseDiffCallback<T> extends DiffCallback<T> {
@Override
public abstract boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem);
@Override
public abstract boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem);
public final DiffUtil.ItemCallback<T> asItemCallback() {
return new DiffUtil.ItemCallback<T>() {
@Override
public boolean areItemsTheSame(@NonNull T oldItem, @NonNull T newItem) {
return BaseDiffCallback.this.areItemsTheSame(oldItem, newItem);
}
@Override
public boolean areContentsTheSame(@NonNull T oldItem, @NonNull T newItem) {
return BaseDiffCallback.this.areContentsTheSame(oldItem, newItem);
}
};
}
}

@ -0,0 +1,18 @@
package com.fongmi.android.tv.ui.adapter.diff;
import com.fongmi.android.tv.bean.History;
import org.jspecify.annotations.NonNull;
public class HistoryDiffCallback extends BaseDiffCallback<History> {
@Override
public boolean areItemsTheSame(@NonNull History oldItem, @NonNull History newItem) {
return oldItem.getKey().equals(newItem.getKey());
}
@Override
public boolean areContentsTheSame(@NonNull History oldItem, @NonNull History newItem) {
return oldItem.equals(newItem);
}
}

@ -0,0 +1,18 @@
package com.fongmi.android.tv.ui.adapter.diff;
import com.fongmi.android.tv.bean.Keep;
import org.jspecify.annotations.NonNull;
public class KeepDiffCallback extends BaseDiffCallback<Keep> {
@Override
public boolean areItemsTheSame(@NonNull Keep oldItem, @NonNull Keep newItem) {
return oldItem.getKey().equals(newItem.getKey());
}
@Override
public boolean areContentsTheSame(@NonNull Keep oldItem, @NonNull Keep newItem) {
return oldItem.equals(newItem);
}
}
Loading…
Cancel
Save