diff --git a/app/build.gradle b/app/build.gradle
index d5680749c..5c354dde3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -50,7 +50,7 @@ android {
dependencies {
implementation project(':catvod')
- implementation 'androidx.appcompat:appcompat:1.4.2'
+ implementation 'androidx.appcompat:appcompat:1.5.0'
implementation 'androidx.core:core-splashscreen:1.0.0'
implementation 'androidx.preference:preference:1.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java
similarity index 99%
rename from app/src/leanback/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java
rename to app/src/main/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java
index a73ff3f28..a49343451 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java
+++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/SpaceItemDecoration.java
@@ -10,8 +10,8 @@ import com.fongmi.android.tv.utils.ResUtil;
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
- private final int spanCount;
private final int spacing;
+ private final int spanCount;
public SpaceItemDecoration(int spanCount, int spacing) {
this.spanCount = spanCount;
diff --git a/app/src/leanback/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
similarity index 100%
rename from app/src/leanback/res/drawable/ic_delete.xml
rename to app/src/main/res/drawable/ic_delete.xml
diff --git a/app/src/mobile/AndroidManifest.xml b/app/src/mobile/AndroidManifest.xml
index e43f2e477..bbb902852 100644
--- a/app/src/mobile/AndroidManifest.xml
+++ b/app/src/mobile/AndroidManifest.xml
@@ -27,7 +27,7 @@
+ android:screenOrientation="sensorPortrait" />
\ No newline at end of file
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java
new file mode 100644
index 000000000..3349048f2
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/HistoryAdapter.java
@@ -0,0 +1,113 @@
+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.recyclerview.widget.RecyclerView;
+
+import com.fongmi.android.tv.R;
+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.ResUtil;
+
+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 HistoryAdapter(OnClickListener listener) {
+ this.mListener = listener;
+ this.mItems = new ArrayList<>();
+ setLayoutSize(3);
+ }
+
+ public interface OnClickListener {
+
+ void onItemClick(History item);
+
+ void onItemDelete(History item);
+
+ boolean onLongClick();
+ }
+
+ public boolean isDelete() {
+ return delete;
+ }
+
+ public void setDelete(boolean delete) {
+ this.delete = delete;
+ }
+
+ private void setLayoutSize(int spanCount) {
+ int space = ResUtil.dp2px(32 + ((spanCount - 1) * 16));
+ int base = ResUtil.getScreenWidthPx() - space;
+ width = base / spanCount;
+ height = (int) (width / 0.75f);
+ }
+
+ class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
+
+ private final AdapterVodBinding binding;
+
+ ViewHolder(@NonNull AdapterVodBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ binding.getRoot().setOnClickListener(this);
+ binding.getRoot().setOnLongClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ History item = mItems.get(getLayoutPosition());
+ if (isDelete()) mListener.onItemDelete(item);
+ else mListener.onItemClick(item);
+ }
+
+ @Override
+ public boolean onLongClick(View v) {
+ return mListener.onLongClick();
+ }
+ }
+
+ public void addAll(List items) {
+ mItems.clear();
+ mItems.addAll(items);
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public int getItemCount() {
+ return mItems.size();
+ }
+
+ @NonNull
+ @Override
+ 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;
+ return holder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ History item = mItems.get(position);
+ holder.binding.name.setText(item.getVodName());
+ holder.binding.site.setText(ApiConfig.getSiteName(item.getSiteKey()));
+ holder.binding.remark.setText(ResUtil.getString(R.string.vod_last, item.getVodRemarks()));
+ holder.binding.name.setVisibility(delete ? View.GONE : View.VISIBLE);
+ holder.binding.site.setVisibility(delete ? View.GONE : View.VISIBLE);
+ holder.binding.remark.setVisibility(delete ? View.GONE : View.VISIBLE);
+ holder.binding.delete.setVisibility(!delete ? View.GONE : View.VISIBLE);
+ ImgUtil.load(item.getVodPic(), holder.binding.image);
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java
index f89d7c15a..b1ee817d7 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java
@@ -57,7 +57,7 @@ public class SiteAdapter extends RecyclerView.Adapter {
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
- Site site = mItems.get(position);
- holder.binding.text.setText(site.getActivatedName());
+ Site item = mItems.get(position);
+ holder.binding.text.setText(item.getActivatedName());
}
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java
new file mode 100644
index 000000000..8b53eb42c
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/VodAdapter.java
@@ -0,0 +1,88 @@
+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.recyclerview.widget.RecyclerView;
+
+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.ResUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VodAdapter extends RecyclerView.Adapter {
+
+ private final OnClickListener mListener;
+ private final List mItems;
+ private int width, height;
+
+ public VodAdapter(OnClickListener listener) {
+ this.mListener = listener;
+ this.mItems = new ArrayList<>();
+ setLayoutSize(3);
+ }
+
+ public interface OnClickListener {
+
+ void onItemClick(Vod item);
+ }
+
+ private void setLayoutSize(int spanCount) {
+ int space = ResUtil.dp2px(32 + ((spanCount - 1) * 16));
+ int base = ResUtil.getScreenWidthPx() - space;
+ width = base / spanCount;
+ height = (int) (width / 0.75f);
+ }
+
+ class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
+
+ private final AdapterVodBinding binding;
+
+ ViewHolder(@NonNull AdapterVodBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ binding.getRoot().setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ mListener.onItemClick(mItems.get(getLayoutPosition()));
+ }
+ }
+
+ public void addAll(List items) {
+ mItems.clear();
+ mItems.addAll(items);
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public int getItemCount() {
+ return mItems.size();
+ }
+
+ @NonNull
+ @Override
+ 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;
+ return holder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ Vod item = mItems.get(position);
+ holder.binding.name.setText(item.getVodName());
+ holder.binding.year.setText(item.getVodYear());
+ holder.binding.remark.setText(item.getVodRemarks());
+ holder.binding.year.setVisibility(item.getYearVisible());
+ holder.binding.remark.setVisibility(item.getRemarkVisible());
+ ImgUtil.load(item.getVodName(), item.getVodPic(), holder.binding.image);
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/SiteDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/SiteDialog.java
index 57eb7e855..3797bff8c 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/SiteDialog.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/SiteDialog.java
@@ -57,6 +57,6 @@ public class SiteDialog implements SiteAdapter.OnClickListener {
public interface Callback {
- void setSite(Site site);
+ void setSite(Site item);
}
}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java
index 6af2937f8..d4a3f629a 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/HomeFragment.java
@@ -5,17 +5,90 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.GridLayoutManager;
import androidx.viewbinding.ViewBinding;
+import com.fongmi.android.tv.api.ApiConfig;
+import com.fongmi.android.tv.bean.History;
+import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.FragmentHomeBinding;
+import com.fongmi.android.tv.db.AppDatabase;
+import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.ui.activity.BaseFragment;
+import com.fongmi.android.tv.ui.adapter.HistoryAdapter;
+import com.fongmi.android.tv.ui.adapter.VodAdapter;
+import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
-public class HomeFragment extends BaseFragment {
+public class HomeFragment extends BaseFragment implements VodAdapter.OnClickListener, HistoryAdapter.OnClickListener {
private FragmentHomeBinding mBinding;
+ private SiteViewModel mSiteViewModel;
+ private HistoryAdapter mHistoryAdapter;
+ private VodAdapter mRecommendAdapter;
@Override
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
return mBinding = FragmentHomeBinding.inflate(inflater, container, false);
}
+
+ @Override
+ protected void initView() {
+ setRecyclerView();
+ setViewModel();
+ getHistory();
+ getVideo();
+ }
+
+ @Override
+ protected void initEvent() {
+
+ }
+
+ private void setRecyclerView() {
+ mBinding.history.setHasFixedSize(true);
+ mBinding.history.setLayoutManager(new GridLayoutManager(getContext(), 3));
+ mBinding.history.addItemDecoration(new SpaceItemDecoration(3, 16));
+ mBinding.history.setAdapter(mHistoryAdapter = new HistoryAdapter(this));
+ mBinding.recommend.setHasFixedSize(true);
+ mBinding.recommend.setLayoutManager(new GridLayoutManager(getContext(), 3));
+ mBinding.recommend.addItemDecoration(new SpaceItemDecoration(3, 16));
+ mBinding.recommend.setAdapter(mRecommendAdapter = new VodAdapter(this));
+ }
+
+ private void setViewModel() {
+ mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
+ mSiteViewModel.result.observe(getViewLifecycleOwner(), result -> {
+ if (result != null) mRecommendAdapter.addAll(result.getList());
+ });
+ }
+
+ private void getVideo() {
+ if (ApiConfig.get().getHome().getKey().isEmpty()) return;
+ mSiteViewModel.homeContent();
+ }
+
+ private void getHistory() {
+ mHistoryAdapter.addAll(AppDatabase.get().getHistoryDao().getAll());
+ }
+
+ @Override
+ public void onItemClick(Vod item) {
+ }
+
+ @Override
+ public void onItemClick(History item) {
+ }
+
+ @Override
+ public void onItemDelete(History item) {
+
+ }
+
+ @Override
+ public boolean onLongClick() {
+ mHistoryAdapter.setDelete(true);
+ mHistoryAdapter.notifyDataSetChanged();
+ return true;
+ }
}
diff --git a/app/src/mobile/res/layout/activity_main.xml b/app/src/mobile/res/layout/activity_main.xml
index 4f7783a10..1510d7b32 100644
--- a/app/src/mobile/res/layout/activity_main.xml
+++ b/app/src/mobile/res/layout/activity_main.xml
@@ -12,7 +12,7 @@
android:layout_height="match_parent"
android:layout_above="@+id/navigation"
app:defaultNavHost="true"
- app:navGraph="@navigation/nav_main" />
+ app:navGraph="@navigation/nav_graph" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/res/layout/fragment_home.xml b/app/src/mobile/res/layout/fragment_home.xml
index 0f36c22be..71e7e063a 100644
--- a/app/src/mobile/res/layout/fragment_home.xml
+++ b/app/src/mobile/res/layout/fragment_home.xml
@@ -1,6 +1,51 @@
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/res/menu/menu_nav.xml b/app/src/mobile/res/menu/menu_nav.xml
index 9392ad9af..37eeead9d 100644
--- a/app/src/mobile/res/menu/menu_nav.xml
+++ b/app/src/mobile/res/menu/menu_nav.xml
@@ -4,16 +4,16 @@
+ android:title="@string/nav_home" />
+ android:title="@string/nav_vod" />
+ android:title="@string/nav_setting" />
\ No newline at end of file
diff --git a/app/src/mobile/res/navigation/nav_main.xml b/app/src/mobile/res/navigation/nav_graph.xml
similarity index 75%
rename from app/src/mobile/res/navigation/nav_main.xml
rename to app/src/mobile/res/navigation/nav_graph.xml
index e852df31d..d32d3fcd7 100644
--- a/app/src/mobile/res/navigation/nav_main.xml
+++ b/app/src/mobile/res/navigation/nav_graph.xml
@@ -1,22 +1,22 @@
+ android:label="@string/nav_home" />
+ android:label="@string/nav_vod" />
+ android:label="@string/nav_setting" />
\ No newline at end of file
diff --git a/app/src/mobile/res/values-zh-rCN/strings.xml b/app/src/mobile/res/values-zh-rCN/strings.xml
index e1278033c..a60b0bc27 100644
--- a/app/src/mobile/res/values-zh-rCN/strings.xml
+++ b/app/src/mobile/res/values-zh-rCN/strings.xml
@@ -1,8 +1,8 @@
-
- 首页
- 片库
- 设定
+
+ 首页
+ 片库
+ 设定
\ No newline at end of file
diff --git a/app/src/mobile/res/values-zh-rTW/strings.xml b/app/src/mobile/res/values-zh-rTW/strings.xml
index 464bad633..d8530e2c7 100644
--- a/app/src/mobile/res/values-zh-rTW/strings.xml
+++ b/app/src/mobile/res/values-zh-rTW/strings.xml
@@ -1,8 +1,8 @@
-
- 首頁
- 片庫
- 設定
+
+ 首頁
+ 片庫
+ 設定
\ No newline at end of file
diff --git a/app/src/mobile/res/values/strings.xml b/app/src/mobile/res/values/strings.xml
index 5e7ee03e8..9b544160c 100644
--- a/app/src/mobile/res/values/strings.xml
+++ b/app/src/mobile/res/values/strings.xml
@@ -1,8 +1,8 @@
-
- Home
- Vod
- Setting
+
+ Home
+ Vod
+ Setting
\ No newline at end of file