Full screen search result

pull/102/head
FongMi 3 years ago
parent 4b3939bf06
commit b4cb3d2d8f
  1. 40
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java
  2. 1
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java
  4. 8
      app/src/main/java/com/fongmi/android/tv/bean/Vod.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/ui/custom/ProgressLayout.java

@ -28,7 +28,6 @@ import com.fongmi.android.tv.CustomListener;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.bean.Hot;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Suggest;
import com.fongmi.android.tv.bean.Vod;
@ -39,11 +38,11 @@ import com.fongmi.android.tv.net.OKHttp;
import com.fongmi.android.tv.ui.custom.CustomKeyboard;
import com.fongmi.android.tv.ui.custom.CustomRowPresenter;
import com.fongmi.android.tv.ui.custom.CustomSelector;
import com.fongmi.android.tv.ui.presenter.TitlePresenter;
import com.fongmi.android.tv.ui.presenter.VodPresenter;
import com.fongmi.android.tv.ui.presenter.WordPresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.util.ArrayList;
@ -59,10 +58,11 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
private final ActivityResultLauncher<String> launcherString = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> onVoice());
private ActivitySearchBinding mBinding;
private SpeechRecognizer mRecognizer;
private SiteViewModel mSiteViewModel;
private ArrayObjectAdapter mWordAdapter;
private ArrayObjectAdapter mAdapter;
private SpeechRecognizer mRecognizer;
private ArrayObjectAdapter mLast;
private ExecutorService mService;
private List<Site> mSites;
private Handler mHandler;
@ -144,7 +144,6 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
private void setRecyclerView() {
CustomSelector selector = new CustomSelector();
selector.addPresenter(String.class, new TitlePresenter());
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class);
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
@ -155,7 +154,7 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
private void setViewModel() {
mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mSiteViewModel.result.observe(this, result -> {
if (mService != null) addVideo(result);
if (mService != null) addVideo(result.getList());
});
}
@ -176,14 +175,6 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
mSites.add(0, home);
}
private void addVideo(Result result) {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter(this));
adapter.setItems(result.getList(), null);
mAdapter.add(result.getList().get(0).getSite().getName());
mAdapter.add(new ListRow(adapter));
mBinding.progressLayout.showContent();
}
private void onVoice() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
launcherString.launch(Manifest.permission.RECORD_AUDIO);
@ -205,10 +196,33 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
showResult();
}
private boolean checkLastSize(List<Vod> items) {
if (mLast == null || items.size() == 0) return false;
int size = 5 - mLast.size();
if (size == 0) return false;
size = Math.min(size, items.size());
mLast.addAll(mLast.size(), new ArrayList<>(items.subList(0, size)));
addVideo(new ArrayList<>(items.subList(size, items.size())));
return true;
}
private void addVideo(List<Vod> items) {
if (checkLastSize(items)) return;
List<ListRow> rows = new ArrayList<>();
for (List<Vod> part : Lists.partition(items, 5)) {
mLast = new ArrayObjectAdapter(new VodPresenter(this));
mLast.setItems(part, null);
rows.add(new ListRow(mLast));
}
mAdapter.addAll(mAdapter.size(), rows);
mBinding.progressLayout.showContent();
}
private void stopSearch() {
if (mService == null) return;
mService.shutdownNow();
mService = null;
mLast = null;
}
private void showResult() {

@ -124,6 +124,7 @@ public class VodFragment extends Fragment implements CustomScroller.Callback, Vo
if (mLast == null || items.size() == 0) return false;
int size = 5 - mLast.size();
if (size == 0) return false;
size = Math.min(size, items.size());
mLast.addAll(mLast.size(), new ArrayList<>(items.subList(0, size)));
addVideo(new ArrayList<>(items.subList(size, items.size())));
return true;

@ -46,7 +46,9 @@ public class VodPresenter extends Presenter {
ViewHolder holder = (ViewHolder) viewHolder;
holder.binding.name.setText(item.getVodName());
holder.binding.year.setText(item.getVodYear());
holder.binding.site.setText(item.getSiteName());
holder.binding.remark.setText(item.getVodRemarks());
holder.binding.site.setVisibility(item.getSiteVisible());
holder.binding.year.setVisibility(item.getYearVisible());
holder.binding.remark.setVisibility(item.getRemarkVisible());
ImgUtil.load(item.getVodName(), item.getVodPic(), holder.binding.image);

@ -135,6 +135,14 @@ public class Vod {
this.site = site;
}
public String getSiteName() {
return getSite() == null ? "" : getSite().getName();
}
public int getSiteVisible() {
return getSite() == null ? View.GONE : View.VISIBLE;
}
public int getYearVisible() {
return getVodYear().isEmpty() ? View.GONE : View.VISIBLE;
}

@ -115,6 +115,6 @@ public class ProgressLayout extends RelativeLayout {
}
private void hideView(View view) {
view.setVisibility(INVISIBLE);
view.setVisibility(GONE);
}
}

Loading…
Cancel
Save