From 67c784bdc25421bb0e105e51ab70621547c2c4f2 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 14 Apr 2023 10:45:42 +0800 Subject: [PATCH] [leanback] support translate vod --- .../android/tv/ui/activity/VodActivity.java | 3 ++- .../com/fongmi/android/tv/bean/Class.java | 6 ++++++ .../com/fongmi/android/tv/bean/Filter.java | 21 +++++++++++++++---- .../com/fongmi/android/tv/bean/Result.java | 13 ++++++++++-- .../java/com/fongmi/android/tv/bean/Sub.java | 6 ++++++ .../java/com/fongmi/android/tv/bean/Vod.java | 14 ++++++++++++- .../fongmi/android/tv/gson/FilterAdapter.java | 4 ++-- .../com/fongmi/android/tv/utils/Trans.java | 4 ++++ .../android/tv/ui/fragment/VodFragment.java | 2 +- 9 files changed, 62 insertions(+), 11 deletions(-) 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 8d0ea7681..7be39510c 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 @@ -28,6 +28,7 @@ import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.fragment.VodFragment; import com.fongmi.android.tv.ui.presenter.TypePresenter; import com.fongmi.android.tv.utils.ResUtil; +import com.fongmi.android.tv.utils.Trans; import com.fongmi.android.tv.utils.Utils; import com.google.gson.Gson; @@ -101,7 +102,7 @@ public class VodActivity extends BaseActivity { private List getTypes(Result result) { List types = new ArrayList<>(); - for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (cate.equals(type.getTypeName())) types.add(type); + for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (Trans.get(cate).equals(type.getTypeName())) types.add(type); return types; } 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 47cc3c97f..c3e497adb 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 @@ -2,6 +2,7 @@ package com.fongmi.android.tv.bean; import android.text.TextUtils; +import com.fongmi.android.tv.utils.Trans; import com.google.gson.annotations.SerializedName; import org.simpleframework.xml.Attribute; @@ -88,6 +89,11 @@ public class Class { return getTypeId().equals("home"); } + public void trans() { + if (Trans.pass()) return; + this.typeName = Trans.get(typeName); + } + @Override public boolean equals(Object obj) { if (this == obj) return true; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Filter.java b/app/src/main/java/com/fongmi/android/tv/bean/Filter.java index b2bc71f63..be84211d6 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Filter.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Filter.java @@ -1,5 +1,8 @@ package com.fongmi.android.tv.bean; +import android.text.TextUtils; + +import com.fongmi.android.tv.utils.Trans; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.annotations.SerializedName; @@ -33,11 +36,17 @@ public class Filter { } public String getName() { - return name; + return TextUtils.isEmpty(name) ? "" : name; } public List getValue() { - return value; + return value == null ? Collections.emptyList() : value; + } + + public Filter trans() { + if (Trans.pass()) return this; + for (Value value : getValue()) value.trans(); + return this; } public static class Value { @@ -50,11 +59,11 @@ public class Filter { private boolean activated; public String getN() { - return n; + return TextUtils.isEmpty(n) ? "" : n; } public String getV() { - return v; + return TextUtils.isEmpty(v) ? "" : v; } public boolean isActivated() { @@ -65,6 +74,10 @@ public class Filter { this.activated = item.equals(this); } + public void trans() { + this.n = Trans.get(n); + } + @Override public boolean equals(Object obj) { if (this == obj) return true; diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 3724b41a0..2b41e61d2 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import com.fongmi.android.tv.gson.FilterAdapter; import com.fongmi.android.tv.utils.Json; +import com.fongmi.android.tv.utils.Trans; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.annotations.SerializedName; @@ -59,7 +60,7 @@ public class Result { public static Result fromJson(String str) { try { Result result = FilterAdapter.gson().fromJson(str, Result.class); - return result == null ? empty() : result; + return result == null ? empty() : result.trans(); } catch (Exception e) { return empty(); } @@ -67,7 +68,7 @@ public class Result { public static Result fromXml(String str) { try { - return new Persister().read(Result.class, str); + return new Persister().read(Result.class, str).trans(); } catch (Exception e) { return empty(); } @@ -202,6 +203,14 @@ public class Result { return this; } + public Result trans() { + if (Trans.pass()) return this; + for (Class type : getTypes()) type.trans(); + for (Vod vod : getList()) vod.trans(); + for (Sub sub : getSubs()) sub.trans(); + return this; + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Sub.java b/app/src/main/java/com/fongmi/android/tv/bean/Sub.java index 9ea302c8d..aed98bba4 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Sub.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Sub.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import androidx.media3.common.MediaItem; +import com.fongmi.android.tv.utils.Trans; import com.google.gson.annotations.SerializedName; public class Sub { @@ -34,6 +35,11 @@ public class Sub { return TextUtils.isEmpty(format) ? "" : format; } + public void trans() { + if (Trans.pass()) return; + this.name = Trans.get(name); + } + public MediaItem.SubtitleConfiguration getExo() { return new MediaItem.SubtitleConfiguration.Builder(Uri.parse(getUrl())).setLabel(getName()).setMimeType(getFormat()).setLanguage(getLang()).build(); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index a453e5d82..4e5a2202f 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -5,6 +5,7 @@ import android.view.View; import androidx.annotation.NonNull; +import com.fongmi.android.tv.utils.Trans; import com.fongmi.android.tv.utils.Utils; import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; @@ -175,6 +176,17 @@ public class Vod { return getVodTag().equals("folder"); } + public void trans() { + if (Trans.pass()) return; + this.vodName = Trans.get(vodName); + this.vodArea = Trans.get(vodArea); + this.typeName = Trans.get(typeName); + this.vodActor = Trans.get(vodActor); + this.vodRemarks = Trans.get(vodRemarks); + this.vodContent = Trans.get(vodContent); + this.vodDirector = Trans.get(vodDirector); + } + public void setVodFlags() { String[] playFlags = getVodPlayFrom().split("\\$\\$\\$"); String[] playUrls = getVodPlayUrl().split("\\$\\$\\$"); @@ -296,7 +308,7 @@ public class Vod { public Episode(String name, String url) { this.number = Utils.getDigit(name); - this.name = name; + this.name = Trans.get(name); this.url = url; } diff --git a/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java b/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java index d56a7def0..18eb7c60c 100644 --- a/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java +++ b/app/src/main/java/com/fongmi/android/tv/gson/FilterAdapter.java @@ -30,8 +30,8 @@ public class FilterAdapter implements JsonDeserializer items = new ArrayList<>(); JsonElement element = filters.get(key); - if (element.isJsonObject()) items.add(Filter.objectFrom(element)); - else for (JsonElement item : element.getAsJsonArray()) items.add(Filter.objectFrom(item)); + if (element.isJsonObject()) items.add(Filter.objectFrom(element).trans()); + else for (JsonElement item : element.getAsJsonArray()) items.add(Filter.objectFrom(item).trans()); filterMap.put(key, items); } return filterMap; diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Trans.java b/app/src/main/java/com/fongmi/android/tv/utils/Trans.java index 2895a6435..426703198 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Trans.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Trans.java @@ -31,6 +31,10 @@ public class Trans { for (int i = 0, n = UTF8T.length; i < n; ++i) map.put(UTF8S[i], UTF8T[i]); } + public static boolean pass() { + return !get().trans; + } + public static String get(String text) { if (!get().trans || TextUtils.isEmpty(text)) return text; char[] chars = text.toCharArray(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 30769e978..f4a6440e4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -145,7 +145,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal private Result handle(Result result) { List types = new ArrayList<>(); - for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (cate.equals(type.getTypeName())) types.add(type); + for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (Trans.get(cate).equals(type.getTypeName())) types.add(type); result.setTypes(types); return result; }