diff --git a/.idea/misc.xml b/.idea/misc.xml
index fb54da40..efd482e5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -12,13 +12,16 @@
+
+
+
diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
index 0d2528fa..f729e013 100644
--- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
+++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
@@ -58,11 +58,16 @@ public class VodController extends BaseController {
}
case 1002: { // 显示底部菜单
mBottomRoot.setVisibility(VISIBLE);
+ mTopRoot1.setVisibility(VISIBLE);
+ mTopRoot2.setVisibility(VISIBLE);
+ mPlayTitle.setVisibility(GONE);
mBottomRoot.requestFocus();
break;
}
case 1003: { // 隐藏底部菜单
mBottomRoot.setVisibility(GONE);
+ mTopRoot1.setVisibility(GONE);
+ mTopRoot2.setVisibility(GONE);
break;
}
case 1004: { // 设置速度
@@ -90,9 +95,12 @@ public class VodController extends BaseController {
TextView mProgressText;
ImageView mProgressIcon;
LinearLayout mBottomRoot;
+ LinearLayout mTopRoot1;
+ LinearLayout mTopRoot2;
LinearLayout mParseRoot;
TvRecyclerView mGridView;
TextView mPlayTitle;
+ TextView mPlayTitle1;
TextView mNextBtn;
TextView mPreBtn;
TextView mPlayerScaleBtn;
@@ -139,11 +147,14 @@ public class VodController extends BaseController {
mCurrentTime = findViewById(R.id.curr_time);
mTotalTime = findViewById(R.id.total_time);
mPlayTitle = findViewById(R.id.tv_info_name);
+ mPlayTitle1 = findViewById(R.id.tv_info_name1);
mSeekBar = findViewById(R.id.seekBar);
mProgressRoot = findViewById(R.id.tv_progress_container);
mProgressIcon = findViewById(R.id.tv_progress_icon);
mProgressText = findViewById(R.id.tv_progress_text);
mBottomRoot = findViewById(R.id.bottom_container);
+ mTopRoot1 = findViewById(R.id.tv_top_l_container);
+ mTopRoot2 = findViewById(R.id.tv_top_r_container);
mParseRoot = findViewById(R.id.parse_root);
mGridView = findViewById(R.id.mGridView);
mPlayerRetry = findViewById(R.id.play_retry);
@@ -510,6 +521,7 @@ public class VodController extends BaseController {
public void setTitle(String playTitleInfo) {
mPlayTitle.setText(playTitleInfo);
+ mPlayTitle1.setText(playTitleInfo);
}
public void resetSpeed() {
@@ -632,6 +644,9 @@ public class VodController extends BaseController {
startProgress();
break;
case VideoView.STATE_PAUSED:
+ mTopRoot1.setVisibility(GONE);
+ mTopRoot2.setVisibility(GONE);
+ mPlayTitle.setVisibility(VISIBLE);
break;
case VideoView.STATE_ERROR:
listener.errReplay();
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
index 05b2f090..06394016 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
@@ -119,6 +119,7 @@ public class DetailActivity extends BaseActivity {
private View seriesFlagFocus = null;
private boolean isReverse;
private String preFlag="";
+ private boolean firstReverse;
private V7GridLayoutManager mGridViewLayoutMgr = null;
@Override
@@ -162,7 +163,6 @@ public class DetailActivity extends BaseActivity {
mGridView.setHasFixedSize(false);
this.mGridViewLayoutMgr = new V7GridLayoutManager(this.mContext, isBaseOnWidth() ? 6 : 7);
mGridView.setLayoutManager(this.mGridViewLayoutMgr);
-// mGridView.setLayoutManager(new V7GridLayoutManager(this.mContext, isBaseOnWidth() ? 6 : 7));
seriesAdapter = new SeriesAdapter();
mGridView.setAdapter(seriesAdapter);
mGridViewFlag = findViewById(R.id.mGridViewFlag);
@@ -171,6 +171,7 @@ public class DetailActivity extends BaseActivity {
seriesFlagAdapter = new SeriesFlagAdapter();
mGridViewFlag.setAdapter(seriesFlagAdapter);
isReverse = false;
+ firstReverse = false;
if (showPreview) {
playFragment = new PlayFragment();
getSupportFragmentManager().beginTransaction().add(R.id.previewPlayer, playFragment).commit();
@@ -186,7 +187,8 @@ public class DetailActivity extends BaseActivity {
isReverse = !isReverse;
vodInfo.reverse();
vodInfo.playIndex=(vodInfo.seriesMap.get(vodInfo.playFlag).size()-1)-vodInfo.playIndex;
- insertVod(sourceKey, vodInfo);
+// insertVod(sourceKey, vodInfo);
+ firstReverse = true;
seriesAdapter.notifyDataSetChanged();
}
}
@@ -197,8 +199,9 @@ public class DetailActivity extends BaseActivity {
FastClickCheckUtil.check(v);
if (showPreview) {
toggleFullPreview();
- if(isReverse){
+ if(firstReverse){
jumpToPlay();
+ firstReverse=false;
}
} else {
jumpToPlay();
@@ -212,7 +215,7 @@ public class DetailActivity extends BaseActivity {
//获取剪切板管理器
ClipboardManager cm = (ClipboardManager)getSystemService(mContext.CLIPBOARD_SERVICE);
//设置内容到剪切板
- cm.setPrimaryClip(ClipData.newPlainText(null, tvPlayUrl.getText().toString()));
+ cm.setPrimaryClip(ClipData.newPlainText(null, tvPlayUrl.getText().toString().replace("播放地址:","")));
Toast.makeText(DetailActivity.this, "已复制", Toast.LENGTH_SHORT).show();
}
});
@@ -296,8 +299,6 @@ public class DetailActivity extends BaseActivity {
vodInfo.seriesMap.get(vodInfo.playFlag).get(vodInfo.playIndex).selected = false;
}
vodInfo.playFlag = newFlag;
- //更新播放地址
- setTextShow(tvPlayUrl, "播放地址:", vodInfo.seriesMap.get(vodInfo.playFlag).get(0).url);
seriesFlagAdapter.notifyItemChanged(position);
refreshList();
}
@@ -348,7 +349,10 @@ public class DetailActivity extends BaseActivity {
seriesAdapter.notifyItemChanged(vodInfo.playIndex);
//选集全屏 想选集不全屏的注释下面一行
if (showPreview && !fullWindows) toggleFullPreview();
- if (!showPreview || reload) jumpToPlay();
+ if (!showPreview || reload) {
+ jumpToPlay();
+ firstReverse=false;
+ }
}
}
});
@@ -526,7 +530,6 @@ public class DetailActivity extends BaseActivity {
}
//设置播放地址
setTextShow(tvPlayUrl, "播放地址:", vodInfo.seriesMap.get(vodInfo.playFlag).get(0).url);
-
seriesFlagAdapter.setNewData(vodInfo.seriesFlags);
mGridViewFlag.scrollToPosition(flagScrollTo);
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
index 4353b709..38ae9c6e 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
@@ -287,6 +287,7 @@ public class PlayActivity extends BaseActivity {
String flag = info.optString("flag");
String url = info.getString("url");
HashMap headers = null;
+ webUserAgent = null;
if (info.has("header")) {
try {
JSONObject hds = new JSONObject(info.getString("header"));
@@ -297,6 +298,9 @@ public class PlayActivity extends BaseActivity {
headers = new HashMap<>();
}
headers.put(key, hds.getString(key));
+ if (key.equalsIgnoreCase("user-agent")) {
+ webUserAgent = hds.getString(key).trim();
+ }
}
} catch (Throwable th) {
@@ -503,6 +507,7 @@ public class PlayActivity extends BaseActivity {
private String progressKey;
private String parseFlag;
private String webUrl;
+ private String webUserAgent;
private void initParse(String flag, boolean useParse, String playUrl, final String url) {
parseFlag = flag;
@@ -823,23 +828,48 @@ public class PlayActivity extends BaseActivity {
}
}
- void loadUrl(String url) {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- if (mXwalkWebView != null) {
- mXwalkWebView.stopLoading();
- mXwalkWebView.clearCache(true);
- mXwalkWebView.loadUrl(url);
- }
- if (mSysWebView != null) {
- mSysWebView.stopLoading();
- mSysWebView.clearCache(true);
- mSysWebView.loadUrl(url);
+// void loadUrl(String url) {
+// runOnUiThread(new Runnable() {
+// @Override
+// public void run() {
+// if (mXwalkWebView != null) {
+// mXwalkWebView.stopLoading();
+// mXwalkWebView.clearCache(true);
+// mXwalkWebView.loadUrl(url);
+// }
+// if (mSysWebView != null) {
+// mSysWebView.stopLoading();
+// mSysWebView.clearCache(true);
+// mSysWebView.loadUrl(url);
+// }
+// }
+// });
+// }
+ void loadUrl(String url) {
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // webUserAgent = "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36";
+ String ua = webUserAgent;
+ if (mXwalkWebView != null) {
+ mXwalkWebView.stopLoading();
+ if(ua != null) {
+ mXwalkWebView.getSettings().setUserAgentString(ua);
+ }
+ //mXwalkWebView.clearCache(true);
+ mXwalkWebView.loadUrl(url);
+ }
+ if (mSysWebView != null) {
+ mSysWebView.stopLoading();
+ if(ua != null) {
+ mSysWebView.getSettings().setUserAgentString(ua);
+ }
+ //mSysWebView.clearCache(true);
+ mSysWebView.loadUrl(url);
+ }
}
- }
- });
- }
+ });
+ }
void stopLoadWebView(boolean destroy) {
runOnUiThread(new Runnable() {
@@ -850,7 +880,7 @@ public class PlayActivity extends BaseActivity {
mXwalkWebView.stopLoading();
mXwalkWebView.loadUrl("about:blank");
if (destroy) {
- mXwalkWebView.clearCache(true);
+// mXwalkWebView.clearCache(true);
mXwalkWebView.removeAllViews();
mXwalkWebView.onDestroy();
mXwalkWebView = null;
@@ -860,7 +890,7 @@ public class PlayActivity extends BaseActivity {
mSysWebView.stopLoading();
mSysWebView.loadUrl("about:blank");
if (destroy) {
- mSysWebView.clearCache(true);
+// mSysWebView.clearCache(true);
mSysWebView.removeAllViews();
mSysWebView.destroy();
mSysWebView = null;
@@ -956,7 +986,8 @@ public class PlayActivity extends BaseActivity {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
- settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
/* 添加webView配置 */
//设置编码
settings.setDefaultTextEncodingName("utf-8");
@@ -1116,7 +1147,8 @@ public class PlayActivity extends BaseActivity {
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(false);
- settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// settings.setUserAgentString(ANDROID_UA);
webView.setBackgroundColor(Color.BLACK);
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
index dd93c497..7cebffd3 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
@@ -285,6 +285,7 @@ public class PlayFragment extends BaseLazyFragment {
String flag = info.optString("flag");
String url = info.getString("url");
HashMap headers = null;
+ webUserAgent = null;
if (info.has("header")) {
try {
JSONObject hds = new JSONObject(info.getString("header"));
@@ -295,6 +296,9 @@ public class PlayFragment extends BaseLazyFragment {
headers = new HashMap<>();
}
headers.put(key, hds.getString(key));
+ if (key.equalsIgnoreCase("user-agent")) {
+ webUserAgent = hds.getString(key).trim();
+ }
}
} catch (Throwable th) {
@@ -515,6 +519,7 @@ public class PlayFragment extends BaseLazyFragment {
private String progressKey;
private String parseFlag;
private String webUrl;
+ private String webUserAgent;
private void initParse(String flag, boolean useParse, String playUrl, final String url) {
parseFlag = flag;
@@ -836,18 +841,44 @@ public class PlayFragment extends BaseLazyFragment {
}
}
+// void loadUrl(String url) {
+// requireActivity().runOnUiThread(new Runnable() {
+// @Override
+// public void run() {
+// if (mXwalkWebView != null) {
+// mXwalkWebView.stopLoading();
+// mXwalkWebView.clearCache(true);
+// mXwalkWebView.loadUrl(url);
+// }
+// if (mSysWebView != null) {
+// mSysWebView.stopLoading();
+// mSysWebView.clearCache(true);
+// mSysWebView.loadUrl(url);
+// }
+// }
+// });
+// }
+
void loadUrl(String url) {
requireActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
+ // webUserAgent = "Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36";
+ String ua = webUserAgent;
if (mXwalkWebView != null) {
mXwalkWebView.stopLoading();
- mXwalkWebView.clearCache(true);
+ if(ua != null) {
+ mXwalkWebView.getSettings().setUserAgentString(ua);
+ }
+ //mXwalkWebView.clearCache(true);
mXwalkWebView.loadUrl(url);
}
if (mSysWebView != null) {
mSysWebView.stopLoading();
- mSysWebView.clearCache(true);
+ if(ua != null) {
+ mSysWebView.getSettings().setUserAgentString(ua);
+ }
+ //mSysWebView.clearCache(true);
mSysWebView.loadUrl(url);
}
}
@@ -863,7 +894,7 @@ public class PlayFragment extends BaseLazyFragment {
mXwalkWebView.stopLoading();
mXwalkWebView.loadUrl("about:blank");
if (destroy) {
- mXwalkWebView.clearCache(true);
+// mXwalkWebView.clearCache(true);
mXwalkWebView.removeAllViews();
mXwalkWebView.onDestroy();
mXwalkWebView = null;
@@ -873,7 +904,7 @@ public class PlayFragment extends BaseLazyFragment {
mSysWebView.stopLoading();
mSysWebView.loadUrl("about:blank");
if (destroy) {
- mSysWebView.clearCache(true);
+// mSysWebView.clearCache(true);
mSysWebView.removeAllViews();
mSysWebView.destroy();
mSysWebView = null;
@@ -969,7 +1000,8 @@ public class PlayFragment extends BaseLazyFragment {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
- settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
/* 添加webView配置 */
//设置编码
settings.setDefaultTextEncodingName("utf-8");
@@ -1129,7 +1161,8 @@ public class PlayFragment extends BaseLazyFragment {
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(false);
- settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+// settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
+ settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// settings.setUserAgentString(ANDROID_UA);
webView.setBackgroundColor(Color.BLACK);
diff --git a/app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java b/app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java
index 4f744a3a..ed71514a 100644
--- a/app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java
+++ b/app/src/main/java/com/github/tvbox/osc/util/PlayerHelper.java
@@ -191,6 +191,6 @@ public class PlayerHelper {
else if(speed > 1024)
return (speed / 1024) + "KB/s";
else
- return speed + "B/s";
+ return speed > 0?speed + "B/s":"";
}
}
diff --git a/app/src/main/res/layout/activity_detail.xml b/app/src/main/res/layout/activity_detail.xml
index 0252aa2e..0f371c51 100644
--- a/app/src/main/res/layout/activity_detail.xml
+++ b/app/src/main/res/layout/activity_detail.xml
@@ -154,7 +154,7 @@
android:layout_height="wrap_content"
android:ellipsize="end"
android:lineSpacingMultiplier="1.2"
- android:maxLines="4"
+ android:maxLines="3"
android:textColor="@color/color_CCFFFFFF"
android:textSize="@dimen/ts_20" />
diff --git a/app/src/main/res/layout/player_vod_control_view.xml b/app/src/main/res/layout/player_vod_control_view.xml
index 50699c2d..4fbd63f2 100644
--- a/app/src/main/res/layout/player_vod_control_view.xml
+++ b/app/src/main/res/layout/player_vod_control_view.xml
@@ -5,6 +5,73 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-