From 8214a9b68a5e4a2dd081b6fd384ec543c2d4c91a Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 14 Jun 2023 15:57:18 +0800 Subject: [PATCH] [mobile] update live --- .../android/tv/model/LiveViewModel.java | 2 +- .../tv/ui/activity/DetailActivity.java | 14 ++--- .../android/tv/ui/activity/LiveActivity.java | 60 ++++++++++++++---- .../tv/ui/custom/dialog/CastDialog.java | 10 ++- .../mobile/res/layout/view_control_live.xml | 62 ++++++++++++++++++- .../mobile/res/layout/view_control_vod.xml | 12 ++-- 6 files changed, 134 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java index 9c2abd990..885b846f2 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java @@ -47,7 +47,7 @@ public class LiveViewModel extends ViewModel { while (iterator.hasNext()) if (iterator.next().isEmpty()) iterator.remove(); } - public void getUrl(Channel item) { + public void fetch(Channel item) { execute(CHANNEL, () -> { TVBus.get().stop(); String url = item.getCurrent().split("\\$")[0]; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 8f4efd9ab..4766ff600 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -241,8 +241,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust mBinding.actor.setOnClickListener(view -> onActor()); mBinding.content.setOnClickListener(view -> onContent()); mBinding.reverse.setOnClickListener(view -> onReverse()); - mBinding.control.back.setOnClickListener(view -> onFull()); mBinding.control.cast.setOnClickListener(view -> onCast()); + mBinding.control.back.setOnClickListener(view -> onFull()); mBinding.control.full.setOnClickListener(view -> onFull()); mBinding.control.keep.setOnClickListener(view -> onKeep()); mBinding.control.lock.setOnClickListener(view -> onLock()); @@ -475,15 +475,15 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust reverseEpisode(false); } + private void onCast() { + CastDialog.create().history(mHistory).video(CastVideo.get(getName(), getUrl())).fm(true).show(this); + } + private void onFull() { setR1Callback(); toggleFullscreen(); } - private void onCast() { - CastDialog.create().history(mHistory).video(CastVideo.get(getName(), getUrl())).show(this); - } - private void onKeep() { Keep keep = Keep.find(getHistoryKey()); Notify.show(keep != null ? R.string.keep_del : R.string.keep_add); @@ -728,13 +728,13 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust private void showControl() { mBinding.control.setting.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE); - mBinding.control.share.setVisibility(getUrl() == null || isFullscreen() ? View.GONE : View.VISIBLE); - mBinding.control.cast.setVisibility(getUrl() == null || isFullscreen() ? View.GONE : View.VISIBLE); mBinding.control.keep.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE); mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE); mBinding.control.rotate.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE); mBinding.control.back.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE); mBinding.control.action.getRoot().setVisibility(isFullscreen() ? View.VISIBLE : View.GONE); + mBinding.control.share.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE); + mBinding.control.cast.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.lock.setVisibility(isFullscreen() ? View.VISIBLE : View.GONE); mBinding.control.center.setVisibility(isLock() ? View.GONE : View.VISIBLE); mBinding.control.bottom.setVisibility(isLock() ? View.GONE : View.VISIBLE); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index bf5a5b147..913accc75 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -10,6 +10,7 @@ import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; +import androidx.core.app.ShareCompat; import androidx.lifecycle.ViewModelProvider; import androidx.media3.common.C; import androidx.media3.common.Player; @@ -26,13 +27,14 @@ import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Keep; import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.bean.Track; +import com.fongmi.android.tv.cast.CastVideo; import com.fongmi.android.tv.databinding.ActivityLiveBinding; import com.fongmi.android.tv.event.ErrorEvent; import com.fongmi.android.tv.event.PlayerEvent; +import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.impl.LiveCallback; import com.fongmi.android.tv.impl.PassCallback; import com.fongmi.android.tv.model.LiveViewModel; -import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.player.source.Force; import com.fongmi.android.tv.player.source.TVBus; @@ -42,6 +44,7 @@ import com.fongmi.android.tv.ui.adapter.ChannelAdapter; import com.fongmi.android.tv.ui.adapter.GroupAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownLive; +import com.fongmi.android.tv.ui.custom.dialog.CastDialog; import com.fongmi.android.tv.ui.custom.dialog.LiveDialog; import com.fongmi.android.tv.ui.custom.dialog.PassDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; @@ -69,7 +72,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, PiPReceiver.Listener, TrackDialog.Listener, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener { +public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, CastDialog.Listener, PiPReceiver.Listener, TrackDialog.Listener, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener { private ChannelAdapter mChannelAdapter; private ActivityLiveBinding mBinding; @@ -89,6 +92,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private boolean rotate; private boolean stop; private boolean lock; + private String url; private int count; private PiP mPiP; @@ -156,6 +160,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mBinding.control.seek.setListener(mPlayers); mBinding.control.back.setOnClickListener(view -> onBack()); mBinding.control.lock.setOnClickListener(view -> onLock()); + mBinding.control.cast.setOnClickListener(view -> onCast()); + mBinding.control.share.setOnClickListener(view -> onShare()); mBinding.control.rotate.setOnClickListener(view -> onRotate()); mBinding.control.action.text.setOnClickListener(this::onTrack); mBinding.control.action.audio.setOnClickListener(this::onTrack); @@ -262,6 +268,17 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List showControl(); } + private void onCast() { + CastDialog.create().video(CastVideo.get(mBinding.control.title.getText().toString(), getUrl())).fm(false).show(this); + } + + private void onShare() { + ShareCompat.IntentBuilder builder = new ShareCompat.IntentBuilder(this).setType("text/plain").setText(getUrl()); + builder.getIntent().putExtra("title", mBinding.control.title.getText()); + builder.getIntent().putExtra("name", mBinding.control.title.getText()); + builder.startChooser(); + } + private void onRotate() { setR1Callback(); setRotate(!isRotate()); @@ -312,7 +329,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List Prefers.putLivePlayer(mPlayers.getPlayer()); setPlayerView(); setR1Callback(); - getUrl(); + fetch(); } private void onDecode() { @@ -320,7 +337,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mPlayers.set(getExo(), getIjk()); setDecodeView(); setR1Callback(); - getUrl(); + fetch(); } private void hideUI() { @@ -360,6 +377,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void showControl() { + mBinding.control.share.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE); + mBinding.control.cast.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE); mBinding.control.rotate.setVisibility(isLock() ? View.GONE : View.VISIBLE); mBinding.control.bottom.setVisibility(isLock() ? View.GONE : View.VISIBLE); mBinding.control.back.setVisibility(isLock() ? View.GONE : View.VISIBLE); @@ -432,8 +451,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mGroup.setPosition(mChannelAdapter.setSelected(item.group(mGroup))); mChannel = item; showInfo(); - getUrl(); hideUI(); + fetch(); } @Override @@ -463,13 +482,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private void setInfo() { mChannel.loadLogo(mBinding.widget.logo); mBinding.widget.name.setText(mChannel.getName()); + mBinding.control.title.setText(mChannel.getName()); mBinding.widget.namePip.setText(mChannel.getName()); mBinding.widget.line.setText(mChannel.getLineText()); mBinding.widget.number.setText(mChannel.getNumber()); mBinding.widget.numberPip.setText(mChannel.getNumber()); - mBinding.control.action.line.setText(mChannel.getLineText()); mBinding.widget.line.setVisibility(mChannel.getLineVisible()); - mBinding.control.action.line.setVisibility(mChannel.getLineVisible()); + mBinding.control.action.line.setText(mBinding.widget.line.getText()); + mBinding.control.action.line.setVisibility(mBinding.widget.line.getVisibility()); showEpg(); checkEpg(); } @@ -491,11 +511,12 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List }); } - private void getUrl() { + private void fetch() { if (mChannel == null) return; LiveConfig.get().setKeep(mChannel); - mViewModel.getUrl(mChannel); + mViewModel.fetch(mChannel); showProgress(); + setUrl(null); } private void checkLockImg() { @@ -541,6 +562,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List public void onPlayerEvent(PlayerEvent event) { switch (event.getState()) { case 0: + setUrl(event.getUrl()); setTrackVisible(false); break; case Player.STATE_IDLE: @@ -555,6 +577,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List setSpeedVisible(); setTrackVisible(true); mPiP.update(this, mPlayers.isPlaying()); + mBinding.control.size.setText(mPlayers.getSizeText()); + if (isVisible(mBinding.control.getRoot())) showControl(); break; case Player.STATE_ENDED: nextChannel(); @@ -582,7 +606,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List @Subscribe(threadMode = ThreadMode.MAIN) public void onErrorEvent(ErrorEvent event) { if (!event.isRetry() || mPlayers.addRetry() > 3) onError(event); - else getUrl(); + else fetch(); } private void onError(ErrorEvent event) { @@ -646,14 +670,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private void prevLine() { mChannel.prevLine(); showInfo(); - getUrl(); + fetch(); } private void nextLine(boolean show) { mChannel.nextLine(); if (show) showInfo(); else setInfo(); - getUrl(); + fetch(); } private void seekTo() { @@ -685,6 +709,18 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List this.lock = lock; } + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public void onCastTo() { + } + @Override public void onBright(int progress) { mBinding.widget.bright.setVisibility(View.VISIBLE); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java index 67c93b5db..78bc03850 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java @@ -1,6 +1,7 @@ package com.fongmi.android.tv.ui.custom.dialog; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; @@ -52,6 +53,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe private DeviceAdapter adapter; private Listener listener; private CastVideo video; + private boolean fm; public static CastDialog create() { return new CastDialog(); @@ -76,6 +78,11 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe return this; } + public CastDialog fm(boolean fm) { + this.fm = fm; + return this; + } + public void show(FragmentActivity activity) { for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return; show(activity.getSupportFragmentManager(), null); @@ -89,6 +96,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe @Override protected void initView() { + binding.scan.setVisibility(fm ? View.VISIBLE : View.GONE); EventBus.getDefault().register(this); setRecyclerView(); getDevice(); @@ -107,7 +115,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe } private void getDevice() { - adapter.addAll(Device.getAll()); + if (fm) adapter.addAll(Device.getAll()); adapter.addAll(CastDevice.get().getAll()); if (CastDevice.get().isEmpty()) App.post(() -> onRefresh(false), 1000); } diff --git a/app/src/mobile/res/layout/view_control_live.xml b/app/src/mobile/res/layout/view_control_live.xml index f76ce65c8..99152ca1b 100644 --- a/app/src/mobile/res/layout/view_control_live.xml +++ b/app/src/mobile/res/layout/view_control_live.xml @@ -1,16 +1,76 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/mobile/res/layout/view_control_vod.xml b/app/src/mobile/res/layout/view_control_vod.xml index 8735db47e..60362b02e 100644 --- a/app/src/mobile/res/layout/view_control_vod.xml +++ b/app/src/mobile/res/layout/view_control_vod.xml @@ -49,8 +49,9 @@ android:id="@+id/cast" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="16dp" + android:layout_marginEnd="8dp" android:background="?attr/selectableItemBackgroundBorderless" + android:padding="4dp" android:src="@drawable/ic_control_cast" /> @@ -144,7 +148,7 @@ android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" - android:layout_marginEnd="24dp" + android:layout_marginEnd="16dp" android:gravity="center" android:orientation="vertical">