Merge remote-tracking branch 'origin/dev' into dev

pull/220/head
okjack 2 years ago
commit 59c3f160c3
  1. 20
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  2. 10
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/QualityAdapter.java
  3. 10
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java
  4. 19
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpisodePresenter.java
  5. 8
      app/src/leanback/res/layout/activity_video.xml
  6. 18
      app/src/main/java/com/fongmi/android/tv/bean/Episode.java
  7. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  8. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java
  9. 14
      app/src/mobile/res/layout/dialog_info.xml

@ -126,8 +126,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private ArrayObjectAdapter mPartAdapter;
private QualityAdapter mQualityAdapter;
private DanmakuContext mDanmakuContext;
private FlagPresenter mFlagPresenter;
private ArrayPresenter mArrayPresenter;
private FlagPresenter mFlagPresenter;
private PartPresenter mPartPresenter;
private CustomKeyDownVod mKeyDown;
private ExecutorService mExecutor;
@ -370,8 +370,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
mBinding.flag.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.flag.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.flag.setAdapter(new ItemBridgeAdapter(mFlagAdapter = new ArrayObjectAdapter(mFlagPresenter = new FlagPresenter(this::setFlagActivated))));
mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.episode.setVerticalSpacing(ResUtil.dp2px(8));
mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.episode.setAdapter(new ItemBridgeAdapter(mEpisodeAdapter = new ArrayObjectAdapter(mEpisodePresenter = new EpisodePresenter(this::setEpisodeActivated))));
mBinding.quality.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.quality.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
@ -590,7 +590,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setEpisodeAdapter(List<Episode> items) {
int size = items.size();
for(int i = 0; i < size; i ++) { items.get(i).setIndex(i); }
for (int i = 0; i < size; i++) items.get(i).setIndex(i);
int episodeNameLength = items.isEmpty() ? 0 : items.get(0).getName().length();
int numColumns = 10;
if (episodeNameLength > 40) numColumns = 2;
@ -599,7 +599,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
else if (episodeNameLength > 6) numColumns = 6;
else if (episodeNameLength > 2) numColumns = 8;
if (size < numColumns) numColumns = size;
int rowNum = (int)Math.ceil((double) size/ (double) numColumns);
int rowNum = (int) Math.ceil((double) size / (double) numColumns);
int width = ResUtil.getScreenWidth() - ResUtil.dp2px(48);
mBinding.episode.setNumColumns(numColumns);
mBinding.episode.setColumnWidth((width - ((numColumns - 1) * ResUtil.dp2px(8))) / numColumns);
@ -643,13 +643,13 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void setQualityVisible(boolean visible) {
mArrayPresenter.setNextFocusDown(isVisible(mBinding.episode) ? R.id.episode : R.id.part);
mFlagPresenter.setNextFocusDown(visible ? R.id.quality : R.id.array);
mBinding.quality.setVisibility(visible ? View.VISIBLE : View.GONE);
mArrayPresenter.setNextFocusUp(visible ? R.id.quality : R.id.flag);
mArrayPresenter.setNextFocusDown(isVisible(mBinding.episode) ? R.id.episode : R.id.part);
mEpisodePresenter.setNextFocusUp(R.id.array);
mQualityAdapter.setNextFocusUp(R.id.flag);
mQualityAdapter.setNextFocusDown(R.id.array);
mBinding.quality.setVisibility(visible ? View.VISIBLE : View.GONE);
mQualityAdapter.setNextFocusUp(R.id.flag);
notifyItemChanged(mBinding.episode, mEpisodeAdapter);
notifyItemChanged(mBinding.array, mArrayAdapter);
notifyItemChanged(mBinding.flag, mFlagAdapter);
@ -689,8 +689,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void updateFocus() {
mEpisodePresenter.setNextFocusDown(isVisible(mBinding.part) ? R.id.part : R.id.flag);
mPartPresenter.setNextFocusUp(isVisible(mBinding.episode) ? R.id.episode : R.id.array);
mEpisodePresenter.setNextFocusDown(isVisible(mBinding.part) ? R.id.part : R.id.flag);
notifyItemChanged(mBinding.episode, mEpisodeAdapter);
notifyItemChanged(mBinding.part, mPartAdapter);
}
@ -1056,9 +1056,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
List<String> items = Part.get(response.body().string());
if (!items.contains(source)) items.add(0, source);
App.post(() -> mPartAdapter.setItems(items, null));
App.post(() -> {
mBinding.part.setVisibility(View.VISIBLE);
mPartAdapter.setItems(items, null);
updateFocus();
});
}
@ -1066,9 +1066,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
List<String> items = List.of(source);
App.post(() -> mPartAdapter.setItems(items, null));
App.post(() -> {
mBinding.part.setVisibility(View.VISIBLE);
mPartAdapter.setItems(items, null);
updateFocus();
});
}

@ -27,6 +27,10 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
void onItemClick(Result result);
}
public int getPosition() {
return position;
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
@ -40,10 +44,6 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
notifyDataSetChanged();
}
public int getPosition() {
return position;
}
@Override
public int getItemCount() {
return mResult.getUrl().getValues().size();
@ -57,9 +57,9 @@ public class QualityAdapter extends RecyclerView.Adapter<QualityAdapter.ViewHold
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.binding.text.setText(mResult.getUrl().n(position));
holder.binding.text.setNextFocusUpId(nextFocusUp);
holder.binding.text.setNextFocusDownId(nextFocusDown);
holder.binding.text.setText(mResult.getUrl().n(position));
holder.binding.text.setOnClickListener(v -> onItemClick(position));
holder.binding.text.setActivated(mResult.getUrl().getPosition() == position);
}

@ -17,8 +17,8 @@ public class ArrayPresenter extends Presenter {
private final String backward;
private final String forward;
private final String reverse;
private int nextFocusUp;
private int nextFocusDown;
private int nextFocusUp;
public ArrayPresenter(OnClickListener listener) {
this.mListener = listener;
@ -34,14 +34,14 @@ public class ArrayPresenter extends Presenter {
void onRevPlay(TextView view);
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
public void setNextFocusDown(int nextFocusDown) {
this.nextFocusDown = nextFocusDown;
}
public void setNextFocusUp(int nextFocusUp) {
this.nextFocusUp = nextFocusUp;
}
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterArrayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));

@ -13,10 +13,10 @@ import com.fongmi.android.tv.databinding.AdapterEpisodeBinding;
public class EpisodePresenter extends Presenter {
private final OnClickListener mListener;
private int nextFocusDown;
private int nextFocusUp;
private int numColumns;
private int numRows;
private int nextFocusUp;
private int nextFocusDown;
public EpisodePresenter(OnClickListener listener) {
this.mListener = listener;
@ -26,14 +26,14 @@ public class EpisodePresenter extends Presenter {
void onItemClick(Episode item);
}
public void setNextFocusUp(int nextFocus) {
this.nextFocusUp = nextFocus;
}
public void setNextFocusDown(int nextFocus) {
this.nextFocusDown = nextFocus;
}
public void setNextFocusUp(int nextFocus) {
this.nextFocusUp = nextFocus;
}
public void setNumColumns(int numColumns) {
this.numColumns = numColumns;
}
@ -41,6 +41,7 @@ public class EpisodePresenter extends Presenter {
public void setNumRows(int numRows) {
this.numRows = numRows;
}
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterEpisodeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
@ -50,13 +51,11 @@ public class EpisodePresenter extends Presenter {
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) {
Episode item = (Episode) object;
ViewHolder holder = (ViewHolder) viewHolder;
if (item.getIndex() < numColumns) holder.binding.text.setNextFocusUpId(nextFocusUp);
else holder.binding.text.setNextFocusUpId(0);
if (item.getIndex() >= (numRows - 1) * numColumns) holder.binding.text.setNextFocusDownId(nextFocusDown);
else holder.binding.text.setNextFocusDownId(0);
holder.binding.text.setMaxEms(Product.getEms());
holder.binding.text.setActivated(item.isActivated());
holder.binding.text.setText(item.getDesc().concat(item.getName()));
holder.binding.text.setNextFocusUpId(item.getIndex() < numColumns ? nextFocusUp : 0);
holder.binding.text.setNextFocusDownId(item.getIndex() >= (numRows - 1) * numColumns ? nextFocusDown : 0);
setOnClickListener(holder, view -> mListener.onItemClick(item));
}

@ -255,7 +255,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/video"
android:layout_marginTop="12dp"
android:layout_marginTop="16dp"
android:overScrollMode="never">
<LinearLayout
@ -270,7 +270,7 @@
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingTop="12dp"
android:paddingTop="8dp"
android:paddingEnd="24dp"
android:paddingBottom="8dp"
android:visibility="gone" />
@ -301,8 +301,8 @@
<androidx.leanback.widget.VerticalGridView
android:id="@+id/episode"
android:layout_width="1024dp"
android:layout_height="300dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"

@ -17,10 +17,10 @@ public class Episode implements Parcelable {
@SerializedName("url")
private String url;
private int index;
private int number;
private boolean activated;
private boolean selected;
private int index;
public static Episode create(String name, String url) {
return new Episode(name, "", url);
@ -60,14 +60,18 @@ public class Episode implements Parcelable {
return url;
}
public int getNumber() {
return number;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public int getNumber() {
return number;
}
public boolean isActivated() {
return activated;
}
@ -89,10 +93,6 @@ public class Episode implements Parcelable {
this.selected = selected;
}
public void setIndex(int index) {
this.index = index;
}
public boolean rule1(String name) {
return getName().equalsIgnoreCase(name);
}

@ -707,7 +707,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void onInfo() {
InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).url(mPlayers.getUrl()).show();
InfoDialog.create(this).title(mBinding.control.title.getText()).headers(mPlayers.getHeaders()).vid(getId()).url(mPlayers.getUrl()).show();
}
private void onFull() {

@ -1,6 +1,7 @@
package com.fongmi.android.tv.ui.dialog;
import android.app.Activity;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@ -21,6 +22,7 @@ public class InfoDialog {
private AlertDialog dialog;
private CharSequence title;
private String header;
private String vid;
private String url;
public static InfoDialog create(Activity activity) {
@ -44,6 +46,11 @@ public class InfoDialog {
return this;
}
public InfoDialog vid(String vid) {
this.vid = vid;
return this;
}
public InfoDialog url(String url) {
this.url = url;
return this;
@ -65,12 +72,17 @@ public class InfoDialog {
binding.url.setText(url);
binding.title.setText(title);
binding.header.setText(header);
binding.header.setVisibility(header.isEmpty() ? View.GONE : View.VISIBLE);
binding.vid.setText("Vid : ".concat(vid));
binding.vid.setVisibility(TextUtils.isEmpty(vid) ? View.GONE : View.VISIBLE);
binding.url.setVisibility(TextUtils.isEmpty(url) ? View.GONE : View.VISIBLE);
binding.header.setVisibility(TextUtils.isEmpty(header) ? View.GONE : View.VISIBLE);
}
private void initEvent() {
binding.url.setOnClickListener(this::onShare);
binding.url.setOnLongClickListener(this::onCopy);
binding.vid.setOnLongClickListener(v -> onCopy(vid));
binding.url.setOnLongClickListener(v -> onCopy(url));
binding.header.setOnLongClickListener(v -> onCopy(header));
}
private void onShare(View view) {
@ -78,9 +90,9 @@ public class InfoDialog {
dialog.dismiss();
}
private boolean onCopy(View view) {
private boolean onCopy(String text) {
Notify.show(R.string.copied);
Util.copy(url);
Util.copy(text);
return true;
}

@ -12,18 +12,26 @@
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:linksClickable="false"
android:textColor="?android:attr/textColorPrimary"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/vid"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
<TextView
android:id="@+id/header"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />

Loading…
Cancel
Save