diff --git a/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/FullscreenBottomSheetDialog.kt b/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/FullscreenBottomSheetDialog.kt index 068c5ca..4735f76 100644 --- a/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/FullscreenBottomSheetDialog.kt +++ b/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/FullscreenBottomSheetDialog.kt @@ -2,7 +2,6 @@ package ru.touchin.roboswag.mvi_arch.core import android.app.Dialog import android.content.Context -import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import android.view.LayoutInflater @@ -16,10 +15,9 @@ import androidx.core.os.bundleOf import androidx.lifecycle.Observer import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import ru.touchin.mvi_arch.R +import ru.touchin.roboswag.components.utils.setResizableListener import ru.touchin.roboswag.mvi_arch.di.ViewModelAssistedFactory import ru.touchin.roboswag.mvi_arch.di.ViewModelFactory import ru.touchin.roboswag.mvi_arch.marker.ViewAction @@ -54,17 +52,6 @@ abstract class FullscreenBottomSheetDialog( ).get(ViewModel::class.java) } - private val onShowListener by lazy { - DialogInterface.OnShowListener { dialog -> - (dialog as BottomSheetDialog).findViewById(com.google.android.material.R.id.design_bottom_sheet) - ?.let { BottomSheetBehavior.from(it) } - ?.apply { - state = BottomSheetBehavior.STATE_EXPANDED - skipCollapsed = true - } - } - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(STYLE_NORMAL, R.style.RoundedCornersBottomSheetDialogTheme) @@ -102,7 +89,7 @@ abstract class FullscreenBottomSheetDialog( } override fun setupDialog(dialog: Dialog, style: Int) { - dialog.setOnShowListener(onShowListener) + dialog.setResizableListener() } override fun onSaveInstanceState(outState: Bundle) { diff --git a/utils/build.gradle b/utils/build.gradle index 2a490af..fe6fd6a 100644 --- a/utils/build.gradle +++ b/utils/build.gradle @@ -4,6 +4,7 @@ dependencies { implementation project(':kotlin-extensions') implementation "androidx.core:core" implementation "androidx.annotation:annotation" + implementation "com.google.android.material:material" constraints { implementation("androidx.core:core") { @@ -17,5 +18,11 @@ dependencies { require '1.1.0' } } + + implementation("com.google.android.material:material") { + version { + require '1.2.0-rc01' + } + } } } diff --git a/utils/src/main/java/ru/touchin/roboswag/components/utils/ViewExtensions.kt b/utils/src/main/java/ru/touchin/roboswag/components/utils/ViewExtensions.kt index 9c65ac7..942facf 100644 --- a/utils/src/main/java/ru/touchin/roboswag/components/utils/ViewExtensions.kt +++ b/utils/src/main/java/ru/touchin/roboswag/components/utils/ViewExtensions.kt @@ -1,10 +1,16 @@ package ru.touchin.roboswag.components.utils import android.app.Activity +import android.app.Dialog import android.content.Context +import android.content.DialogInterface import android.content.res.Resources import android.view.View import android.view.inputmethod.InputMethodManager +import android.widget.FrameLayout +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.android.material.bottomsheet.BottomSheetDialogFragment /** * Returns string representation of [View]'s ID. @@ -46,3 +52,17 @@ fun View.showSoftInput() { val inputManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) } + +/** + * Returns listener for BottomSheetDialogFragment so that dialog is shifted when the keyboard is opened + */ +fun Dialog.setResizableListener() { + setOnShowListener { dialog -> + (dialog as BottomSheetDialog).findViewById(com.google.android.material.R.id.design_bottom_sheet) + ?.let { BottomSheetBehavior.from(it) } + ?.apply { + state = BottomSheetBehavior.STATE_EXPANDED + skipCollapsed = true + } + } +}