Support recent - part 3

pull/21/head
FongMi 3 years ago
parent f0844fb4ac
commit 3d53d74896
  1. 64
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 25
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java
  3. 10
      app/src/leanback/res/drawable/ic_delete.xml
  4. 11
      app/src/leanback/res/layout/adapter_vod.xml
  5. 3
      app/src/main/java/com/fongmi/android/tv/db/dao/HistoryDao.java

@ -1,5 +1,6 @@
package com.fongmi.android.tv.ui.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Handler;
@ -46,12 +47,14 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
public class HomeActivity extends BaseActivity implements VodPresenter.OnClickListener, HistoryPresenter.OnClickListener {
public class HomeActivity extends BaseActivity implements VodPresenter.OnClickListener, FuncPresenter.OnClickListener, HistoryPresenter.OnClickListener {
private ArrayObjectAdapter mHistoryAdapter;
private HistoryPresenter mHistoryPresenter;
private ActivityHomeBinding mBinding;
private ArrayObjectAdapter mAdapter;
private SiteViewModel mSiteViewModel;
private FuncPresenter mFuncPresenter;
private ArrayObjectAdapter mAdapter;
private boolean mConfirmExit;
public static void start(Activity activity) {
@ -79,7 +82,8 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
@Override
protected void initEvent() {
EventBus.getDefault().register(this);
mFuncPresenter.setOnClickListener(this::onFuncClick);
mFuncPresenter.setOnClickListener(this);
mHistoryPresenter.setOnClickListener(this);
mBinding.recycler.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@Override
public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) {
@ -97,6 +101,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), HistoryPresenter.class);
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
mHistoryAdapter = new ArrayObjectAdapter(mHistoryPresenter = new HistoryPresenter(5));
}
private void setViewModel() {
@ -145,25 +150,10 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
private void getRecent() {
int recentIndex = getRecentIndex();
int recommendIndex = getRecommendIndex();
if (recommendIndex - recentIndex == 2) mAdapter.removeItems(recentIndex, 1);
List<History> items = AppDatabase.get().getHistoryDao().getAll();
if (items.isEmpty()) return;
HistoryPresenter presenter = new HistoryPresenter(5);
ArrayObjectAdapter adapter = new ArrayObjectAdapter(presenter);
presenter.setOnClickListener(this);
adapter.addAll(0, items);
mAdapter.add(recentIndex, new ListRow(adapter));
}
private void onFuncClick(Func item) {
switch (item.getResId()) {
case R.string.home_vod:
VodActivity.start(this, mSiteViewModel.getResult().getValue());
break;
case R.string.home_setting:
SettingActivity.start(this);
break;
}
if (recommendIndex - recentIndex != 2) mAdapter.add(recentIndex, new ListRow(mHistoryAdapter));
mHistoryAdapter.setItems(items, null);
}
private int getRecentIndex() {
@ -176,6 +166,18 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
return -1;
}
@Override
public void onItemClick(Func item) {
switch (item.getResId()) {
case R.string.home_vod:
VodActivity.start(this, mSiteViewModel.getResult().getValue());
break;
case R.string.home_setting:
SettingActivity.start(this);
break;
}
}
@Override
public void onItemClick(Vod item) {
DetailActivity.start(this, item.getVodId());
@ -186,6 +188,23 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
DetailActivity.start(this, item.getSiteKey(), item.getVodId());
}
@Override
public void onItemDelete(History item) {
mHistoryAdapter.remove(item);
AppDatabase.get().getHistoryDao().delete(item.getKey());
if (mHistoryAdapter.size() > 0) return;
mAdapter.removeItems(getRecentIndex(), 1);
mHistoryPresenter.setDelete(false);
}
@SuppressLint("RestrictedApi")
@Override
public boolean onLongClick() {
mHistoryPresenter.setDelete(true);
mHistoryAdapter.notifyArrayItemRangeChanged(0, mHistoryAdapter.size());
return true;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAdapterChanged(RefreshEvent event) {
if (event.getType() == RefreshEvent.Type.VIDEO) {
@ -199,7 +218,10 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
@Override
public void onBackPressed() {
if (!mConfirmExit) {
if (mHistoryPresenter.isDelete()) {
mHistoryPresenter.setDelete(false);
mHistoryAdapter.notifyArrayItemRangeChanged(0, mHistoryAdapter.size());
} else if (!mConfirmExit) {
mConfirmExit = true;
Notify.show(R.string.app_exit);
new Handler().postDelayed(() -> mConfirmExit = false, 1000);

@ -18,19 +18,33 @@ public class HistoryPresenter extends Presenter {
private OnClickListener mListener;
private int width, height;
private boolean delete;
public HistoryPresenter(int columns) {
setLayoutSize(columns);
}
public interface OnClickListener {
void onItemClick(History item);
void onItemDelete(History item);
boolean onLongClick();
}
public void setOnClickListener(OnClickListener listener) {
this.mListener = listener;
}
public boolean isDelete() {
return delete;
}
public void setDelete(boolean delete) {
this.delete = delete;
}
private void setLayoutSize(int columns) {
int space = ResUtil.dp2px(16) * (columns - 1) + ResUtil.dp2px(48);
int base = ResUtil.getScreenWidthPx() - space;
@ -51,11 +65,18 @@ public class HistoryPresenter extends Presenter {
History item = (History) object;
ViewHolder holder = (ViewHolder) viewHolder;
holder.binding.name.setText(item.getVodName());
holder.binding.site.setVisibility(View.VISIBLE);
holder.binding.site.setText(ApiConfig.getSiteName(item.getSiteKey()));
holder.binding.remark.setText(ResUtil.getString(R.string.vod_last, item.getVodRemarks()));
holder.binding.name.setVisibility(delete ? View.GONE : View.VISIBLE);
holder.binding.site.setVisibility(delete ? View.GONE : View.VISIBLE);
holder.binding.remark.setVisibility(delete ? View.GONE : View.VISIBLE);
holder.binding.delete.setVisibility(!delete ? View.GONE : View.VISIBLE);
ImgUtil.load(item.getVodName(), item.getVodPic(), holder.binding.image);
setOnClickListener(holder, view -> mListener.onItemClick(item));
holder.view.setOnLongClickListener(view -> mListener.onLongClick());
holder.view.setOnClickListener(view -> {
if (isDelete()) mListener.onItemDelete(item);
else mListener.onItemClick(item);
});
}
@Override

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="64dp"
android:height="64dp"
android:tint="@color/red_500"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V9c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v10zM18,4h-2.5l-0.71,-0.71c-0.18,-0.18 -0.44,-0.29 -0.7,-0.29H9.91c-0.26,0 -0.52,0.11 -0.7,0.29L8.5,4H6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h12c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1z" />
</vector>

@ -14,6 +14,17 @@
android:scaleType="center"
tools:src="@drawable/ic_img_loading" />
<ImageView
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@color/white_30"
android:scaleType="center"
android:src="@drawable/ic_delete"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/site"
android:layout_width="wrap_content"

@ -16,6 +16,9 @@ public abstract class HistoryDao extends BaseDao<History> {
@Query("SELECT * FROM history WHERE `key` = :key")
public abstract History find(String key);
@Query("DELETE FROM history WHERE `key` = :key")
public abstract void delete(String key);
@Query("DELETE FROM history")
public abstract void delete();
}

Loading…
Cancel
Save