diff --git a/app/build.gradle b/app/build.gradle index 143285dfb..ddac95c2a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { minSdk 21 //noinspection ExpiredTargetSdkVersion targetSdk 28 - versionCode 253 - versionName "2.5.3" + versionCode 258 + versionName "2.5.8" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 1951c0aeb..e16da401e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -367,13 +367,12 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List onStopped(); } - private void onPaused(boolean visible) { + private void onPaused() { mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); setState(RenderState.PAUSED); - if (visible) showInfo(); - else hideInfo(); mPlayers.pause(); + showInfo(); } private void onPlay() { @@ -441,7 +440,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Override public void pause() { - App.post(() -> onPaused(true)); + App.post(this::onPaused); } @Override @@ -506,7 +505,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Override public void onKeyCenter() { - if (mPlayers.isPlaying()) onPaused(true); + if (mPlayers.isPlaying()) onPaused(); else onPlay(); hideControl(); } @@ -544,7 +543,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List @Override protected void onPause() { super.onPause(); - onPaused(false); + mPlayers.pause(); mClock.stop(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 4e1277b9c..f0afc074e 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -810,7 +810,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mBinding.display.clock.setVisibility(Setting.isDisplayTime() || isVisible(mBinding.widget.info) ? View.VISIBLE : View.GONE); mBinding.display.titleLayout.setVisibility(Setting.isDisplayVideoTitle() && !isVisible(mBinding.control.getRoot()) ? View.VISIBLE : View.GONE); mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && !isVisible(mBinding.control.getRoot()) && !hasDialog ? View.VISIBLE : View.GONE); - mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && !isVisible(mBinding.control.getRoot()) && !hasDialog ? View.VISIBLE : View.GONE); + mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && !isVisible(mBinding.control.getRoot()) && (mPlayers.isVod()) && !hasDialog ? View.VISIBLE : View.GONE); mBinding.display.progress.setVisibility(Setting.isDisplayMiniProgress() && !isVisible(mBinding.control.getRoot()) && (mPlayers.isVod()) && !hasDialog ? View.VISIBLE : View.GONE); } @@ -1580,11 +1580,11 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List getDetail(item); } - private void onPaused(boolean visible) { + private void onPaused() { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mBinding.widget.exoDuration.setText(mPlayers.getDurationTime()); mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(0)); - if (visible) showInfoAndCenter(); + if (isFullscreen()) showInfoAndCenter(); else hideInfoAndCenter(); mPlayers.pause(); } @@ -1768,7 +1768,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override public void onKeyCenter() { if (mPlayers.isPlaying()) { - onPaused(true); + onPaused(); hideControl(false); } else { onPlay(); @@ -1826,7 +1826,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List protected void onPause() { super.onPause(); setBackground(true); - onPaused(false); + mPlayers.pause(); mClock.stop(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java index 01456faf9..43b89adc5 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java @@ -106,7 +106,10 @@ public class HistoryAdapter extends RecyclerView.Adapter binding.name.setSelected(hasFocus)); + binding.getRoot().setOnFocusChangeListener((v, hasFocus) -> { + binding.name.setSelected(hasFocus); + binding.remark.setSelected(hasFocus); + }); } private void setClickListener(View root, History item) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 27648779b..ad6b27a46 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -69,14 +69,6 @@ android:name=".ui.activity.CrashActivity" android:process=":error_activity" /> - - - - - - diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java index 5a2f03d6c..b9a2812f0 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java @@ -336,8 +336,8 @@ public class Channel { if (!live.getCatchup().isEmpty() && getCatchup().isEmpty()) setCatchup(live.getCatchup()); if (!live.getReferer().isEmpty() && getReferer().isEmpty()) setReferer(live.getReferer()); if (live.getPlayerType() != -1 && getPlayerType() == -1) setPlayerType(live.getPlayerType()); - if (live.getEpg().contains("{") && !getEpg().isEmpty() && !getEpg().startsWith("http")) setEpg(live.getEpg().replace("{name}", getTvgName()).replace("{epg}", getEpg())); - if (live.getLogo().contains("{") && !getLogo().isEmpty() && !getLogo().startsWith("http")) setLogo(live.getLogo().replace("{name}", getTvgName()).replace("{logo}", getLogo())); + if (live.getEpg().contains("{") && !getEpg().startsWith("http")) setEpg(live.getEpg().replace("{name}", getTvgName()).replace("{epg}", getEpg())); + if (live.getLogo().contains("{") && !getLogo().startsWith("http")) setLogo(live.getLogo().replace("{name}", getTvgName()).replace("{logo}", getLogo())); } public void setLine(String line) { diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Result.java b/app/src/main/java/com/fongmi/android/tv/bean/Result.java index 8507bc05c..74098c616 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Result.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Result.java @@ -120,6 +120,7 @@ public class Result implements Parcelable { public static Result error(String msg) { Result result = new Result(); + result.setParse(0); result.setMsg(msg); return result; } diff --git a/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java index fd0a3c320..f24f8d303 100644 --- a/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java +++ b/app/src/main/java/com/fongmi/android/tv/impl/SessionCallback.java @@ -41,4 +41,9 @@ public class SessionCallback extends MediaSessionCompat.Callback { public void onSkipToNext() { ActionEvent.send(ActionEvent.NEXT); } + + @Override + public void onStop() { + ActionEvent.send(ActionEvent.STOP); + } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java b/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java index 674a58151..bcd9180b8 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java +++ b/app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java @@ -4,6 +4,7 @@ import android.net.Uri; import android.util.Base64; import com.fongmi.android.tv.bean.Episode; +import com.fongmi.android.tv.exception.ExtractException; import com.fongmi.android.tv.player.Source; import com.github.catvod.net.OkHttp; import com.github.kiulian.downloader.YoutubeDownloader; @@ -48,6 +49,7 @@ public class Youtube implements Source.Extractor { String videoId = matcher.group(); RequestVideoInfo request = new RequestVideoInfo(videoId); VideoInfo info = getDownloader().getVideoInfo(request).data(); + if (info == null || info.details() == null) throw new ExtractException(""); return info.details().isLive() ? info.details().liveUrl() : getMpdWithBase64(info); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index 2e941be5d..500dc1506 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -1,7 +1,6 @@ package com.fongmi.android.tv.utils; import android.app.Activity; -import android.app.UiModeManager; import android.content.ClipData; import android.content.ClipboardManager; import android.content.ComponentName; @@ -9,7 +8,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.Configuration; import android.os.BatteryManager; import android.os.Build; import android.os.IBinder; @@ -22,6 +20,7 @@ import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import com.fongmi.android.tv.App; +import com.fongmi.android.tv.R; import com.github.catvod.Init; import java.text.SimpleDateFormat; @@ -68,13 +67,19 @@ public class Util { public static CharSequence getClipText() { ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE); - if (manager.getPrimaryClip() == null || manager.getPrimaryClip().getItemCount() == 0) return ""; - return manager.getPrimaryClip().getItemAt(0).getText(); + ClipData clipData = manager == null ? null : manager.getPrimaryClip(); + if (clipData == null || clipData.getItemCount() == 0) return ""; + return clipData.getItemAt(0).getText(); } public static void copy(String text) { - ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE); - manager.setPrimaryClip(ClipData.newPlainText("", text)); + try { + ClipboardManager manager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE); + manager.setPrimaryClip(ClipData.newPlainText("", text)); + Notify.show(R.string.copied); + } catch (Exception e) { + e.printStackTrace(); + } } public static int getDigit(String text) { diff --git a/app/src/mobile/AndroidManifest.xml b/app/src/mobile/AndroidManifest.xml index 564c2d853..1d243f431 100644 --- a/app/src/mobile/AndroidManifest.xml +++ b/app/src/mobile/AndroidManifest.xml @@ -127,6 +127,14 @@ android:name=".receiver.ShortcutReceiver" android:exported="false" /> + + + + + + diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 473658dcd..c517f08e7 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -154,9 +154,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private boolean fullscreen; private boolean initTrack; private boolean initAuto; - private boolean redirect; private boolean autoMode; private boolean useParse; + private boolean redirect; private boolean rotate; private boolean stop; private boolean lock; @@ -774,7 +774,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private boolean onCopy() { - Notify.show(R.string.copied); Util.copy(mBinding.content.getText().toString()); return true; } @@ -990,7 +989,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo boolean visible = (!controlVisible || isLock()) && !pictureMode && !hasDialog; mBinding.display.clock.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE); mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE); - mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && visible ? View.VISIBLE : View.GONE); + mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && visible && (mPlayers.isVod()) ? View.VISIBLE : View.GONE); mBinding.display.progress.setVisibility(Setting.isDisplayMiniProgress() && visible && (mPlayers.isVod()) ? View.VISIBLE : View.GONE); mBinding.display.titleLayout.setVisibility(Setting.isDisplayVideoTitle()&& visible ? View.VISIBLE : View.GONE); } @@ -1292,20 +1291,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { if (isRedirect()) return; - switch (event.getType()) { - case DETAIL: - getDetail(); - break; - case PLAYER: - onRefresh(); - break; - case DANMAKU: - checkDanmu(event.getPath()); - break; - case SUBTITLE: - mPlayers.setSub(Sub.from(event.getPath())); - break; - } + if (event.getType() == RefreshEvent.Type.DETAIL) getDetail(); + else if (event.getType() == RefreshEvent.Type.PLAYER) onRefresh(); + else if (event.getType() == RefreshEvent.Type.DANMAKU) checkDanmu(event.getPath()); + else if (event.getType() == RefreshEvent.Type.SUBTITLE) mPlayers.setSub(Sub.from(event.getPath())); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -1583,14 +1572,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo this.initAuto = initAuto; } - public boolean isRedirect() { - return redirect; - } - - public void setRedirect(boolean redirect) { - this.redirect = redirect; - } - private boolean isAutoMode() { return autoMode; } @@ -1607,6 +1588,14 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo this.useParse = useParse; } + public boolean isRedirect() { + return redirect; + } + + public void setRedirect(boolean redirect) { + this.redirect = redirect; + } + public boolean isRotate() { return rotate; } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java index 7e86f59dd..9fa7bc87e 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java @@ -7,9 +7,7 @@ import android.view.View; import androidx.appcompat.app.AlertDialog; -import com.fongmi.android.tv.R; import com.fongmi.android.tv.databinding.DialogInfoBinding; -import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.Util; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -86,7 +84,6 @@ public class InfoDialog { } private boolean onCopy(String text) { - Notify.show(R.string.copied); Util.copy(text); return true; } diff --git a/zlive/src/main/AndroidManifest.xml b/zlive/src/main/AndroidManifest.xml index 599c7db02..568741e54 100644 --- a/zlive/src/main/AndroidManifest.xml +++ b/zlive/src/main/AndroidManifest.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file