diff --git a/app/src/mobile/java/com/fongmi/android/tv/Product.java b/app/src/mobile/java/com/fongmi/android/tv/Product.java index bc5f8fb85..dcd352122 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/Product.java +++ b/app/src/mobile/java/com/fongmi/android/tv/Product.java @@ -1,17 +1,12 @@ package com.fongmi.android.tv; import android.content.Context; -import android.content.res.Resources; import com.fongmi.android.tv.utils.Prefers; import com.fongmi.android.tv.utils.ResUtil; public class Product { - public static Resources hackResources(Resources resources) { - return resources; - } - public static int getColumn() { return Math.abs(Prefers.getSize() - 5); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java index 98011e1aa..c211d5db5 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/CollectActivity.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.activity; import android.app.Activity; import android.content.Intent; +import android.os.Bundle; import android.text.Editable; import android.text.TextUtils; import android.view.View; @@ -32,6 +33,7 @@ import com.fongmi.android.tv.ui.adapter.CollectAdapter; import com.fongmi.android.tv.ui.adapter.RecordAdapter; import com.fongmi.android.tv.ui.adapter.VodAdapter; import com.fongmi.android.tv.ui.adapter.WordAdapter; +import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomListener; import com.fongmi.android.tv.ui.custom.ViewType; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; @@ -84,7 +86,7 @@ public class CollectActivity extends BaseActivity implements SiteCallback, WordA } @Override - protected void initView() { + protected void initView(Bundle savedInstanceState) { mSites = new ArrayList<>(); setRecyclerView(); setLayoutSize(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index ced5793ea..118dd4bc1 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Rect; +import android.os.Bundle; import android.text.Html; import android.text.Layout; import android.util.Rational; @@ -45,6 +46,7 @@ import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.adapter.EpisodeAdapter; import com.fongmi.android.tv.ui.adapter.FlagAdapter; import com.fongmi.android.tv.ui.adapter.ParseAdapter; +import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownVod; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; @@ -184,7 +186,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } @Override - protected void initView() { + protected void initView(Bundle savedInstanceState) { mKeyDown = CustomKeyDownVod.create(this); mFrameParams = mBinding.video.getLayoutParams(); mPlayers = new Players().init(); 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 72dce5ec4..b98767ecf 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 @@ -18,6 +18,7 @@ import com.fongmi.android.tv.databinding.ActivityMainBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.net.Callback; import com.fongmi.android.tv.server.Server; +import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.FragmentStateManager; import com.fongmi.android.tv.ui.fragment.SettingFragment; import com.fongmi.android.tv.ui.fragment.VodFragment; @@ -64,11 +65,7 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt mManager = new FragmentStateManager(mBinding.container, getSupportFragmentManager()) { @Override public Fragment getItem(int position) { - if (position == 0) { - return VodFragment.newInstance(); - } else { - return SettingFragment.newInstance(); - } + return position == 0 ? VodFragment.newInstance() : SettingFragment.newInstance(); } }; if (savedInstanceState == null) mManager.change(0); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java index 126a8fbdb..6dc276655 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/TypeAdapter.java @@ -72,6 +72,10 @@ public class TypeAdapter extends RecyclerView.Adapter { return mItems.get(position); } + public boolean hasType() { + return getItemCount() > 1; + } + @Override public int getItemCount() { return mItems.size(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java new file mode 100644 index 000000000..345fb25ab --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -0,0 +1,78 @@ +package com.fongmi.android.tv.ui.base; + +import android.app.Activity; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewbinding.ViewBinding; + +import com.fongmi.android.tv.R; +import com.fongmi.android.tv.api.WallConfig; +import com.fongmi.android.tv.event.RefreshEvent; +import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.Prefers; +import com.fongmi.android.tv.utils.ResUtil; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.io.File; + +public abstract class BaseActivity extends AppCompatActivity { + + protected abstract ViewBinding getBinding(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getBinding().getRoot()); + EventBus.getDefault().register(this); + setWall(); + initView(savedInstanceState); + initEvent(); + } + + protected Activity getActivity() { + return this; + } + + protected void initView(Bundle savedInstanceState) { + } + + protected void initEvent() { + } + + protected boolean isVisible(View view) { + return view.getVisibility() == View.VISIBLE; + } + + protected boolean isGone(View view) { + return view.getVisibility() == View.GONE; + } + + private void setWall() { + try { + File file = FileUtil.getWall(Prefers.getWall()); + if (file.exists() && file.length() > 0) getWindow().setBackgroundDrawable(WallConfig.drawable(Drawable.createFromPath(file.getPath()))); + else getWindow().setBackgroundDrawableResource(ResUtil.getDrawable(file.getName())); + } catch (Exception e) { + getWindow().setBackgroundDrawableResource(R.drawable.wallpaper_1); + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onRefreshEvent(RefreshEvent event) { + if (event.getType() != RefreshEvent.Type.WALL) return; + WallConfig.get().setDrawable(null); + setWall(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } +} diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseFragment.java new file mode 100644 index 000000000..ce4be4e26 --- /dev/null +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseFragment.java @@ -0,0 +1,53 @@ +package com.fongmi.android.tv.ui.base; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewbinding.ViewBinding; + +public abstract class BaseFragment extends Fragment { + + protected abstract ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container); + + private boolean init; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return getBinding(inflater, container).getRoot(); + } + + protected void initView() { + } + + protected void initEvent() { + } + + public boolean canBack() { + return true; + } + + private void resume() { + if (init) return; + initView(); + initEvent(); + init = true; + } + + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + if (isVisibleToUser) if (isResumed()) resume(); + } + + @Override + public void onResume() { + super.onResume(); + if (getUserVisibleHint()) resume(); + } +} diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java index a36e8aeee..9ef50243c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/FragmentStateManager.java @@ -6,7 +6,7 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import com.fongmi.android.tv.ui.activity.BaseFragment; +import com.fongmi.android.tv.ui.base.BaseFragment; public abstract class FragmentStateManager { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java index 65a02703d..007a6e335 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java @@ -23,7 +23,7 @@ import com.fongmi.android.tv.impl.ConfigCallback; import com.fongmi.android.tv.impl.LiveCallback; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.net.Callback; -import com.fongmi.android.tv.ui.activity.BaseFragment; +import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.custom.dialog.ConfigDialog; import com.fongmi.android.tv.ui.custom.dialog.HistoryDialog; import com.fongmi.android.tv.ui.custom.dialog.LiveDialog; 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 9787004b4..b6eae0c1c 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 @@ -21,9 +21,9 @@ import com.fongmi.android.tv.databinding.FragmentVodBinding; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.FilterCallback; import com.fongmi.android.tv.impl.SiteCallback; -import com.fongmi.android.tv.ui.activity.BaseFragment; import com.fongmi.android.tv.ui.activity.CollectActivity; import com.fongmi.android.tv.ui.adapter.TypeAdapter; +import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.custom.dialog.FilterDialog; import com.fongmi.android.tv.ui.custom.dialog.LinkDialog; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; @@ -170,6 +170,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal public void setAdapter(Result result) { try { + if (mAdapter.hasType()) return; result.setTypes(getTypes(result)); mAdapter.addAll(result.getTypes()); for (Class item : mAdapter.getTypes()) if (result.getFilters().containsKey(item.getTypeId())) item.setFilters(result.getFilters().get(item.getTypeId())); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/HomeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/HomeFragment.java index 3ee964978..85e63b7a1 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/HomeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/HomeFragment.java @@ -21,11 +21,11 @@ import com.fongmi.android.tv.bean.Site; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.FragmentHomeBinding; import com.fongmi.android.tv.model.SiteViewModel; -import com.fongmi.android.tv.ui.activity.BaseFragment; import com.fongmi.android.tv.ui.activity.CollectActivity; import com.fongmi.android.tv.ui.activity.DetailActivity; import com.fongmi.android.tv.ui.adapter.HistoryAdapter; import com.fongmi.android.tv.ui.adapter.VodAdapter; +import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.fragment.VodFragment; public class HomeFragment extends BaseFragment implements VodAdapter.OnClickListener, HistoryAdapter.OnClickListener, SwipeRefreshLayout.OnRefreshListener { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java index e4c9740e3..22ac372f6 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/child/TypeFragment.java @@ -16,10 +16,10 @@ import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Vod; import com.fongmi.android.tv.databinding.FragmentTypeBinding; import com.fongmi.android.tv.model.SiteViewModel; -import com.fongmi.android.tv.ui.activity.BaseFragment; import com.fongmi.android.tv.ui.activity.CollectActivity; import com.fongmi.android.tv.ui.activity.DetailActivity; import com.fongmi.android.tv.ui.adapter.VodAdapter; +import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.custom.CustomScroller; import com.fongmi.android.tv.ui.fragment.VodFragment;