Support keep

pull/123/head
FongMi 4 years ago
parent 131b3e2e95
commit 253c0780fd
  1. 11
      app/src/leanback/AndroidManifest.xml
  2. 20
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 1
      app/src/main/AndroidManifest.xml
  4. 14
      app/src/main/java/com/fongmi/android/tv/api/LiveConfig.java
  5. 11
      app/src/main/java/com/fongmi/android/tv/api/LiveParser.java
  6. 31
      app/src/main/java/com/fongmi/android/tv/bean/Channel.java
  7. 10
      app/src/main/java/com/fongmi/android/tv/bean/Group.java
  8. 2
      app/src/main/java/com/fongmi/android/tv/bean/Live.java

@ -16,16 +16,7 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<application
android:name=".App"
android:banner="@drawable/banner"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<application android:banner="@drawable/banner">
<meta-data
android:name="design_width_in_dp"

@ -73,6 +73,10 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
return Prefers.getRender() == 0 ? mBinding.surface : mBinding.texture;
}
private Group getKeep() {
return (Group) mGroupAdapter.get(0);
}
private boolean isVisible(View view) {
return view.getVisibility() == View.VISIBLE;
}
@ -135,12 +139,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void getLive() {
List<Group> 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) {

@ -13,6 +13,7 @@
<application
android:name=".App"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"

@ -8,6 +8,7 @@ import com.fongmi.android.tv.R;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.net.Callback;
@ -134,6 +135,19 @@ public class LiveConfig {
if (!group.isHidden()) Prefers.putKeep(home.getName() + AppDatabase.SYMBOL + group.getName() + AppDatabase.SYMBOL + channel.getName());
}
public void setKeep(List<Group> items) {
List<String> 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<Group> items) {
String[] splits = Prefers.getKeep().split(AppDatabase.SYMBOL);
if (!home.getName().equals(splits[0])) return new int[]{1, 0};

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

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

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

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

Loading…
Cancel
Save