[leanback] optimize auto switch

pull/123/head
FongMi 3 years ago
parent 322ad6e16b
commit 7606c168b2
  1. 55
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 13
      app/src/main/java/com/fongmi/android/tv/api/ApiConfig.java
  3. 1
      app/src/main/res/values-zh-rCN/strings.xml
  4. 1
      app/src/main/res/values-zh-rTW/strings.xml
  5. 1
      app/src/main/res/values/strings.xml

@ -147,11 +147,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
return 0;
}
private int getParsePosition() {
for (int i = 0; i < mParseAdapter.size(); i++) if (((Parse) mParseAdapter.get(i)).isActivated()) return i;
return 0;
}
private int getPlayerType() {
return mHistory != null && mHistory.getPlayer() != -1 ? mHistory.getPlayer() : getSite().getPlayerType() != -1 ? getSite().getPlayerType() : Prefers.getPlayer();
}
@ -176,6 +171,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
return Prefers.getReset() == 1;
}
private boolean isFromCollect() {
return getCallingActivity().getShortClassName().contains(CollectActivity.class.getSimpleName());
}
@Override
protected ViewBinding getBinding() {
return mBinding = ActivityDetailBinding.inflate(getLayoutInflater());
@ -278,13 +277,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[scale]);
}
boolean test = false;
private void setViewModel() {
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.search.observe(this, result -> setSearch(result.getList()));
mViewModel.player.observe(this, result -> {
boolean useParse = (result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1;
mBinding.control.parseLayout.setVisibility(mParseAdapter.size() > 0 && useParse ? View.VISIBLE : View.GONE);
mPlayers.start(result, useParse, getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1);
int timeout = getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1;
mPlayers.start(result, useParse, timeout);
resetFocus();
});
mViewModel.result.observe(this, result -> {
@ -327,11 +328,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void setEmpty() {
if (getName().isEmpty()) {
if (isFromCollect()) {
finish();
} else if (getName().isEmpty()) {
mBinding.progressLayout.showEmpty();
} else {
CollectActivity.start(this, getName(), true);
finish();
checkSearch();
}
}
@ -800,32 +802,15 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void statFlow() {
if (isVisible(mBinding.control.parseLayout)) checkParse();
else checkFlag();
}
private void checkParse() {
int position = getParsePosition();
if (position == mParseAdapter.size() - 1) initParse();
if (position == mParseAdapter.size() - 1) checkFlag();
else nextParse(position);
}
private void checkFlag() {
if (!getSite().isSwitchable()) return;
int position = mBinding.flag.getSelectedPosition();
if (position == mFlagAdapter.size() - 1 || !getSite().isSwitchable()) checkSearch();
if (position == mFlagAdapter.size() - 1) checkSearch();
else nextFlag(position);
}
private void checkSearch() {
if (isAutoMode() && mSearchAdapter.size() > 0) nextSite();
else initSearch(getName(), getSite().isSwitchable());
}
private void initParse() {
if (mParseAdapter.size() == 0) return;
ApiConfig.get().setParse((Parse) mParseAdapter.get(0));
notifyItemChanged(mBinding.control.parse, mParseAdapter);
else initSearch(getName(), true);
}
private void initSearch(String keyword, boolean auto) {
@ -839,7 +824,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void startSearch(String keyword) {
mSearchAdapter.clear();
mExecutor = Executors.newFixedThreadPool(Constant.THREAD_POOL);
for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword));
for (Site site : ApiConfig.get().getSites()) {
if (site.getKey().equals(getKey())) continue;
if (isAutoMode() && !site.isSwitchable()) continue;
if (site.isSearchable()) mExecutor.execute(() -> search(site, keyword));
}
}
private void stopSearch() {
@ -867,12 +856,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
else return !item.getVodName().contains(keyword);
}
private void nextParse(int position) {
Parse parse = (Parse) mParseAdapter.get(position + 1);
Notify.show(getString(R.string.play_switch_parse, parse.getName()));
setParseActivated(parse);
}
private void nextFlag(int position) {
Vod.Flag flag = (Vod.Flag) mFlagAdapter.get(position + 1);
Notify.show(getString(R.string.play_switch_flag, flag.getFlag()));

@ -27,17 +27,17 @@ import java.util.Map;
public class ApiConfig {
private List<String> flags;
private List<Parse> parses;
private List<Site> sites;
private List<Parse> parses;
private List<String> flags;
private JarLoader jarLoader;
private PyLoader pyLoader;
private JsLoader jsLoader;
private Config config;
private Parse parse;
private Site home;
private String wall;
private String ads;
private Site home;
private static class Loader {
static volatile ApiConfig INSTANCE = new ApiConfig();
@ -65,8 +65,9 @@ public class ApiConfig {
public ApiConfig init() {
this.ads = null;
this.home = null;
this.wall = null;
this.home = null;
this.parse = null;
this.config = Config.vod();
this.sites = new ArrayList<>();
this.flags = new ArrayList<>();
@ -84,8 +85,9 @@ public class ApiConfig {
public ApiConfig clear() {
this.ads = null;
this.home = null;
this.wall = null;
this.home = null;
this.parse = null;
this.sites.clear();
this.flags.clear();
this.parses.clear();
@ -145,7 +147,6 @@ public class ApiConfig {
}
for (JsonElement element : Json.safeListElement(object, "parses")) {
Parse parse = Parse.objectFrom(element);
if (parse.getName().equals(config.getParse())) setParse(parse);
if (!parses.contains(parse)) parses.add(parse);
}
if (home == null) setHome(sites.isEmpty() ? new Site() : sites.get(0));

@ -49,7 +49,6 @@
<string name="play_backward"></string>
<string name="play_forward_hint">已切换正序播放</string>
<string name="play_backward_hint">已切换倒序播放</string>
<string name="play_switch_parse">正在切换解析至「<xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_flag">正在切换线路至「<xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_site">正在切换站源至「<xliff:g name="name">%s</xliff:g></string>

@ -49,7 +49,6 @@
<string name="play_backward"></string>
<string name="play_forward_hint">已切換正序播放</string>
<string name="play_backward_hint">已切換倒序播放</string>
<string name="play_switch_parse">正在切换解析至「<xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_flag">正在切換線路至「<xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_site">正在切換站源至「<xliff:g name="name">%s</xliff:g></string>

@ -49,7 +49,6 @@
<string name="play_backward"></string>
<string name="play_forward_hint">Normal play switched</string>
<string name="play_backward_hint">Reverse play switched</string>
<string name="play_switch_parse">Switching parse to <xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_flag">Switching flag to <xliff:g name="name">%s</xliff:g></string>
<string name="play_switch_site">Switching site to <xliff:g name="name">%s</xliff:g></string>

Loading…
Cancel
Save