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