pull/137/head
FongMi 3 years ago
parent 8c70884615
commit b3bc566553
  1. 58
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java

@ -21,6 +21,7 @@ import androidx.annotation.NonNull;
import androidx.core.app.ShareCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.C;
import androidx.media3.common.Player;
@ -35,6 +36,7 @@ import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.History;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Track;
import com.fongmi.android.tv.bean.Vod;
@ -87,6 +89,9 @@ import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class DetailActivity extends BaseActivity implements Clock.Callback, CustomKeyDownVod.Listener, CastDialog.Listener, PiPReceiver.Listener, TrackDialog.Listener, ControlDialog.Listener, FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener, ParseAdapter.OnClickListener {
private ViewGroup.LayoutParams mFrameParams;
private Observer<Result> mObservePlayer;
private Observer<Result> mObserveDetail;
private Observer<Result> mObserveSearch;
private ActivityDetailBinding mBinding;
private EpisodeAdapter mEpisodeAdapter;
private SearchAdapter mSearchAdapter;
@ -220,6 +225,9 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mBinding.progressLayout.showProgress();
mBinding.swipeLayout.setEnabled(false);
mReceiver = new PiPReceiver(this);
mObservePlayer = this::setPlayer;
mObserveDetail = this::setDetail;
mObserveSearch = this::setSearch;
mPlayers = new Players().init();
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
@ -321,20 +329,9 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.search.observe(this, result -> setSearch(result.getList()));
mViewModel.player.observe(this, result -> {
setUseParse(ApiConfig.hasParse() && ((result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1));
if (mControlDialog != null && mControlDialog.isVisible()) mControlDialog.setParseVisible(isUseParse());
mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE);
int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1;
mPlayers.start(result, isUseParse(), timeout);
mBinding.swipeLayout.setRefreshing(false);
});
mViewModel.result.observe(this, result -> {
mBinding.swipeLayout.setRefreshing(false);
if (result.getList().isEmpty()) setEmpty();
else setDetail(result.getList().get(0));
});
mViewModel.result.observeForever(mObserveDetail);
mViewModel.player.observeForever(mObservePlayer);
mViewModel.search.observeForever(mObserveSearch);
mViewModel.episode.observe(this, episode -> {
onItemClick(episode);
hideSheet();
@ -357,12 +354,10 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
getDetail();
}
private void getPlayer(Vod.Flag flag, Vod.Flag.Episode episode, boolean replay) {
mBinding.control.title.setText(getString(R.string.detail_title, mBinding.name.getText(), episode.getName()));
mViewModel.playerContent(getKey(), flag.getFlag(), episode.getUrl());
updateHistory(episode, replay);
showProgress();
setUrl(null);
private void setDetail(Result result) {
mBinding.swipeLayout.setRefreshing(false);
if (result.getList().isEmpty()) setEmpty();
else setDetail(result.getList().get(0));
}
private void setEmpty() {
@ -407,6 +402,23 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
view.setText(Utils.substring(sb.toString(), 2));
}
private void getPlayer(Vod.Flag flag, Vod.Flag.Episode episode, boolean replay) {
mBinding.control.title.setText(getString(R.string.detail_title, mBinding.name.getText(), episode.getName()));
mViewModel.playerContent(getKey(), flag.getFlag(), episode.getUrl());
updateHistory(episode, replay);
showProgress();
setUrl(null);
}
private void setPlayer(Result result) {
setUseParse(ApiConfig.hasParse() && ((result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1));
if (mControlDialog != null && mControlDialog.isVisible()) mControlDialog.setParseVisible(isUseParse());
mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE);
int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1;
mPlayers.start(result, isUseParse(), timeout);
mBinding.swipeLayout.setRefreshing(false);
}
@Override
public void onItemClick(Vod.Flag item, boolean force) {
if (item.isActivated()) return;
@ -1015,7 +1027,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
}
}
private void setSearch(List<Vod> items) {
private void setSearch(Result result) {
List<Vod> items = result.getList();
Iterator<Vod> iterator = items.iterator();
while (iterator.hasNext()) if (mismatch(iterator.next())) iterator.remove();
mBinding.search.setVisibility(View.VISIBLE);
@ -1322,5 +1335,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
Clock.get().release();
RefreshEvent.history();
App.removeCallbacks(mR1, mR2, mR3);
mViewModel.result.removeObserver(mObserveDetail);
mViewModel.player.removeObserver(mObservePlayer);
mViewModel.search.removeObserver(mObserveSearch);
}
}

Loading…
Cancel
Save