详情页倒序按钮下移;

详情页新增简介按钮弹窗;
pull/144/head
21561 9 months ago
parent dcdae3651a
commit 004b8e5e03
  1. 114
      app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
  2. 34
      app/src/main/java/com/github/tvbox/osc/ui/dialog/DescDialog.java
  3. 45
      app/src/main/res/layout/activity_detail.xml
  4. 24
      app/src/main/res/layout/dialog_desc.xml

@ -39,6 +39,7 @@ import com.github.tvbox.osc.event.RefreshEvent;
import com.github.tvbox.osc.picasso.RoundTransformation;
import com.github.tvbox.osc.ui.adapter.SeriesAdapter;
import com.github.tvbox.osc.ui.adapter.SeriesFlagAdapter;
import com.github.tvbox.osc.ui.dialog.DescDialog;
import com.github.tvbox.osc.ui.dialog.QuickSearchDialog;
import com.github.tvbox.osc.ui.fragment.PlayFragment;
import com.github.tvbox.osc.util.DefaultConfig;
@ -111,13 +112,16 @@ public class DetailActivity extends BaseActivity {
private TextView tvPlayUrl;
private TextView tvDes;
private TextView tvPlay;
private TextView tvSort;
// private TextView tvSort;
private TextView tvDesc;
private TextView tvSeriesSort;
private TextView tvQuickSearch;
private TextView tvCollect;
private TvRecyclerView mGridViewFlag;
private TvRecyclerView mGridView;
private TvRecyclerView mSeriesGroupView;
private LinearLayout mEmptyPlayList;
private LinearLayout tvSeriesGroup;
private SourceViewModel sourceViewModel;
private Movie.Video mVideo;
private VodInfo vodInfo;
@ -170,7 +174,9 @@ public class DetailActivity extends BaseActivity {
tvPlayUrl = findViewById(R.id.tvPlayUrl);
tvDes = findViewById(R.id.tvDes);
tvPlay = findViewById(R.id.tvPlay);
tvSort = findViewById(R.id.tvSort);
// tvSort = findViewById(R.id.tvSort);
tvDesc = findViewById(R.id.tvDesc);
tvSeriesSort = findViewById(R.id.tvSeriesSort);
tvCollect = findViewById(R.id.tvCollect);
tvQuickSearch = findViewById(R.id.tvQuickSearch);
mEmptyPlayList = findViewById(R.id.mEmptyPlaylist);
@ -198,6 +204,7 @@ public class DetailActivity extends BaseActivity {
}
mSeriesGroupView = findViewById(R.id.mSeriesGroupView);
tvSeriesGroup = findViewById(R.id.tvSeriesGroup);
mSeriesGroupView.setHasFixedSize(true);
mSeriesGroupView.setLayoutManager(new V7LinearLayoutManager(this.mContext, 0, false));
seriesGroupAdapter = new BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_series_group, seriesGroupOptions) {
@ -212,24 +219,29 @@ public class DetailActivity extends BaseActivity {
//禁用播放地址焦点
tvPlayUrl.setFocusable(false);
llPlayerFragmentContainerBlock.setOnClickListener((view -> toggleFullPreview()));
tvSort.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onClick(View v) {
if (vodInfo != null && vodInfo.seriesMap.size() > 0) {
vodInfo.reverseSort = !vodInfo.reverseSort;
isReverse = !isReverse;
vodInfo.reverse();
vodInfo.playIndex=(vodInfo.seriesMap.get(vodInfo.playFlag).size()-1)-vodInfo.playIndex;
// insertVod(sourceKey, vodInfo);
firstReverse = true;
setSeriesGroupOptions();
seriesAdapter.notifyDataSetChanged();
}
llPlayerFragmentContainerBlock.setOnClickListener(v -> {
toggleFullPreview();
if (firstReverse) {
jumpToPlay();
firstReverse=false;
}
});
// tvSort.setOnClickListener(new View.OnClickListener() {
// @SuppressLint("NotifyDataSetChanged")
// @Override
// public void onClick(View v) {
// if (vodInfo != null && vodInfo.seriesMap.size() > 0) {
// vodInfo.reverseSort = !vodInfo.reverseSort;
// isReverse = !isReverse;
// vodInfo.reverse();
// vodInfo.playIndex=(vodInfo.seriesMap.get(vodInfo.playFlag).size()-1)-vodInfo.playIndex;
// firstReverse = true;
// setSeriesGroupOptions();
// seriesAdapter.notifyDataSetChanged();
// }
// }
// });
tvPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -302,6 +314,39 @@ public class DetailActivity extends BaseActivity {
Toast.makeText(DetailActivity.this, "已复制", Toast.LENGTH_SHORT).show();
}
});
tvSeriesSort.setOnClickListener(new View.OnClickListener() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onClick(View v) {
if (vodInfo != null && vodInfo.seriesMap.size() > 0) {
vodInfo.reverseSort = !vodInfo.reverseSort;
isReverse = !isReverse;
vodInfo.reverse();
vodInfo.playIndex=(vodInfo.seriesMap.get(vodInfo.playFlag).size()-1)-vodInfo.playIndex;
firstReverse = !firstReverse;
setSeriesGroupOptions();
seriesAdapter.notifyDataSetChanged();
mGridView.smoothScrollToPosition(vodInfo.playIndex);
}
}
});
tvDesc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runOnUiThread(new Runnable() {
@Override
public void run() {
FastClickCheckUtil.check(v);
DescDialog dialog = new DescDialog(mContext);
dialog.setDescribe(removeHtmlTag(mVideo.des));
dialog.show();
}
});
}
});
mGridView.setOnItemListener(new TvRecyclerView.OnItemListener() {
@Override
public void onItemPreSelected(TvRecyclerView parent, View itemView, int position) {
@ -543,6 +588,25 @@ public class DetailActivity extends BaseActivity {
}, 100);
}
// 提取字符串中的第一个数字
private int extractNumber(String name) {
java.util.regex.Matcher matcher = java.util.regex.Pattern.compile("\\d+").matcher(name);
if (matcher.find()) {
return Integer.parseInt(matcher.group());
}
return 0;
}
private boolean isReverse(List<VodInfo.VodSeries> list) {
// 循环比较相邻元素
for (int i = 0; i < 5; i++) {
int current = extractNumber(list.get(i).name);
int next = extractNumber(list.get(i + 1).name);
if (current < next) return false;
if (current > next) return true;
}
return false;
}
@SuppressLint("NotifyDataSetChanged")
private void setSeriesGroupOptions(){
List<VodInfo.VodSeries> list = vodInfo.seriesMap.get(vodInfo.playFlag);
@ -553,7 +617,8 @@ public class DetailActivity extends BaseActivity {
if(listSize>100 && listSize<=400)GroupCount=60;
if(listSize>400)GroupCount=120;
if(listSize > GroupCount) {
mSeriesGroupView.setVisibility(View.VISIBLE);
tvSeriesSort.setText(isReverse(list)?"倒序":"正序");
tvSeriesGroup.setVisibility(View.VISIBLE);
int remainedOptionSize = listSize % GroupCount;
int optionSize = listSize / GroupCount;
@ -575,7 +640,7 @@ public class DetailActivity extends BaseActivity {
seriesGroupAdapter.notifyDataSetChanged();
}else {
mSeriesGroupView.setVisibility(View.GONE);
tvSeriesGroup.setVisibility(View.GONE);
}
}
@ -694,7 +759,7 @@ public class DetailActivity extends BaseActivity {
} else {
mGridViewFlag.setVisibility(View.GONE);
mGridView.setVisibility(View.GONE);
mSeriesGroupView.setVisibility(View.GONE);
tvSeriesGroup.setVisibility(View.GONE);
tvPlay.setVisibility(View.GONE);
mEmptyPlayList.setVisibility(View.VISIBLE);
}
@ -924,7 +989,7 @@ public class DetailActivity extends BaseActivity {
toggleFullPreview();
mGridView.requestFocus();
List<VodInfo.VodSeries> list = vodInfo.seriesMap.get(vodInfo.playFlag);
mSeriesGroupView.setVisibility(list.size()>GroupCount ? View.VISIBLE : View.GONE);
tvSeriesGroup.setVisibility(list.size()>GroupCount ? View.VISIBLE : View.GONE);
return;
}
if (seriesSelect) {
@ -965,11 +1030,12 @@ public class DetailActivity extends BaseActivity {
llPlayerFragmentContainerBlock.setVisibility(fullWindows ? View.GONE : View.VISIBLE);
mGridView.setVisibility(fullWindows ? View.GONE : View.VISIBLE);
mGridViewFlag.setVisibility(fullWindows ? View.GONE : View.VISIBLE);
mSeriesGroupView.setVisibility(fullWindows ? View.GONE : View.VISIBLE);
tvSeriesGroup.setVisibility(fullWindows ? View.GONE : View.VISIBLE);
//全屏下禁用详情页几个按键的焦点 防止上键跑过来
tvPlay.setFocusable(!fullWindows);
tvSort.setFocusable(!fullWindows);
// tvSort.setFocusable(!fullWindows);
tvDesc.setFocusable(!fullWindows);
tvCollect.setFocusable(!fullWindows);
tvQuickSearch.setFocusable(!fullWindows);
toggleSubtitleTextSize();

@ -0,0 +1,34 @@
package com.github.tvbox.osc.ui.dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.github.tvbox.osc.R;
import org.greenrobot.eventbus.EventBus;
import org.jetbrains.annotations.NotNull;
public class DescDialog extends BaseDialog {
public DescDialog(@NonNull @NotNull Context context) {
super(context);
setContentView(R.layout.dialog_desc);
}
public void setDescribe(String describe) {
TextView tvDescribe = findViewById(R.id.describe);
tvDescribe.setText(describe);
tvDescribe.requestFocus();
tvDescribe.requestFocusFromTouch();
}
private void init(Context context) {
EventBus.getDefault().register(this);
setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
EventBus.getDefault().unregister(this);
}
});
}
}

@ -195,7 +195,7 @@
android:textSize="@dimen/vs_20" />
<TextView
android:id="@+id/tvSort"
android:id="@+id/tvDesc"
android:layout_width="@dimen/vs_120"
android:layout_height="@dimen/vs_40"
android:layout_marginEnd="@dimen/vs_10"
@ -203,7 +203,7 @@
android:background="@drawable/button_detail_sort"
android:focusable="true"
android:gravity="center"
android:text="倒序"
android:text="简介"
android:textColor="@android:color/white"
android:textSize="@dimen/vs_20" />
@ -261,17 +261,44 @@
app:tv_horizontalSpacingWithMargins="@dimen/vs_10"
app:tv_selectedItemIsCentered="true" />
<com.owen.tvrecyclerview.widget.TvRecyclerView
android:id="@+id/mSeriesGroupView"
<LinearLayout
android:id="@+id/tvSeriesGroup"
android:layout_width="match_parent"
android:layout_height="@dimen/vs_45"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginLeft="@dimen/vs_50"
android:layout_marginTop="@dimen/vs_10"
android:layout_marginRight="@dimen/vs_50"
android:clipChildren="false"
android:clipToPadding="false"
app:tv_horizontalSpacingWithMargins="@dimen/vs_10"
app:tv_selectedItemIsCentered="true" />
android:focusable="true"
android:gravity="center_vertical">
<TextView
android:id="@+id/tvSeriesSort"
android:layout_width="wrap_content"
android:layout_height="@dimen/vs_45"
android:background="@drawable/shape_source_series_focus"
android:ellipsize="marquee"
android:gravity="center"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="排序"
android:paddingLeft="@dimen/vs_10"
android:paddingRight="@dimen/vs_10"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_20"/>
<com.owen.tvrecyclerview.widget.TvRecyclerView
android:id="@+id/mSeriesGroupView"
android:layout_width="match_parent"
android:layout_height="@dimen/vs_45"
android:layout_marginLeft="@dimen/vs_10"
android:clipChildren="false"
android:clipToPadding="false"
app:tv_horizontalSpacingWithMargins="@dimen/vs_10"
app:tv_selectedItemIsCentered="true"/>
</LinearLayout>
<com.owen.tvrecyclerview.widget.TvRecyclerView
android:id="@+id/mGridView"

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/vs_600"
android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_dialog_filter_bg"
android:fillViewport="true">
<TextView
android:id="@+id/describe"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingMultiplier="1.2"
android:padding="@dimen/vs_20"
android:textColor="@color/color_FFFFFF"
android:textSize="@dimen/ts_26" />
</androidx.core.widget.NestedScrollView>
</FrameLayout>
Loading…
Cancel
Save