[mobile] support keep and history delete

pull/123/head
FongMi 3 years ago
parent 8254db14f5
commit 61811f14ed
  1. 27
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java
  2. 4
      app/src/main/java/com/fongmi/android/tv/bean/Keep.java
  3. 3
      app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java
  4. 4
      app/src/main/res/values-zh-rCN/strings.xml
  5. 4
      app/src/main/res/values-zh-rTW/strings.xml
  6. 4
      app/src/main/res/values/strings.xml
  7. 25
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java
  8. 47
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/KeepActivity.java
  9. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java
  10. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/KeepAdapter.java
  11. 12
      app/src/mobile/res/layout/activity_history.xml
  12. 12
      app/src/mobile/res/layout/activity_keep.xml

@ -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());

@ -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);
}

@ -30,4 +30,7 @@ public abstract class KeepDao extends BaseDao<Keep> {
@Query("DELETE FROM Keep WHERE type = 0 AND cid = :cid")
public abstract void delete(int cid);
@Query("DELETE FROM Keep")
public abstract void delete();
}

@ -83,6 +83,10 @@
<string name="dialog_config_hint">请输入接口…</string>
<string name="dialog_config_url">请输入地址…</string>
<!-- Ask -->
<string name="ask_keep_delete">是否清空所有收藏纪录?</string>
<string name="ask_history_delete">是否清空所有观看纪录?</string>
<!-- Error -->
<string name="error_so_load">FFmpeg 加载失败</string>
<string name="error_config_get">配置取得失败</string>

@ -83,6 +83,10 @@
<string name="dialog_config_hint">請輸入接口…</string>
<string name="dialog_config_url">請輸入網址…</string>
<!-- Ask -->
<string name="ask_keep_delete">是否清空所有收藏紀錄?</string>
<string name="ask_history_delete">是否清空所有觀看紀錄?</string>
<!-- Error -->
<string name="error_so_load">FFmpeg 載入失敗</string>
<string name="error_config_get">配置取得失敗</string>

@ -83,6 +83,10 @@
<string name="dialog_config_hint">Please enter the config…</string>
<string name="dialog_config_url">Please enter the url…</string>
<!-- Ask -->
<string name="ask_keep_delete">Do you want to clear all keep records?</string>
<string name="ask_history_delete">Do you want to clear all history records?</string>
<!-- Error -->
<string name="error_so_load">Failed to load FFmpeg</string>
<string name="error_config_get">Configuration get failed</string>

@ -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();
}
}

@ -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();
}
}

@ -58,6 +58,13 @@ public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHold
notifyDataSetChanged();
}
public void clear() {
mItems.clear();
setDelete(false);
notifyDataSetChanged();
History.delete(ApiConfig.getCid());
}
public void remove(History item) {
int position = mItems.indexOf(item);
if (position == -1) return;

@ -55,6 +55,13 @@ public class KeepAdapter extends RecyclerView.Adapter<KeepAdapter.ViewHolder> {
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;

@ -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">
<TextView
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/history"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/delete"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_vod_delete" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView

@ -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">
<TextView
android:layout_width="wrap_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/keep"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/delete"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_vod_delete" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView

Loading…
Cancel
Save