pull/21/head
FongMi 4 years ago
parent 74cf47b639
commit ef0797b14f
  1. 69
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java
  2. 80
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java

@ -18,26 +18,24 @@ import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.ActivitySearchBinding;
import com.fongmi.android.tv.model.SiteViewModel;
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.KeyboardPresenter;
import com.fongmi.android.tv.ui.presenter.TitlePresenter;
import com.fongmi.android.tv.ui.presenter.VodPresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class SearchActivity extends BaseActivity implements VodPresenter.OnClickListener, KeyboardPresenter.OnClickListener {
public class SearchActivity extends BaseActivity implements VodPresenter.OnClickListener {
private ActivitySearchBinding mBinding;
private ArrayObjectAdapter mSearchAdapter;
private ArrayObjectAdapter mKeyboardAdapter;
private SiteViewModel mSiteViewModel;
private ArrayObjectAdapter mAdapter;
private ExecutorService mService;
private List<Site> mSites;
@ -58,9 +56,9 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
@Override
protected void initView() {
CustomKeyboard.init(mBinding);
setRecyclerView();
setViewModel();
setKeyboard();
setSite();
}
@ -74,26 +72,11 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
}
private void setRecyclerView() {
CustomSelector searchSelector = new CustomSelector();
CustomSelector keyboardSelector = new CustomSelector();
searchSelector.addPresenter(String.class, new TitlePresenter());
searchSelector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class);
keyboardSelector.addPresenter(ListRow.class, new CustomRowPresenter(12), KeyboardPresenter.class);
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.keyboard.setVerticalSpacing(ResUtil.dp2px(12));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mSearchAdapter = new ArrayObjectAdapter(searchSelector)));
mBinding.keyboard.setAdapter(new ItemBridgeAdapter(mKeyboardAdapter = new ArrayObjectAdapter(keyboardSelector)));
}
private void setKeyboard() {
List<ListRow> rows = new ArrayList<>();
List<String> keys = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "◁", "▷", "⌫", "⏎");
for (List<String> items : Lists.partition(keys, 10)) {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new KeyboardPresenter(this));
adapter.addAll(0, items);
rows.add(new ListRow(adapter));
}
mKeyboardAdapter.addAll(mKeyboardAdapter.size(), rows);
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
}
private void setViewModel() {
@ -116,8 +99,8 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
adapter.addAll(0, items);
rows.add(new ListRow(adapter));
}
mSearchAdapter.add(result.getList().get(0).getSite().getName());
mSearchAdapter.addAll(mSearchAdapter.size(), rows);
mAdapter.add(result.getList().get(0).getSite().getName());
mAdapter.addAll(mAdapter.size(), rows);
mBinding.progressLayout.showContent();
}
@ -143,7 +126,7 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
}
private void hideProgress() {
mSearchAdapter.clear();
mAdapter.clear();
mBinding.layout.setVisibility(View.VISIBLE);
mBinding.progressLayout.setVisibility(View.INVISIBLE);
}
@ -157,36 +140,6 @@ public class SearchActivity extends BaseActivity implements VodPresenter.OnClick
DetailActivity.start(this, item.getSite().getKey(), item.getVodId());
}
@Override
public void onItemClick(String item) {
StringBuilder sb;
int cursor = mBinding.keyword.getSelectionStart();
switch (item) {
case "⏎":
mBinding.search.performClick();
break;
case "◁":
mBinding.keyword.setSelection(--cursor < 0 ? 0 : cursor);
break;
case "▷":
mBinding.keyword.setSelection(++cursor > mBinding.keyword.length() ? mBinding.keyword.length() : cursor);
break;
case "⌫":
if (cursor == 0) return;
sb = new StringBuilder(mBinding.keyword.getText().toString());
sb.deleteCharAt(cursor - 1);
mBinding.keyword.setText(sb.toString());
mBinding.keyword.setSelection(cursor - 1);
break;
default:
sb = new StringBuilder(mBinding.keyword.getText().toString());
sb.insert(cursor, item);
mBinding.keyword.setText(sb.toString());
mBinding.keyword.setSelection(cursor + 1);
break;
}
}
@Override
public void onBackPressed() {
if (isProgressVisible()) {

@ -0,0 +1,80 @@
package com.fongmi.android.tv.ui.custom;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.leanback.widget.ListRow;
import com.fongmi.android.tv.databinding.ActivitySearchBinding;
import com.fongmi.android.tv.ui.presenter.KeyboardPresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CustomKeyboard implements KeyboardPresenter.OnClickListener {
private static final String LEFT = "◁";
private static final String RIGHT = "▷";
private static final String BACK = "⌫";
private static final String ENTER = "⏎";
private final ActivitySearchBinding binding;
public static void init(ActivitySearchBinding binding) {
new CustomKeyboard(binding).initView();
}
public CustomKeyboard(ActivitySearchBinding binding) {
this.binding = binding;
}
private void initView() {
CustomSelector selector = new CustomSelector();
selector.addPresenter(ListRow.class, new CustomRowPresenter(12), KeyboardPresenter.class);
ArrayObjectAdapter adapter = new ArrayObjectAdapter(selector);
binding.keyboard.setVerticalSpacing(ResUtil.dp2px(12));
binding.keyboard.setAdapter(new ItemBridgeAdapter(adapter));
adapter.addAll(adapter.size(), getRows());
}
private List<ListRow> getRows() {
List<String> keys = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", LEFT, RIGHT, BACK, ENTER);
List<ListRow> rows = new ArrayList<>();
for (List<String> items : Lists.partition(keys, 10)) {
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new KeyboardPresenter(this));
adapter.addAll(0, items);
rows.add(new ListRow(adapter));
}
return rows;
}
@Override
public void onItemClick(String text) {
StringBuilder sb = new StringBuilder(binding.keyword.getText().toString());
int cursor = binding.keyword.getSelectionStart();
switch (text) {
case ENTER:
binding.search.performClick();
break;
case LEFT:
binding.keyword.setSelection(--cursor < 0 ? 0 : cursor);
break;
case RIGHT:
binding.keyword.setSelection(++cursor > binding.keyword.length() ? binding.keyword.length() : cursor);
break;
case BACK:
if (cursor == 0) return;
sb.deleteCharAt(cursor - 1);
binding.keyword.setText(sb.toString());
binding.keyword.setSelection(cursor - 1);
break;
default:
sb.insert(cursor, text);
binding.keyword.setText(sb.toString());
binding.keyword.setSelection(cursor + 1);
break;
}
}
}
Loading…
Cancel
Save