From 61811f14edb6ff63d619abc04a74df7d7978930d Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 15 Mar 2023 11:48:57 +0800 Subject: [PATCH] [mobile] support keep and history delete --- .../android/tv/ui/activity/KeepActivity.java | 27 +++++------ .../java/com/fongmi/android/tv/bean/Keep.java | 4 ++ .../com/fongmi/android/tv/db/dao/KeepDao.java | 3 ++ app/src/main/res/values-zh-rCN/strings.xml | 4 ++ app/src/main/res/values-zh-rTW/strings.xml | 4 ++ app/src/main/res/values/strings.xml | 4 ++ .../tv/ui/activity/HistoryActivity.java | 25 ++++++++-- .../android/tv/ui/activity/KeepActivity.java | 47 ++++++++++++++++--- .../android/tv/ui/adapter/HistoryAdapter.java | 7 +++ .../android/tv/ui/adapter/KeepAdapter.java | 7 +++ .../mobile/res/layout/activity_history.xml | 12 ++++- app/src/mobile/res/layout/activity_keep.xml | 12 ++++- 12 files changed, 126 insertions(+), 30 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java index ca83a5699..6d61aff2e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java @@ -52,21 +52,6 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis mAdapter.addAll(Keep.getVod()); } - @Subscribe(threadMode = ThreadMode.MAIN) - public void onRefreshEvent(RefreshEvent event) { - if (event.getType() == RefreshEvent.Type.KEEP) getKeep(); - } - - @Override - public void onItemClick(Keep item) { - Config config = Config.find(item.getCid()); - if (item.getCid() == ApiConfig.getCid()) { - DetailActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName()); - } else { - loadConfig(config, item); - } - } - private void loadConfig(Config config, Keep item) { ApiConfig.get().clear().config(config).load(true, new Callback() { @Override @@ -83,6 +68,18 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis }); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onRefreshEvent(RefreshEvent event) { + if (event.getType() == RefreshEvent.Type.KEEP) getKeep(); + } + + @Override + public void onItemClick(Keep item) { + Config config = Config.find(item.getCid()); + if (item.getCid() != ApiConfig.getCid()) loadConfig(config, item); + else DetailActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName()); + } + @Override public void onItemDelete(Keep item) { mAdapter.delete(item.delete()); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java index 9149d1a7f..6ebc9253b 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Keep.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Keep.java @@ -95,6 +95,10 @@ public class Keep { return AppDatabase.get().getKeepDao().find(key) != null; } + public static void deleteAll() { + AppDatabase.get().getKeepDao().delete(); + } + public static void delete(int cid) { AppDatabase.get().getKeepDao().delete(cid); } diff --git a/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java b/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java index bfebb5e75..0263ad25c 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java +++ b/app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java @@ -30,4 +30,7 @@ public abstract class KeepDao extends BaseDao { @Query("DELETE FROM Keep WHERE type = 0 AND cid = :cid") public abstract void delete(int cid); + + @Query("DELETE FROM Keep") + public abstract void delete(); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f35dc52b0..4d17d030f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -83,6 +83,10 @@ 请输入接口… 请输入地址… + + 是否清空所有收藏纪录? + 是否清空所有观看纪录? + FFmpeg 加载失败 配置取得失败 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 64d64fd42..87bc91c97 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -83,6 +83,10 @@ 請輸入接口… 請輸入網址… + + 是否清空所有收藏紀錄? + 是否清空所有觀看紀錄? + FFmpeg 載入失敗 配置取得失敗 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f59132265..843ad20f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,10 @@ Please enter the config… Please enter the url… + + Do you want to clear all keep records? + Do you want to clear all history records? + Failed to load FFmpeg Configuration get failed diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java index cf03c8fba..f924d2f84 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java @@ -3,16 +3,19 @@ package com.fongmi.android.tv.ui.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.view.View; import androidx.recyclerview.widget.GridLayoutManager; import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.Product; +import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.databinding.ActivityHistoryBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.adapter.HistoryAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -39,7 +42,7 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl @Override protected void initEvent() { - + mBinding.delete.setOnClickListener(this::onDelete); } private void setRecyclerView() { @@ -54,8 +57,14 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl mAdapter.addAll(History.get()); } - private void setDelete(boolean delete) { - mAdapter.setDelete(delete); + private void onDelete(View view) { + if (mAdapter.isDelete()) { + new MaterialAlertDialogBuilder(this).setMessage(R.string.ask_history_delete).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> mAdapter.clear()).show(); + } else if (mAdapter.getItemCount() > 0) { + mAdapter.setDelete(true); + } else { + mBinding.delete.setVisibility(View.GONE); + } } @Subscribe(threadMode = ThreadMode.MAIN) @@ -71,12 +80,18 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl @Override public void onItemDelete(History item) { mAdapter.remove(item.delete()); - if (mAdapter.getItemCount() == 0) setDelete(false); + if (mAdapter.getItemCount() == 0) mAdapter.setDelete(false); } @Override public boolean onLongClick() { - setDelete(!mAdapter.isDelete()); + mAdapter.setDelete(!mAdapter.isDelete()); return true; } + + @Override + public void onBackPressed() { + if (mAdapter.isDelete()) mAdapter.setDelete(false); + else super.onBackPressed(); + } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java index af52e0dd2..b48a5937b 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java @@ -3,16 +3,22 @@ package com.fongmi.android.tv.ui.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.view.View; import androidx.recyclerview.widget.GridLayoutManager; import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.Product; +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.api.ApiConfig; +import com.fongmi.android.tv.bean.Config; 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.adapter.KeepAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -39,7 +45,7 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis @Override protected void initEvent() { - + mBinding.delete.setOnClickListener(this::onDelete); } private void setRecyclerView() { @@ -54,8 +60,29 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis mAdapter.addAll(Keep.getVod()); } - private void setDelete(boolean delete) { - mAdapter.setDelete(delete); + private void onDelete(View view) { + if (mAdapter.isDelete()) { + new MaterialAlertDialogBuilder(this).setMessage(R.string.ask_keep_delete).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> mAdapter.clear()).show(); + } else if (mAdapter.getItemCount() > 0) { + mAdapter.setDelete(true); + } else { + mBinding.delete.setVisibility(View.GONE); + } + } + + private void loadConfig(Config config, Keep item) { + ApiConfig.get().clear().config(config).load(true, new Callback() { + @Override + public void success() { + DetailActivity.start(getActivity(), item.getSiteKey(), item.getVodId(), item.getVodName()); + RefreshEvent.video(); + } + + @Override + public void error(int resId) { + CollectActivity.start(getActivity(), item.getVodName()); + } + }); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -65,18 +92,26 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis @Override public void onItemClick(Keep item) { - DetailActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName()); + Config config = Config.find(item.getCid()); + if (item.getCid() != ApiConfig.getCid()) loadConfig(config, item); + else DetailActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName()); } @Override public void onItemDelete(Keep item) { mAdapter.remove(item.delete()); - if (mAdapter.getItemCount() == 0) setDelete(false); + if (mAdapter.getItemCount() == 0) mAdapter.setDelete(false); } @Override public boolean onLongClick() { - setDelete(!mAdapter.isDelete()); + mAdapter.setDelete(!mAdapter.isDelete()); return true; } + + @Override + public void onBackPressed() { + if (mAdapter.isDelete()) mAdapter.setDelete(false); + else super.onBackPressed(); + } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java index 1ed7714ad..42ba884c2 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java @@ -58,6 +58,13 @@ public class HistoryAdapter extends RecyclerView.Adapter { notifyDataSetChanged(); } + public void clear() { + mItems.clear(); + setDelete(false); + notifyDataSetChanged(); + Keep.deleteAll(); + } + public void remove(Keep item) { int index = mItems.indexOf(item); if (index == -1) return; diff --git a/app/src/mobile/res/layout/activity_history.xml b/app/src/mobile/res/layout/activity_history.xml index fdedd17b7..aad5c9223 100644 --- a/app/src/mobile/res/layout/activity_history.xml +++ b/app/src/mobile/res/layout/activity_history.xml @@ -14,16 +14,24 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:layout_marginEnd="16dp"> + android:layout_marginEnd="16dp" + android:gravity="center_vertical"> + + + android:layout_marginEnd="16dp" + android:gravity="center_vertical"> + +