Optimize auto search

pull/123/head
FongMi 3 years ago
parent 2d41567702
commit 8c4f347a2d
  1. 108
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java

@ -92,8 +92,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private SiteViewModel mViewModel;
private boolean mFullscreen;
private boolean mInitTrack;
private boolean mInitAuto;
private boolean mAutoMode;
private boolean mAccurate;
private History mHistory;
private Players mPlayers;
private int mCurrent;
@ -423,45 +423,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mArrayAdapter.setItems(items, null);
}
private void stopSearch() {
if (mExecutor != null) mExecutor.shutdownNow();
mSearchAdapter.clear();
}
private void initSearch(String keyword, boolean accurate) {
stopSearch();
startSearch(keyword);
setAccurate(accurate);
setAutoMode(accurate);
mBinding.part.setTag(keyword);
}
private void startSearch(String keyword) {
mExecutor = Executors.newFixedThreadPool(5);
for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword));
}
private void search(Site site, String keyword) {
try {
mViewModel.searchContent(site, keyword);
} catch (Throwable ignored) {
}
}
private void setSearch(List<Vod> items) {
Iterator<Vod> iterator = items.iterator();
while (iterator.hasNext()) if (mismatch(iterator.next())) iterator.remove();
mSearchAdapter.addAll(mSearchAdapter.size(), items);
mBinding.search.setVisibility(View.VISIBLE);
if (isAutoMode()) nextSite();
}
private boolean mismatch(Vod item) {
String keyword = mBinding.part.getTag().toString();
if (isAccurate()) return !item.getVodName().equals(keyword);
else return !item.getVodName().contains(keyword);
}
@Override
public void onRevSort() {
mHistory.setRevSort(!mHistory.isRevSort());
@ -822,11 +783,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void onError(String msg) {
int position = mBinding.flag.getSelectedPosition();
if (position == mFlagAdapter.size() - 1) {
initSearch(mBinding.name.getText().toString(), true);
mBinding.widget.text.setText(msg);
Clock.get().setCallback(null);
mPlayers.stop();
hideProgress();
checkSearch();
showError();
} else {
mPlayers.reset();
@ -834,6 +795,53 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
}
private void checkSearch() {
if (mSearchAdapter.size() > 0 && isAutoMode()) {
nextSite();
} else {
initSearch(getName(), true);
}
}
private void initSearch(String keyword, boolean auto) {
stopSearch();
setAutoMode(auto);
setInitAuto(auto);
startSearch(keyword);
mBinding.part.setTag(keyword);
}
private void startSearch(String keyword) {
mExecutor = Executors.newSingleThreadExecutor();
for (Site site : ApiConfig.get().getSites()) if (site.isSearchable() && !site.getKey().equals(getKey())) mExecutor.execute(() -> search(site, keyword));
}
private void stopSearch() {
if (mExecutor != null) mExecutor.shutdownNow();
mSearchAdapter.clear();
}
private void search(Site site, String keyword) {
try {
mViewModel.searchContent(site, keyword);
} catch (Throwable ignored) {
}
}
private void setSearch(List<Vod> items) {
Iterator<Vod> iterator = items.iterator();
while (iterator.hasNext()) if (mismatch(iterator.next())) iterator.remove();
mSearchAdapter.addAll(mSearchAdapter.size(), items);
mBinding.search.setVisibility(View.VISIBLE);
if (isInitAuto()) nextSite();
}
private boolean mismatch(Vod item) {
String keyword = mBinding.part.getTag().toString();
if (isAutoMode()) return !item.getVodName().equals(keyword);
else return !item.getVodName().contains(keyword);
}
private void nextFlag(int position) {
Vod.Flag flag = (Vod.Flag) mFlagAdapter.get(position + 1);
Notify.show(ResUtil.getString(R.string.play_switch_flag, flag.getFlag()));
@ -845,7 +853,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
Vod vod = (Vod) mSearchAdapter.get(0);
Notify.show(ResUtil.getString(R.string.play_switch_site, vod.getSiteName()));
mSearchAdapter.removeItems(0, 1);
setAutoMode(false);
setInitAuto(false);
getDetail(vod);
}
@ -878,20 +886,20 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
this.mInitTrack = initTrack;
}
private boolean isAutoMode() {
return mAutoMode;
public boolean isInitAuto() {
return mInitAuto;
}
private void setAutoMode(boolean autoMode) {
this.mAutoMode = autoMode;
public void setInitAuto(boolean initAuto) {
this.mInitAuto = initAuto;
}
private boolean isAccurate() {
return mAccurate;
private boolean isAutoMode() {
return mAutoMode;
}
private void setAccurate(boolean accurate) {
this.mAccurate = accurate;
private void setAutoMode(boolean autoMode) {
this.mAutoMode = autoMode;
}
@Override

Loading…
Cancel
Save