diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java index 85e8abd5a..9a002f60b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java @@ -8,12 +8,14 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Product; +import com.fongmi.android.tv.R; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.databinding.ActivityHistoryBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.adapter.HistoryAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -53,6 +55,7 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl } private void getHistory() { + mBinding.delete.setFocusable(false); mAdapter.addAll(History.get()); App.post(() -> { mBinding.delete.setVisibility(mAdapter.getItemCount() > 0 ? View.VISIBLE : View.GONE); @@ -63,7 +66,7 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl private void onDelete(View view) { if (mAdapter.isDelete()) { - mAdapter.clear(); + new MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_delete_record).setMessage(R.string.dialog_delete_history).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> mAdapter.clear()).show(); } else if (mAdapter.getItemCount() > 0) { mAdapter.setDelete(true); } else { diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index c934efdd8..dcd74c5f0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -79,7 +79,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private boolean confirm; private Result mResult; private Clock mClock; - private int recommend; private Site getHome() { return VodConfig.get().getHome(); @@ -138,7 +137,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private void setTitleView() { mBinding.homeSiteLock.setVisibility(Setting.isHomeSiteLock() ? View.VISIBLE : View.GONE); - mBinding.settingVodHistory.setVisibility(Setting.isHomeSiteLock() ? View.GONE : View.VISIBLE); + mBinding.settingVodHistory.setVisibility(Setting.isHomeSiteLock() || !Setting.isHomeChangeConfig() ? View.GONE : View.VISIBLE); } private void setRecyclerView() { @@ -162,11 +161,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private void setAdapter() { mAdapter.add(getFuncRow()); - int homeRecommend = Setting.getHomeRecommend(); - if (homeRecommend == 0) mAdapter.add(R.string.home_history); - if (homeRecommend == 1) mAdapter.add(R.string.home_recommend); - if (homeRecommend == 0) mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); - recommend = homeRecommend; + mAdapter.add(R.string.home_history); + mAdapter.add(R.string.home_recommend); + mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); } private void onSettingVodHistory(View view) { @@ -253,14 +250,13 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen int index = getRecommendIndex(); String title = getHome().getName(); mBinding.title.setText(title.isEmpty() ? ResUtil.getString(R.string.app_name) : title); - if (mAdapter.size() > index && index > -1) mAdapter.removeItems(index, mAdapter.size() - index); + if (mAdapter.size() > index) mAdapter.removeItems(index, mAdapter.size() - index); if (getHome().getKey().isEmpty()) return; mViewModel.homeContent(); - if (Setting.getHomeRecommend() == 1) mAdapter.add("progress"); + mAdapter.add("progress"); } private void addVideo(Result result) { - if (Setting.getHomeRecommend() == 0) return; Style style = result.getStyle(getHome().getStyle()); for (List items : Lists.partition(result.getList(), Product.getColumn(style))) { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter(this, style)); @@ -276,7 +272,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen adapter.add(Func.create(R.string.home_search)); adapter.add(Func.create(R.string.home_keep)); adapter.add(Func.create(R.string.home_push)); - if (Setting.getHomeRecommend() == 1) adapter.add(Func.create(R.string.home_history)); + adapter.add(Func.create(R.string.home_history)); adapter.add(Func.create(R.string.home_setting)); ((Func) adapter.get(0)).setNextFocusLeft(((Func) adapter.get(adapter.size() - 1)).getId()); ((Func) adapter.get(adapter.size() - 1)).setNextFocusRight(((Func) adapter.get(0)).getId()); @@ -288,13 +284,13 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } private void getHistory(boolean renew) { - if (Setting.getHomeRecommend() == 1) return; List items = History.get(); int historyIndex = getHistoryIndex(); - int totalSize = mAdapter.size(); + int recommendIndex = getRecommendIndex(); + boolean exist = recommendIndex - historyIndex == 2; if (renew) mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); - if (renew) mAdapter.removeItems(historyIndex, 1); - if (totalSize == historyIndex || renew) mAdapter.add(historyIndex, new ListRow(mHistoryAdapter)); + if ((items.isEmpty() && exist) || (renew && exist)) mAdapter.removeItems(historyIndex, 1); + if ((items.size() > 0 && !exist) || (renew && exist)) mAdapter.add(historyIndex, new ListRow(mHistoryAdapter)); mHistoryAdapter.setItems(items, null); } @@ -486,14 +482,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen super.onResume(); mClock.start(); setTitleView(); - reloadHomeRecommend(); - } - - private void reloadHomeRecommend() { - if (recommend == Setting.getHomeRecommend()) return; - mAdapter.clear(); - setAdapter(); - initConfig(); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java index 60672f0f2..aef0fd795 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java @@ -23,7 +23,6 @@ public class SettingCustomActivity extends BaseActivity { private String[] episode; private String[] fullscreenMenuKey; private String[] smallWindowBackKey; - private String[] homeRecommend; @Override protected ViewBinding getBinding() { @@ -53,7 +52,8 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeSiteLockText.setText(getSwitch(Setting.isHomeSiteLock())); mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); mBinding.smallWindowBackKeyText.setText((smallWindowBackKey = ResUtil.getStringArray(R.array.select_small_window_back_key))[Setting.getSmallWindowBackKey()]); - mBinding.homeRecommonedText.setText((homeRecommend = ResUtil.getStringArray(R.array.select_home_recommend))[Setting.getHomeRecommend()]); + mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig())); + mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); } @Override @@ -71,7 +71,8 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeSiteLock.setOnClickListener(this::setHomeSiteLock); mBinding.incognito.setOnClickListener(this::setIncognito); mBinding.smallWindowBackKey.setOnClickListener(this::setSmallWindowBackKey); - mBinding.homeRecommoned.setOnClickListener(this::setHomeRecommend); + mBinding.homeChangeConfig.setOnClickListener(this::setHomeChangeConfig); + mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch); } private void setQuality(View view) { @@ -154,10 +155,14 @@ public class SettingCustomActivity extends BaseActivity { mBinding.smallWindowBackKeyText.setText(smallWindowBackKey[index]); } - private void setHomeRecommend(View view) { - int index = Setting.getHomeRecommend(); - Setting.putHomeRecommend(index = index == homeRecommend.length - 1 ? 0 : ++index); - mBinding.homeRecommonedText.setText(homeRecommend[index]); + private void setHomeChangeConfig(View view) { + Setting.putHomeChangeConfig(!Setting.isHomeChangeConfig()); + mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig())); + } + + private void setAggregatedSearch(View view) { + Setting.putAggregatedSearch(!Setting.isAggregatedSearch()); + mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomTitleView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomTitleView.java index ba52f5a56..6c5c4bfa6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomTitleView.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomTitleView.java @@ -12,10 +12,15 @@ import androidx.appcompat.widget.AppCompatTextView; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.api.config.VodConfig; +import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.utils.KeyUtil; import com.fongmi.android.tv.utils.ResUtil; +import java.util.List; + public class CustomTitleView extends AppCompatTextView { private Listener listener; @@ -37,7 +42,8 @@ public class CustomTitleView extends AppCompatTextView { } private boolean hasEvent(KeyEvent event) { - return KeyUtil.isEnterKey(event) || (KeyUtil.isUpKey(event) && !coolDown); + if (Setting.isHomeChangeConfig()) return KeyUtil.isEnterKey(event) || (KeyUtil.isUpKey(event) && !coolDown); + return KeyUtil.isEnterKey(event) || KeyUtil.isLeftKey(event) || KeyUtil.isRightKey(event) || (KeyUtil.isUpKey(event) && !coolDown); } @Override @@ -49,6 +55,8 @@ public class CustomTitleView extends AppCompatTextView { @Override public boolean dispatchKeyEvent(KeyEvent event) { + if (Setting.isHomeSiteLock()) return false; + if (VodConfig.get().getSites().isEmpty()) return false; if (hasEvent(event)) return onKeyDown(event); else return super.dispatchKeyEvent(event); } @@ -56,6 +64,10 @@ public class CustomTitleView extends AppCompatTextView { private boolean onKeyDown(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_UP && KeyUtil.isEnterKey(event)) { listener.showDialog(); + } else if (event.getAction() == KeyEvent.ACTION_DOWN && KeyUtil.isLeftKey(event)) { + listener.setSite(getSite(true)); + } else if (event.getAction() == KeyEvent.ACTION_DOWN && KeyUtil.isRightKey(event)) { + listener.setSite(getSite(false)); } else if (event.getAction() == KeyEvent.ACTION_DOWN && KeyUtil.isUpKey(event)) { onKeyUp(); } @@ -68,6 +80,14 @@ public class CustomTitleView extends AppCompatTextView { coolDown = true; } + private Site getSite(boolean next) { + List items = VodConfig.get().getSites(); + int position = VodConfig.getHomeIndex(); + if (next) position = position > 0 ? --position : items.size() - 1; + else position = position < items.size() - 1 ? ++position : 0; + return items.get(position); + } + public interface Listener extends SiteCallback { void showDialog(); diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index c7067a64e..743f22756 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -420,9 +420,10 @@ android:orientation="horizontal"> + tools:text="开" /> + + + + + + + + diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 509d95106..ef74706e5 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -413,12 +413,20 @@ public class Setting { return Prefers.getInt("small_window_back_key", 0); } - public static void putHomeRecommend(int recommend) { - Prefers.put("home_recommend", recommend); + public static void putHomeChangeConfig(boolean change) { + Prefers.put("home_change_config", change); } - public static int getHomeRecommend() { - return Prefers.getInt("home_recommend", 0); + public static boolean isHomeChangeConfig() { + return Prefers.getBoolean("home_change_config", false); + } + + public static boolean isAggregatedSearch() { + return Prefers.getBoolean("aggregated_search", false); + } + + public static void putAggregatedSearch(boolean search) { + Prefers.put("aggregated_search", search); } } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index 875edafc7..e1a54a325 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -11,6 +11,7 @@ import androidx.room.PrimaryKey; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; +import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.gson.ExtAdapter; import com.github.catvod.utils.Json; @@ -194,6 +195,7 @@ public class Site implements Parcelable { } public Integer getIndexs() { + if (Setting.isAggregatedSearch() && (indexs == null || indexs == 1)) return 1; return indexs == null ? 0 : indexs; } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java index e79afea81..9c4ddeb5a 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ViewUtil.java @@ -7,7 +7,7 @@ import java.util.concurrent.atomic.AtomicInteger; public class ViewUtil { - private static final AtomicInteger viewIdGenerator = new AtomicInteger(1); + private static final AtomicInteger viewIdGenerator = new AtomicInteger(15000000); public static int generateViewId() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) return View.generateViewId(); diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 335fd8784..f05fb8686 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -76,11 +76,12 @@ 个性设置 图片品质 图片尺寸 + 聚合搜索 全屏菜单键 首页源锁定 无痕模式 小窗返回键 - 首页推荐位 + 首页换线 DoH Proxy 缓存 @@ -125,6 +126,9 @@ 请输入接口… 请输入名称… 请输入地址… + 删除全部纪录? + 收藏纪录将会全部删除。 + 观看纪录将会全部删除。 配置取得失败 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 21163e69e..20ec8c822 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -76,11 +76,12 @@ 個性設定 圖片品質 圖片尺寸 + 聚合搜索 全屏選單鍵 首頁源鎖定 無痕模式 小窗返回鍵 - 首页推薦位 + 首页換線 DoH Proxy 暫存 @@ -125,6 +126,9 @@ 請輸入接口… 請輸入名稱… 請輸入網址… + 刪除全部紀錄? + 收藏紀錄將會全部刪除。 + 觀看紀錄將會全部刪除。 配置取得失敗 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3f45f497..04bebbbe9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,11 +76,12 @@ Custom setting Image quality Image size + Aggregated search Fullscreen menu key Home site lock Incognito mode Small window back key - Home recommend + Home change config DoH Proxy Cache @@ -125,6 +126,9 @@ Please enter the config… Please enter the name… Please enter the url… + Delete all records? + All keep records will be removed. + All history records will be removed. Configuration get failed diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java index 446c8d4da..7040f079c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingCustomFragment.java @@ -42,6 +42,8 @@ public class SettingCustomFragment extends BaseFragment { mBinding.danmuSyncText.setText(getSwitch(Setting.isDanmuSync())); mBinding.speedText.setText(getSpeedText()); mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); + mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); + mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig())); } @Override @@ -52,6 +54,8 @@ public class SettingCustomFragment extends BaseFragment { mBinding.speed.setOnClickListener(this::setSpeed); mBinding.speed.setOnLongClickListener(this::resetSpeed); mBinding.incognito.setOnClickListener(this::setIncognito); + mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch); + mBinding.homeChangeConfig.setOnClickListener(this::setHomeChangeConfig); } private boolean onTitle(View view) { @@ -96,4 +100,15 @@ public class SettingCustomFragment extends BaseFragment { mBinding.incognitoText.setText(getSwitch(Setting.isIncognito())); } + private void setAggregatedSearch(View view) { + Setting.putAggregatedSearch(!Setting.isAggregatedSearch()); + mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); + } + + private void setHomeChangeConfig(View view) { + Setting.putHomeChangeConfig(!Setting.isHomeChangeConfig()); + mBinding.homeChangeConfigText.setText(getSwitch(Setting.isHomeChangeConfig())); + RefreshEvent.config(); + } + } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 2fec9dcb7..debb05652 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -98,6 +98,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal protected void initView() { EventBus.getDefault().register(this); setRecyclerView(); + setAppBarView(); setViewModel(); showProgress(); initHot(); @@ -127,6 +128,10 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal }); } + private void setAppBarView() { + mBinding.settingVodHistory.setVisibility(Setting.isHomeChangeConfig() ? View.VISIBLE : View.GONE); + } + private void setRecyclerView() { mBinding.type.setHasFixedSize(true); mBinding.type.setItemAnimator(null); @@ -315,6 +320,9 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal case SIZE: homeContent(); break; + case CONFIG: + setAppBarView(); + break; } } diff --git a/app/src/mobile/res/layout/fragment_setting_custom.xml b/app/src/mobile/res/layout/fragment_setting_custom.xml index 7608d0329..3470facb9 100644 --- a/app/src/mobile/res/layout/fragment_setting_custom.xml +++ b/app/src/mobile/res/layout/fragment_setting_custom.xml @@ -152,6 +152,60 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/layout/fragment_vod.xml b/app/src/mobile/res/layout/fragment_vod.xml index ca597ca8e..61832859d 100644 --- a/app/src/mobile/res/layout/fragment_vod.xml +++ b/app/src/mobile/res/layout/fragment_vod.xml @@ -28,17 +28,9 @@ android:id="@+id/logo" android:layout_width="24dp" android:layout_height="24dp" - android:layout_marginEnd="12dp" android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_logo" /> - - + + 其它 屏显 - - 删除全部纪录? - 收藏纪录将会全部删除。 - 观看纪录将会全部删除。 - 5 分钟 15 分钟 diff --git a/app/src/mobile/res/values-zh-rTW/strings.xml b/app/src/mobile/res/values-zh-rTW/strings.xml index e37ed3200..c39ef2632 100644 --- a/app/src/mobile/res/values-zh-rTW/strings.xml +++ b/app/src/mobile/res/values-zh-rTW/strings.xml @@ -32,11 +32,6 @@ 其它 螢幕顯示 - - 刪除全部紀錄? - 收藏紀錄將會全部刪除。 - 觀看紀錄將會全部刪除。 - 5 分鐘 15 分鐘 diff --git a/app/src/mobile/res/values/strings.xml b/app/src/mobile/res/values/strings.xml index 7701c0257..8cf93148f 100644 --- a/app/src/mobile/res/values/strings.xml +++ b/app/src/mobile/res/values/strings.xml @@ -32,11 +32,6 @@ Other Display - - Delete all records? - All keep records will be removed. - All history records will be removed. - 5 minutes 15 minutes