Support cat style

pull/171/head
FongMi 2 years ago
parent 706695aa31
commit 5ac2b0de68
  1. 1
      app/build.gradle
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  3. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  4. 22
      app/src/main/java/com/fongmi/android/tv/bean/Cate.java
  5. 31
      app/src/main/java/com/fongmi/android/tv/bean/Class.java
  6. 14
      app/src/main/java/com/fongmi/android/tv/bean/Page.java
  7. 6
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  8. 20
      app/src/main/java/com/fongmi/android/tv/bean/Style.java
  9. 34
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java
  10. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/FolderActivity.java
  11. 13
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  12. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java

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

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

@ -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<String, String> extend, boolean folder) {
public static VodFragment newInstance(String key, String typeId, Style style, HashMap<String, String> 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 {

@ -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<Cate> CREATOR = new Creator<>() {

@ -34,6 +34,15 @@ public class Class implements Parcelable {
@SerializedName("filters")
private List<Filter> 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<String, String> getExtend() {
HashMap<String, String> 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;
}

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

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

@ -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<Style> CREATOR = new Creator<>() {

@ -79,6 +79,15 @@ public class Vod implements Parcelable {
@SerializedName("style")
private Style style;
@SerializedName("land")
private int land;
@SerializedName("circle")
private int circle;
@SerializedName("ratio")
private float ratio;
@Path("dl")
@ElementList(entry = "dd", required = false, inline = true)
private List<Flag> vodFlags;
@ -86,7 +95,8 @@ public class Vod implements Parcelable {
private Site site;
public static List<Vod> arrayFrom(String str) {
Type listType = new TypeToken<List<Vod>>() {}.getType();
Type listType = new TypeToken<List<Vod>>() {
}.getType();
List<Vod> items = App.gson().fromJson(str, listType);
return items == null ? Collections.emptyList() : items;
}
@ -163,7 +173,19 @@ public class Vod implements Parcelable {
}
public Style getStyle() {
return style;
return style != null ? style : Style.get(getLand(), getCircle(), getRatio());
}
public int getLand() {
return land;
}
public int getCircle() {
return circle;
}
public float getRatio() {
return ratio;
}
public List<Flag> getVodFlags() {
@ -215,7 +237,7 @@ public class Vod implements Parcelable {
}
public Style getStyle(Style style) {
return getStyle() == null ? style : getStyle();
return getStyle() != null ? getStyle() : style != null ? style : Style.rect();
}
public String getVodPic(String pic) {
@ -282,6 +304,9 @@ public class Vod implements Parcelable {
dest.writeString(this.vodPlayFrom);
dest.writeString(this.vodPlayUrl);
dest.writeString(this.vodTag);
dest.writeInt(this.land);
dest.writeInt(this.circle);
dest.writeFloat(this.ratio);
dest.writeParcelable(this.cate, flags);
dest.writeParcelable(this.style, flags);
dest.writeTypedList(this.vodFlags);
@ -302,6 +327,9 @@ public class Vod implements Parcelable {
this.vodPlayFrom = in.readString();
this.vodPlayUrl = in.readString();
this.vodTag = in.readString();
this.land = in.readInt();
this.circle = in.readInt();
this.ratio = in.readFloat();
this.cate = in.readParcelable(Cate.class.getClassLoader());
this.style = in.readParcelable(Style.class.getClassLoader());
this.vodFlags = in.createTypedArrayList(Flag.CREATOR);

@ -45,7 +45,7 @@ public class FolderActivity extends BaseActivity {
Result result = getResult();
Class type = result.getTypes().get(0);
mBinding.text.setText(type.getTypeName());
getSupportFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), type.getTypeId(), new HashMap<>(), type.getTypeFlag().equals("1")), "0").commitAllowingStateLoss();
getSupportFragmentManager().beginTransaction().replace(R.id.container, TypeFragment.newInstance(getKey(), type.getTypeId(), type.getStyle(), new HashMap<>(), type.getTypeFlag().equals("1")), "0").commitAllowingStateLoss();
}
private TypeFragment getFragment() {

@ -44,11 +44,12 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
private List<Page> mPages;
private Page mPage;
public static TypeFragment newInstance(String key, String typeId, HashMap<String, String> extend, boolean folder) {
public static TypeFragment newInstance(String key, String typeId, Style style, HashMap<String, String> 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);
TypeFragment fragment = new TypeFragment();
fragment.setArguments(args);
@ -63,6 +64,10 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
return mPages.isEmpty() ? getArguments().getString("typeId") : getLastPage().getVodId();
}
private Style getStyle() {
return isFolder() ? Style.list() : getSite().getStyle(mPages.isEmpty() ? getArguments().getParcelable("style") : getLastPage().getStyle());
}
private HashMap<String, String> getExtend() {
Serializable extend = getArguments().getSerializable("extend");
return extend == null ? new HashMap<>() : (HashMap<String, String>) extend;
@ -88,10 +93,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
return mPages.get(mPages.size() - 1);
}
private Style getStyle() {
return isFolder() ? Style.list() : getSite().getStyle();
}
@Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentTypeBinding.inflate(inflater, container, false);
@ -213,7 +214,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
public void onItemClick(Vod item) {
if (item.isFolder()) {
mPages.add(Page.get(item.getVodId(), findPosition()));
mPages.add(Page.get(item, findPosition()));
getVideo(item.getVodId(), "1");
} else {
if (item.isManga()) DetailActivity.start(getActivity(), getKey(), item.getVodId(), item.getVodName(), item.getVodPic());

@ -302,7 +302,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
@Override
public Fragment getItem(int position) {
Class type = mAdapter.get(position);
return TypeFragment.newInstance(getSite().getKey(), type.getTypeId(), type.getExtend(), type.getTypeFlag().equals("1"));
return TypeFragment.newInstance(getSite().getKey(), type.getTypeId(), type.getStyle(), type.getExtend(), type.getTypeFlag().equals("1"));
}
@Override

Loading…
Cancel
Save