From 253c0780fde26c19ec369c42b5a25b9a6d625553 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 30 Oct 2022 18:19:09 +0800 Subject: [PATCH] Support keep --- app/src/leanback/AndroidManifest.xml | 11 +------ .../android/tv/ui/activity/LiveActivity.java | 20 +++++++----- app/src/main/AndroidManifest.xml | 1 + .../com/fongmi/android/tv/api/LiveConfig.java | 14 +++++++++ .../com/fongmi/android/tv/api/LiveParser.java | 11 +++---- .../com/fongmi/android/tv/bean/Channel.java | 31 +++++++++++++------ .../com/fongmi/android/tv/bean/Group.java | 10 ++++++ .../java/com/fongmi/android/tv/bean/Live.java | 2 +- 8 files changed, 65 insertions(+), 35 deletions(-) diff --git a/app/src/leanback/AndroidManifest.xml b/app/src/leanback/AndroidManifest.xml index 28ac4ec5a..4d7ee9f3b 100644 --- a/app/src/leanback/AndroidManifest.xml +++ b/app/src/leanback/AndroidManifest.xml @@ -16,16 +16,7 @@ - + items = new ArrayList<>(); - items.add(new Group(ResUtil.getString(R.string.keep))); + items.add(Group.create(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))); + items.add(Group.create(ResUtil.getString(R.string.live_setting))); mGroupAdapter.setItems(items, null); - mBinding.group.setVisibility(mGroupAdapter.size() == 1 ? View.GONE : View.VISIBLE); - setPosition(LiveConfig.get().getKeep(mGroupAdapter.unmodifiableList())); + LiveConfig.get().setKeep(items); + setPosition(LiveConfig.get().getKeep(items)); } private void setPosition(int[] position) { @@ -228,6 +232,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public boolean onLongClick(Channel item) { + if (mGroup.isHidden()) return false; boolean exist = Keep.exist(item.getName()); Notify.show(exist ? R.string.keep_del : R.string.keep_add); if (exist) delKeep(item); @@ -236,8 +241,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void addKeep(Channel item) { - Group group = (Group) mGroupAdapter.get(0); - group.getChannel().add(item); + getKeep().add(item); Keep keep = new Keep(); keep.setKey(item.getName()); keep.setType(1); @@ -245,9 +249,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void delKeep(Channel item) { + if (mGroup.isKeep()) mChannelAdapter.remove(item); + else getKeep().getChannel().remove(item); Keep.delete(item.getName()); - if (!mGroup.isKeep()) return; - mChannelAdapter.remove(item); } private void setChannel(Channel item) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dfb50724a..71713be44 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,7 @@ items) { + List key = new ArrayList<>(); + for (Keep keep : Keep.getLive()) key.add(keep.getKey()); + for (Group group : items) { + if (group.isKeep()) continue; + for (Channel channel : group.getChannel()) { + if (key.contains(channel.getName())) { + items.get(0).add(channel); + } + } + } + } + public int[] getKeep(List items) { String[] splits = Prefers.getKeep().split(AppDatabase.SYMBOL); if (!home.getName().equals(splits[0])) return new int[]{1, 0}; diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 297f87814..e6acb84a6 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -30,11 +30,11 @@ public class LiveParser { } private static void m3u(Live live, String text) { - Channel channel = new Channel(""); + Channel channel = Channel.create(""); for (String line : text.split("\n")) { if (line.startsWith("#EXTINF:")) { - Group group = live.find(new Group(extract(line, GROUP))); - channel = group.find(new Channel(extract(line, NAME))); + Group group = live.find(Group.create(extract(line, GROUP))); + channel = group.find(Channel.create(extract(line, NAME))); channel.setLogo(extract(line, LOGO)); } else if (line.contains("://")) { channel.getUrls().add(line); @@ -47,12 +47,11 @@ public class LiveParser { String[] split = line.split(","); if (split.length < 2) continue; if (line.contains("#genre#")) { - live.getGroups().add(new Group(split[0])); + live.getGroups().add(Group.create(split[0])); } if (split[1].contains("://")) { Group group = live.getGroups().get(live.getGroups().size() - 1); - Channel channel = group.find(new Channel(split[0])); - channel.addUrls(split[1].split("#")); + group.find(Channel.create(split[0])).addUrls(split[1].split("#")); } } } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java index 0c341c6da..63393277f 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java @@ -50,6 +50,10 @@ public class Channel { return new Channel(name); } + public static Channel create(Channel channel) { + return new Channel().copy(channel); + } + public Channel() { } @@ -145,6 +149,14 @@ public class Channel { getUrls().addAll(new ArrayList<>(Arrays.asList(urls))); } + public void nextLine() { + setLine(getLine() < getUrls().size() - 1 ? getLine() + 1 : 0); + } + + public void prevLine() { + setLine(getLine() > 0 ? getLine() - 1 : getUrls().size() - 1); + } + public boolean isLastLine() { return getLine() == getUrls().size() - 1; } @@ -158,16 +170,6 @@ public class Channel { return this; } - public Channel nextLine() { - setLine(getLine() < getUrls().size() - 1 ? getLine() + 1 : 0); - return this; - } - - public Channel prevLine() { - setLine(getLine() > 0 ? getLine() - 1 : getUrls().size() - 1); - return this; - } - public Channel group(Group group) { setGroup(group); return this; @@ -192,6 +194,15 @@ public class Channel { return map; } + public Channel copy(Channel item) { + setNumber(item.getNumber()); + setLogo(item.getLogo()); + setName(item.getName()); + setUa(item.getName()); + setUrl(item.getUrl()); + return this; + } + @Override public boolean equals(Object obj) { if (this == obj) return true; 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 fa6a89f59..c5d7f9fb4 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 @@ -26,6 +26,10 @@ public class Group { private int position; + public static Group create(String name) { + return new Group(name); + } + public Group(String name) { this.name = name; if (!name.contains("_")) return; @@ -101,6 +105,12 @@ public class Group { return getChannel().lastIndexOf(Channel.create(name)); } + public void add(Channel channel) { + int index = getChannel().indexOf(channel); + if (index == -1) getChannel().add(Channel.create(channel)); + else getChannel().get(index).getUrls().addAll(channel.getUrls()); + } + public Channel find(Channel channel) { int index = getChannel().indexOf(channel); if (index != -1) return getChannel().get(index); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Live.java b/app/src/main/java/com/fongmi/android/tv/bean/Live.java index aa7dcccb0..7948c15f5 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Live.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Live.java @@ -108,7 +108,7 @@ public class Live { } public Group find(Group item) { - for (Group group:getGroups()) if(group.getName().equals(item.getName())) return group; + for (Group group : getGroups()) if (group.getName().equals(item.getName())) return group; getGroups().add(item); return item; }