|
|
|
|
@ -119,7 +119,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
private SourceViewModel sourceViewModel; |
|
|
|
|
private Handler mHandler; |
|
|
|
|
|
|
|
|
|
private long videoDuration = -1; |
|
|
|
|
private final long videoDuration = -1; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected int getLayoutResID() { |
|
|
|
|
@ -147,14 +147,24 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} catch (JSONException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
long skip = st * 1000; |
|
|
|
|
if (CacheManager.getCache(MD5.string2MD5(url)) == null) { |
|
|
|
|
long skip = st * 1000L; |
|
|
|
|
Object theCache=CacheManager.getCache(MD5.string2MD5(url)); |
|
|
|
|
if (theCache == null) { |
|
|
|
|
return skip; |
|
|
|
|
} |
|
|
|
|
long rec = (long) CacheManager.getCache(MD5.string2MD5(url)); |
|
|
|
|
if (rec < skip) |
|
|
|
|
return skip; |
|
|
|
|
return rec; |
|
|
|
|
long rec = 0; |
|
|
|
|
if (theCache instanceof Long) { |
|
|
|
|
rec = (Long) theCache; |
|
|
|
|
} else if (theCache instanceof String) { |
|
|
|
|
try { |
|
|
|
|
rec = Long.parseLong((String) theCache); |
|
|
|
|
} catch (NumberFormatException e) { |
|
|
|
|
System.out.println("String value is not a valid long."); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
System.out.println("Value cannot be converted to long."); |
|
|
|
|
} |
|
|
|
|
return Math.max(rec, skip); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initView() { |
|
|
|
|
@ -182,7 +192,6 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
ProgressManager progressManager = new ProgressManager() { |
|
|
|
|
@Override |
|
|
|
|
public void saveProgress(String url, long progress) { |
|
|
|
|
if (videoDuration ==0) return; |
|
|
|
|
CacheManager.save(MD5.string2MD5(url), progress); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -294,15 +303,14 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
searchSubtitleDialog.setSubtitleLoader(new SearchSubtitleDialog.SubtitleLoader() { |
|
|
|
|
@Override |
|
|
|
|
public void loadSubtitle(Subtitle subtitle) { |
|
|
|
|
if (!isAdded()) return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
String zimuUrl = subtitle.getUrl(); |
|
|
|
|
LOG.i("Remote Subtitle Url: " + zimuUrl); |
|
|
|
|
setSubtitle(zimuUrl);//设置字幕
|
|
|
|
|
if (searchSubtitleDialog != null) { |
|
|
|
|
searchSubtitleDialog.dismiss(); |
|
|
|
|
} |
|
|
|
|
searchSubtitleDialog.dismiss(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
@ -335,6 +343,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
subtitleDialog.show(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@SuppressLint("UseCompatLoadingForColorStateLists") |
|
|
|
|
void setSubtitleViewTextStyle(int style) { |
|
|
|
|
if (style == 0) { |
|
|
|
|
mController.mSubtitleView.setTextColor(getContext().getResources().getColorStateList(R.color.color_FFFFFF)); |
|
|
|
|
@ -349,9 +358,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
TrackInfo trackInfo = null; |
|
|
|
|
if (mediaPlayer instanceof IjkMediaPlayer) { |
|
|
|
|
trackInfo = ((IjkMediaPlayer)mediaPlayer).getTrackInfo(); |
|
|
|
|
} |
|
|
|
|
trackInfo = ((IjkMediaPlayer)mediaPlayer).getTrackInfo(); |
|
|
|
|
if (trackInfo == null) { |
|
|
|
|
Toast.makeText(mContext, "没有音轨", Toast.LENGTH_SHORT).show(); |
|
|
|
|
return; |
|
|
|
|
@ -369,9 +376,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
mediaPlayer.pause(); |
|
|
|
|
long progress = mediaPlayer.getCurrentPosition();//保存当前进度,ijk 切换轨道 会有快进几秒
|
|
|
|
|
if (mediaPlayer instanceof IjkMediaPlayer) { |
|
|
|
|
((IjkMediaPlayer)mediaPlayer).setTrack(value.index); |
|
|
|
|
} |
|
|
|
|
((IjkMediaPlayer)mediaPlayer).setTrack(value.index); |
|
|
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -412,9 +417,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
TrackInfo trackInfo = null; |
|
|
|
|
if (mediaPlayer instanceof IjkMediaPlayer) { |
|
|
|
|
trackInfo = ((IjkMediaPlayer)mediaPlayer).getTrackInfo(); |
|
|
|
|
} |
|
|
|
|
trackInfo = ((IjkMediaPlayer)mediaPlayer).getTrackInfo(); |
|
|
|
|
if (trackInfo == null) { |
|
|
|
|
Toast.makeText(mContext, "没有内置字幕", Toast.LENGTH_SHORT).show(); |
|
|
|
|
return; |
|
|
|
|
@ -432,19 +435,17 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
mediaPlayer.pause(); |
|
|
|
|
long progress = mediaPlayer.getCurrentPosition();//保存当前进度,ijk 切换轨道 会有快进几秒
|
|
|
|
|
if (mediaPlayer instanceof IjkMediaPlayer) { |
|
|
|
|
mController.mSubtitleView.destroy(); |
|
|
|
|
mController.mSubtitleView.clearSubtitleCache(); |
|
|
|
|
mController.mSubtitleView.isInternal = true; |
|
|
|
|
((IjkMediaPlayer)mediaPlayer).setTrack(value.index); |
|
|
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
mediaPlayer.seekTo(progress); |
|
|
|
|
mediaPlayer.start(); |
|
|
|
|
} |
|
|
|
|
}, 800); |
|
|
|
|
} |
|
|
|
|
mController.mSubtitleView.destroy(); |
|
|
|
|
mController.mSubtitleView.clearSubtitleCache(); |
|
|
|
|
mController.mSubtitleView.isInternal = true; |
|
|
|
|
((IjkMediaPlayer)mediaPlayer).setTrack(value.index); |
|
|
|
|
new Handler().postDelayed(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
mediaPlayer.seekTo(progress); |
|
|
|
|
mediaPlayer.start(); |
|
|
|
|
} |
|
|
|
|
}, 800); |
|
|
|
|
dialog.dismiss(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
LOG.e("切换内置字幕出错"); |
|
|
|
|
@ -470,6 +471,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void setTip(String msg, boolean loading, boolean err) { |
|
|
|
|
if (!isAdded()) return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { //影魔
|
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -489,6 +491,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
|
|
|
|
|
void errorWithRetry(String err, boolean finish) { |
|
|
|
|
if (!autoRetry()) { |
|
|
|
|
if (!isAdded()) return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1100,6 +1103,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (rs.has("jxFrom")) { |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1145,6 +1149,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
if (rs.has("ua")) { |
|
|
|
|
webUserAgent = rs.optString("ua").trim(); |
|
|
|
|
} |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1174,6 +1179,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (rs.has("jxFrom")) { |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1199,13 +1205,11 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
|
|
|
|
|
// webview
|
|
|
|
|
private XWalkView mXwalkWebView; |
|
|
|
|
private XWalkWebClient mX5WebClient; |
|
|
|
|
private WebView mSysWebView; |
|
|
|
|
private SysWebClient mSysWebClient; |
|
|
|
|
private Map<String, Boolean> loadedUrls = new HashMap<>(); |
|
|
|
|
private final Map<String, Boolean> loadedUrls = new HashMap<>(); |
|
|
|
|
private LinkedList<String> loadFoundVideoUrls = new LinkedList<>(); |
|
|
|
|
private HashMap<String, HashMap<String, String>> loadFoundVideoUrlsHeader = new HashMap<>(); |
|
|
|
|
private AtomicInteger loadFoundCount = new AtomicInteger(0); |
|
|
|
|
private final AtomicInteger loadFoundCount = new AtomicInteger(0); |
|
|
|
|
|
|
|
|
|
void loadWebView(String url) { |
|
|
|
|
if (mSysWebView == null && mXwalkWebView == null) { |
|
|
|
|
@ -1252,6 +1256,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void loadUrl(String url) { |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1285,6 +1290,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
|
|
|
|
|
void stopLoadWebView(boolean destroy) { |
|
|
|
|
if (mActivity == null) return; |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().runOnUiThread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
@ -1378,6 +1384,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
webView.setFocusableInTouchMode(false); |
|
|
|
|
webView.clearFocus(); |
|
|
|
|
webView.setOverScrollMode(View.OVER_SCROLL_ALWAYS); |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().addContentView(webView, layoutParams); |
|
|
|
|
/* 添加webView配置 */ |
|
|
|
|
final WebSettings settings = webView.getSettings(); |
|
|
|
|
@ -1437,13 +1444,14 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
mSysWebClient = new SysWebClient(); |
|
|
|
|
SysWebClient mSysWebClient = new SysWebClient(); |
|
|
|
|
webView.setWebViewClient(mSysWebClient); |
|
|
|
|
webView.setBackgroundColor(Color.BLACK); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private class SysWebClient extends WebViewClient { |
|
|
|
|
|
|
|
|
|
@SuppressLint("WebViewClientOnReceivedSslError") |
|
|
|
|
@Override |
|
|
|
|
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { |
|
|
|
|
sslErrorHandler.proceed(); |
|
|
|
|
@ -1503,7 +1511,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
ad = AdBlocker.isAd(url); |
|
|
|
|
loadedUrls.put(url, ad); |
|
|
|
|
} else { |
|
|
|
|
ad = loadedUrls.get(url); |
|
|
|
|
ad = Boolean.TRUE.equals(loadedUrls.get(url)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!ad) { |
|
|
|
|
@ -1572,6 +1580,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
webView.setFocusableInTouchMode(false); |
|
|
|
|
webView.clearFocus(); |
|
|
|
|
webView.setOverScrollMode(View.OVER_SCROLL_ALWAYS); |
|
|
|
|
if(!isAdded())return; |
|
|
|
|
requireActivity().addContentView(webView, layoutParams); |
|
|
|
|
/* 添加webView配置 */ |
|
|
|
|
final XWalkSettings settings = webView.getSettings(); |
|
|
|
|
@ -1625,7 +1634,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
mX5WebClient = new XWalkWebClient(webView); |
|
|
|
|
XWalkWebClient mX5WebClient = new XWalkWebClient(webView); |
|
|
|
|
webView.setResourceClient(mX5WebClient); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1677,7 +1686,7 @@ public class PlayFragment extends BaseLazyFragment { |
|
|
|
|
ad = AdBlocker.isAd(url); |
|
|
|
|
loadedUrls.put(url, ad); |
|
|
|
|
} else { |
|
|
|
|
ad = loadedUrls.get(url); |
|
|
|
|
ad = Boolean.TRUE.equals(loadedUrls.get(url)); |
|
|
|
|
} |
|
|
|
|
if (!ad ) { |
|
|
|
|
|
|
|
|
|
|