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