pull/344/head
okjack 2 years ago
parent d4dcb9c594
commit 67dd79b731
  1. 15
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  2. 9
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
  3. 24
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java
  4. 31
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FuncPresenter.java
  5. 12
      app/src/leanback/res/layout/activity_home.xml
  6. 38
      app/src/leanback/res/layout/activity_setting_custom.xml
  7. 10
      app/src/leanback/res/layout/adapter_func.xml
  8. 29
      app/src/leanback/res/layout/adapter_func_horizontal.xml
  9. 8
      app/src/main/java/com/fongmi/android/tv/Setting.java
  10. 6
      app/src/main/res/values-zh-rCN/strings.xml
  11. 6
      app/src/main/res/values-zh-rTW/strings.xml
  12. 6
      app/src/main/res/values/strings.xml

@ -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

@ -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]);
}
}

@ -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();
}
}

@ -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;
}
}
}

@ -13,7 +13,7 @@
android:layout_height="wrap_content"
android:paddingStart="24dp"
android:paddingEnd="24dp"
android:paddingTop="12dp"
android:paddingTop="24dp"
android:orientation="horizontal">
<LinearLayout
@ -31,12 +31,12 @@
android:singleLine="true"
android:text="@string/app_name"
android:textColor="@color/white"
android:textSize="20dp" />
android:textSize="24dp" />
<ImageView
android:id="@+id/homeSiteLock"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="bottom"
android:layout_marginRight="6dp"
android:layout_marginBottom="2dp"
@ -57,7 +57,7 @@
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:textColor="@color/white"
android:textSize="20sp"
android:textSize="24sp"
tools:text="07/25 09:20:00" />
</LinearLayout>
@ -66,6 +66,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="12dp"
android:orientation="vertical">
<com.fongmi.android.tv.ui.custom.CustomHorizontalGridView
@ -76,7 +77,6 @@
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingTop="12dp"
android:paddingEnd="12dp"
app:focusOutEnd="true"
app:focusOutFront="true" />

@ -479,5 +479,43 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/homeUI"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_home_ui"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/homeUIText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="簡潔風格" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

@ -1,27 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="120dp"
android:layout_height="68dp"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:orientation="horizontal">
android:orientation="vertical">
<ImageView
android:id="@+id/icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center_vertical"
tools:src="@drawable/ic_home_vod" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginTop="4dp"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="點播" />

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="120dp"
android:layout_height="68dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_gravity="center_vertical"
tools:src="@drawable/ic_home_vod" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="點播" />
</LinearLayout>

@ -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);
}
}

@ -83,6 +83,7 @@
<string name="setting_incognito">无痕模式</string>
<string name="setting_small_window_back_key">小窗返回键</string>
<string name="setting_home_change_config">首页换线</string>
<string name="setting_home_ui">首页UI</string>
<string name="setting_doh">DoH</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">缓存</string>
@ -245,6 +246,11 @@
<item>站点推荐</item>
</string-array>
<string-array name="select_home_ui">
<item>简洁风格</item>
<item>TVBox风格</item>
</string-array>
<string-array name="select_caption">
<item>预设</item>
<item>系统</item>

@ -83,6 +83,7 @@
<string name="setting_incognito">無痕模式</string>
<string name="setting_small_window_back_key">小窗返回鍵</string>
<string name="setting_home_change_config">首頁換線</string>
<string name="setting_home_ui">首頁UI</string>
<string name="setting_doh">DoH</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">暫存</string>
@ -245,6 +246,11 @@
<item>站點推薦</item>
</string-array>
<string-array name="select_home_ui">
<item>簡潔風格</item>
<item>TVBox風格</item>
</string-array>
<string-array name="select_caption">
<item>預設</item>
<item>系統</item>

@ -83,6 +83,7 @@
<string name="setting_incognito">Incognito mode</string>
<string name="setting_small_window_back_key">Small window back key</string>
<string name="setting_home_change_config">Home change config</string>
<string name="setting_home_ui">Home ui style</string>
<string name="setting_doh">DoH</string>
<string name="setting_proxy">Proxy</string>
<string name="setting_cache">Cache</string>
@ -250,6 +251,11 @@
<item>Site recommend</item>
</string-array>
<string-array name="select_home_ui">
<item>Simple style</item>
<item>TVBox style</item>
</string-array>
<string-array name="select_caption">
<item>Default</item>
<item>System</item>

Loading…
Cancel
Save