[mobile] support detail - part 3

pull/123/head
FongMi 3 years ago
parent 5fa1b41d3a
commit 4916170283
  1. 79
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/SearchActivity.java
  3. 5
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpisodeAdapter.java
  4. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java

@ -10,6 +10,7 @@ import android.widget.TextView;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
@ -143,6 +144,10 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
return Prefers.getReset() == 1;
}
private boolean isFromSearch() {
return getCallingActivity().getShortClassName().contains(SearchActivity.class.getSimpleName());
}
@Override
protected ViewBinding getBinding() {
return mBinding = ActivityDetailBinding.inflate(getLayoutInflater());
@ -243,7 +248,8 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
mViewModel.player.observe(this, result -> {
boolean useParse = (result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1;
mBinding.control.parseLayout.setVisibility(mParseAdapter.getItemCount() > 0 && useParse ? View.VISIBLE : View.GONE);
mPlayers.start(result, useParse, getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1);
int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1;
mPlayers.start(result, useParse, timeout);
});
mViewModel.result.observe(this, result -> {
if (result.getList().isEmpty()) setEmpty();
@ -266,8 +272,7 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
getDetail();
}
private void getPlayer(boolean replay) {
Vod.Flag.Episode item = getEpisode();
private void getPlayer(Vod.Flag.Episode item, boolean replay) {
mBinding.widget.title.setText(getString(R.string.detail_title, mBinding.name.getText(), item.getName()));
mViewModel.playerContent(getKey(), mFlagAdapter.getActivated().getFlag(), item.getUrl());
Clock.get().setCallback(null);
@ -276,10 +281,12 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
}
private void setEmpty() {
if (getName().isEmpty()) {
if (isFromSearch()) {
finish();
} else if (getName().isEmpty()) {
mBinding.progressLayout.showEmpty();
} else {
finish();
//checkSearch();
}
}
@ -306,13 +313,31 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
view.setTag(text);
}
private void setFlagActivated(Vod.Flag item) {
if (mFlagAdapter.getItemCount() == 0 || item.isActivated()) return;
@Override
public void onItemClick(Vod.Flag item) {
if (item.isActivated()) return;
mFlagAdapter.setActivated(item);
mBinding.flag.scrollToPosition(mFlagAdapter.getPosition());
setEpisodeAdapter(item.getEpisodes());
seamless(item);
}
@Override
public void onItemClick(Vod.Flag.Episode item) {
if (item.isActivated()) return;
mFlagAdapter.toggle(item);
notifyItemChanged(mEpisodeAdapter);
mBinding.episode.scrollToPosition(mEpisodeAdapter.getPosition());
onRefresh();
}
@Override
public void onItemClick(Parse item) {
ApiConfig.get().setParse(item);
notifyItemChanged(mParseAdapter);
onRefresh();
}
private void setEpisodeAdapter(List<Vod.Flag.Episode> items) {
mBinding.episode.setVisibility(items.isEmpty() ? View.GONE : View.VISIBLE);
mEpisodeAdapter.addAll(items);
@ -322,14 +347,7 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
Vod.Flag.Episode episode = flag.find(mHistory.getVodRemarks());
if (episode == null || episode.isActivated()) return;
mHistory.setVodRemarks(episode.getName());
setEpisodeActivated(episode);
}
private void setEpisodeActivated(Vod.Flag.Episode item) {
mFlagAdapter.toggle(item);
mEpisodeAdapter.notifyDataSetChanged();
if (mEpisodeAdapter.getItemCount() == 0) return;
onRefresh();
onItemClick(episode);
}
private void reverseEpisode() {
@ -337,18 +355,14 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
setEpisodeAdapter(getFlag().getEpisodes());
}
private void setParseActivated(Parse item) {
ApiConfig.get().setParse(item);
mParseAdapter.notifyDataSetChanged();
onRefresh();
}
private void onRefresh() {
getPlayer(false);
Vod.Flag.Episode episode = getEpisode();
if (episode != null) getPlayer(episode, false);
}
private void onReset() {
getPlayer(isReplay());
Vod.Flag.Episode episode = getEpisode();
if (episode != null) getPlayer(episode, isReplay());
}
private void showProgress() {
@ -413,7 +427,7 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
private void checkHistory(Vod item) {
mHistory = History.find(getHistoryKey());
mHistory = mHistory == null ? createHistory(item) : mHistory;
setFlagActivated(mHistory.getFlag());
onItemClick(mHistory.getFlag());
if (mHistory.isRevSort()) reverseEpisode();
setScale(mHistory.getScale() == -1 ? Prefers.getScale() : mHistory.getScale());
mBinding.control.opening.setText(mPlayers.stringToTime(mHistory.getOpening()));
@ -459,19 +473,6 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
keep.save();
}
@Override
public void onItemClick(Vod.Flag item) {
}
@Override
public void onItemClick(Vod.Flag.Episode item) {
}
@Override
public void onItemClick(Parse item) {
}
@Override
public void onTimeChanged() {
long current = mPlayers.getPosition();
@ -587,6 +588,10 @@ public class DetailActivity extends BaseActivity implements FlagAdapter.OnClickL
this.mAutoMode = autoMode;
}
private void notifyItemChanged(RecyclerView.Adapter<?> adapter) {
adapter.notifyItemRangeChanged(0, adapter.getItemCount());
}
@Override
protected void onResume() {
super.onResume();

@ -0,0 +1,4 @@
package com.fongmi.android.tv.ui.activity;
public class SearchActivity {
}

@ -48,6 +48,11 @@ public class EpisodeAdapter extends RecyclerView.Adapter<EpisodeAdapter.ViewHold
return null;
}
public int getPosition() {
for (int i = 0; i < mItems.size(); i++) if (mItems.get(i).isActivated()) return i;
return 0;
}
@Override
public int getItemCount() {
return mItems.size();

@ -49,9 +49,14 @@ public class FlagAdapter extends RecyclerView.Adapter<FlagAdapter.ViewHolder> {
return null;
}
public int getPosition() {
for (int i = 0; i < mItems.size(); i++) if (mItems.get(i).isActivated()) return i;
return 0;
}
public void setActivated(Vod.Flag flag) {
for (Vod.Flag item : mItems) item.setActivated(flag);
notifyDataSetChanged();
notifyItemRangeChanged(0, getItemCount());
}
public void toggle(Vod.Flag.Episode episode) {

Loading…
Cancel
Save