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 522b385d7..507d81efb 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 @@ -40,6 +40,7 @@ import com.fongmi.android.tv.player.exo.ExoUtil; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownCast; +import com.fongmi.android.tv.ui.dialog.PlayerDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.KeyUtil; @@ -52,7 +53,7 @@ import org.greenrobot.eventbus.ThreadMode; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class CastActivity extends BaseActivity implements CustomKeyDownCast.Listener, TrackDialog.Listener, RenderControl, ServiceConnection, Clock.Callback, SubtitleCallback { +public class CastActivity extends BaseActivity implements CustomKeyDownCast.Listener, TrackDialog.Listener, PlayerDialog.Listener, RenderControl, ServiceConnection, Clock.Callback, SubtitleCallback { private ActivityCastBinding mBinding; private DLNARendererService mService; @@ -215,9 +216,8 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onPlayer() { - mPlayers.togglePlayer(); - setPlayerView(); - onReset(); + PlayerDialog.create().select(mPlayers.getPlayer()).title(mBinding.widget.title.getText().toString()).show(this); + hideControl(); } private void onDecode() { @@ -539,6 +539,19 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); } + @Override + public void onPlayerClick(Integer item) { + mPlayers.setPlayer(item); + setPlayerView(); + onReset(); + } + + @Override + public void onPlayerShare(String title) { + if (mPlayers.isEmpty()) return; + mPlayers.choose(this, mBinding.widget.title.getText()); + } + @Override protected void onResume() { super.onResume(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 14b9d5631..51fdb561c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -52,6 +52,7 @@ import com.fongmi.android.tv.ui.custom.CustomKeyDownLive; import com.fongmi.android.tv.ui.custom.CustomLiveListView; import com.fongmi.android.tv.ui.dialog.LiveDialog; import com.fongmi.android.tv.ui.dialog.PassDialog; +import com.fongmi.android.tv.ui.dialog.PlayerDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; @@ -73,7 +74,7 @@ import java.util.List; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements Clock.Callback, GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, EpgDataPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, PassCallback, LiveCallback, SubtitleCallback { +public class LiveActivity extends BaseActivity implements Clock.Callback, GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, EpgDataPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, PlayerDialog.Listener, PassCallback, LiveCallback, SubtitleCallback { private ActivityLiveBinding mBinding; private ArrayObjectAdapter mChannelAdapter; @@ -424,10 +425,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP } private void onPlayer() { - mPlayers.togglePlayer(); - Setting.putLivePlayer(mPlayers.getPlayer()); - setPlayerView(); - fetch(); + PlayerDialog.create().select(mPlayers.getPlayer()).title(mBinding.widget.title.getText().toString()).show(this); + hideControl(); } private void onDecode() { @@ -1050,6 +1049,19 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); } + @Override + public void onPlayerClick(Integer item) { + mPlayers.setPlayer(item); + Setting.putLivePlayer(mPlayers.getPlayer()); + setPlayerView(); + fetch(); + } + + @Override + public void onPlayerShare(String title) { + this.onChoose(); + } + @Override protected void onResume() { super.onResume(); 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 75714c695..dd654fe7b 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 @@ -71,6 +71,7 @@ import com.fongmi.android.tv.ui.custom.CustomMovement; import com.fongmi.android.tv.ui.dialog.DescDialog; import com.fongmi.android.tv.ui.dialog.EpisodeDialog; import com.fongmi.android.tv.ui.dialog.FileChooserDialog; +import com.fongmi.android.tv.ui.dialog.PlayerDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ArrayPresenter; import com.fongmi.android.tv.ui.presenter.EpisodePresenter; @@ -116,7 +117,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class VideoActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, TrackDialog.ChooserListener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback { +public class VideoActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, TrackDialog.ChooserListener, PlayerDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback { private ActivityVideoBinding mBinding; private ViewGroup.LayoutParams mFrameParams; @@ -1065,10 +1066,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onPlayer() { - mPlayers.togglePlayer(); - setPlayerView(); - setDecodeView(); - onRefresh(); + PlayerDialog.create().select(mPlayers.getPlayer()).title(mBinding.widget.title.getText().toString()).show(this); + hideControl(); } private void onDecode() { @@ -1803,6 +1802,19 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); } + @Override + public void onPlayerClick(Integer item) { + mPlayers.setPlayer(item); + setPlayerView(); + setDecodeView(); + onRefresh(); + } + + @Override + public void onPlayerShare(String title) { + this.onChoose(); + } + @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); diff --git a/app/src/leanback/res/drawable/ic_action_share.xml b/app/src/leanback/res/drawable/ic_action_share.xml new file mode 100644 index 000000000..76368f3e8 --- /dev/null +++ b/app/src/leanback/res/drawable/ic_action_share.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/leanback/res/layout/adapter_player.xml b/app/src/leanback/res/layout/adapter_player.xml new file mode 100644 index 000000000..18e264d1e --- /dev/null +++ b/app/src/leanback/res/layout/adapter_player.xml @@ -0,0 +1,15 @@ + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/dialog_player.xml b/app/src/leanback/res/layout/dialog_player.xml new file mode 100644 index 000000000..2c7575d3e --- /dev/null +++ b/app/src/leanback/res/layout/dialog_player.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/ui/adapter/PlayerAdapter.java b/app/src/main/java/com/fongmi/android/tv/ui/adapter/PlayerAdapter.java new file mode 100644 index 000000000..56b5eaeff --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/ui/adapter/PlayerAdapter.java @@ -0,0 +1,78 @@ +package com.fongmi.android.tv.ui.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.databinding.AdapterPlayerBinding; +import com.fongmi.android.tv.utils.ResUtil; + +import java.util.ArrayList; +import java.util.List; + +public class PlayerAdapter extends RecyclerView.Adapter { + + private final OnClickListener mListener; + private final List mItems; + private final String[] mPlayers; + private int selected; + + public PlayerAdapter(OnClickListener listener) { + this.mListener = listener; + this.mPlayers = ResUtil.getStringArray(R.array.select_player); + this.mItems = new ArrayList<>(); + for(int i= 0; i binding.recycler.scrollToPosition(adapter.getSelected())); + binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); + } + + @Override + protected void initEvent() { + binding.choose.setOnClickListener(this::onShare); + } + + private void onShare(View view) { + listener.onPlayerShare(title); + dismiss(); + } + + @Override + public void onItemClick(Integer item) { + listener.onPlayerClick(item); + dismiss(); + } + + public interface Listener { + + void onPlayerClick(Integer item); + + void onPlayerShare(String title); + + } + + @Override + public void onResume() { + super.onResume(); + getDialog().getWindow().setLayout(ResUtil.dp2px(320), -1); + } +} 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 199ea5588..b6ac3ad5e 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 @@ -59,6 +59,7 @@ import com.fongmi.android.tv.ui.dialog.CastDialog; import com.fongmi.android.tv.ui.dialog.InfoDialog; import com.fongmi.android.tv.ui.dialog.LiveDialog; import com.fongmi.android.tv.ui.dialog.PassDialog; +import com.fongmi.android.tv.ui.dialog.PlayerDialog; import com.fongmi.android.tv.ui.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.dialog.TrackDialog; import com.fongmi.android.tv.utils.Biometric; @@ -82,7 +83,7 @@ import java.util.List; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements Clock.Callback, CustomKeyDownLive.Listener, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener, EpgDataAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener { +public class LiveActivity extends BaseActivity implements Clock.Callback, CustomKeyDownLive.Listener, TrackDialog.Listener, PlayerDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener, EpgDataAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener { private ActivityLiveBinding mBinding; private ChannelAdapter mChannelAdapter; @@ -461,11 +462,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom } private void onPlayer() { - mPlayers.togglePlayer(); - Setting.putLivePlayer(mPlayers.getPlayer()); - setPlayerView(); - setR1Callback(); - fetch(); + PlayerDialog.create().select(mPlayers.getPlayer()).title(mBinding.control.title.getText().toString()).show(this); + hideControl(); } private void onDecode() { @@ -1186,6 +1184,20 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom setRedirect(true); } + @Override + public void onPlayerClick(Integer item) { + mPlayers.setPlayer(item); + Setting.putLivePlayer(mPlayers.getPlayer()); + setPlayerView(); + setR1Callback(); + fetch(); + } + + @Override + public void onPlayerShare(String title) { + this.onShare(title); + } + @Override protected void onUserLeaveHint() { super.onUserLeaveHint(); 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 293577f23..f85cd799c 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 @@ -64,6 +64,7 @@ import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.model.SiteViewModel; +import com.fongmi.android.tv.ui.dialog.PlayerDialog; import com.fongmi.android.tv.utils.Downloader; import com.fongmi.android.tv.player.exo.ExoUtil; import com.fongmi.android.tv.player.Players; @@ -125,7 +126,7 @@ import master.flame.danmaku.danmaku.model.IDisplayer; import master.flame.danmaku.danmaku.model.android.DanmakuContext; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class VideoActivity extends BaseActivity implements Clock.Callback, CustomKeyDownVod.Listener, TrackDialog.Listener, ControlDialog.Listener, FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener, QualityAdapter.OnClickListener, QuickAdapter.OnClickListener, ParseAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener { +public class VideoActivity extends BaseActivity implements Clock.Callback, CustomKeyDownVod.Listener, TrackDialog.Listener, PlayerDialog.Listener, ControlDialog.Listener, FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener, QualityAdapter.OnClickListener, QuickAdapter.OnClickListener, ParseAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener { private ActivityVideoBinding mBinding; private ViewGroup.LayoutParams mFrameParams; @@ -916,11 +917,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onPlayer() { - mPlayers.togglePlayer(); - setPlayerView(); - setDecodeView(); - setR1Callback(); - onRefresh(); + PlayerDialog.create().select(mPlayers.getPlayer()).title(getName()).show(this); + hideControl(); } private void onDecode() { @@ -1762,6 +1760,20 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo setRedirect(true); } + @Override + public void onPlayerClick(Integer item) { + mPlayers.setPlayer(item); + setPlayerView(); + setDecodeView(); + setR1Callback(); + onRefresh(); + } + + @Override + public void onPlayerShare(String title) { + this.onShare(title); + } + @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); diff --git a/app/src/mobile/res/drawable/ic_action_share.xml b/app/src/mobile/res/drawable/ic_action_share.xml new file mode 100644 index 000000000..3a65b172f --- /dev/null +++ b/app/src/mobile/res/drawable/ic_action_share.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/mobile/res/layout/adapter_player.xml b/app/src/mobile/res/layout/adapter_player.xml new file mode 100644 index 000000000..848fcbeed --- /dev/null +++ b/app/src/mobile/res/layout/adapter_player.xml @@ -0,0 +1,13 @@ + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/dialog_player.xml b/app/src/mobile/res/layout/dialog_player.xml new file mode 100644 index 000000000..6efa4a406 --- /dev/null +++ b/app/src/mobile/res/layout/dialog_player.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + \ No newline at end of file