diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 24f016fc6..2bde6264a 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -369,7 +369,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void onKeep() { Keep keep = Keep.find(getHistoryKey()); - Notify.show(keep != null ? R.string.detail_keep_del : R.string.detail_keep_add); + Notify.show(keep != null ? R.string.keep_del : R.string.keep_add); if (keep != null) keep.delete(); else createKeep(); RefreshEvent.keep(); 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 ec9f44963..dfec16492 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 @@ -50,7 +50,7 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis } private void getKeep() { - mAdapter.addAll(Keep.getAll()); + mAdapter.addAll(Keep.getVod()); } private void loadConfig(Config config, Keep item) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index ed9a8fcbd..ac2575484 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -20,6 +20,7 @@ import com.fongmi.android.tv.R; import com.fongmi.android.tv.api.LiveConfig; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Group; +import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.databinding.ActivityLiveBinding; import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.impl.PassCallback; @@ -32,6 +33,7 @@ import com.fongmi.android.tv.ui.custom.dialog.PassDialog; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; import com.fongmi.android.tv.ui.presenter.GroupPresenter; import com.fongmi.android.tv.utils.Clock; +import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.google.android.exoplayer2.Player; @@ -133,7 +135,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private void getLive() { List items = new ArrayList<>(); - items.add(new Group(ResUtil.getString(R.string.live_keep))); + items.add(new Group(ResUtil.getString(R.string.keep))); for (Group group : LiveConfig.get().getHome().getGroups()) (group.isHidden() ? mHides : items).add(group); items.add(new Group(ResUtil.getString(R.string.live_setting))); mGroupAdapter.setItems(items, null); @@ -161,6 +163,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mOldView = child.itemView; mOldView.setSelected(true); onItemClick(group); + resetPass(); } private void setChannelActivated() { @@ -223,6 +226,30 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick hideUI(); } + @Override + public boolean onLongClick(Channel item) { + boolean exist = Keep.exist(item.getName()); + Notify.show(exist ? R.string.keep_del : R.string.keep_add); + if (exist) delKeep(item); + else addKeep(item); + return true; + } + + private void addKeep(Channel item) { + Group group = (Group) mGroupAdapter.get(0); + group.getChannel().add(item); + Keep keep = new Keep(); + keep.setKey(item.getName()); + keep.setType(1); + keep.save(); + } + + private void delKeep(Channel item) { + Keep.delete(item.getName()); + if (!mGroup.isKeep()) return; + mChannelAdapter.remove(item); + } + private void setChannel(Channel item) { mHandler.removeCallbacks(mR2); mHandler.postDelayed(mR2, 100); @@ -243,7 +270,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.group.setSelectedPosition(position); mChannelAdapter.setItems(mGroup.getChannel(), null); mGroup.setPosition(0); - resetPass(); } @Override @@ -254,7 +280,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.group.setSelectedPosition(position); mChannelAdapter.setItems(mGroup.getChannel(), null); mGroup.setPosition(mGroup.getChannel().size() - 1); - resetPass(); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java index d0f3d3192..099b7d283 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java @@ -18,7 +18,10 @@ public class ChannelPresenter extends Presenter { } public interface OnClickListener { + void onItemClick(Channel item); + + boolean onLongClick(Channel item); } @Override @@ -36,6 +39,7 @@ public class ChannelPresenter extends Presenter { holder.binding.logo.setVisibility(item.getVisible()); holder.binding.getRoot().setSelected(item.isSelected()); setOnClickListener(holder, view -> mListener.onItemClick(item)); + holder.view.setOnLongClickListener(view -> mListener.onLongClick(item)); } @Override diff --git a/app/src/leanback/res/layout/activity_detail.xml b/app/src/leanback/res/layout/activity_detail.xml index ba62c3e81..5d909115c 100644 --- a/app/src/leanback/res/layout/activity_detail.xml +++ b/app/src/leanback/res/layout/activity_detail.xml @@ -182,7 +182,7 @@ android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" - android:text="@string/detail_keep" + android:text="@string/keep" android:textColor="@color/white" android:textSize="16sp" app:drawableStartCompat="@drawable/ic_keep_added" /> diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Config.java b/app/src/main/java/com/fongmi/android/tv/bean/Config.java index cc660ff90..426201a10 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Config.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Config.java @@ -110,12 +110,12 @@ public class Config { } public static Config vod() { - Config item = AppDatabase.get().getConfigDao().findOne(0); + Config item = AppDatabase.get().getConfigDao().find(0); return item == null ? create("", 0) : item; } public static Config live() { - Config item = AppDatabase.get().getConfigDao().findOne(1); + Config item = AppDatabase.get().getConfigDao().find(1); return item == null ? create("", 1) : item; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Group.java b/app/src/main/java/com/fongmi/android/tv/bean/Group.java index 6f917bd3d..fa6a89f59 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Group.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Group.java @@ -78,7 +78,7 @@ public class Group { } public boolean isKeep() { - return getName().equals(ResUtil.getString(R.string.live_keep)); + return getName().equals(ResUtil.getString(R.string.keep)); } public boolean isSetting() { 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 76d8d33db..9149d1a7f 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 @@ -19,6 +19,7 @@ public class Keep { private String vodName; private String vodPic; private long createTime; + private int type; private int cid; @NonNull @@ -62,6 +63,14 @@ public class Keep { this.createTime = createTime; } + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + public int getCid() { return cid; } @@ -82,12 +91,24 @@ public class Keep { return AppDatabase.get().getKeepDao().find(ApiConfig.getCid(), key); } + public static boolean exist(String key) { + return AppDatabase.get().getKeepDao().find(key) != null; + } + public static void delete(int cid) { AppDatabase.get().getKeepDao().delete(cid); } - public static List getAll() { - return AppDatabase.get().getKeepDao().getAll(); + public static void delete(String key) { + AppDatabase.get().getKeepDao().delete(key); + } + + public static List getVod() { + return AppDatabase.get().getKeepDao().getVod(); + } + + public static List getLive() { + return AppDatabase.get().getKeepDao().getLive(); } public void save() { diff --git a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java index e874d6892..918b45ee3 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java +++ b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java @@ -22,7 +22,7 @@ import com.fongmi.android.tv.db.dao.SiteDao; @Database(entities = {Config.class, Site.class, History.class, Keep.class}, version = AppDatabase.VERSION, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { - public static final int VERSION = 12; + public static final int VERSION = 13; public static final String SYMBOL = "@@@"; private static volatile AppDatabase instance; @@ -33,7 +33,7 @@ public abstract class AppDatabase extends RoomDatabase { } private static AppDatabase create(Context context) { - return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_11_12).allowMainThreadQueries().fallbackToDestructiveMigration().build(); + return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_11_12).addMigrations(MIGRATION_12_13).allowMainThreadQueries().fallbackToDestructiveMigration().build(); } public abstract KeepDao getKeepDao(); @@ -51,4 +51,11 @@ public abstract class AppDatabase extends RoomDatabase { database.execSQL("ALTER TABLE Config ADD COLUMN home TEXT DEFAULT NULL"); } }; + + static final Migration MIGRATION_12_13 = new Migration(12, 13) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE Keep ADD COLUMN type INTEGER DEFAULT 0 NOT NULL"); + } + }; } diff --git a/app/src/main/java/com/fongmi/android/tv/db/dao/ConfigDao.java b/app/src/main/java/com/fongmi/android/tv/db/dao/ConfigDao.java index 53b12ea98..b45fbed12 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/dao/ConfigDao.java +++ b/app/src/main/java/com/fongmi/android/tv/db/dao/ConfigDao.java @@ -20,7 +20,7 @@ public abstract class ConfigDao extends BaseDao { public abstract Config findByUrl(String url); @Query("SELECT * FROM Config WHERE type = :type ORDER BY time DESC LIMIT 1") - public abstract Config findOne(int type); + public abstract Config find(int type); @Query("DELETE FROM Config WHERE url = :url") public abstract void delete(String url); 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 7b76e9782..bfebb5e75 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 @@ -10,15 +10,24 @@ import java.util.List; @Dao public abstract class KeepDao extends BaseDao { - @Query("SELECT * FROM Keep ORDER BY createTime DESC") - public abstract List getAll(); + @Query("SELECT * FROM Keep WHERE type = 0 ORDER BY createTime DESC") + public abstract List getVod(); - @Query("SELECT * FROM Keep WHERE cid = :cid AND `key` = :key") + @Query("SELECT * FROM Keep WHERE type = 1 ORDER BY createTime DESC") + public abstract List getLive(); + + @Query("SELECT * FROM Keep WHERE type = 0 AND cid = :cid AND `key` = :key") public abstract Keep find(int cid, String key); - @Query("DELETE FROM Keep WHERE cid = :cid AND `key` = :key") + @Query("SELECT * FROM Keep WHERE type = 1 AND `key` = :key") + public abstract Keep find(String key); + + @Query("DELETE FROM Keep WHERE type = 1 AND `key` = :key") + public abstract void delete(String key); + + @Query("DELETE FROM Keep WHERE type = 0 AND cid = :cid AND `key` = :key") public abstract void delete(int cid, String key); - @Query("DELETE FROM Keep WHERE cid = :cid") + @Query("DELETE FROM Keep WHERE type = 0 AND cid = :cid") public abstract void delete(int cid); } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index be6c5c81a..f872a82fc 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -11,7 +11,6 @@ 上次看到%s - 收藏 密码 设定 暂无节目资讯 @@ -32,9 +31,11 @@ 演员:%s 简介:%s 简介 - 收藏 - 已加入收藏 - 已取消收藏 + + + 收藏 + 已加入收藏 + 已取消收藏 播放 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7ac361421..b26107640 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -11,7 +11,6 @@ 上次看到%s - 收藏 密碼 設定 暫無頻道資訊 @@ -32,9 +31,11 @@ 演員:%s 簡介:%s 簡介 - 收藏 - 已加入收藏 - 已取消收藏 + + + 收藏 + 已加入收藏 + 已取消收藏 播放 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0e7cdfbdf..2eb1e942a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,7 +11,6 @@ Last seen %s - Keep Pass Setting No schedule @@ -32,9 +31,11 @@ Actor: %s Summary: %s Summary - Keep - Added - Removed + + + Keep + Added + Removed Play