Merge pull request #482 from okcaptain/dev

Dev
pull/483/head^2
okcaptain 2 years ago committed by GitHub
commit 59249c569a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      app/build.gradle
  2. 5
      app/proguard-rules.pro
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VodActivity.java
  5. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  6. 2
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
  7. 10
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  8. 14
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  9. 10
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  10. 22
      app/src/main/java/com/fongmi/android/tv/player/danmu/Parser.java
  11. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  12. 13
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java
  13. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  14. 28
      app/src/mobile/res/layout/fragment_setting_custom.xml
  15. 2
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java

@ -14,7 +14,7 @@ android {
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 237
versionName "2.3.7"
versionName "0604"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]

@ -21,6 +21,8 @@
-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Text <fields>; }
-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Path <fields>; }
-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.ElementList <fields>; }
-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Root <fields>; }
-keepclassmembers,allowobfuscation class * { @org.simpleframework.xml.Attribute <fields>; }
# OkHttp
-dontwarn okhttp3.**
@ -90,6 +92,9 @@
public static ** valueOf(java.lang.String);
}
# bean
-keep class com.fongmi.android.tv.bean.** { *; }
# x5
-dontwarn dalvik.**
-dontwarn com.tencent.smtt.**

@ -1227,6 +1227,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
if (Setting.isIncognito() && mHistory.getKey().equals(getHistoryKey())) mHistory.delete();
mBinding.control.opening.setText(mHistory.getOpening() == 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening()));
mBinding.control.ending.setText(mHistory.getEnding() == 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding()));
mHistory.setVodPic(item.getVodPic());
mPlayers.setPlayer(getPlayer());
setScale(getScale());
setPlayerView();
@ -1237,7 +1238,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
History history = new History();
history.setKey(getHistoryKey());
history.setCid(VodConfig.getCid());
history.setVodPic(item.getVodPic());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
history.setSpeed(Setting.getPlaySpeed());

@ -31,7 +31,6 @@ import com.fongmi.android.tv.ui.presenter.TypePresenter;
import com.fongmi.android.tv.utils.KeyUtil;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.utils.Prefers;
import com.github.catvod.utils.Trans;
import java.util.ArrayList;
import java.util.List;
@ -110,7 +109,7 @@ public class VodActivity extends BaseActivity implements TypePresenter.OnClickLi
private List<Class> getTypes(Result result) {
List<Class> items = new ArrayList<>();
for (String cate : getSite().getCategories()) for (Class item : result.getTypes()) if (Trans.s2t(cate).equals(item.getTypeName())) items.add(item);
for (String cate : getSite().getCategories()) for (Class item : result.getTypes()) if (cate.equals(item.getTypeName())) items.add(item);
return items;
}

@ -286,14 +286,6 @@ public class Setting {
return Math.min(Math.max(Prefers.getInt("danmu_alpha", 90), 10), 100);
}
public static void putDanmuSync(boolean sync) {
Prefers.put("danmu_sync", sync);
}
public static boolean isDanmuSync() {
return Prefers.getBoolean("danmu_sync", false);
}
public static void putDanmuAlpha(int alpha) {
Prefers.put("danmu_alpha", alpha);
}

@ -197,7 +197,7 @@ public class VodConfig {
if (sites.contains(site)) continue;
site.setApi(parseApi(site.getApi()));
site.setExt(parseExt(site.getExt()));
sites.add(site.sync());
sites.add(site.trans().sync());
}
for (Site site : sites) {
if (site.getKey().equals(config.getHome())) {

@ -70,6 +70,8 @@ public class Result implements Parcelable {
private String format;
@SerializedName("click")
private String click;
@SerializedName("js")
private String js;
@SerializedName("key")
private String key;
@SerializedName("pagecount")
@ -241,6 +243,14 @@ public class Result implements Parcelable {
this.click = click;
}
public String getJs() {
return TextUtils.isEmpty(js) ? "" : js;
}
public void setJs(String js) {
this.js = js;
}
public String getKey() {
return TextUtils.isEmpty(key) ? "" : key;
}

@ -15,10 +15,12 @@ import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.gson.ExtAdapter;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Trans;
import com.google.gson.JsonElement;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -203,6 +205,10 @@ public class Site implements Parcelable {
return categories == null ? Collections.emptyList() : categories;
}
public void setCategories(List<String> categories) {
this.categories = categories;
}
public JsonElement getHeader() {
return header;
}
@ -253,6 +259,14 @@ public class Site implements Parcelable {
return Headers.of(Json.toMap(getHeader()));
}
public Site trans() {
if (Trans.pass()) return this;
List<String> categories = new ArrayList<>();
for (String cate : getCategories()) categories.add(Trans.s2t(cate));
setCategories(categories);
return this;
}
public Site sync() {
Site item = find(getKey());
if (item == null) return this;

@ -81,11 +81,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
private Sub sub;
private long position;
private float speed;
private int player;
private int error;
private int retry;
private boolean danmuSync;
public static boolean isExo(int type) {
return type == EXO;
@ -112,7 +110,6 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
builder = new StringBuilder();
runnable = ErrorEvent::timeout;
formatter = new Formatter(builder, Locale.getDefault());
danmuSync = Setting.isDanmuSync();
createSession(activity);
return this;
}
@ -308,8 +305,8 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
}
public String setSpeed(float speed) {
if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(this.speed = speed);
if (ijkPlayer != null) ijkPlayer.setSpeed(this.speed = speed);
if (exoPlayer != null && !Setting.isTunnel()) exoPlayer.setPlaybackSpeed(speed);
if (ijkPlayer != null) ijkPlayer.setSpeed(speed);
return getSpeedText();
}
@ -689,8 +686,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic
@Override
public void updateTimer(DanmakuTimer timer) {
if (danmuSync) App.post(() -> timer.update(getPosition()));
else if (speed != 1) timer.add((long) (timer.lastInterval() * (speed - 1)));
}
@Override

@ -24,10 +24,8 @@ import master.flame.danmaku.danmaku.util.DanmakuUtils;
public class Parser extends BaseDanmakuParser {
private final Danmu danmu;
private BaseDanmaku item;
private float scaleX;
private float scaleY;
private int index;
public Parser(String path) {
this.danmu = Danmu.fromXml(getContent(path));
@ -45,11 +43,9 @@ public class Parser extends BaseDanmakuParser {
for (Danmu.Data data : danmu.getData()) {
String[] values = data.getParam().split(",");
if (values.length < 4) continue;
setParam(values);
setText(data.getText());
synchronized (result.obtainSynchronizer()) {
result.addItem(item);
}
BaseDanmaku item = createDanmaku(values);
setText(item, data.getText());
result.addItem(item);
}
return result;
}
@ -62,27 +58,27 @@ public class Parser extends BaseDanmakuParser {
return this;
}
private void setParam(String[] values) {
private BaseDanmaku createDanmaku(String[] values) {
int type = Integer.parseInt(values[1]);
long time = (long) (Float.parseFloat(values[0]) * 1000);
float size = Float.parseFloat(values[2]) * (mDispDensity - 0.6f);
int color = (int) ((0x00000000ff000000L | Long.parseLong(values[3])) & 0x00000000ffffffffL);
item = mContext.mDanmakuFactory.createDanmaku(type, mContext);
BaseDanmaku item = mContext.mDanmakuFactory.createDanmaku(type, mContext);
item.setTime(time);
item.setTimer(mTimer);
item.textSize = size;
item.textColor = color;
item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK;
item.flags = mContext.mGlobalFlagValues;
return item;
}
private void setText(String text) {
item.index = index++;
private void setText(BaseDanmaku item, String text) {
DanmakuUtils.fillText(item, decodeXmlString(text));
if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial();
if (item.getType() == BaseDanmaku.TYPE_SPECIAL && text.startsWith("[") && text.endsWith("]")) setSpecial(item);
}
private void setSpecial() {
private void setSpecial(BaseDanmaku item) {
String[] textArr = null;
try {
JSONArray jsonArray = new JSONArray(item.text);

@ -1131,6 +1131,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
if (Setting.isIncognito() && mHistory.getKey().equals(getHistoryKey())) mHistory.delete();
mBinding.control.action.opening.setText(mHistory.getOpening() == 0 ? getString(R.string.play_op) : mPlayers.stringToTime(mHistory.getOpening()));
mBinding.control.action.ending.setText(mHistory.getEnding() == 0 ? getString(R.string.play_ed) : mPlayers.stringToTime(mHistory.getEnding()));
mHistory.setVodPic(item.getVodPic());
mPlayers.setPlayer(getPlayer());
setScale(getScale());
setPlayerView();
@ -1141,7 +1142,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
History history = new History();
history.setKey(getHistoryKey());
history.setCid(VodConfig.getCid());
history.setVodPic(item.getVodPic());
history.setVodName(item.getVodName());
history.findEpisode(item.getVodFlags());
history.setSpeed(Setting.getPlaySpeed());

@ -45,7 +45,6 @@ public class SettingCustomFragment extends BaseFragment {
@Override
protected void initView() {
mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]);
mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync()));
mBinding.speedText.setText(getSpeedText());
mBinding.incognitoText.setText(getSwitch(Setting.isIncognito()));
mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch()));
@ -57,9 +56,7 @@ public class SettingCustomFragment extends BaseFragment {
@Override
protected void initEvent() {
mBinding.title.setOnLongClickListener(this::onTitle);
mBinding.size.setOnClickListener(this::setSize);
mBinding.danmuSync.setOnClickListener(this::setDanmuSync);
mBinding.speed.setOnClickListener(this::setSpeed);
mBinding.speed.setOnLongClickListener(this::resetSpeed);
mBinding.incognito.setOnClickListener(this::setIncognito);
@ -72,11 +69,6 @@ public class SettingCustomFragment extends BaseFragment {
}
private boolean onTitle(View view) {
mBinding.danmuSync.setVisibility(View.VISIBLE);
return true;
}
private void setSize(View view) {
new MaterialAlertDialogBuilder(getActivity()).setTitle(R.string.setting_size).setNegativeButton(R.string.dialog_negative, null).setSingleChoiceItems(size, Setting.getSize(), (dialog, which) -> {
mBinding.sizeText.setText(size[which]);
@ -86,11 +78,6 @@ public class SettingCustomFragment extends BaseFragment {
}).show();
}
private void setDanmuSync(View view) {
Setting.putDanmuSync(!Setting.isDanmuSync());
mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync()));
}
private String getSpeedText() {
return String.format(Locale.getDefault(), "%.2f", Setting.getPlaySpeed());
}

@ -59,7 +59,6 @@ import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Trans;
import com.google.common.net.HttpHeaders;
import com.permissionx.guolindev.PermissionX;
@ -183,7 +182,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
private Result handle(Result result) {
List<Class> types = new ArrayList<>();
for (Class type : result.getTypes()) if (result.getFilters().containsKey(type.getTypeId())) type.setFilters(result.getFilters().get(type.getTypeId()));
for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (Trans.s2t(cate).equals(type.getTypeName())) types.add(type);
for (String cate : getSite().getCategories()) for (Class type : result.getTypes()) if (cate.equals(type.getTypeName())) types.add(type);
result.setTypes(types);
return result;
}

@ -70,34 +70,6 @@
</LinearLayout>
<LinearLayout
android:id="@+id/danmuSync"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/player_danmu_sync"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/danmuSyncText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="開" />
</LinearLayout>
<LinearLayout
android:id="@+id/speed"
android:layout_width="match_parent"

@ -460,7 +460,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
mPlayer.setOption(format, "fflags", "fastseek");
mPlayer.setOption(format, "http-detect-range-support", 0);
mPlayer.setOption(player, "enable-accurate-seek", 0);
mPlayer.setOption(player, "framedrop", 5);
mPlayer.setOption(player, "framedrop", 1);
mPlayer.setOption(player, "max-buffer-size", 15 * 1024 * 1024);
mPlayer.setOption(player, "mediacodec", mCurrentDecode);
mPlayer.setOption(player, "mediacodec-hevc", mCurrentDecode);

Loading…
Cancel
Save