From ef0797b14f0182c9d2e17628de1c13ac560bc402 Mon Sep 17 00:00:00 2001 From: FongMi Date: Tue, 9 Aug 2022 22:14:33 +0800 Subject: [PATCH] Clean code --- .../tv/ui/activity/SearchActivity.java | 69 +++------------- .../android/tv/ui/custom/CustomKeyboard.java | 80 +++++++++++++++++++ 2 files changed, 91 insertions(+), 58 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java index bb6e7f00f..2fb207105 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.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 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 rows = new ArrayList<>(); - List 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 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()) { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java new file mode 100644 index 000000000..0bafbe17e --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyboard.java @@ -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 getRows() { + List 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 rows = new ArrayList<>(); + for (List 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; + } + } +}