fix详情光标bug;

pull/144/head
jun 11 months ago
parent eb5a62dbf5
commit aaa2e17c4d
  1. 23
      app/src/main/java/com/github/tvbox/osc/bean/VodInfo.java
  2. 38
      app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
  3. 35
      app/src/main/java/com/github/tvbox/osc/util/SearchHelper.java
  4. 39
      app/src/main/res/layout/activity_detail.xml
  5. 1
      app/src/main/res/layout/item_series_group.xml
  6. 2
      gradle.properties

@ -84,11 +84,32 @@ public class VodInfo implements Serializable {
seriesMap = new LinkedHashMap<>();
for (VodSeriesFlag flag : seriesFlags) {
seriesMap.put(flag.name, tempSeriesMap.get(flag.name));
List<VodSeries> list = tempSeriesMap.get(flag.name);
assert list != null;
if(isReverse(list))Collections.reverse(list);
seriesMap.put(flag.name, list);
}
}
}
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 < Math.min(list.size()-1,4); 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;
}
public void reverse() {
Set<String> flags = seriesMap.keySet();
for (String flag : flags) {

@ -141,6 +141,7 @@ public class DetailActivity extends BaseActivity {
private final ArrayList<String> seriesGroupOptions = new ArrayList<>();
private View currentSeriesGroupView;
private int GroupCount;
boolean showPreview = Hawk.get(HawkConfig.SHOW_PREVIEW, true);; // true 开启 false 关闭
@Override
protected int getLayoutResID() {
@ -176,7 +177,7 @@ public class DetailActivity extends BaseActivity {
tvPlay = findViewById(R.id.tvPlay);
// tvSort = findViewById(R.id.tvSort);
tvDesc = findViewById(R.id.tvDesc);
tvSeriesSort = findViewById(R.id.tvSeriesSort);
tvSeriesSort = findViewById(R.id.mSeriesSortTv);
tvCollect = findViewById(R.id.tvCollect);
tvQuickSearch = findViewById(R.id.tvQuickSearch);
mEmptyPlayList = findViewById(R.id.mEmptyPlaylist);
@ -202,9 +203,10 @@ public class DetailActivity extends BaseActivity {
getSupportFragmentManager().beginTransaction().show(playFragment).commitAllowingStateLoss();
tvPlay.setText("全屏");
}
llPlayerFragmentContainerBlock.setFocusable(showPreview);
mSeriesGroupView = findViewById(R.id.mSeriesGroupView);
tvSeriesGroup = findViewById(R.id.tvSeriesGroup);
tvSeriesGroup = findViewById(R.id.mSeriesGroupTv);
mSeriesGroupView.setHasFixedSize(true);
mSeriesGroupView.setLayoutManager(new V7LinearLayoutManager(this.mContext, 0, false));
seriesGroupAdapter = new BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_series_group, seriesGroupOptions) {
@ -323,12 +325,17 @@ public class DetailActivity extends BaseActivity {
if (vodInfo != null && vodInfo.seriesMap.size() > 0) {
vodInfo.reverseSort = !vodInfo.reverseSort;
isReverse = !isReverse;
tvSeriesSort.setText(isReverse?"倒序":"正序");
vodInfo.reverse();
vodInfo.playIndex=(vodInfo.seriesMap.get(vodInfo.playFlag).size()-1)-vodInfo.playIndex;
firstReverse = !firstReverse;
setSeriesGroupOptions();
seriesAdapter.notifyDataSetChanged();
mGridView.smoothScrollToPosition(vodInfo.playIndex);
if(currentSeriesGroupView != null) {
TextView txtView = currentSeriesGroupView.findViewById(R.id.tvSeriesGroup);
txtView.setTextColor(Color.WHITE);
}
}
}
});
@ -481,17 +488,11 @@ public class DetailActivity extends BaseActivity {
currentSeriesGroupView.isSelected();
}
});
mGridView.setOnFocusChangeListener((view, b) -> onGridViewFocusChange(view, b));
setLoadSir(llLayout);
}
private void onGridViewFocusChange(View view, boolean hasFocus) {
if (llPlayerFragmentContainerBlock.getVisibility() != View.VISIBLE) return;
llPlayerFragmentContainerBlock.setFocusable(!hasFocus);
}
private void initCheckedSourcesForSearch() {
mCheckSources = SearchHelper.getSourcesForSearch();
}
@ -588,25 +589,6 @@ 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 < Math.min(list.size()-1,4); 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);
@ -617,7 +599,6 @@ public class DetailActivity extends BaseActivity {
if(listSize>100 && listSize<=400)GroupCount=60;
if(listSize>400)GroupCount=120;
if(listSize > 1) {
tvSeriesSort.setText(isReverse(list)?"倒序":"正序");
tvSeriesGroup.setVisibility(View.VISIBLE);
int remainedOptionSize = listSize % GroupCount;
int optionSize = listSize / GroupCount;
@ -1013,7 +994,6 @@ public class DetailActivity extends BaseActivity {
// preview
VodInfo previewVodInfo = null;
boolean showPreview = Hawk.get(HawkConfig.SHOW_PREVIEW, true);; // true 开启 false 关闭
boolean fullWindows = false;
ViewGroup.LayoutParams windowsPreview = null;
ViewGroup.LayoutParams windowsFull = null;

@ -26,24 +26,25 @@ public class SearchHelper {
}
if (mCheckSources == null || mCheckSources.isEmpty()) {
mCheckSources = getSources();
} else {
HashMap<String, String> newSources = getSources();
for (Map.Entry<String, String> entry : newSources.entrySet()) {
String newKey = entry.getKey();
String newValue = entry.getValue();
if (!mCheckSources.containsKey(newKey)) {
mCheckSources.put(newKey, newValue);
}
}
Iterator<Map.Entry<String, String>> iterator = mCheckSources.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> oldEntry = iterator.next();
String oldKey = oldEntry.getKey();
if (!newSources.containsKey(oldKey)) {
iterator.remove();
}
}
}
// else {
// HashMap<String, String> newSources = getSources();
// for (Map.Entry<String, String> entry : newSources.entrySet()) {
// String newKey = entry.getKey();
// String newValue = entry.getValue();
// if (!mCheckSources.containsKey(newKey)) {
// mCheckSources.put(newKey, newValue);
// }
// }
// Iterator<Map.Entry<String, String>> iterator = mCheckSources.entrySet().iterator();
// while (iterator.hasNext()) {
// Map.Entry<String, String> oldEntry = iterator.next();
// String oldKey = oldEntry.getKey();
// if (!newSources.containsKey(oldKey)) {
// iterator.remove();
// }
// }
// }
return mCheckSources;
}

@ -176,6 +176,7 @@
android:layout_marginRight="@dimen/vs_10"
android:background="@drawable/button_detail_play"
android:focusable="true"
android:nextFocusUp="@id/previewPlayerBlock"
android:gravity="center"
android:text="立即播放"
android:textColor="@android:color/white"
@ -249,6 +250,7 @@
android:textSize="@dimen/ts_24" />
</LinearLayout>
<!-- mGridViewFlag 区域 -->
<com.owen.tvrecyclerview.widget.TvRecyclerView
android:id="@+id/mGridViewFlag"
android:layout_width="match_parent"
@ -258,45 +260,57 @@
android:layout_marginRight="@dimen/vs_50"
android:clipChildren="false"
android:clipToPadding="false"
android:focusable="true"
android:nextFocusUp="@id/previewPlayerPlace"
app:tv_horizontalSpacingWithMargins="@dimen/vs_10"
app:tv_selectedItemIsCentered="true" />
<LinearLayout
android:id="@+id/tvSeriesGroup"
android:id="@+id/mSeriesGroupTv"
android:layout_width="match_parent"
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:focusable="true"
android:gravity="center_vertical">
android:gravity="center_vertical"
android:focusable="false"
android:visibility="gone">
<!-- 排序功能按钮 -->
<TextView
android:id="@+id/tvSeriesSort"
android:id="@+id/mSeriesSortTv"
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:text="正序"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_20"/>
android:textSize="@dimen/ts_20"
android:ellipsize="marquee"
android:singleLine="true"
android:focusable="true"
android:nextFocusUp="@id/mGridViewFlag"
android:nextFocusDown="@id/mGridView"
android:nextFocusRight="@id/mSeriesGroupView"/>
<!-- 原来的 mSeriesGroupView -->
<com.owen.tvrecyclerview.widget.TvRecyclerView
android:id="@+id/mSeriesGroupView"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="@dimen/vs_45"
android:layout_weight="1"
android:layout_marginLeft="@dimen/vs_10"
android:clipChildren="false"
android:clipToPadding="false"
app:tv_horizontalSpacingWithMargins="@dimen/vs_10"
app:tv_selectedItemIsCentered="true"/>
app:tv_selectedItemIsCentered="true"
android:focusable="true"
android:nextFocusUp="@id/mGridViewFlag"
android:nextFocusDown="@id/mGridView"
android:nextFocusLeft="@id/mSeriesSortTv"/>
</LinearLayout>
@ -330,6 +344,7 @@
android:layout_width="@dimen/vs_470"
android:layout_height="@dimen/vs_300"
android:focusable="true"
android:nextFocusDown="@id/mGridViewFlag"
android:background="@drawable/preview_player_block"
android:layout_marginStart="@dimen/vs_50"
android:layout_marginLeft="@dimen/vs_50"

@ -6,6 +6,7 @@
android:background="@drawable/shape_source_flag_focus"
android:clickable="true"
android:focusable="true"
android:nextFocusUp="@id/mGridViewFlag"
android:orientation="vertical"
android:paddingLeft="@dimen/vs_10"
android:paddingTop="@dimen/vs_5"

@ -18,4 +18,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
IsDebug=true
org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED
#org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED

Loading…
Cancel
Save