diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 27370aa28..4b6850667 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -13,5 +13,26 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt index 0672b880f..75503afc5 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt @@ -9,11 +9,12 @@ import android.view.ViewGroup.LayoutParams import androidx.appcompat.app.AppCompatDialog import androidx.core.view.updateLayoutParams import androidx.viewbinding.ViewBinding -import com.google.android.material.R as materialR import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.koitharu.kotatsu.R +import org.koitharu.kotatsu.base.ui.dialog.AppBottomSheetDialog +import com.google.android.material.R as materialR abstract class BaseBottomSheet : BottomSheetDialogFragment() { @@ -43,7 +44,9 @@ abstract class BaseBottomSheet : BottomSheetDialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return if (resources.getBoolean(R.bool.is_tablet)) { AppCompatDialog(context, R.style.Theme_Kotatsu_Dialog) - } else super.onCreateDialog(savedInstanceState) + } else { + AppBottomSheetDialog(requireContext(), theme) + } } protected abstract fun onInflateView(inflater: LayoutInflater, container: ViewGroup?): B diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/AppBottomSheetDialog.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/AppBottomSheetDialog.kt new file mode 100644 index 000000000..d3b911ace --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/dialog/AppBottomSheetDialog.kt @@ -0,0 +1,29 @@ +package org.koitharu.kotatsu.base.ui.dialog + +import android.content.Context +import android.graphics.Color +import android.view.View +import com.google.android.material.bottomsheet.BottomSheetDialog + +class AppBottomSheetDialog(context: Context, theme: Int) : BottomSheetDialog(context, theme) { + + /** + * https://github.com/material-components/material-components-android/issues/2582 + */ + @Suppress("DEPRECATION") + override fun onAttachedToWindow() { + val window = window + val initialSystemUiVisibility = window?.decorView?.systemUiVisibility ?: 0 + super.onAttachedToWindow() + if (window != null) { + // If the navigation bar is translucent at all, the BottomSheet should be edge to edge + val drawEdgeToEdge = edgeToEdgeEnabled && Color.alpha(window.navigationBarColor) < 0xFF + if (drawEdgeToEdge) { + // Copied from super.onAttachedToWindow: + val edgeToEdgeFlags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE + // Fix super-class's window flag bug by respecting the intial system UI visibility: + window.decorView.systemUiVisibility = edgeToEdgeFlags or initialSystemUiVisibility + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/BottomSheetToolbarController.kt b/app/src/main/java/org/koitharu/kotatsu/utils/BottomSheetToolbarController.kt index 17d62d3a3..ae40b41f6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/BottomSheetToolbarController.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/BottomSheetToolbarController.kt @@ -2,15 +2,16 @@ package org.koitharu.kotatsu.utils import android.view.View import androidx.appcompat.widget.Toolbar -import com.google.android.material.R as materialR import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.R as materialR open class BottomSheetToolbarController( protected val toolbar: Toolbar, ) : BottomSheetBehavior.BottomSheetCallback() { override fun onStateChanged(bottomSheet: View, newState: Int) { - if (newState == BottomSheetBehavior.STATE_EXPANDED) { + val isExpanded = newState == BottomSheetBehavior.STATE_EXPANDED && bottomSheet.top <= 0 + if (isExpanded) { toolbar.setNavigationIcon(materialR.drawable.abc_ic_clear_material) } else { toolbar.navigationIcon = null diff --git a/app/src/main/res/values-v27/styles.xml b/app/src/main/res/values-v27/styles.xml new file mode 100644 index 000000000..88dc7707b --- /dev/null +++ b/app/src/main/res/values-v27/styles.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2333f5d68..d424cf260 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -22,8 +22,8 @@ -