diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LiveDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LiveDialog.java index fb4271477..058b6d46d 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LiveDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/LiveDialog.java @@ -1,14 +1,10 @@ package com.fongmi.android.tv.ui.custom.dialog; +import android.app.Activity; import android.view.LayoutInflater; -import android.view.ViewGroup; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.api.LiveConfig; import com.fongmi.android.tv.bean.Live; @@ -16,55 +12,60 @@ import com.fongmi.android.tv.databinding.DialogLiveBinding; import com.fongmi.android.tv.impl.LiveCallback; import com.fongmi.android.tv.ui.adapter.LiveAdapter; import com.fongmi.android.tv.ui.custom.SpaceItemDecoration; -import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; -public class LiveDialog extends BaseDialog implements LiveAdapter.OnClickListener { +public class LiveDialog implements LiveAdapter.OnClickListener { - private final LiveAdapter adapter; + private final LiveCallback callback; private DialogLiveBinding binding; - private LiveCallback callback; + private LiveAdapter adapter; + private AlertDialog dialog; - public static LiveDialog create() { - return new LiveDialog(); + public static LiveDialog create(Activity activity) { + return new LiveDialog(activity); } - public LiveDialog() { - this.adapter = new LiveAdapter(this); + public static LiveDialog create(Fragment fragment) { + return new LiveDialog(fragment); } - public void show(FragmentActivity activity) { - for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return; - show(activity.getSupportFragmentManager(), null); + public LiveDialog(Activity activity) { this.callback = (LiveCallback) activity; + init(activity); } - public void show(Fragment fragment) { - for (Fragment f : fragment.getChildFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return; - show(fragment.getChildFragmentManager(), null); + public LiveDialog(Fragment fragment) { this.callback = (LiveCallback) fragment; + init(fragment.getActivity()); } - private int getCount() { - return adapter.getItemCount() < 2 ? 1 : 2; + private void init(Activity activity) { + this.binding = DialogLiveBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + this.adapter = new LiveAdapter(this); } - @Override - protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { - return binding = DialogLiveBinding.inflate(inflater, container, false); + public void show() { + setRecyclerView(); + setDialog(); } - @Override - protected void initView() { + private void setRecyclerView() { binding.recycler.setAdapter(adapter); binding.recycler.setHasFixedSize(true); - binding.recycler.addItemDecoration(new SpaceItemDecoration(getCount(), 16)); - binding.recycler.setLayoutManager(new GridLayoutManager(getContext(), getCount())); + binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); binding.recycler.scrollToPosition(LiveConfig.getHomeIndex()); } + private void setDialog() { + if (adapter.getItemCount() == 0) return; + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + @Override public void onItemClick(Live item) { callback.setLive(item); - dismiss(); + dialog.dismiss(); } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java index 65730947d..2d2a73b6c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java @@ -16,10 +16,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; public class SiteDialog implements SiteAdapter.OnClickListener { - private final DialogSiteBinding binding; private final SiteCallback callback; - private final SiteAdapter adapter; - private final AlertDialog dialog; + private DialogSiteBinding binding; + private SiteAdapter adapter; + private AlertDialog dialog; public static SiteDialog create(Activity activity) { return new SiteDialog(activity); @@ -30,16 +30,18 @@ public class SiteDialog implements SiteAdapter.OnClickListener { } public SiteDialog(Activity activity) { - this.callback = (activity instanceof SiteCallback) ? (SiteCallback) activity : null; - this.binding = DialogSiteBinding.inflate(LayoutInflater.from(activity)); - this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); - this.adapter = new SiteAdapter(this); + this.callback = (SiteCallback) activity; + init(activity); } public SiteDialog(Fragment fragment) { - this.callback = (fragment instanceof SiteCallback) ? (SiteCallback) fragment : null; - this.binding = DialogSiteBinding.inflate(LayoutInflater.from(fragment.getContext())); - this.dialog = new MaterialAlertDialogBuilder(fragment.getActivity()).setView(binding.getRoot()).create(); + this.callback = (SiteCallback) fragment; + init(fragment.getActivity()); + } + + private void init(Activity activity) { + this.binding = DialogSiteBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); this.adapter = new SiteAdapter(this); } 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 55ec13615..146449440 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 @@ -74,7 +74,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit @Override protected void initEvent() { mBinding.vodHome.setOnClickListener(view -> SiteDialog.create(this).show()); - mBinding.liveHome.setOnClickListener(view -> LiveDialog.create().show(this)); + mBinding.liveHome.setOnClickListener(view -> LiveDialog.create(this).show()); mBinding.vod.setOnClickListener(view -> ConfigDialog.create(this).type(type = 0).show()); mBinding.live.setOnClickListener(view -> ConfigDialog.create(this).type(type = 1).show()); mBinding.wall.setOnClickListener(view -> ConfigDialog.create(this).type(type = 2).show()); diff --git a/app/src/mobile/res/layout/adapter_live.xml b/app/src/mobile/res/layout/adapter_live.xml index da8ace9aa..3aad8cfeb 100644 --- a/app/src/mobile/res/layout/adapter_live.xml +++ b/app/src/mobile/res/layout/adapter_live.xml @@ -3,9 +3,11 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/text" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@drawable/shape_text" + android:layout_height="40dp" + android:background="@drawable/shape_text_round" + android:ellipsize="marquee" + android:gravity="center" android:singleLine="true" android:textColor="@color/text" - android:textSize="14sp" + android:textSize="16sp" tools:text="https://fongmi.github.io/live.json" /> \ No newline at end of file diff --git a/app/src/mobile/res/layout/dialog_live.xml b/app/src/mobile/res/layout/dialog_live.xml index 2504d4452..c839913bb 100644 --- a/app/src/mobile/res/layout/dialog_live.xml +++ b/app/src/mobile/res/layout/dialog_live.xml @@ -5,4 +5,5 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" - app:maxHeight="228dp" /> \ No newline at end of file + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + app:maxHeight="240dp" /> \ No newline at end of file