Support keep

pull/123/head
FongMi 3 years ago
parent bccf9d005c
commit 131b3e2e95
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/KeepActivity.java
  3. 31
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java
  5. 2
      app/src/leanback/res/layout/activity_detail.xml
  6. 4
      app/src/main/java/com/fongmi/android/tv/bean/Config.java
  7. 2
      app/src/main/java/com/fongmi/android/tv/bean/Group.java
  8. 25
      app/src/main/java/com/fongmi/android/tv/bean/Keep.java
  9. 11
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  10. 2
      app/src/main/java/com/fongmi/android/tv/db/dao/ConfigDao.java
  11. 19
      app/src/main/java/com/fongmi/android/tv/db/dao/KeepDao.java
  12. 9
      app/src/main/res/values-zh-rCN/strings.xml
  13. 9
      app/src/main/res/values-zh-rTW/strings.xml
  14. 9
      app/src/main/res/values/strings.xml

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

@ -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) {

@ -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<Group> 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

@ -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

@ -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" />

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

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

@ -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<Keep> getAll() {
return AppDatabase.get().getKeepDao().getAll();
public static void delete(String key) {
AppDatabase.get().getKeepDao().delete(key);
}
public static List<Keep> getVod() {
return AppDatabase.get().getKeepDao().getVod();
}
public static List<Keep> getLive() {
return AppDatabase.get().getKeepDao().getLive();
}
public void save() {

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

@ -20,7 +20,7 @@ public abstract class ConfigDao extends BaseDao<Config> {
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);

@ -10,15 +10,24 @@ import java.util.List;
@Dao
public abstract class KeepDao extends BaseDao<Keep> {
@Query("SELECT * FROM Keep ORDER BY createTime DESC")
public abstract List<Keep> getAll();
@Query("SELECT * FROM Keep WHERE type = 0 ORDER BY createTime DESC")
public abstract List<Keep> 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<Keep> 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);
}

@ -11,7 +11,6 @@
<string name="vod_last">上次看到<xliff:g name="name">%s</xliff:g></string>
<!-- Live -->
<string name="live_keep">收藏</string>
<string name="live_pass">密码</string>
<string name="live_setting">设定</string>
<string name="live_epg_empty">暂无节目资讯</string>
@ -32,9 +31,11 @@
<string name="detail_actor">演员:<xliff:g name="name">%s</xliff:g></string>
<string name="detail_content">简介:<xliff:g name="name">%s</xliff:g></string>
<string name="detail_desc">简介</string>
<string name="detail_keep">收藏</string>
<string name="detail_keep_add">已加入收藏</string>
<string name="detail_keep_del">已取消收藏</string>
<!-- Keep -->
<string name="keep">收藏</string>
<string name="keep_add">已加入收藏</string>
<string name="keep_del">已取消收藏</string>
<!-- Play -->
<string name="play">播放</string>

@ -11,7 +11,6 @@
<string name="vod_last">上次看到<xliff:g name="name">%s</xliff:g></string>
<!-- Live -->
<string name="live_keep">收藏</string>
<string name="live_pass">密碼</string>
<string name="live_setting">設定</string>
<string name="live_epg_empty">暫無頻道資訊</string>
@ -32,9 +31,11 @@
<string name="detail_actor">演員:<xliff:g name="name">%s</xliff:g></string>
<string name="detail_content">簡介:<xliff:g name="name">%s</xliff:g></string>
<string name="detail_desc">簡介</string>
<string name="detail_keep">收藏</string>
<string name="detail_keep_add">已加入收藏</string>
<string name="detail_keep_del">已取消收藏</string>
<!-- Keep -->
<string name="keep">收藏</string>
<string name="keep_add">已加入收藏</string>
<string name="keep_del">已取消收藏</string>
<!-- Play -->
<string name="play">播放</string>

@ -11,7 +11,6 @@
<string name="vod_last">Last seen <xliff:g name="name">%s</xliff:g></string>
<!-- Live -->
<string name="live_keep">Keep</string>
<string name="live_pass">Pass</string>
<string name="live_setting">Setting</string>
<string name="live_epg_empty">No schedule</string>
@ -32,9 +31,11 @@
<string name="detail_actor">Actor: <xliff:g name="name">%s</xliff:g></string>
<string name="detail_content">Summary: <xliff:g name="name">%s</xliff:g></string>
<string name="detail_desc">Summary</string>
<string name="detail_keep">Keep</string>
<string name="detail_keep_add">Added</string>
<string name="detail_keep_del">Removed</string>
<!-- Keep -->
<string name="keep">Keep</string>
<string name="keep_add">Added</string>
<string name="keep_del">Removed</string>
<!-- Play -->
<string name="play">Play</string>

Loading…
Cancel
Save