From adcca530521f747486b4396da09f7d7b833d3507 Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 10 Mar 2024 17:34:16 +0800 Subject: [PATCH 1/4] display, home history --- .../tv/ui/activity/SettingActivity.java | 6 + .../tv/ui/activity/SettingCustomActivity.java | 41 +++---- .../android/tv/ui/adapter/DisplayAdapter.java | 93 ++++++++++++++++ .../android/tv/ui/dialog/DisplayDialog.java | 65 +++++++++++ .../android/tv/ui/fragment/HomeFragment.java | 16 ++- .../res/layout/activity_setting_custom.xml | 103 +++--------------- .../leanback/res/layout/adapter_display.xml | 42 +++++++ .../leanback/res/layout/dialog_display.xml | 18 +++ .../java/com/fongmi/android/tv/Setting.java | 8 ++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 276 insertions(+), 119 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DisplayAdapter.java create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DisplayDialog.java create mode 100644 app/src/leanback/res/layout/adapter_display.xml create mode 100644 app/src/leanback/res/layout/dialog_display.xml diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java index da51cb8a4..de403c3b9 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java @@ -327,4 +327,10 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit mBinding.backupText.setText(AppDatabase.getDate()); return true; } + + @Override + protected void onDestroy() { + super.onDestroy(); + RefreshEvent.history(); + } } 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 8521df09a..b61615237 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 @@ -12,6 +12,7 @@ import com.fongmi.android.tv.databinding.ActivitySettingCustomBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.dialog.ButtonsDialog; +import com.fongmi.android.tv.ui.dialog.DisplayDialog; import com.fongmi.android.tv.utils.ResUtil; import java.util.Locale; @@ -46,10 +47,6 @@ public class SettingCustomActivity extends BaseActivity { mBinding.qualityText.setText((quality = ResUtil.getStringArray(R.array.select_quality))[Setting.getQuality()]); mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]); mBinding.episodeText.setText((episode = ResUtil.getStringArray(R.array.select_episode))[Setting.getEpisode()]); - mBinding.displayTimeText.setText(getSwitch(Setting.isDisplayTime())); - mBinding.displayNetspeedText.setText(getSwitch(Setting.isDisplaySpeed())); - mBinding.displayDurationText.setText(getSwitch(Setting.isDisplayDuration())); - mBinding.displayMiniProgressText.setText(getSwitch(Setting.isDisplayMiniProgress())); mBinding.speedText.setText(getSpeedText()); mBinding.fullscreenMenuKeyText.setText((fullscreenMenuKey = ResUtil.getStringArray(R.array.select_fullscreen_menu_key))[Setting.getFullscreenMenuKey()]); mBinding.homeSiteLockText.setText(getSwitch(Setting.isHomeSiteLock())); @@ -58,6 +55,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeMenuKeyText.setText((homeMenuKey = ResUtil.getStringArray(R.array.select_home_menu_key))[Setting.getHomeMenuKey()]); mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); mBinding.homeUIText.setText((homeUI = ResUtil.getStringArray(R.array.select_home_ui))[Setting.getHomeUI()]); + mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory())); } @Override @@ -65,10 +63,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.quality.setOnClickListener(this::setQuality); mBinding.size.setOnClickListener(this::setSize); mBinding.episode.setOnClickListener(this::setEpisode); - mBinding.displayTime.setOnClickListener(this::setDisplayTime); - mBinding.displayNetspeed.setOnClickListener(this::setDisplaySpeed); - mBinding.displayDuration.setOnClickListener(this::setDisplayDuration); - mBinding.displayMiniProgress.setOnClickListener(this::setDisplayMiniProgress); + mBinding.display.setOnClickListener(this::onDisplay); mBinding.speed.setOnClickListener(this::setSpeed); mBinding.speed.setOnLongClickListener(this::resetSpeed); mBinding.fullscreenMenuKey.setOnClickListener(this::setFullscreenMenuKey); @@ -78,7 +73,8 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeMenuKey.setOnClickListener(this::setHomeMenuKey); mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch); mBinding.homeUI.setOnClickListener(this::setHomeUI); - mBinding.homeButtons.setOnClickListener(this::setHomeButtons); + mBinding.homeButtons.setOnClickListener(this::onHomeButtons); + mBinding.homeHistory.setOnClickListener(this::setHomeHistory); } private void setQuality(View view) { @@ -101,24 +97,8 @@ public class SettingCustomActivity extends BaseActivity { mBinding.episodeText.setText(episode[index]); } - private void setDisplayTime(View view) { - Setting.putDisplayTime(!Setting.isDisplayTime()); - mBinding.displayTimeText.setText(getSwitch(Setting.isDisplayTime())); - } - - private void setDisplaySpeed(View view) { - Setting.putDisplaySpeed(!Setting.isDisplaySpeed()); - mBinding.displayNetspeedText.setText(getSwitch(Setting.isDisplaySpeed())); - } - - private void setDisplayDuration(View view) { - Setting.putDisplayDuration(!Setting.isDisplayDuration()); - mBinding.displayDurationText.setText(getSwitch(Setting.isDisplayDuration())); - } - - private void setDisplayMiniProgress(View view) { - Setting.putDisplayMiniProgress(!Setting.isDisplayMiniProgress()); - mBinding.displayMiniProgressText.setText(getSwitch(Setting.isDisplayMiniProgress())); + private void onDisplay(View view) { + DisplayDialog.create(this).show(); } private String getSpeedText() { @@ -178,8 +158,13 @@ public class SettingCustomActivity extends BaseActivity { mBinding.homeUIText.setText(homeUI[index]); } - private void setHomeButtons(View view) { + private void onHomeButtons(View view) { ButtonsDialog.create(this).show(); } + private void setHomeHistory(View view) { + Setting.putHomeHistory(!Setting.isHomeHistory()); + mBinding.homeHistoryText.setText(getSwitch(Setting.isHomeHistory())); + } + } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DisplayAdapter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DisplayAdapter.java new file mode 100644 index 000000000..865b65dfb --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/DisplayAdapter.java @@ -0,0 +1,93 @@ +package com.fongmi.android.tv.ui.adapter; + +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.AdapterDisplayBinding; +import com.fongmi.android.tv.utils.ResUtil; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayAdapter extends RecyclerView.Adapter { + + private List mItems; + + public DisplayAdapter() { + mItems = new ArrayList<>(); + mItems.add(ResUtil.getString(R.string.play_time)); + mItems.add(ResUtil.getString(R.string.play_netspeed)); + mItems.add(ResUtil.getString(R.string.play_duration)); + mItems.add(ResUtil.getString(R.string.play_mini_progress)); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(AdapterDisplayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + String name = mItems.get(position); + holder.binding.text.setText(name); + holder.binding.check.setChecked(getChecked(position)); + holder.binding.select.setOnLongClickListener(v -> onItemLongClick(position)); + holder.binding.select.setOnClickListener(v -> onItemClick(position)); + holder.binding.text.setGravity(Gravity.CENTER); + } + + private boolean getChecked(int position) { + if (position == 0) return Setting.isDisplayTime(); + else if (position == 1) return Setting.isDisplaySpeed(); + else if (position == 2) return Setting.isDisplayDuration(); + else if (position == 3) return Setting.isDisplayMiniProgress(); + return false; + } + + private void onItemClick(int position) { + if (position == 0) Setting.putDisplayTime(!Setting.isDisplayTime()); + else if (position == 1) Setting.putDisplaySpeed(!Setting.isDisplaySpeed()); + else if (position == 2) Setting.putDisplayDuration(!Setting.isDisplayDuration()); + else if (position == 3) Setting.putDisplayMiniProgress(!Setting.isDisplayMiniProgress()); + notifyItemRangeChanged(0, getItemCount()); + } + + private boolean onItemLongClick(int position) { + boolean checked = false; + if (position == 0) checked = Setting.isDisplayTime(); + else if (position == 1) checked = Setting.isDisplaySpeed(); + else if (position == 2) checked = Setting.isDisplayDuration(); + else if (position == 3) checked = Setting.isDisplayMiniProgress(); + Setting.putDisplayTime(!checked); + Setting.putDisplaySpeed(!checked); + Setting.putDisplayDuration(!checked); + Setting.putDisplayMiniProgress(!checked); + notifyItemRangeChanged(0, getItemCount()); + return true; + } + + + static class ViewHolder extends RecyclerView.ViewHolder { + + private final AdapterDisplayBinding binding; + + ViewHolder(@NonNull AdapterDisplayBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DisplayDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DisplayDialog.java new file mode 100644 index 000000000..7dd776f09 --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DisplayDialog.java @@ -0,0 +1,65 @@ +package com.fongmi.android.tv.ui.dialog; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.WindowManager; + +import androidx.appcompat.app.AlertDialog; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fongmi.android.tv.databinding.DialogDisplayBinding; +import com.fongmi.android.tv.ui.adapter.DisplayAdapter; +import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; +import com.fongmi.android.tv.utils.ResUtil; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class DisplayDialog { + private final DialogDisplayBinding binding; + private final DisplayAdapter adapter; + private final AlertDialog dialog; + + + public static DisplayDialog create(Activity activity) { + return new DisplayDialog(activity); + } + + public DisplayDialog(Activity activity) { + this.adapter = new DisplayAdapter(); + this.binding = DialogDisplayBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + } + + public void show() { + initView(); + initEvent(); + } + + private void initView() { + setRecyclerView(); + setDialog(); + } + + private void initEvent() { + + } + + private void setRecyclerView() { + binding.recycler.setAdapter(adapter); + binding.recycler.setHasFixedSize(true); + binding.recycler.setItemAnimator(null); + binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); + binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), 1)); + binding.recycler.post(() -> binding.recycler.scrollToPosition(0)); + + } + + private void setDialog() { + if (adapter.getItemCount() == 0) return; + WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); + params.width = (int) (ResUtil.getScreenWidth() * 0.4f); + dialog.getWindow().setAttributes(params); + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + +} diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java index 7954be411..a4ddf59c0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java @@ -110,7 +110,7 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi private void setAdapter() { ListRow funcRow = getFuncRow(); if (funcRow != null) mAdapter.add(funcRow); - mAdapter.add(R.string.home_history); + if (Setting.isHomeHistory()) mAdapter.add(R.string.home_history); mAdapter.add(R.string.home_recommend); mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); homeUI = Setting.getHomeUI(); @@ -161,9 +161,21 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi } public void getHistory(boolean renew) { - List items = History.get(); int historyIndex = getHistoryIndex(); int recommendIndex = getRecommendIndex(); + if (historyIndex == -1) { + if (!Setting.isHomeHistory()) return; + int historyStringIndex = recommendIndex - 1; + historyStringIndex = historyStringIndex < 0 ? 0 : historyStringIndex; + mAdapter.add(historyStringIndex, R.string.home_history); + } + if (!Setting.isHomeHistory()) { + mAdapter.removeItems(historyIndex - 1, 2); + return; + } + historyIndex = getHistoryIndex(); + recommendIndex = getRecommendIndex(); + List items = History.get(); boolean exist = recommendIndex - historyIndex == 2; if (renew) mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); if ((items.isEmpty() && exist) || (renew && exist)) mAdapter.removeItems(historyIndex, 1); diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index 47dadb643..a3864f9ff 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -146,6 +146,8 @@ + + + tools:text="簡潔風格" /> + tools:text="開啟" /> @@ -220,7 +222,7 @@ android:orientation="horizontal"> - - - - @@ -479,64 +463,5 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/leanback/res/layout/adapter_display.xml b/app/src/leanback/res/layout/adapter_display.xml new file mode 100644 index 000000000..ba818553b --- /dev/null +++ b/app/src/leanback/res/layout/adapter_display.xml @@ -0,0 +1,42 @@ + + + + + + + + + + diff --git a/app/src/leanback/res/layout/dialog_display.xml b/app/src/leanback/res/layout/dialog_display.xml new file mode 100644 index 000000000..acac0cf19 --- /dev/null +++ b/app/src/leanback/res/layout/dialog_display.xml @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file 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 5860dd6dc..b344d1f02 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -461,4 +461,12 @@ public class Setting { return Prefers.getString("home_buttons_sorted", defaultValue); } + public static boolean isHomeHistory() { + return Prefers.getBoolean("home_history", true); + } + + public static void putHomeHistory(boolean show) { + Prefers.put("home_history", show); + } + } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 484df9983..d75739cbd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -41,6 +41,7 @@ 进度 迷你进度 弹幕 + 屏显 倍速 换源 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 5d0c5c9a6..0d9b0c834 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -41,6 +41,7 @@ 進度 迷你進度 彈幕 + 屏顯 倍速 換源 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c59c40455..63b167d46 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,7 @@ Duration Mini Progress Danmu + Display Speed Change From a2c4c78740e125638220cab0938a2ac2e016afeb Mon Sep 17 00:00:00 2001 From: okjack Date: Mon, 11 Mar 2024 15:33:18 +0800 Subject: [PATCH 2/4] update --- .../java/com/fongmi/android/tv/ui/custom/CustomTitleView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 89c84b72b..593de8aed 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 @@ -42,6 +42,7 @@ public class CustomTitleView extends AppCompatTextView { } private boolean hasEvent(KeyEvent event) { + if (Setting.isHomeSiteLock()) return false; return KeyUtil.isEnterKey(event) || KeyUtil.isLeftKey(event) || KeyUtil.isRightKey(event) || (KeyUtil.isUpKey(event) && !coolDown); } @@ -54,7 +55,6 @@ 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); From 60cd705c3780e40725c9318f53dfd08bcc2dbf62 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 12 Mar 2024 08:50:41 +0800 Subject: [PATCH 3/4] build.gradle --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 2a69cf254..f0c1e4b77 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 21 targetSdk 28 versionCode 230 - versionName "2.3.0" + versionName "0312" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] From 88960b3aee4b0f2311fa3b3ed1047b5856deb69e Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 12 Mar 2024 08:56:38 +0800 Subject: [PATCH 4/4] update --- .../java/com/fongmi/android/tv/ui/activity/HomeActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 601efb2bb..b4ee403a3 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 @@ -273,8 +273,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void onItemClick(Class item) { if (mBinding.pager.getCurrentItem() == 0) { - if (!hasSettingButton()) MenuDialog.create(this).show(); - else SiteDialog.create(this).show(); + SiteDialog.create(this).show(); } else { updateFilter(item); }