Эх сурвалжийг харах

feat: FindPartnerFragment改为BottomSheetDialogFragment实现

DoggyZhang 3 сар өмнө
parent
commit
b8673f03cd

+ 4 - 56
app/src/main/java/com/adealink/weparty/ui/main/MainFragment.kt

@@ -6,7 +6,6 @@ import android.os.Bundle
 import android.view.View
 import android.view.ViewOutlineProvider
 import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.coordinatorlayout.widget.CoordinatorLayout
 import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
@@ -16,13 +15,10 @@ import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.Router
 import com.adealink.frame.startup.DistributedLoadManager
-import com.adealink.frame.util.DisplayUtil
 import com.adealink.frame.util.naviBarHeight
 import com.adealink.weparty.AppModule
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.BaseFragment
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.BaseTabFragmentStateAdapter
 import com.adealink.weparty.commonui.widget.EmptyFragment
 import com.adealink.weparty.constant.TAG_TIME_APP_START
@@ -34,12 +30,11 @@ import com.adealink.weparty.ui.main.tab.MAIN_TABS
 import com.adealink.weparty.ui.main.tab.TabManager
 import com.adealink.weparty.ui.main.viewmodel.MainBottomPage
 import com.adealink.weparty.ui.main.viewmodel.MainPageViewModel
-import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
 import com.google.android.material.tabs.TabLayout
 import com.google.android.material.tabs.TabLayoutMediator
 import java.util.LinkedList
 import java.util.Queue
-import kotlin.math.min
 
 class MainFragment : BaseFragment(R.layout.fragment_main), ITabManager by TabManager() {
 
@@ -58,7 +53,6 @@ class MainFragment : BaseFragment(R.layout.fragment_main), ITabManager by TabMan
 
     private val binding by viewBinding(FragmentMainBinding::bind)
     private val mainPageViewModel by viewModels<MainPageViewModel>()
-    private var mainBottomBehavior: BottomSheetBehavior<ConstraintLayout>? = null
     private lateinit var dlManager: DistributedLoadManager
     private lateinit var mainPagerAdapter: MainPageAdapter
 
@@ -88,7 +82,6 @@ class MainFragment : BaseFragment(R.layout.fragment_main), ITabManager by TabMan
         super.initViews()
         initBlur()
         initTabs(MAIN_TABS)
-        initBottomPageToggle()
 
         mainPagerAdapter = MainPageAdapter()
         binding.vpContent.offscreenPageLimit = 1
@@ -176,57 +169,12 @@ class MainFragment : BaseFragment(R.layout.fragment_main), ITabManager by TabMan
         }
     }
 
-    private fun initBottomPageToggle() {
-        //底部公屏弹窗
-        val bottomChatMessageHeight = (DisplayUtil.getScreenHeight() * 0.72f).toInt()
-        binding.clBottom.updateLayoutParams<CoordinatorLayout.LayoutParams> {
-            height = bottomChatMessageHeight
-        }
-        val behavior = BottomSheetBehavior.from(binding.clBottom).also {
-            mainBottomBehavior = it
-        }
-        behavior.state = BottomSheetBehavior.STATE_HIDDEN
-        behavior.expandedOffset = bottomChatMessageHeight
-        behavior.maxHeight = bottomChatMessageHeight
-        behavior.skipCollapsed = true
-        behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
-            override fun onStateChanged(bottomSheet: View, newState: Int) {
-                when (newState) {
-                    BottomSheetBehavior.STATE_EXPANDED -> {
-                    }
-
-                    BottomSheetBehavior.STATE_HIDDEN -> {
-                        binding.clBottom.gone()
-                    }
-
-                    else -> {}
-                }
-            }
-
-            override fun onSlide(bottomSheet: View, slideOffset: Float) {
-                //Ntd.
-            }
-        })
-//        binding.btnTestExpand.onClick {
-//            behavior.state = BottomSheetBehavior.STATE_EXPANDED
-//        }
-//        binding.btnTestCollapse.setOnClickListener {
-//            behavior.state = BottomSheetBehavior.STATE_HIDDEN
-//        }
-    }
-
     private fun showBottomPage(page: MainBottomPage) {
         when (page) {
             MainBottomPage.FIND_PARTNER -> {
-                val fragment = Router.getRouterInstance<BaseFragment>(page.router) ?: return
-                binding.clBottom.show()
-                binding.clBottom.updateLayoutParams<CoordinatorLayout.LayoutParams> {
-                    height = min(DisplayUtil.getScreenHeight(), page.pageHeight)
-                }
-                mainBottomBehavior?.state = BottomSheetBehavior.STATE_EXPANDED
-                childFragmentManager.beginTransaction()
-                    .replace(binding.fcBottom.id, fragment, page.router)
-                    .commitAllowingStateLoss()
+                val fragment =
+                    Router.getRouterInstance<BottomSheetDialogFragment>(page.router) ?: return
+                fragment.show(childFragmentManager, page.router)
             }
         }
     }

+ 46 - 73
app/src/main/res/layout/fragment_main.xml

@@ -1,84 +1,57 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <com.adealink.weparty.commonui.blurview.BlurTarget
+        android:id="@+id/blur_target"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
 
-        <com.adealink.weparty.commonui.blurview.BlurTarget
-            android:id="@+id/blur_target"
+        <androidx.viewpager2.widget.ViewPager2
+            android:id="@+id/vp_content"
             android:layout_width="match_parent"
-            android:layout_height="0dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintTop_toTopOf="parent">
-
-            <androidx.viewpager2.widget.ViewPager2
-                android:id="@+id/vp_content"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent" />
-
-        </com.adealink.weparty.commonui.blurview.BlurTarget>
-
-        <View
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            android:background="@drawable/main_bottom_bar_bg"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="@id/blur_bar" />
-
-        <com.adealink.weparty.commonui.blurview.BlurView
-            android:id="@+id/blur_bar"
-            android:layout_width="0dp"
-            android:layout_height="@dimen/main_bottom_bar_height"
-            android:layout_marginHorizontal="42dp"
-            android:background="@drawable/main_tab_bg"
-            android:elevation="16dp"
-            app:blurOverlayColor="@color/color_7FFFFFFF"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent">
-
-            <com.google.android.material.tabs.TabLayout
-                android:id="@+id/tl_tab"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:tabBackground="@null"
-                app:tabGravity="fill"
-                app:tabIndicatorHeight="0dp"
-                app:tabMode="fixed"
-                app:tabPadding="0dp"
-                app:tabRippleColor="@null" />
-        </com.adealink.weparty.commonui.blurview.BlurView>
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/cl_bottom"
-        android:layout_width="match_parent"
-        android:layout_height="500dp"
-        app:behavior_draggable="true"
-        app:behavior_hideable="true"
-        app:behavior_peekHeight="0dp"
-        app:layout_behavior="@string/bottom_sheet_behavior"
-        tools:behavior_peekHeight="200dp">
-
-        <androidx.fragment.app.FragmentContainerView
-            android:id="@+id/fc_bottom"
-            android:layout_width="0dp"
-            android:layout_height="0dp"
+            android:layout_height="match_parent" />
+
+    </com.adealink.weparty.commonui.blurview.BlurTarget>
+
+    <View
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:background="@drawable/main_bottom_bar_bg"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@id/blur_bar" />
+
+    <com.adealink.weparty.commonui.blurview.BlurView
+        android:id="@+id/blur_bar"
+        android:layout_width="0dp"
+        android:layout_height="@dimen/main_bottom_bar_height"
+        android:layout_marginHorizontal="42dp"
+        android:background="@drawable/main_tab_bg"
+        android:elevation="16dp"
+        app:blurOverlayColor="@color/color_7FFFFFFF"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <com.google.android.material.tabs.TabLayout
+            android:id="@+id/tl_tab"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
+            app:tabBackground="@null"
+            app:tabGravity="fill"
+            app:tabIndicatorHeight="0dp"
+            app:tabMode="fixed"
+            app:tabPadding="0dp"
+            app:tabRippleColor="@null" />
+    </com.adealink.weparty.commonui.blurview.BlurView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 33 - 8
module/playmate/src/main/java/com/adealink/weparty/playmate/findpartner/FindPartnerFragment.kt

@@ -1,5 +1,8 @@
 package com.adealink.weparty.playmate.findpartner
 
+import android.app.Dialog
+import android.os.Bundle
+import android.view.View
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.activityViewModels
@@ -7,9 +10,9 @@ import androidx.fragment.app.viewModels
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.frame.util.DisplayUtil
 import com.adealink.frame.util.naviBarHeight
 import com.adealink.frame.util.onClick
-import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.commonui.ext.dp
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
@@ -23,9 +26,12 @@ import com.adealink.weparty.playmate.findpartner.page.SelectOtherFragment
 import com.adealink.weparty.playmate.findpartner.viewmodel.FindPartnerViewModel
 import com.adealink.weparty.playmate.viewmodel.PlaymateViewModel
 import com.adealink.weparty.ui.category.data.CategoryListTitleData
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import com.google.android.material.R as M_R
 
 @RouterUri(path = [Playmate.FindPartner.PATH], desc = "Find Partner")
-class FindPartnerFragment : BaseFragment(R.layout.fragment_find_partner) {
+class FindPartnerFragment : BottomSheetDialogFragment(R.layout.fragment_find_partner) {
 
     private val binding by viewBinding(FragmentFindPartnerBinding::bind)
 
@@ -36,9 +42,30 @@ class FindPartnerFragment : BaseFragment(R.layout.fragment_find_partner) {
     private val findPartnerViewModel by viewModels<FindPartnerViewModel>()
     private val categoryViewModel by activityViewModels<PlaymateViewModel>()
 
-    override fun initViews() {
-        super.initViews()
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        return BottomSheetDialog(requireActivity(), theme).apply {
+            setContentView(R.layout.fragment_find_partner)
+//            val bottomChatMessageHeight = (DisplayUtil.getScreenHeight() * 0.72f).toInt()
+//            behavior.expandedOffset = bottomChatMessageHeight
+//            behavior.maxHeight = bottomChatMessageHeight
+//            behavior.skipCollapsed = true
+        }
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        dialog?.findViewById<View>(M_R.id.design_bottom_sheet)?.let {
+            it.background = null
+        }
+        initViews()
+        observeViewModel()
+        loadData()
+    }
+
+
+    private fun initViews() {
         binding.fcFragment.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            height = (DisplayUtil.getScreenHeight() * 0.55f).toInt()
             bottomMargin = activity.naviBarHeight() + 16.dp()
         }
         binding.ivBack.onClick {
@@ -47,8 +74,7 @@ class FindPartnerFragment : BaseFragment(R.layout.fragment_find_partner) {
         inflatePage(FindPartnerPage.SELECT_CATEGORY)
     }
 
-    override fun observeViewModel() {
-        super.observeViewModel()
+    private fun observeViewModel() {
         findPartnerViewModel.pageLD.observeWithoutCache(viewLifecycleOwner) {
             inflatePage(it)
         }
@@ -93,8 +119,7 @@ class FindPartnerFragment : BaseFragment(R.layout.fragment_find_partner) {
         }
     }
 
-    override fun loadData() {
-        super.loadData()
+    private fun loadData() {
 //        categoryViewModel.pullAllCategory()
     }
 

+ 1 - 1
module/playmate/src/main/res/layout/fragment_find_partner.xml

@@ -3,7 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="500dp"
     android:background="@drawable/find_partner_dialog_bg"
     android:paddingHorizontal="16dp">