diff --git a/app/build.gradle b/app/build.gradle index c8eca697..4e901136 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -96,4 +96,6 @@ dependencies { implementation 'com.owen:tv-recyclerview:3.0.0' implementation 'com.github.getActivity:XXPermissions:13.6' + implementation 'com.github.hedzr:android-file-chooser:v1.2.0-final' + implementation 'commons-io:commons-io:2.11.0' } \ No newline at end of file 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 c47c5887..d8d538aa 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 @@ -1,5 +1,7 @@ package com.github.tvbox.osc.player.controller; +import static xyz.doikki.videoplayer.util.PlayerUtils.stringForTime; + import android.content.Context; import android.os.Handler; import android.os.Message; @@ -33,15 +35,12 @@ import org.json.JSONException; import org.json.JSONObject; import java.text.SimpleDateFormat; -import java.util.List; - import java.util.Date; +import java.util.List; import xyz.doikki.videoplayer.player.VideoView; import xyz.doikki.videoplayer.util.PlayerUtils; -import static xyz.doikki.videoplayer.util.PlayerUtils.stringForTime; - public class VodController extends BaseController { public VodController(@NonNull @NotNull Context context) { super(context); @@ -118,6 +117,7 @@ public class VodController extends BaseController { TextView mPlayLoadNetSpeed; TextView mVideoSize; public SimpleSubtitleView mSubtitleView; + public TextView mZimuBtn; Handler myHandle; Runnable myRunnable; @@ -176,6 +176,7 @@ public class VodController extends BaseController { mPlayLoadNetSpeed = findViewById(R.id.tv_play_load_net_speed); mVideoSize = findViewById(R.id.tv_videosize); mSubtitleView = findViewById(R.id.subtitle_view); + mZimuBtn = findViewById(R.id.zimu_select); myHandle=new Handler(); myRunnable = new Runnable() { @@ -484,6 +485,13 @@ public class VodController extends BaseController { updatePlayerCfgView(); } }); + mZimuBtn.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + listener.selectSubtitle(); + hideBottom(); + } + }); } @Override @@ -547,6 +555,8 @@ public class VodController extends BaseController { void replay(boolean replay); void errReplay(); + + void selectSubtitle(); } public void setListener(VodControlListener listener) { diff --git a/app/src/main/java/com/github/tvbox/osc/subtitle/SubtitleLoader.java b/app/src/main/java/com/github/tvbox/osc/subtitle/SubtitleLoader.java index beeac95e..8e64291d 100644 --- a/app/src/main/java/com/github/tvbox/osc/subtitle/SubtitleLoader.java +++ b/app/src/main/java/com/github/tvbox/osc/subtitle/SubtitleLoader.java @@ -35,15 +35,18 @@ import com.github.tvbox.osc.subtitle.format.FormatSRT; import com.github.tvbox.osc.subtitle.format.FormatSTL; import com.github.tvbox.osc.subtitle.model.TimedTextObject; import com.github.tvbox.osc.subtitle.runtime.AppTaskExecutor; +import com.github.tvbox.osc.util.UnicodeReader; +import com.lzy.okgo.OkGo; + +import org.apache.commons.io.input.ReaderInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.net.URL; -import okhttp3.OkHttpClient; -import okhttp3.Request; +import java.io.Reader; + import okhttp3.Response; /** @@ -153,25 +156,32 @@ public class SubtitleLoader { private static TimedTextObject loadFromRemote(final String remoteSubtitlePath) throws IOException, FatalParsingException { Log.d(TAG, "parseRemote: remoteSubtitlePath = " + remoteSubtitlePath); - if (!remoteSubtitlePath.contains("alicloud")) { - URL url = new URL(remoteSubtitlePath); - return loadAndParse(url.openStream(), url.getPath()); + String referer = ""; + String from = ""; + if (remoteSubtitlePath.contains("alicloud")) { + referer = "https://www.aliyundrive.com/"; + from = "aliyundrive"; + } else if (remoteSubtitlePath.contains("assrt.net")) { + referer = "https://secure.assrt.net/"; + from = "assrt"; } String ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"; - OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder() - .url(remoteSubtitlePath) - .addHeader("Referer", "https://www.aliyundrive.com/") - .addHeader("User-Agent", ua) - .build(); - Response response = null; - response = client.newCall(request).execute(); + Response response = OkGo.get(remoteSubtitlePath) + .headers("Referer", referer) + .headers("User-Agent", ua) + .execute(); String content = response.body().string(); try { Uri uri = Uri.parse(remoteSubtitlePath); InputStream subtitle = new ByteArrayInputStream(content.getBytes()); - String filename = uri.getQueryParameter("response-content-disposition"); - filename = "zimu." + filename.substring(filename.lastIndexOf(".")+1); + String filename = ""; + if (from == "aliyundrive") { + filename = uri.getQueryParameter("response-content-disposition"); + filename = "zimu." + filename.substring(filename.lastIndexOf(".")+1); + } else { + filename = uri.getPath(); + filename = "zimu." + filename.substring(filename.lastIndexOf(".")+1); + } return loadAndParse(subtitle, filename); } catch (Exception e) { e.printStackTrace(); @@ -191,16 +201,18 @@ public class SubtitleLoader { String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); String ext = fileName.substring(fileName.lastIndexOf(".")); Log.d(TAG, "parse: name = " + fileName + ", ext = " + ext); + Reader reader = new UnicodeReader(is); //处理有BOM头的utf8 + InputStream newInputStream = new ReaderInputStream(reader, "UTF-8"); if (".srt".equalsIgnoreCase(ext)) { - return new FormatSRT().parseFile(fileName, is); + return new FormatSRT().parseFile(fileName, newInputStream); } else if (".ass".equalsIgnoreCase(ext)) { - return new FormatASS().parseFile(fileName, is); + return new FormatASS().parseFile(fileName, newInputStream); } else if (".stl".equalsIgnoreCase(ext)) { - return new FormatSTL().parseFile(fileName, is); + return new FormatSTL().parseFile(fileName, newInputStream); } else if (".ttml".equalsIgnoreCase(ext)) { - return new FormatSTL().parseFile(fileName, is); + return new FormatSTL().parseFile(fileName, newInputStream); } - return new FormatSRT().parseFile(fileName, is); + return new FormatSRT().parseFile(fileName, newInputStream); } public interface Callback { 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 49491588..ed10512f 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 @@ -10,7 +10,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.util.Base64; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -48,6 +47,7 @@ import com.github.tvbox.osc.player.MyVideoView; import com.github.tvbox.osc.player.controller.VodController; import com.github.tvbox.osc.player.thirdparty.MXPlayer; import com.github.tvbox.osc.player.thirdparty.ReexPlayer; +import com.github.tvbox.osc.ui.dialog.SubtitleDialog; import com.github.tvbox.osc.util.AdBlocker; import com.github.tvbox.osc.util.DefaultConfig; import com.github.tvbox.osc.util.HawkConfig; @@ -61,6 +61,7 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.AbsCallback; import com.lzy.okgo.model.HttpHeaders; import com.lzy.okgo.model.Response; +import com.obsez.android.lib.filechooser.ChooserDialog; import com.orhanobut.hawk.Hawk; import org.greenrobot.eventbus.EventBus; @@ -75,6 +76,7 @@ import org.xwalk.core.XWalkWebResourceRequest; import org.xwalk.core.XWalkWebResourceResponse; import java.io.ByteArrayInputStream; +import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -188,10 +190,43 @@ public class PlayActivity extends BaseActivity { public void errReplay() { errorWithRetry("视频播放出错", false); } + + @Override + public void selectSubtitle() { + SubtitleDialog subtitleDialog = new SubtitleDialog(PlayActivity.this); + subtitleDialog.setLocalFileChooserListener(new SubtitleDialog.LocalFileChooserListener() { + @Override + public void openLocalFileChooserDialog() { + new ChooserDialog(PlayActivity.this) + .withFilter(false, false, "srt", "ass", "scc", "stl", "ttml") + .withStartFile("/storage/emulated/0/Download") + .withChosenListener(new ChooserDialog.Result() { + @Override + public void onChoosePath(String path, File pathFile) { + LOG.i("Local Subtitle Path: " + path); + setSubtitle(path);//设置字幕 + } + }) + .build() + .show(); + } + }); + subtitleDialog.show(); + } }); mVideoView.setVideoController(mController); } + //设置字幕 + void setSubtitle(String path) { + if (path != null && path .length() > 0) { + // 设置字幕 + mController.mSubtitleView.setVisibility(View.INVISIBLE); + mController.mSubtitleView.setSubtitlePath(path); + mController.mSubtitleView.setVisibility(View.VISIBLE); + } + } + void setTip(String msg, boolean loading, boolean err) { runOnUiThread(new Runnable() {//影魔 解决解析偶发闪退 @Override @@ -234,13 +269,6 @@ public class PlayActivity extends BaseActivity { if (mVideoView != null) { mVideoView.release(); - String zimuParamKey = "___zimu___"; //字幕url的header中key - String zimuBase64Url = ""; - if (headers != null && headers.containsKey(zimuParamKey)) { - zimuBase64Url = headers.get(zimuParamKey); - headers.remove(zimuParamKey);//remove传过来的字幕header的key - } - if (url != null) { try { int playerType = mVodPlayerCfg.getInt("pl"); @@ -277,17 +305,12 @@ public class PlayActivity extends BaseActivity { mController.resetSpeed(); //加载字幕开始 - String zimuUrl = ""; - if (zimuBase64Url != null && zimuBase64Url.length() > 0) { - zimuUrl = new String(Base64.decode(zimuBase64Url, Base64.DEFAULT)); - mController.mSubtitleView.setVisibility(View.GONE); - } - if(zimuUrl.isEmpty())zimuUrl=playSubtitle; - if (zimuUrl != null && zimuUrl .length() > 0) { - // 绑定MediaPlayer - mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); + // 绑定MediaPlayer + mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); + mController.mSubtitleView.setVisibility(View.INVISIBLE); + if (playSubtitle != null && playSubtitle .length() > 0) { // 设置字幕 - mController.mSubtitleView.setSubtitlePath(zimuUrl); + mController.mSubtitleView.setSubtitlePath(playSubtitle); mController.mSubtitleView.setVisibility(View.VISIBLE); } //加载字幕结束 @@ -863,7 +886,7 @@ public class PlayActivity extends BaseActivity { } } -// void loadUrl(String url) { + // void loadUrl(String url) { // runOnUiThread(new Runnable() { // @Override // public void run() { @@ -880,40 +903,40 @@ public class PlayActivity extends BaseActivity { // } // }); // } - 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"; - if (mXwalkWebView != null) { - mXwalkWebView.stopLoading(); - Map map = new HashMap() ; + 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"; + if (mXwalkWebView != null) { + mXwalkWebView.stopLoading(); + Map map = new HashMap() ; - if(webUserAgent != null) { - mXwalkWebView.getSettings().setUserAgentString(webUserAgent); - } - //mXwalkWebView.clearCache(true); - if(webHeaderMap != null){ - mXwalkWebView.loadUrl(url,webHeaderMap); - }else { - mXwalkWebView.loadUrl(url); - } + if(webUserAgent != null) { + mXwalkWebView.getSettings().setUserAgentString(webUserAgent); } - if (mSysWebView != null) { - mSysWebView.stopLoading(); - if(webUserAgent != null) { - mSysWebView.getSettings().setUserAgentString(webUserAgent); - } - //mSysWebView.clearCache(true); - if(webHeaderMap != null){ - mSysWebView.loadUrl(url,webHeaderMap); - }else { - mSysWebView.loadUrl(url); - } + //mXwalkWebView.clearCache(true); + if(webHeaderMap != null){ + mXwalkWebView.loadUrl(url,webHeaderMap); + }else { + mXwalkWebView.loadUrl(url); } } - }); - } + if (mSysWebView != null) { + mSysWebView.stopLoading(); + if(webUserAgent != null) { + mSysWebView.getSettings().setUserAgentString(webUserAgent); + } + //mSysWebView.clearCache(true); + if(webHeaderMap != null){ + mSysWebView.loadUrl(url,webHeaderMap); + }else { + mSysWebView.loadUrl(url); + } + } + } + }); + } void stopLoadWebView(boolean destroy) { runOnUiThread(new Runnable() { diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java new file mode 100644 index 00000000..d1012a9f --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/SubtitleDialog.java @@ -0,0 +1,68 @@ +package com.github.tvbox.osc.ui.dialog; + +import android.content.Context; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.tvbox.osc.R; +import com.github.tvbox.osc.util.FastClickCheckUtil; + +import org.jetbrains.annotations.NotNull; + +public class SubtitleDialog extends BaseDialog { + + private TextView selectLocal; + private TextView selectRemote; + + private SearchSubtitleListener mSearchSubtitleListener; + private LocalFileChooserListener mLocalFileChooserListener; + + public SubtitleDialog(@NonNull @NotNull Context context) { + super(context, R.style.CustomDialogStyleDim); + setCanceledOnTouchOutside(false); + setCancelable(true); + setContentView(R.layout.dialog_subtitle); + init(context); + } + + private void init(Context context) { + selectLocal = findViewById(R.id.selectLocal); + selectRemote = findViewById(R.id.selectRemote); + + selectLocal.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + FastClickCheckUtil.check(view); + dismiss(); + mLocalFileChooserListener.openLocalFileChooserDialog(); + } + }); + + selectRemote.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + FastClickCheckUtil.check(view); + dismiss(); + mSearchSubtitleListener.openSearchSubtitleDialog(); + } + }); + } + + public void setLocalFileChooserListener(LocalFileChooserListener localFileChooserListener) { + mLocalFileChooserListener = localFileChooserListener; + } + + public interface LocalFileChooserListener { + void openLocalFileChooserDialog(); + } + + public void setSearchSubtitleListener(SearchSubtitleListener searchSubtitleListener) { + mSearchSubtitleListener = searchSubtitleListener; + } + + public interface SearchSubtitleListener { + void openSearchSubtitleDialog(); + } +} 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 30a2a7d1..2c2d1ff7 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 @@ -9,7 +9,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.util.Base64; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; @@ -47,6 +46,7 @@ import com.github.tvbox.osc.player.MyVideoView; import com.github.tvbox.osc.player.controller.VodController; import com.github.tvbox.osc.player.thirdparty.MXPlayer; import com.github.tvbox.osc.player.thirdparty.ReexPlayer; +import com.github.tvbox.osc.ui.dialog.SubtitleDialog; import com.github.tvbox.osc.util.AdBlocker; import com.github.tvbox.osc.util.DefaultConfig; import com.github.tvbox.osc.util.HawkConfig; @@ -60,6 +60,7 @@ import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.AbsCallback; import com.lzy.okgo.model.HttpHeaders; import com.lzy.okgo.model.Response; +import com.obsez.android.lib.filechooser.ChooserDialog; import com.orhanobut.hawk.Hawk; import org.greenrobot.eventbus.EventBus; @@ -74,6 +75,7 @@ import org.xwalk.core.XWalkWebResourceRequest; import org.xwalk.core.XWalkWebResourceResponse; import java.io.ByteArrayInputStream; +import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -187,10 +189,43 @@ public class PlayFragment extends BaseLazyFragment { public void errReplay() { errorWithRetry("视频播放出错", false); } + + @Override + public void selectSubtitle() { + SubtitleDialog subtitleDialog = new SubtitleDialog(getContext()); + subtitleDialog.setLocalFileChooserListener(new SubtitleDialog.LocalFileChooserListener() { + @Override + public void openLocalFileChooserDialog() { + new ChooserDialog(getActivity()) + .withFilter(false, false, "srt", "ass", "scc", "stl", "ttml") + .withStartFile("/storage/emulated/0/Download") + .withChosenListener(new ChooserDialog.Result() { + @Override + public void onChoosePath(String path, File pathFile) { + LOG.i("Local Subtitle Path: " + path); + setSubtitle(path);//设置字幕 + } + }) + .build() + .show(); + } + }); + subtitleDialog.show(); + } }); mVideoView.setVideoController(mController); } + //设置字幕 + void setSubtitle(String path) { + if (path != null && path .length() > 0) { + // 设置字幕 + mController.mSubtitleView.setVisibility(View.INVISIBLE); + mController.mSubtitleView.setSubtitlePath(path); + mController.mSubtitleView.setVisibility(View.VISIBLE); + } + } + void setTip(String msg, boolean loading, boolean err) { requireActivity().runOnUiThread(new Runnable() { //影魔 @Override @@ -232,13 +267,6 @@ public class PlayFragment extends BaseLazyFragment { if (mVideoView != null) { mVideoView.release(); - String zimuParamKey = "___zimu___"; //字幕url的header中key - String zimuBase64Url = ""; - if (headers != null && headers.containsKey(zimuParamKey)) { - zimuBase64Url = headers.get(zimuParamKey); - headers.remove(zimuParamKey);//remove传过来的字幕header的key - } - if (url != null) { try { int playerType = mVodPlayerCfg.getInt("pl"); @@ -275,17 +303,12 @@ public class PlayFragment extends BaseLazyFragment { mController.resetSpeed(); //加载字幕开始 - String zimuUrl = ""; - if (zimuBase64Url != null && zimuBase64Url.length() > 0) { - zimuUrl = new String(Base64.decode(zimuBase64Url, Base64.DEFAULT)); - mController.mSubtitleView.setVisibility(View.GONE); - } - if(zimuUrl.isEmpty())zimuUrl=playSubtitle; - if (zimuUrl != null && zimuUrl .length() > 0) { - // 绑定MediaPlayer - mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); + // 绑定MediaPlayer + mController.mSubtitleView.bindToMediaPlayer(mVideoView.getMediaPlayer()); + mController.mSubtitleView.setVisibility(View.INVISIBLE); + if (playSubtitle != null && playSubtitle .length() > 0) { // 设置字幕 - mController.mSubtitleView.setSubtitlePath(zimuUrl); + mController.mSubtitleView.setSubtitlePath(playSubtitle); mController.mSubtitleView.setVisibility(View.VISIBLE); } //加载字幕结束 diff --git a/app/src/main/java/com/github/tvbox/osc/util/UnicodeReader.java b/app/src/main/java/com/github/tvbox/osc/util/UnicodeReader.java new file mode 100644 index 00000000..07b9c369 --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/util/UnicodeReader.java @@ -0,0 +1,109 @@ +package com.github.tvbox.osc.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.PushbackInputStream; +import java.io.Reader; + +public class UnicodeReader extends Reader { + private InputStreamReader internalIn = null; + private String encoding; + private static final int BOM_SIZE = 4; + + public UnicodeReader(String file) + throws IOException, FileNotFoundException, SecurityException { + this(new File(file)); + } + + public UnicodeReader(File file) + throws IOException, FileNotFoundException, SecurityException { + this(new FileInputStream(file)); + } + + public UnicodeReader(File file, String defaultEncoding) + throws IOException, FileNotFoundException, SecurityException { + this(new FileInputStream(file), defaultEncoding); + } + + public UnicodeReader(InputStream in) + throws IOException { + this(in, null); + } + + public UnicodeReader(InputStream in, String defaultEncoding) + throws IOException { + init(in, defaultEncoding); + } + + public void close() + throws IOException { + this.internalIn.close(); + } + + public String getEncoding() { + return this.encoding; + } + + protected void init(InputStream in, String defaultEncoding) + throws IOException { + PushbackInputStream tempIn = new PushbackInputStream(in, 4); + + byte[] bom = new byte[4]; + + int n = tempIn.read(bom, 0, bom.length); + int unread; + if ((bom[0] == 0) && (bom[1] == 0) && + (bom[2] == -2) && (bom[3] == -1)) { + this.encoding = "UTF-32BE"; + unread = n - 4; + } else { + if (n == 4) { + if ((bom[0] == -1) && (bom[1] == -2) && + (bom[2] == 0) && (bom[3] == 0)) { + this.encoding = "UTF-32LE"; + unread = n - 4; + //break label240; + } + } + if ((bom[0] == -17) && (bom[1] == -69) && + (bom[2] == -65)) { + this.encoding = "UTF-8"; + unread = n - 3; + } else { + if ((bom[0] == -2) && (bom[1] == -1)) { + this.encoding = "UTF-16BE"; + unread = n - 2; + } else { + if ((bom[0] == -1) && (bom[1] == -2)) { + this.encoding = "UTF-16LE"; + unread = n - 2; + } else { + this.encoding = defaultEncoding; + unread = n; + } + } + } + } + if (unread > 0) + tempIn.unread(bom, n - unread, unread); + else if (unread < -1) { + tempIn.unread(bom, 0, 0); + } + + if (this.encoding == null) { + this.internalIn = new InputStreamReader(tempIn); + this.encoding = this.internalIn.getEncoding(); + } else { + this.internalIn = new InputStreamReader(tempIn, this.encoding); + } + } + + public int read(char[] cbuf, int off, int len) + throws IOException { + return this.internalIn.read(cbuf, off, len); + } +} diff --git a/app/src/main/res/layout/dialog_subtitle.xml b/app/src/main/res/layout/dialog_subtitle.xml new file mode 100644 index 00000000..325f6295 --- /dev/null +++ b/app/src/main/res/layout/dialog_subtitle.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file 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 8a545c71..9511d6b6 100644 --- a/app/src/main/res/layout/player_vod_control_view.xml +++ b/app/src/main/res/layout/player_vod_control_view.xml @@ -29,7 +29,7 @@ android:paddingLeft="@dimen/vs_20" android:text="http://" android:textColor="@android:color/white" - android:textSize="@dimen/ts_24" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> @@ -71,7 +71,7 @@ android:tag="vod_control_pause_time" android:text="00:00:00" android:textColor="@android:color/white" - android:textSize="@dimen/ts_24" /> + android:textSize="@dimen/ts_22" /> @@ -125,16 +124,6 @@ android:layout_marginBottom="@dimen/vs_10" android:orientation="horizontal"> - - + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + + android:textSize="@dimen/ts_22" /> + + @@ -321,7 +324,7 @@ android:paddingRight="@dimen/vs_10" android:text="解析" android:textColor="@color/color_FFFFFF" - android:textSize="@dimen/ts_24" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" /> @@ -412,7 +415,7 @@ android:paddingLeft="@dimen/vs_20" android:text="http://" android:textColor="@android:color/white" - android:textSize="@dimen/ts_24" /> + android:textSize="@dimen/ts_22" /> + android:textSize="@dimen/ts_22" />