From a3f34afef127d5604759fd6a19fc6080518a0326 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 14 Sep 2022 09:29:41 +0800 Subject: [PATCH] Dynamic column --- .../android/tv/ui/activity/HomeActivity.java | 3 ++- .../tv/ui/custom/dialog/ConfigDialog.java | 2 +- .../tv/ui/custom/dialog/HistoryDialog.java | 2 +- .../tv/ui/custom/dialog/SiteDialog.java | 4 ++-- .../tv/ui/fragment/CollectFragment.java | 5 +++-- .../android/tv/ui/fragment/VodFragment.java | 5 +++-- .../tv/ui/presenter/HistoryPresenter.java | 18 +++++++++++++++++- .../android/tv/ui/presenter/VodPresenter.java | 16 +++++++++++++++- app/src/leanback/res/layout/adapter_vod.xml | 4 ++-- .../com/fongmi/android/tv/utils/Prefers.java | 4 ++++ 10 files changed, 50 insertions(+), 13 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 7292cc43c..d8a639340 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 @@ -40,6 +40,7 @@ import com.fongmi.android.tv.ui.presenter.ProgressPresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; import com.fongmi.android.tv.utils.Clock; import com.fongmi.android.tv.utils.Notify; +import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Updater; import com.google.common.collect.Lists; @@ -141,7 +142,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } private void addVideo(Result result) { - for (List items : Lists.partition(result.getList(), 5)) { + for (List items : Lists.partition(result.getList(), Prefers.getColumn())) { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VodPresenter(this)); adapter.setItems(items, null); mAdapter.add(new ListRow(adapter)); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java index f9367bba5..4ca2f98d0 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/ConfigDialog.java @@ -45,7 +45,7 @@ public class ConfigDialog implements DialogInterface.OnDismissListener { private void initDialog() { WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidthPx() * 0.7f); + params.width = (int) (ResUtil.getScreenWidthPx() * 0.6f); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.setOnDismissListener(this); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java index 3ea36f8b9..f5f1a0eb2 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/HistoryDialog.java @@ -42,7 +42,7 @@ public class HistoryDialog implements ConfigAdapter.OnClickListener { private void setDialog() { if (adapter.getItemCount() == 0) return; WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidthPx() * 0.45f); + params.width = (int) (ResUtil.getScreenWidthPx() * 0.4f); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.show(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java index e747224ab..87d5806f1 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java @@ -46,8 +46,8 @@ public class SiteDialog implements SitePresenter.OnClickListener { private void setDialog() { WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidthPx() * 0.45f); - params.height = (int) (ResUtil.getScreenHeightPx() * 0.8f); + params.width = (int) (ResUtil.getScreenWidthPx() * 0.4f); + params.height = (int) (ResUtil.getScreenHeightPx() * 0.64f); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.show(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java index 39c7ab4ec..c3b547e2b 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java @@ -18,6 +18,7 @@ import com.fongmi.android.tv.ui.activity.DetailActivity; import com.fongmi.android.tv.ui.custom.CustomRowPresenter; import com.fongmi.android.tv.ui.custom.CustomSelector; import com.fongmi.android.tv.ui.presenter.VodPresenter; +import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.google.common.collect.Lists; import com.google.gson.Gson; @@ -62,7 +63,7 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic private boolean checkLastSize(List items) { if (mLast == null || items.size() == 0) return false; - int size = 5 - mLast.size(); + int size = Prefers.getColumn() - mLast.size(); if (size == 0) return false; size = Math.min(size, items.size()); mLast.addAll(mLast.size(), new ArrayList<>(items.subList(0, size))); @@ -73,7 +74,7 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic public void addVideo(List items) { if (checkLastSize(items)) return; List rows = new ArrayList<>(); - for (List part : Lists.partition(items, 5)) { + for (List part : Lists.partition(items, Prefers.getColumn())) { mLast = new ArrayObjectAdapter(new VodPresenter(this)); mLast.setItems(part, null); rows.add(new ListRow(mLast)); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index d4c423e9a..0336df843 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -25,6 +25,7 @@ import com.fongmi.android.tv.ui.custom.CustomScroller; import com.fongmi.android.tv.ui.custom.CustomSelector; import com.fongmi.android.tv.ui.presenter.FilterPresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; +import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; import com.google.common.collect.Lists; @@ -130,7 +131,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback private boolean checkLastSize(List items) { if (mLast == null || items.size() == 0) return false; - int size = 5 - mLast.size(); + int size = Prefers.getColumn() - mLast.size(); if (size == 0) return false; size = Math.min(size, items.size()); mLast.addAll(mLast.size(), new ArrayList<>(items.subList(0, size))); @@ -141,7 +142,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback private void addVideo(List items) { if (checkLastSize(items)) return; List rows = new ArrayList<>(); - for (List part : Lists.partition(items, 5)) { + for (List part : Lists.partition(items, Prefers.getColumn())) { mLast = new ArrayObjectAdapter(new VodPresenter(this)); mLast.setItems(part, null); rows.add(new ListRow(mLast)); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java index b87cae9f9..79addb93d 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java @@ -12,13 +12,19 @@ import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.databinding.AdapterVodBinding; import com.fongmi.android.tv.utils.ImgUtil; +import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; public class HistoryPresenter extends Presenter { private OnClickListener mListener; + private int width, height; private boolean delete; + public HistoryPresenter() { + setLayoutSize(); + } + public interface OnClickListener { void onItemClick(History item); @@ -40,9 +46,19 @@ public class HistoryPresenter extends Presenter { this.delete = delete; } + private void setLayoutSize() { + int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Prefers.getColumn() - 1)); + int base = ResUtil.getScreenWidthPx() - space; + width = base / Prefers.getColumn(); + height = (int) (width / 0.75f); + } + @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { - return new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + ViewHolder holder = new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + holder.binding.getRoot().getLayoutParams().width = width; + holder.binding.getRoot().getLayoutParams().height = height; + return holder; } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java index 00a1abdef..bcbcc2f38 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/VodPresenter.java @@ -9,13 +9,17 @@ import androidx.leanback.widget.Presenter; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.AdapterVodBinding; import com.fongmi.android.tv.utils.ImgUtil; +import com.fongmi.android.tv.utils.Prefers; +import com.fongmi.android.tv.utils.ResUtil; public class VodPresenter extends Presenter { private final OnClickListener mListener; + private int width, height; public VodPresenter(OnClickListener listener) { this.mListener = listener; + setLayoutSize(); } public interface OnClickListener { @@ -25,9 +29,19 @@ public class VodPresenter extends Presenter { boolean onLongClick(Vod item); } + private void setLayoutSize() { + int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Prefers.getColumn() - 1)); + int base = ResUtil.getScreenWidthPx() - space; + width = base / Prefers.getColumn(); + height = (int) (width / 0.75f); + } + @Override public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { - return new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + ViewHolder holder = new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + holder.binding.getRoot().getLayoutParams().width = width; + holder.binding.getRoot().getLayoutParams().height = height; + return holder; } @Override diff --git a/app/src/leanback/res/layout/adapter_vod.xml b/app/src/leanback/res/layout/adapter_vod.xml index 842d77a62..c346e0650 100644 --- a/app/src/leanback/res/layout/adapter_vod.xml +++ b/app/src/leanback/res/layout/adapter_vod.xml @@ -2,8 +2,8 @@ diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java index 86fdc407c..5696c954f 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Prefers.java @@ -122,4 +122,8 @@ public class Prefers { public static void putUpdate(boolean update) { put("update", update); } + + public static int getColumn() { + return getInt("column", 6); + } }