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 b85129250..ccf56ee3d 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 @@ -68,6 +68,7 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; public class HomeActivity extends BaseActivity implements CustomTitleView.Listener, TypePresenter.OnClickListener, ConfigCallback { @@ -75,7 +76,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private ArrayObjectAdapter mAdapter; private HomeActivity.PageAdapter mPageAdapter; private SiteViewModel mViewModel; - private Result mResult; + public Result mResult; private boolean loading; private boolean coolDown; private View mOldView; @@ -145,11 +146,17 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } private void setRecyclerView() { + setHomeUI(); mBinding.recycler.setHorizontalSpacing(ResUtil.dp2px(16)); mBinding.recycler.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT); mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(new TypePresenter(this)))); } + private void setHomeUI() { + if (Setting.getHomeUI() == 0) mBinding.recycler.setVisibility(View.GONE); + else mBinding.recycler.setVisibility(View.VISIBLE); + } + private void setViewModel() { mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mViewModel.result.observe(this, result -> { @@ -428,7 +435,10 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private void setFocus() { setLoading(false); App.post(() -> mBinding.title.setFocusable(true), 500); - if (!mBinding.title.hasFocus()) mBinding.recycler.requestFocus(); + if (!mBinding.title.hasFocus()) { + if (Setting.getHomeUI() == 0) getHomeFragment().mBinding.recycler.requestFocus(); + else mBinding.recycler.requestFocus(); + } } @Override @@ -448,6 +458,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen super.onResume(); mClock.start(); setTitleView(); + setHomeUI(); } @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 acbdab79c..a039f3761 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 @@ -24,6 +24,7 @@ public class SettingCustomActivity extends BaseActivity { private String[] fullscreenMenuKey; private String[] smallWindowBackKey; private String[] homeMenuKey; + private String[] homeUI; @Override protected ViewBinding getBinding() { @@ -55,6 +56,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.smallWindowBackKeyText.setText((smallWindowBackKey = ResUtil.getStringArray(R.array.select_small_window_back_key))[Setting.getSmallWindowBackKey()]); 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()]); } @Override @@ -74,6 +76,7 @@ public class SettingCustomActivity extends BaseActivity { mBinding.smallWindowBackKey.setOnClickListener(this::setSmallWindowBackKey); mBinding.homeMenuKey.setOnClickListener(this::setHomeMenuKey); mBinding.aggregatedSearch.setOnClickListener(this::setAggregatedSearch); + mBinding.homeUI.setOnClickListener(this::setHomeUI); } private void setQuality(View view) { @@ -167,4 +170,10 @@ public class SettingCustomActivity extends BaseActivity { mBinding.aggregatedSearchText.setText(getSwitch(Setting.isAggregatedSearch())); } + private void setHomeUI(View view) { + int index = Setting.getHomeUI(); + Setting.putHomeUI(index = index == homeUI.length - 1 ? 0 : ++index); + mBinding.homeUIText.setText(homeUI[index]); + } + } 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 d2992725c..d2bbf9606 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 @@ -15,6 +15,7 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.Product; 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.Func; import com.fongmi.android.tv.bean.History; @@ -33,6 +34,7 @@ import com.fongmi.android.tv.ui.activity.PushActivity; import com.fongmi.android.tv.ui.activity.SearchActivity; import com.fongmi.android.tv.ui.activity.SettingActivity; import com.fongmi.android.tv.ui.activity.VideoActivity; +import com.fongmi.android.tv.ui.activity.VodActivity; import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.custom.CustomRowPresenter; import com.fongmi.android.tv.ui.custom.CustomSelector; @@ -54,6 +56,7 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi private ArrayObjectAdapter mHistoryAdapter; public HistoryPresenter mPresenter; private ArrayObjectAdapter mAdapter; + private int homeUI; private Site getHome() { return VodConfig.get().getHome(); @@ -110,6 +113,7 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi mAdapter.add(R.string.home_history); mAdapter.add(R.string.home_recommend); mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); + homeUI = Setting.getHomeUI(); } public void addVideo(Result result) { @@ -125,18 +129,25 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi private ListRow getFuncRow() { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new FuncPresenter(this)); -// adapter.add(Func.create(R.string.home_vod)); - adapter.add(Func.create(R.string.home_history_short)); + adapter.add(Func.create(R.string.home_vod)); adapter.add(Func.create(R.string.home_live)); adapter.add(Func.create(R.string.home_search)); adapter.add(Func.create(R.string.home_keep)); adapter.add(Func.create(R.string.home_push)); + adapter.add(Func.create(R.string.home_history_short)); 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()); return new ListRow(adapter); } + private void refreshFuncRow() { + if (homeUI == Setting.getHomeUI()) return; + homeUI = Setting.getHomeUI(); + mAdapter.removeItems(0, 1); + mAdapter.add(0, getFuncRow()); + } + public void refreshRecommond() { int index = getRecommendIndex(); mAdapter.notifyArrayItemRangeChanged(index, mAdapter.size() - index); @@ -185,6 +196,9 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi case R.string.home_history_short: HistoryActivity.start(getActivity()); break; + case R.string.home_vod: + VodActivity.start(getActivity(), getHomeActicity().mResult.clear()); + break; case R.string.home_live: LiveActivity.start(getActivity()); break; @@ -235,4 +249,10 @@ public class HomeFragment extends BaseFragment implements VodPresenter.OnClickLi return true; } + @Override + public void onResume() { + super.onResume(); + refreshFuncRow(); + } + } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FuncPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FuncPresenter.java index 777f99820..9766f720b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FuncPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FuncPresenter.java @@ -6,8 +6,10 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.leanback.widget.Presenter; +import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.bean.Func; import com.fongmi.android.tv.databinding.AdapterFuncBinding; +import com.fongmi.android.tv.databinding.AdapterFuncHorizontalBinding; public class FuncPresenter extends Presenter { @@ -23,13 +25,30 @@ public class FuncPresenter extends Presenter { @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { + if (Setting.getHomeUI() == 1) return new HoriViewHolder(AdapterFuncHorizontalBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); return new ViewHolder(AdapterFuncBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); } @Override public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { + if (viewHolder instanceof ViewHolder) bindView((ViewHolder) viewHolder, object); + else if (viewHolder instanceof HoriViewHolder) bindView((HoriViewHolder) viewHolder, object); + } + + private void bindView(ViewHolder viewHolder, Object object) { + Func item = (Func) object; + ViewHolder holder = viewHolder; + if (item.getId() > 0) holder.binding.getRoot().setId(item.getId()); + holder.binding.text.setText(item.getText()); + holder.binding.icon.setImageResource(item.getDrawable()); + if (item.getNextFocusLeft() > 0) holder.binding.getRoot().setNextFocusLeftId(item.getNextFocusLeft()); + if (item.getNextFocusRight() > 0) holder.binding.getRoot().setNextFocusRightId(item.getNextFocusRight()); + setOnClickListener(holder, view -> mListener.onItemClick(item)); + } + + private void bindView(HoriViewHolder viewHolder, Object object) { Func item = (Func) object; - ViewHolder holder = (ViewHolder) viewHolder; + HoriViewHolder holder = viewHolder; if (item.getId() > 0) holder.binding.getRoot().setId(item.getId()); holder.binding.text.setText(item.getText()); holder.binding.icon.setImageResource(item.getDrawable()); @@ -51,4 +70,14 @@ public class FuncPresenter extends Presenter { this.binding = binding; } } + + public static class HoriViewHolder extends Presenter.ViewHolder { + + private final AdapterFuncHorizontalBinding binding; + + public HoriViewHolder(@NonNull AdapterFuncHorizontalBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } } \ No newline at end of file diff --git a/app/src/leanback/res/layout/activity_home.xml b/app/src/leanback/res/layout/activity_home.xml index e82e1887b..04990432c 100644 --- a/app/src/leanback/res/layout/activity_home.xml +++ b/app/src/leanback/res/layout/activity_home.xml @@ -13,7 +13,7 @@ android:layout_height="wrap_content" android:paddingStart="24dp" android:paddingEnd="24dp" - android:paddingTop="12dp" + android:paddingTop="24dp" android:orientation="horizontal"> + android:textSize="24dp" /> @@ -66,6 +66,7 @@ diff --git a/app/src/leanback/res/layout/activity_setting_custom.xml b/app/src/leanback/res/layout/activity_setting_custom.xml index bbcde62eb..dbd0cfe49 100644 --- a/app/src/leanback/res/layout/activity_setting_custom.xml +++ b/app/src/leanback/res/layout/activity_setting_custom.xml @@ -479,5 +479,43 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/adapter_func.xml b/app/src/leanback/res/layout/adapter_func.xml index dd559c3c3..abdfb01a3 100644 --- a/app/src/leanback/res/layout/adapter_func.xml +++ b/app/src/leanback/res/layout/adapter_func.xml @@ -1,27 +1,25 @@ + android:orientation="vertical"> diff --git a/app/src/leanback/res/layout/adapter_func_horizontal.xml b/app/src/leanback/res/layout/adapter_func_horizontal.xml new file mode 100644 index 000000000..dd559c3c3 --- /dev/null +++ b/app/src/leanback/res/layout/adapter_func_horizontal.xml @@ -0,0 +1,29 @@ + + + + + + + + \ 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 d5873bb75..645af572d 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -437,4 +437,12 @@ public class Setting { Prefers.put("aggregated_search", search); } + public static void putHomeUI(int key) { + Prefers.put("home_ui", key); + } + + public static int getHomeUI() { + return Prefers.getInt("home_ui", 0); + } + } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 687bbe2f3..339d28b05 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -83,6 +83,7 @@ 无痕模式 小窗返回键 首页换线 + 首页UI DoH Proxy 缓存 @@ -245,6 +246,11 @@ 站点推荐 + + 简洁风格 + TVBox风格 + + 预设 系统 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0b7803d9b..e2e7feffe 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -83,6 +83,7 @@ 無痕模式 小窗返回鍵 首頁換線 + 首頁UI DoH Proxy 暫存 @@ -245,6 +246,11 @@ 站點推薦 + + 簡潔風格 + TVBox風格 + + 預設 系統 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8361ec831..69bb8e646 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,7 @@ Incognito mode Small window back key Home change config + Home ui style DoH Proxy Cache @@ -250,6 +251,11 @@ Site recommend + + Simple style + TVBox style + + Default System