From b2e3417d46997117e05ff15a37b94425e46267ea Mon Sep 17 00:00:00 2001 From: F0x1d Date: Sun, 1 Mar 2026 21:10:15 +0300 Subject: [PATCH] fix: horizontal bottom sheets not being fully expanded --- core/tea/android/build.gradle.kts | 1 + .../core/tea/BaseStoreBottomSheetFragment.kt | 15 ++++ .../ui/base/dialog/BaseBottomSheetFragment.kt | 71 ------------------- 3 files changed, 16 insertions(+), 71 deletions(-) delete mode 100644 core/ui/base/src/main/kotlin/com/f0x1d/logfox/core/ui/base/dialog/BaseBottomSheetFragment.kt diff --git a/core/tea/android/build.gradle.kts b/core/tea/android/build.gradle.kts index fb8f8e1f..aafb81e6 100644 --- a/core/tea/android/build.gradle.kts +++ b/core/tea/android/build.gradle.kts @@ -19,5 +19,6 @@ dependencies { api(libs.androidx.preference) api(libs.material) + implementation(projects.core.ui.base) implementation(libs.androidx.compose.runtime) } diff --git a/core/tea/android/src/main/kotlin/com/f0x1d/logfox/core/tea/BaseStoreBottomSheetFragment.kt b/core/tea/android/src/main/kotlin/com/f0x1d/logfox/core/tea/BaseStoreBottomSheetFragment.kt index eb2aa63f..d44ddd5d 100644 --- a/core/tea/android/src/main/kotlin/com/f0x1d/logfox/core/tea/BaseStoreBottomSheetFragment.kt +++ b/core/tea/android/src/main/kotlin/com/f0x1d/logfox/core/tea/BaseStoreBottomSheetFragment.kt @@ -1,5 +1,7 @@ package com.f0x1d.logfox.core.tea +import android.annotation.SuppressLint +import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -8,6 +10,9 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.viewbinding.ViewBinding +import com.f0x1d.logfox.core.ui.base.ext.enableEdgeToEdge +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import kotlinx.coroutines.launch @@ -90,6 +95,16 @@ abstract class BaseStoreBottomSheetFragment< } } + @SuppressLint("RestrictedApi") + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog + dialog.window?.enableEdgeToEdge(isContrastEnforced = false) + dialog.behavior.skipCollapsed = true + dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED + dialog.behavior.disableShapeAnimations() // i love google https://github.com/material-components/material-components-android/pull/437 + return dialog + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/core/ui/base/src/main/kotlin/com/f0x1d/logfox/core/ui/base/dialog/BaseBottomSheetFragment.kt b/core/ui/base/src/main/kotlin/com/f0x1d/logfox/core/ui/base/dialog/BaseBottomSheetFragment.kt deleted file mode 100644 index 1a326aac..00000000 --- a/core/ui/base/src/main/kotlin/com/f0x1d/logfox/core/ui/base/dialog/BaseBottomSheetFragment.kt +++ /dev/null @@ -1,71 +0,0 @@ -package com.f0x1d.logfox.core.ui.base.dialog - -import android.annotation.SuppressLint -import android.app.Dialog -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import androidx.viewbinding.ViewBinding -import com.f0x1d.logfox.core.ui.base.ext.enableEdgeToEdge -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.FlowCollector -import kotlinx.coroutines.launch - -abstract class BaseBottomSheetFragment : BottomSheetDialogFragment() { - - private var mutableBinding: T? = null - protected val binding: T get() = mutableBinding!! - - abstract fun inflateBinding(inflater: LayoutInflater, container: ViewGroup?): T? - protected open fun T.onViewCreated(view: View, savedInstanceState: Bundle?) = Unit - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View? { - inflateBinding(inflater, container)?.also { - mutableBinding = it - return it.root - } - return super.onCreateView(inflater, container, savedInstanceState) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - binding.onViewCreated(view, savedInstanceState) - } - - @SuppressLint("RestrictedApi") - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog - dialog.window?.enableEdgeToEdge(isContrastEnforced = false) - dialog.behavior.skipCollapsed = true - dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED - dialog.behavior.disableShapeAnimations() // i love google https://github.com/material-components/material-components-android/pull/437 - return dialog - } - - override fun onDestroyView() { - super.onDestroyView() - mutableBinding = null - } - - protected fun Flow.collectWithLifecycle( - state: Lifecycle.State = Lifecycle.State.STARTED, - collector: FlowCollector, - ) { - viewLifecycleOwner.lifecycleScope.launch { - viewLifecycleOwner.repeatOnLifecycle(state) { - collect(collector) - } - } - } -}