优化完善嗅探click点击事件

pull/144/head
于俊 1 year ago
parent 4f54caa7ad
commit b1ee686acc
  1. 36
      app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java
  2. 10
      app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java
  3. 37
      app/src/main/java/com/github/tvbox/osc/ui/dialog/SelectDialog.java
  4. 31
      app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java

@ -631,22 +631,26 @@ public class HomeActivity extends BaseActivity {
ControlManager.get().stopServer();
}
private SelectDialog<SourceBean> mSiteSwitchDialog;
void showSiteSwitch() {
List<SourceBean> sites = ApiConfig.get().getSwitchSourceBeanList();
if (sites.size() > 0) {
SelectDialog<SourceBean> dialog = new SelectDialog<>(HomeActivity.this);
TvRecyclerView tvRecyclerView = dialog.findViewById(R.id.list);
int spanCount;
spanCount = (int)Math.floor(sites.size()/20);
if (sites.isEmpty()) return;
int select = sites.indexOf(ApiConfig.get().getHomeSourceBean());
if (select < 0) select = 0;
if (mSiteSwitchDialog == null) {
mSiteSwitchDialog = new SelectDialog<>(HomeActivity.this);
TvRecyclerView tvRecyclerView = mSiteSwitchDialog.findViewById(R.id.list);
// 根据 sites 数量动态计算列数
int spanCount = (int) Math.floor(sites.size() / 20.0);
spanCount = Math.min(spanCount, 2);
tvRecyclerView.setLayoutManager(new V7GridLayoutManager(dialog.getContext(), spanCount+1));
ConstraintLayout cl_root = dialog.findViewById(R.id.cl_root);
tvRecyclerView.setLayoutManager(new V7GridLayoutManager(mSiteSwitchDialog.getContext(), spanCount + 1));
// 设置对话框宽度
ConstraintLayout cl_root = mSiteSwitchDialog.findViewById(R.id.cl_root);
ViewGroup.LayoutParams clp = cl_root.getLayoutParams();
clp.width = AutoSizeUtils.mm2px(dialog.getContext(), 380+200*spanCount);
dialog.setTip("请选择首页数据源");
int select = sites.indexOf(ApiConfig.get().getHomeSourceBean());
if (select<0) select = 0;
dialog.setAdapter(new SelectDialogAdapter.SelectDialogInterface<SourceBean>() {
clp.width = AutoSizeUtils.mm2px(mSiteSwitchDialog.getContext(), 380 + 200 * spanCount);
mSiteSwitchDialog.setTip("请选择首页数据源");
mSiteSwitchDialog.setAdapter(new SelectDialogAdapter.SelectDialogInterface<SourceBean>() {
@Override
public void click(SourceBean value, int pos) {
ApiConfig.get().setSourceBean(value);
@ -657,23 +661,21 @@ public class HomeActivity extends BaseActivity {
intent.putExtras(bundle);
HomeActivity.this.startActivity(intent);
}
@Override
public String getDisplay(SourceBean val) {
return val.getName();
}
}, new DiffUtil.ItemCallback<SourceBean>() {
@Override
public boolean areItemsTheSame(@NonNull @NotNull SourceBean oldItem, @NonNull @NotNull SourceBean newItem) {
public boolean areItemsTheSame(@NonNull SourceBean oldItem, @NonNull SourceBean newItem) {
return oldItem == newItem;
}
@Override
public boolean areContentsTheSame(@NonNull @NotNull SourceBean oldItem, @NonNull @NotNull SourceBean newItem) {
public boolean areContentsTheSame(@NonNull SourceBean oldItem, @NonNull SourceBean newItem) {
return oldItem.getKey().equals(newItem.getKey());
}
}, sites, select);
dialog.show();
}
mSiteSwitchDialog.show();
}
}

@ -1546,8 +1546,14 @@ public class PlayActivity extends BaseActivity {
}else {
selector=click.trim();
}
String js="$(\""+ selector+"\").click();";
mSysWebView.loadUrl("javascript:"+js);
String js = selector;
if(!selector.contains("click()"))js+=".click();";
LOG.i("echo-javascript:" + js);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.evaluateJavascript(js, null);
} else {
view.loadUrl("javascript:" + js);
}
}
}

@ -6,9 +6,12 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.ui.adapter.SelectDialogAdapter;
import com.owen.tvrecyclerview.widget.GridLayoutManager;
import com.owen.tvrecyclerview.widget.TvRecyclerView;
import org.jetbrains.annotations.NotNull;
@ -35,18 +38,34 @@ public class SelectDialog<T> extends BaseDialog {
((TextView) findViewById(R.id.title)).setText(tip);
}
public void setAdapter(SelectDialogAdapter.SelectDialogInterface<T> sourceBeanSelectDialogInterface, DiffUtil.ItemCallback<T> sourceBeanItemCallback, List<T> data, int select) {
SelectDialogAdapter<T> adapter = new SelectDialogAdapter(sourceBeanSelectDialogInterface, sourceBeanItemCallback);
public void setAdapter(SelectDialogAdapter.SelectDialogInterface<T> sourceBeanSelectDialogInterface,
DiffUtil.ItemCallback<T> sourceBeanItemCallback,
List<T> data, int select) {
SelectDialogAdapter<T> adapter = new SelectDialogAdapter<>(sourceBeanSelectDialogInterface, sourceBeanItemCallback);
adapter.setData(data, select);
TvRecyclerView tvRecyclerView = ((TvRecyclerView) findViewById(R.id.list));
TvRecyclerView tvRecyclerView = findViewById(R.id.list);
tvRecyclerView.setAdapter(adapter);
tvRecyclerView.setSelectedPosition(select);
tvRecyclerView.post(new Runnable() {
@Override
public void run() {
tvRecyclerView.smoothScrollToPosition(select);
tvRecyclerView.setSelectionWithSmooth(select);
tvRecyclerView.post(() -> {
RecyclerView.LayoutManager layoutManager = tvRecyclerView.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
int spanCount = gridLayoutManager.getNumColumns();
int rowIndex = select / spanCount;
int firstVisibleRow = gridLayoutManager.getFirstVisiblePosition() / spanCount;
int lastVisibleRow = gridLayoutManager.getLastVisiblePosition() / spanCount;
// 平滑滚动并调整位置
if (rowIndex < firstVisibleRow || rowIndex > lastVisibleRow) {
int offset = tvRecyclerView.getHeight() / 3;
gridLayoutManager.scrollToPositionWithOffset(select, offset);
}
// tvRecyclerView.postDelayed(() -> tvRecyclerView.smoothScrollToPosition(select), 200);
} else if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
int offset = tvRecyclerView.getHeight() / 3;
linearLayoutManager.scrollToPositionWithOffset(select, offset);
// tvRecyclerView.postDelayed(() -> tvRecyclerView.smoothScrollToPosition(select), 200);
}
});
}
}

@ -1585,21 +1585,30 @@ public class PlayFragment extends BaseLazyFragment {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view,url);
String click=sourceBean.getClickSelector();
super.onPageFinished(view, url);
String clickSelector = sourceBean.getClickSelector();
LOG.i("echo-onPageFinished url:" + url);
if(!click.isEmpty()){
if (clickSelector != null && !clickSelector.trim().isEmpty()) {
String selector;
if(click.contains(";")){
if(!url.contains(click.split(";")[0]))return;
selector=click.split(";")[1];
}else {
selector=click.trim();
if (clickSelector.contains(";")) {
String[] parts = clickSelector.split(";", 2);
if (!url.contains(parts[0])) {
return;
}
selector = parts[1].trim();
} else {
selector = clickSelector.trim();
}
String js="$(\""+ selector+"\").click();";
// selector="document.getElementById('playleft').children[0].contentWindow.document.getElementById('start')";
// 构造点击的 JS 代码
String js = selector;
if(!selector.contains("click()"))js+=".click();";
LOG.i("echo-javascript:" + js);
mSysWebView.loadUrl("javascript:"+js);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.evaluateJavascript(js, null);
} else {
view.loadUrl("javascript:" + js);
}
}
}

Loading…
Cancel
Save