From b0607b337b8b18d81ff7aded8949ac93a0c0131e Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 25 Feb 2024 21:47:15 +0800 Subject: [PATCH 1/7] leanback refresh --- .../java/com/fongmi/android/tv/ui/activity/HomeActivity.java | 2 ++ app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java | 2 +- catvod/src/main/java/com/github/catvod/utils/Util.java | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) 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 f32c648b1..89d652d54 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 @@ -53,6 +53,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.FileChooser; +import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.KeyUtil; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; @@ -364,6 +365,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void onRefresh() { + FileUtil.clearCache(null); initConfig(); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index 795914d91..dd81d8a04 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -49,7 +49,7 @@ public class FileUtil { public static void clearCache(Callback callback) { App.execute(() -> { Path.clear(Path.cache()); - App.post(callback::success); + if (callback != null) App.post(callback::success); }); } diff --git a/catvod/src/main/java/com/github/catvod/utils/Util.java b/catvod/src/main/java/com/github/catvod/utils/Util.java index a3ddd6428..e771b57b3 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Util.java +++ b/catvod/src/main/java/com/github/catvod/utils/Util.java @@ -61,6 +61,7 @@ public class Util { public static String md5(File file) { try { + if (!file.exists()) return ""; MessageDigest digest = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream(file); byte[] byteArray = new byte[1024]; From 627958d7065604f0f1a03ce211ef81cebd0144e6 Mon Sep 17 00:00:00 2001 From: okjack Date: Sun, 25 Feb 2024 21:49:34 +0800 Subject: [PATCH 2/7] mobile refresh --- .../com/fongmi/android/tv/ui/activity/MainActivity.java | 2 +- .../com/fongmi/android/tv/ui/fragment/VodFragment.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java index 284606277..6a5d7e3fa 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java @@ -103,7 +103,7 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt if (savedInstanceState == null) mManager.change(0); } - private void initConfig() { + public void initConfig() { WallConfig.get().init(); LiveConfig.get().init().load(); VodConfig.get().init().load(getCallback()); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 057a5394f..25585edbc 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -33,6 +33,7 @@ import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.ui.activity.CollectActivity; import com.fongmi.android.tv.ui.activity.HistoryActivity; import com.fongmi.android.tv.ui.activity.KeepActivity; +import com.fongmi.android.tv.ui.activity.MainActivity; import com.fongmi.android.tv.ui.activity.VideoActivity; import com.fongmi.android.tv.ui.adapter.TypeAdapter; import com.fongmi.android.tv.ui.base.BaseFragment; @@ -41,6 +42,7 @@ import com.fongmi.android.tv.ui.dialog.LinkDialog; import com.fongmi.android.tv.ui.dialog.ReceiveDialog; import com.fongmi.android.tv.ui.dialog.SiteDialog; import com.fongmi.android.tv.utils.FileChooser; +import com.fongmi.android.tv.utils.FileUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Trans; import com.google.common.net.HttpHeaders; @@ -100,6 +102,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal mBinding.top.setOnClickListener(this::onTop); mBinding.link.setOnClickListener(this::onLink); mBinding.logo.setOnClickListener(this::onLogo); + mBinding.logo.setOnLongClickListener(this::onRefresh); mBinding.keep.setOnClickListener(this::onKeep); mBinding.retry.setOnClickListener(this::onRetry); mBinding.filter.setOnClickListener(this::onFilter); @@ -198,6 +201,12 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal SiteDialog.create(this).change().show(); } + private boolean onRefresh(View view) { + FileUtil.clearCache(null); + if (getActivity() instanceof MainActivity) ((MainActivity) getActivity()).initConfig(); + return true; + } + private void onKeep(View view) { KeepActivity.start(getActivity()); } From 126882b30ceb346396065deafa932c00801b0072 Mon Sep 17 00:00:00 2001 From: okjack Date: Mon, 26 Feb 2024 21:32:57 +0800 Subject: [PATCH 3/7] history --- app/src/leanback/AndroidManifest.xml | 5 + .../java/com/fongmi/android/tv/bean/Func.java | 3 + .../tv/ui/activity/HistoryActivity.java | 105 ++++++++++++++++++ .../android/tv/ui/activity/HomeActivity.java | 73 +----------- .../HistoryAdapter.java} | 73 ++++++++---- .../res/drawable/ic_action_delete.xml | 10 ++ .../leanback/res/drawable/ic_home_history.xml | 12 ++ .../leanback/res/drawable/selector_image.xml | 2 +- .../leanback/res/layout/activity_history.xml | 52 +++++++++ 9 files changed, 246 insertions(+), 89 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/activity/HistoryActivity.java rename app/src/leanback/java/com/fongmi/android/tv/ui/{presenter/HistoryPresenter.java => adapter/HistoryAdapter.java} (61%) create mode 100644 app/src/leanback/res/drawable/ic_action_delete.xml create mode 100644 app/src/leanback/res/drawable/ic_home_history.xml create mode 100644 app/src/leanback/res/layout/activity_history.xml diff --git a/app/src/leanback/AndroidManifest.xml b/app/src/leanback/AndroidManifest.xml index c94370624..1ac0c25c1 100644 --- a/app/src/leanback/AndroidManifest.xml +++ b/app/src/leanback/AndroidManifest.xml @@ -115,6 +115,11 @@ android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:screenOrientation="sensorLandscape" /> + + 0 ? View.VISIBLE : View.GONE); + } + + private void onDelete(View view) { + if (mAdapter.isDelete()) { + mAdapter.clear(); + } else if (mAdapter.getItemCount() > 0) { + mAdapter.setDelete(true); + } else { + mBinding.delete.setVisibility(View.GONE); + } + } + + @Override + public void onItemClick(History item) { + VideoActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName(), item.getVodPic()); + } + + @Override + public void onItemDelete(History item) { + mAdapter.delete(item.delete()); + if (mAdapter.getItemCount() == 0) mAdapter.setDelete(false); + } + + @Override + public boolean onLongClick() { + mAdapter.setDelete(true); + return true; + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onRefreshEvent(RefreshEvent event) { + super.onRefreshEvent(event); + switch (event.getType()) { + case HISTORY: + getHistory(); + break; + case SIZE: + getHistory(); + break; + } + } + + @Override + public void onBackPressed() { + if (mAdapter.isDelete()) mAdapter.setDelete(false); + else super.onBackPressed(); + } + +} 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 89d652d54..d072f5526 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 @@ -27,7 +27,6 @@ import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Func; -import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.bean.Style; @@ -48,7 +47,6 @@ import com.fongmi.android.tv.ui.custom.CustomTitleView; import com.fongmi.android.tv.ui.dialog.SiteDialog; import com.fongmi.android.tv.ui.presenter.FuncPresenter; import com.fongmi.android.tv.ui.presenter.HeaderPresenter; -import com.fongmi.android.tv.ui.presenter.HistoryPresenter; import com.fongmi.android.tv.ui.presenter.ProgressPresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; import com.fongmi.android.tv.utils.Clock; @@ -66,11 +64,9 @@ import org.greenrobot.eventbus.ThreadMode; import java.util.List; -public class HomeActivity extends BaseActivity implements CustomTitleView.Listener, VodPresenter.OnClickListener, FuncPresenter.OnClickListener, HistoryPresenter.OnClickListener { +public class HomeActivity extends BaseActivity implements CustomTitleView.Listener, VodPresenter.OnClickListener, FuncPresenter.OnClickListener { private ActivityHomeBinding mBinding; - private ArrayObjectAdapter mHistoryAdapter; - private HistoryPresenter mPresenter; private ArrayObjectAdapter mAdapter; private SiteViewModel mViewModel; private boolean loading; @@ -115,7 +111,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) { mBinding.toolbar.setVisibility(position == 0 ? View.VISIBLE : View.GONE); - if (mPresenter.isDelete()) setHistoryDelete(false); } }); } @@ -142,7 +137,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen selector.addPresenter(String.class, new ProgressPresenter()); selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class); selector.addPresenter(ListRow.class, new CustomRowPresenter(16), FuncPresenter.class); - selector.addPresenter(ListRow.class, new CustomRowPresenter(16), HistoryPresenter.class); mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector))); mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16)); } @@ -157,9 +151,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private void setAdapter() { mAdapter.add(getFuncRow()); - mAdapter.add(R.string.home_history); mAdapter.add(R.string.home_recommend); - mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); } private void initConfig() { @@ -176,7 +168,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen public void success() { mBinding.progressLayout.showContent(); checkAction(getIntent()); - getHistory(); getVideo(); setFocus(); } @@ -239,6 +230,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private ListRow getFuncRow() { ArrayObjectAdapter adapter = new ArrayObjectAdapter(new FuncPresenter(this)); + adapter.add(Func.create(R.string.home_history)); adapter.add(Func.create(R.string.home_vod)); adapter.add(Func.create(R.string.home_live)); adapter.add(Func.create(R.string.home_search)); @@ -250,38 +242,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen return new ListRow(adapter); } - private void getHistory() { - getHistory(false); - } - - private void getHistory(boolean renew) { - List items = History.get(); - int historyIndex = getHistoryIndex(); - int recommendIndex = getRecommendIndex(); - boolean exist = recommendIndex - historyIndex == 2; - if (renew) mHistoryAdapter = new ArrayObjectAdapter(mPresenter = new HistoryPresenter(this)); - if ((items.isEmpty() && exist) || (renew && exist)) mAdapter.removeItems(historyIndex, 1); - if ((items.size() > 0 && !exist) || (renew && exist)) mAdapter.add(historyIndex, new ListRow(mHistoryAdapter)); - mHistoryAdapter.setItems(items, null); - } - - private void setHistoryDelete(boolean delete) { - mPresenter.setDelete(delete); - mHistoryAdapter.notifyArrayItemRangeChanged(0, mHistoryAdapter.size()); - } - - private void clearHistory() { - mAdapter.removeItems(getHistoryIndex(), 1); - History.delete(VodConfig.getCid()); - mPresenter.setDelete(false); - mHistoryAdapter.clear(); - } - - private int getHistoryIndex() { - for (int i = 0; i < mAdapter.size(); i++) if (mAdapter.get(i).equals(R.string.home_history)) return i + 1; - return -1; - } - private int getRecommendIndex() { for (int i = 0; i < mAdapter.size(); i++) if (mAdapter.get(i).equals(R.string.home_recommend)) return i + 1; return -1; @@ -304,6 +264,9 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void onItemClick(Func item) { switch (item.getResId()) { + case R.string.home_history: + HistoryActivity.start(this); + break; case R.string.home_vod: VodActivity.start(this, mResult.clear()); break; @@ -337,26 +300,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen return true; } - @Override - public void onItemClick(History item) { - VideoActivity.start(this, item.getSiteKey(), item.getVodId(), item.getVodName(), item.getVodPic()); - } - - @Override - public void onItemDelete(History item) { - mHistoryAdapter.remove(item.delete()); - if (mHistoryAdapter.size() > 0) return; - mAdapter.removeItems(getHistoryIndex(), 1); - mPresenter.setDelete(false); - } - - @Override - public boolean onLongClick() { - if (mPresenter.isDelete()) clearHistory(); - else setHistoryDelete(true); - return true; - } - @Override public void showDialog() { if (Setting.isHomeSiteLock()) return; @@ -390,12 +333,8 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen int index = getRecommendIndex(); mAdapter.notifyArrayItemRangeChanged(index, mAdapter.size() - index); break; - case HISTORY: - getHistory(); - break; case SIZE: getVideo(); - getHistory(true); break; } } @@ -465,8 +404,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen protected void onBackPress() { if (mBinding.progressLayout.isProgress()) { mBinding.progressLayout.showContent(); - } else if (mPresenter.isDelete()) { - setHistoryDelete(false); } else if (mBinding.recycler.getSelectedPosition() != 0) { mBinding.recycler.scrollToPosition(0); } else if (!confirm) { 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/adapter/HistoryAdapter.java similarity index 61% rename from app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java rename to app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java index ffbdbdcc9..2d9b79f1d 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/HistoryPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java @@ -1,30 +1,43 @@ -package com.fongmi.android.tv.ui.presenter; +package com.fongmi.android.tv.ui.adapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; -import androidx.leanback.widget.Presenter; +import androidx.recyclerview.widget.RecyclerView; import com.fongmi.android.tv.Product; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.api.config.VodConfig; 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.ResUtil; -public class HistoryPresenter extends Presenter { +import java.util.ArrayList; +import java.util.List; + +public class HistoryAdapter extends RecyclerView.Adapter { private final OnClickListener mListener; + private final List mItems; private int width, height; private boolean delete; - public HistoryPresenter(OnClickListener listener) { + public HistoryAdapter(OnClickListener listener) { + this.mItems = new ArrayList<>(); this.mListener = listener; setLayoutSize(); } + private void setLayoutSize() { + int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Product.getColumn() - 1)); + int base = ResUtil.getScreenWidth() - space; + width = base / Product.getColumn(); + height = (int) (width / 0.75f); + } + public interface OnClickListener { void onItemClick(History item); @@ -40,17 +53,37 @@ public class HistoryPresenter extends Presenter { public void setDelete(boolean delete) { this.delete = delete; + notifyItemRangeChanged(0, mItems.size()); } - private void setLayoutSize() { - int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (Product.getColumn() - 1)); - int base = ResUtil.getScreenWidth() - space; - width = base / Product.getColumn(); - height = (int) (width / 0.75f); + public void addAll(List items) { + mItems.clear(); + mItems.addAll(items); + notifyDataSetChanged(); } + public void clear() { + mItems.clear(); + setDelete(false); + notifyDataSetChanged(); + History.delete(VodConfig.getCid()); + } + + public void delete(History item) { + int index = mItems.indexOf(item); + if (index == -1) return; + mItems.remove(index); + notifyItemRemoved(index); + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @NonNull @Override - public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { ViewHolder holder = new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); holder.binding.getRoot().getLayoutParams().width = width; holder.binding.getRoot().getLayoutParams().height = height; @@ -58,10 +91,10 @@ public class HistoryPresenter extends Presenter { } @Override - public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { - History item = (History) object; - ViewHolder holder = (ViewHolder) viewHolder; - setClickListener(holder.view, item); + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + History item = mItems.get(position); + setFocusListener(holder.binding); + setClickListener(holder.itemView, item); holder.binding.name.setText(item.getVodName()); holder.binding.site.setText(item.getSiteName()); holder.binding.site.setVisibility(item.getSiteVisible()); @@ -71,6 +104,10 @@ public class HistoryPresenter extends Presenter { ImgUtil.loadVod(item.getVodName(), item.getVodPic(), holder.binding.image); } + private void setFocusListener(AdapterVodBinding binding) { + binding.getRoot().setOnFocusChangeListener((v, hasFocus) -> binding.name.setSelected(hasFocus)); + } + private void setClickListener(View root, History item) { root.setOnLongClickListener(view -> mListener.onLongClick()); root.setOnClickListener(view -> { @@ -79,11 +116,7 @@ public class HistoryPresenter extends Presenter { }); } - @Override - public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { - } - - public static class ViewHolder extends Presenter.ViewHolder { + public static class ViewHolder extends RecyclerView.ViewHolder { private final AdapterVodBinding binding; @@ -92,4 +125,4 @@ public class HistoryPresenter extends Presenter { this.binding = binding; } } -} \ No newline at end of file +} diff --git a/app/src/leanback/res/drawable/ic_action_delete.xml b/app/src/leanback/res/drawable/ic_action_delete.xml new file mode 100644 index 000000000..a1efe1dfd --- /dev/null +++ b/app/src/leanback/res/drawable/ic_action_delete.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/leanback/res/drawable/ic_home_history.xml b/app/src/leanback/res/drawable/ic_home_history.xml new file mode 100644 index 000000000..8336cf5a2 --- /dev/null +++ b/app/src/leanback/res/drawable/ic_home_history.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/leanback/res/drawable/selector_image.xml b/app/src/leanback/res/drawable/selector_image.xml index e9dff42b4..68df3dadc 100644 --- a/app/src/leanback/res/drawable/selector_image.xml +++ b/app/src/leanback/res/drawable/selector_image.xml @@ -12,7 +12,7 @@ - + \ No newline at end of file diff --git a/app/src/leanback/res/layout/activity_history.xml b/app/src/leanback/res/layout/activity_history.xml new file mode 100644 index 000000000..d9b01c7e9 --- /dev/null +++ b/app/src/leanback/res/layout/activity_history.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + From 74c2d8ea858881691959ef1557dc542902fb2dab Mon Sep 17 00:00:00 2001 From: okjack Date: Mon, 26 Feb 2024 22:05:43 +0800 Subject: [PATCH 4/7] history --- .../res/drawable-hdpi/ic_home_history.png | Bin 0 -> 1557 bytes .../res/drawable-mdpi/ic_home_history.png | Bin 0 -> 861 bytes .../res/drawable-xhdpi/ic_home_history.png | Bin 0 -> 2293 bytes .../res/drawable-xxhdpi/ic_home_history.png | Bin 0 -> 4469 bytes .../leanback/res/drawable/ic_home_history.xml | 12 ------------ 5 files changed, 12 deletions(-) create mode 100644 app/src/leanback/res/drawable-hdpi/ic_home_history.png create mode 100644 app/src/leanback/res/drawable-mdpi/ic_home_history.png create mode 100644 app/src/leanback/res/drawable-xhdpi/ic_home_history.png create mode 100644 app/src/leanback/res/drawable-xxhdpi/ic_home_history.png delete mode 100644 app/src/leanback/res/drawable/ic_home_history.xml diff --git a/app/src/leanback/res/drawable-hdpi/ic_home_history.png b/app/src/leanback/res/drawable-hdpi/ic_home_history.png new file mode 100644 index 0000000000000000000000000000000000000000..41b4839bdded55c5f9d9dd04d852cf503d3ab2e2 GIT binary patch literal 1557 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 P00000NkvXXu0mjfEs19B literal 0 HcmV?d00001 diff --git a/app/src/leanback/res/drawable-xxhdpi/ic_home_history.png b/app/src/leanback/res/drawable-xxhdpi/ic_home_history.png new file mode 100644 index 0000000000000000000000000000000000000000..505c257b2f7ef318c74611a30316950fa42392e4 GIT binary patch literal 4469 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 M>ze3PX*)&!4~ipG=l}o! literal 0 HcmV?d00001 diff --git a/app/src/leanback/res/drawable/ic_home_history.xml b/app/src/leanback/res/drawable/ic_home_history.xml deleted file mode 100644 index 8336cf5a2..000000000 --- a/app/src/leanback/res/drawable/ic_home_history.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - \ No newline at end of file From 04acfed2c57ef9b180800d954c5f2c724fa9ddc3 Mon Sep 17 00:00:00 2001 From: okjack Date: Mon, 26 Feb 2024 22:22:20 +0800 Subject: [PATCH 5/7] history --- app/src/leanback/res/values-zh-rCN/strings.xml | 2 +- app/src/leanback/res/values-zh-rTW/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/leanback/res/values-zh-rCN/strings.xml b/app/src/leanback/res/values-zh-rCN/strings.xml index c031f9cb4..3cbe4c886 100644 --- a/app/src/leanback/res/values-zh-rCN/strings.xml +++ b/app/src/leanback/res/values-zh-rCN/strings.xml @@ -7,7 +7,7 @@ 收藏 推送 设置 - 最近观看 + 历史 更新推荐 diff --git a/app/src/leanback/res/values-zh-rTW/strings.xml b/app/src/leanback/res/values-zh-rTW/strings.xml index 403a145b2..fd040fbaa 100644 --- a/app/src/leanback/res/values-zh-rTW/strings.xml +++ b/app/src/leanback/res/values-zh-rTW/strings.xml @@ -7,7 +7,7 @@ 收藏 推送 設定 - 最近觀看 + 歷史 更新推薦 From b273009df35374e8d1d651d71db49899d3a18477 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 27 Feb 2024 09:30:27 +0800 Subject: [PATCH 6/7] style --- .../leanback/res/drawable/selector_image.xml | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/src/leanback/res/drawable/selector_image.xml b/app/src/leanback/res/drawable/selector_image.xml index 68df3dadc..b007ef5c1 100644 --- a/app/src/leanback/res/drawable/selector_image.xml +++ b/app/src/leanback/res/drawable/selector_image.xml @@ -1,18 +1,16 @@ - - + + + - - - - - - - - + + + \ No newline at end of file From a67dbc37e286d532142b9c893dfad27789c3cba0 Mon Sep 17 00:00:00 2001 From: okjack Date: Tue, 27 Feb 2024 09:32:57 +0800 Subject: [PATCH 7/7] build.gradle --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 79824e9c2..c53c0e961 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 21 targetSdk 28 versionCode 228 - versionName "2.2.8" + versionName "0227" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]