Keep support delete

pull/137/head
FongMi 4 years ago
parent 1497e41788
commit 94f39fdb49
  1. 51
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java
  2. 80
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/KeepAdapter.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java
  4. 9
      app/src/leanback/res/layout/activity_keep.xml
  5. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java

@ -3,9 +3,7 @@ package com.fongmi.android.tv.ui.activity;
import android.app.Activity;
import android.content.Intent;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.leanback.widget.ListRow;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.api.ApiConfig;
@ -14,24 +12,18 @@ import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.databinding.ActivityKeepBinding;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.net.Callback;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomSelector;
import com.fongmi.android.tv.ui.presenter.KeepPresenter;
import com.fongmi.android.tv.ui.adapter.KeepAdapter;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.common.collect.Lists;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public class KeepActivity extends BaseActivity implements KeepPresenter.OnClickListener {
public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickListener {
private ActivityKeepBinding mBinding;
private ArrayObjectAdapter mAdapter;
private KeepAdapter mAdapter;
public static void start(Activity activity) {
activity.startActivity(new Intent(activity, KeepActivity.class));
@ -50,21 +42,15 @@ public class KeepActivity extends BaseActivity implements KeepPresenter.OnClickL
}
private void setRecyclerView() {
CustomSelector selector = new CustomSelector();
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), KeepPresenter.class);
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
mBinding.recycler.setHeader(mBinding.toolbar);
mBinding.recycler.setHasFixedSize(true);
mBinding.recycler.setItemAnimator(null);
mBinding.recycler.setAdapter(mAdapter = new KeepAdapter(this));
mBinding.recycler.setLayoutManager(new GridLayoutManager(this, Prefers.getColumn()));
mBinding.recycler.addItemDecoration(new SpaceItemDecoration(Prefers.getColumn(), 16));
}
private void getKeep() {
List<ListRow> rows = new ArrayList<>();
for (List<Keep> part : Lists.partition(Keep.getAll(), Prefers.getColumn())) {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new KeepPresenter(this));
adapter.setItems(part, null);
rows.add(new ListRow(adapter));
}
mAdapter.addAll(0, rows);
mAdapter.addAll(Keep.getAll());
}
private void loadConfig(Config config, Keep item) {
@ -87,10 +73,7 @@ public class KeepActivity extends BaseActivity implements KeepPresenter.OnClickL
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshEvent(RefreshEvent event) {
if (event.getType() == RefreshEvent.Type.KEEP) {
mAdapter.clear();
getKeep();
}
if (event.getType() == RefreshEvent.Type.KEEP) getKeep();
}
@Override
@ -107,14 +90,22 @@ public class KeepActivity extends BaseActivity implements KeepPresenter.OnClickL
@Override
public void onItemDelete(Keep item) {
mAdapter.delete(item);
if (mAdapter.getItemCount() == 0) mAdapter.setDelete(false);
}
@Override
public boolean onLongClick() {
mAdapter.setDelete(true);
return true;
}
@Override
public void onBackPressed() {
if (mAdapter.isDelete()) mAdapter.setDelete(false);
else super.onBackPressed();
}
@Override
protected void onDestroy() {
super.onDestroy();

@ -1,11 +1,11 @@
package com.fongmi.android.tv.ui.presenter;
package com.fongmi.android.tv.ui.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.leanback.widget.Presenter;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.fongmi.android.tv.App;
@ -15,17 +15,29 @@ import com.fongmi.android.tv.databinding.AdapterVodBinding;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
public class KeepPresenter extends Presenter {
import java.util.ArrayList;
import java.util.List;
public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
private final OnClickListener mListener;
private final List<Keep> mItems;
private int width, height;
private boolean delete;
public KeepPresenter(OnClickListener listener) {
public KeepAdapter(OnClickListener listener) {
this.mItems = new ArrayList<>();
this.mListener = listener;
setLayoutSize();
}
private void setLayoutSize() {
int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Prefers.getColumn() - 1));
int base = ResUtil.getScreenWidthPx() - space;
width = base / Prefers.getColumn();
height = (int) (width / 0.75f);
}
public interface OnClickListener {
void onItemClick(Keep item);
@ -35,23 +47,46 @@ public class KeepPresenter extends Presenter {
boolean onLongClick();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final AdapterVodBinding binding;
public ViewHolder(@NonNull AdapterVodBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
public void addAll(List<Keep> items) {
mItems.clear();
mItems.addAll(items);
notifyDataSetChanged();
}
public void delete(Keep item) {
int index = mItems.indexOf(item);
if (index == -1) return;
mItems.remove(index);
notifyItemRemoved(index);
}
public boolean isDelete() {
return delete;
}
public void setDelete(boolean delete) {
this.delete = delete;
notifyItemRangeChanged(0, mItems.size());
}
private void setLayoutSize() {
int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Prefers.getColumn() - 1));
int base = ResUtil.getScreenWidthPx() - space;
width = base / Prefers.getColumn();
height = (int) (width / 0.75f);
@Override
public int getItemCount() {
return mItems.size();
}
@NonNull
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ViewHolder holder = new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
holder.binding.getRoot().getLayoutParams().width = width;
holder.binding.getRoot().getLayoutParams().height = height;
@ -59,16 +94,15 @@ public class KeepPresenter extends Presenter {
}
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) {
Keep item = (Keep) object;
ViewHolder holder = (ViewHolder) viewHolder;
setClickListener(holder.view, item);
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Keep item = mItems.get(position);
setClickListener(holder.itemView, item);
holder.binding.name.setText(item.getVodName());
holder.binding.remark.setVisibility(View.GONE);
holder.binding.site.setVisibility(View.VISIBLE);
holder.binding.site.setText(item.getSiteName());
holder.binding.delete.setVisibility(!delete ? View.GONE : View.VISIBLE);
Glide.with(App.get()).load(item.getVodPic()).centerCrop().error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
Glide.with(App.get()).load(item.getVodPic()).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
}
private void setClickListener(View root, Keep item) {
@ -78,18 +112,4 @@ public class KeepPresenter extends Presenter {
else mListener.onItemClick(item);
});
}
@Override
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
}
public static class ViewHolder extends Presenter.ViewHolder {
private final AdapterVodBinding binding;
public ViewHolder(@NonNull AdapterVodBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
}
}

@ -70,7 +70,7 @@ public class HistoryPresenter extends Presenter {
holder.binding.remark.setText(ResUtil.getString(R.string.vod_last, item.getVodRemarks()));
holder.binding.remark.setVisibility(delete ? View.GONE : View.VISIBLE);
holder.binding.delete.setVisibility(!delete ? View.GONE : View.VISIBLE);
Glide.with(App.get()).load(item.getVodPic()).centerCrop().error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
Glide.with(App.get()).load(item.getVodPic()).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
}
private void setClickListener(View root, History item) {

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
@ -18,13 +17,13 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:text="收藏"
android:text="@string/home_keep"
android:textColor="@color/white"
android:textSize="24sp" />
</FrameLayout>
<com.fongmi.android.tv.ui.custom.CustomVerticalGridView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -33,9 +32,7 @@
android:paddingStart="24dp"
android:paddingTop="16dp"
android:paddingEnd="24dp"
android:paddingBottom="24dp"
app:focusOutEnd="true"
app:focusOutFront="true" />
android:paddingBottom="24dp" />
</LinearLayout>

@ -81,6 +81,6 @@ public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHold
holder.binding.remark.setText(ResUtil.getString(R.string.vod_last, item.getVodRemarks()));
holder.binding.getRoot().setOnClickListener(view -> mListener.onItemClick(item));
holder.binding.getRoot().setOnLongClickListener(view -> mListener.onLongClick(item));
Glide.with(App.get()).load(item.getVodPic()).centerCrop().error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
Glide.with(App.get()).load(item.getVodPic()).error(R.drawable.ic_img_error).placeholder(R.drawable.ic_img_loading).into(holder.binding.image);
}
}

Loading…
Cancel
Save