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"> + + + + + + + + + + + + - - - - - -