From 5ac2b0de68a346fc7f30ffb35f15ee5572a0bf88 Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 23 Oct 2023 18:53:04 +0800 Subject: [PATCH] Support cat style --- app/build.gradle | 1 + .../android/tv/ui/activity/VodActivity.java | 2 +- .../android/tv/ui/fragment/VodFragment.java | 7 ++-- .../java/com/fongmi/android/tv/bean/Cate.java | 22 ++++++++++-- .../com/fongmi/android/tv/bean/Class.java | 31 +++++++++++++++++ .../java/com/fongmi/android/tv/bean/Page.java | 14 +++++--- .../java/com/fongmi/android/tv/bean/Site.java | 6 +++- .../com/fongmi/android/tv/bean/Style.java | 20 +++++++---- .../java/com/fongmi/android/tv/bean/Vod.java | 34 +++++++++++++++++-- .../tv/ui/activity/FolderActivity.java | 2 +- .../android/tv/ui/fragment/TypeFragment.java | 13 +++---- .../android/tv/ui/fragment/VodFragment.java | 2 +- 12 files changed, 125 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 660c2250c..e33eec377 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -112,6 +112,7 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.15.1' implementation 'com.github.bumptech.glide:annotations:4.15.1' implementation 'com.github.bumptech.glide:okhttp3-integration:4.15.1' + implementation 'com.github.jahirfiquitiva:TextDrawable:1.0.3' implementation 'com.github.TeamNewPipe:NewPipeExtractor:289db1178ab66694c23893e6a487d4708343c47b' implementation 'com.google.android.material:material:1.10.0' implementation 'com.google.zxing:core:3.3.0' diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java index de52c6e47..74a0570f9 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java @@ -183,7 +183,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi @Override public Fragment getItem(int position) { Class type = (Class) mAdapter.get(position); - return VodFragment.newInstance(getKey(), type.getTypeId(), type.getExtend(), type.getTypeFlag().equals("1")); + return VodFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), type.getExtend(), type.getTypeFlag().equals("1")); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index c8005627e..1471c3344 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -59,11 +59,12 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback private boolean mOpen; private Page mPage; - public static VodFragment newInstance(String key, String typeId, HashMap extend, boolean folder) { + public static VodFragment newInstance(String key, String typeId, Style style, HashMap extend, boolean folder) { Bundle args = new Bundle(); args.putString("key", key); args.putString("typeId", typeId); args.putBoolean("folder", folder); + args.putParcelable("style", style); args.putSerializable("extend", extend); VodFragment fragment = new VodFragment(); fragment.setArguments(args); @@ -100,7 +101,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } private Style getStyle() { - return isFolder() ? Style.list() : getSite().getStyle(); + return isFolder() ? Style.list() : getSite().getStyle(mPages.isEmpty() ? getArguments().getParcelable("style") : getLastPage().getStyle()); } @Override @@ -261,7 +262,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback @Override public void onItemClick(Vod item) { if (item.isFolder()) { - mPages.add(Page.get(item.getVodId(), mBinding.recycler.getSelectedPosition())); + mPages.add(Page.get(item, mBinding.recycler.getSelectedPosition())); mBinding.recycler.setMoveTop(false); getVideo(item.getVodId(), "1"); } else { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Cate.java b/app/src/main/java/com/fongmi/android/tv/bean/Cate.java index f65bdf671..6b8e22bcc 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Cate.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Cate.java @@ -10,6 +10,12 @@ public class Cate implements Parcelable { @SerializedName("land") private int land; + @SerializedName("circle") + private int circle; + + @SerializedName("ratio") + private float ratio; + public Cate() { } @@ -17,8 +23,16 @@ public class Cate implements Parcelable { return land; } - public void setLand(int land) { - this.land = land; + public int getCircle() { + return circle; + } + + public float getRatio() { + return ratio; + } + + public Style getStyle() { + return Style.get(getLand(), getCircle(), getRatio()); } @Override @@ -29,10 +43,14 @@ public class Cate implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.land); + dest.writeInt(this.circle); + dest.writeFloat(this.ratio); } protected Cate(Parcel in) { this.land = in.readInt(); + this.circle = in.readInt(); + this.ratio = in.readFloat(); } public static final Creator CREATOR = new Creator<>() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Class.java b/app/src/main/java/com/fongmi/android/tv/bean/Class.java index 98c256691..9fa7cfc84 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Class.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Class.java @@ -34,6 +34,15 @@ public class Class implements Parcelable { @SerializedName("filters") private List filters; + @SerializedName("land") + private int land; + + @SerializedName("circle") + private int circle; + + @SerializedName("ratio") + private float ratio; + private Boolean filter; private boolean activated; @@ -78,6 +87,18 @@ public class Class implements Parcelable { this.setFilter(false); } + public int getLand() { + return land; + } + + public int getCircle() { + return circle; + } + + public float getRatio() { + return ratio; + } + public void setFilter(Boolean filter) { this.filter = filter; } @@ -108,6 +129,10 @@ public class Class implements Parcelable { this.typeName = Trans.s2t(typeName); } + public Style getStyle() { + return Style.get(getLand(), getCircle(), getRatio()); + } + public HashMap getExtend() { HashMap extend = new HashMap<>(); for (Filter filter : getFilters()) if (filter.getInit() != null) extend.put(filter.getKey(), filter.setActivated(filter.getInit())); @@ -134,6 +159,9 @@ public class Class implements Parcelable { dest.writeString(this.typeFlag); dest.writeList(this.filters); dest.writeValue(this.filter); + dest.writeInt(this.land); + dest.writeInt(this.circle); + dest.writeFloat(this.ratio); dest.writeByte(this.activated ? (byte) 1 : (byte) 0); } @@ -144,6 +172,9 @@ public class Class implements Parcelable { this.filters = new ArrayList<>(); in.readList(this.filters, Filter.class.getClassLoader()); this.filter = (Boolean) in.readValue(Boolean.class.getClassLoader()); + this.land = in.readInt(); + this.circle = in.readInt(); + this.ratio = in.readFloat(); this.activated = in.readByte() != 0; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Page.java b/app/src/main/java/com/fongmi/android/tv/bean/Page.java index 3cb08bd9e..37becd7e9 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Page.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Page.java @@ -5,14 +5,16 @@ import androidx.annotation.Nullable; public class Page { private final String vodId; + private final Style style; private final int position; - public static Page get(String vodId, int position) { - return new Page(vodId, position); + public static Page get(Vod vod, int position) { + return new Page(vod, position); } - private Page(String vodId, int position) { - this.vodId = vodId; + private Page(Vod vod, int position) { + this.vodId = vod.getVodId(); + this.style = vod.getCate() != null ? vod.getCate().getStyle() : null; this.position = position; } @@ -20,6 +22,10 @@ public class Page { return vodId; } + public Style getStyle() { + return style; + } + public int getPosition() { return position; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index 4435b8187..5fb7616ee 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -184,7 +184,11 @@ public class Site implements Parcelable { } public Style getStyle() { - return style == null ? Style.rect() : style; + return style; + } + + public Style getStyle(Style style) { + return getStyle() != null ? getStyle() : style != null ? style : Style.rect(); } public boolean isActivated() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Style.java b/app/src/main/java/com/fongmi/android/tv/bean/Style.java index b3caedc50..898d4c97b 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Style.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Style.java @@ -14,7 +14,7 @@ public class Style implements Parcelable { @SerializedName("type") private String type; @SerializedName("ratio") - private Float ratio; + private float ratio; public static Style rect() { return new Style("rect", 0.75f); @@ -24,6 +24,12 @@ public class Style implements Parcelable { return new Style("list"); } + public static Style get(int land, int circle, float ratio) { + if (land == 1) return new Style("rect", ratio == 0 ? 1.33f : ratio); + if (circle == 1) return new Style("oval", ratio == 0 ? 1.0f : ratio); + return null; + } + public Style() { } @@ -31,7 +37,7 @@ public class Style implements Parcelable { this.type = type; } - public Style(String type, Float ratio) { + public Style(String type, float ratio) { this.type = type; this.ratio = ratio; } @@ -40,8 +46,8 @@ public class Style implements Parcelable { return TextUtils.isEmpty(type) ? "rect" : type; } - public Float getRatio() { - return ratio == null || ratio <= 0 ? (isOval() ? 1.0f : 0.75f) : Math.min(4, ratio); + public float getRatio() { + return ratio <= 0 ? (isOval() ? 1.0f : 0.75f) : Math.min(4, ratio); } public boolean isRect() { @@ -76,7 +82,7 @@ public class Style implements Parcelable { if (this == obj) return true; if (!(obj instanceof Style)) return false; Style it = (Style) obj; - return getType().equals(it.getType()) && getRatio().equals(it.getRatio()); + return getType().equals(it.getType()) && getRatio() == it.getRatio(); } @Override @@ -87,12 +93,12 @@ public class Style implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.type); - dest.writeValue(this.ratio); + dest.writeFloat(this.ratio); } protected Style(Parcel in) { this.type = in.readString(); - this.ratio = (Float) in.readValue(Float.class.getClassLoader()); + this.ratio = in.readFloat(); } public static final Creator