Override default peek behavior in landscape mode

pull/996/head
Alex Baker 6 years ago
parent 390b870426
commit 17238b45d3

@ -5,6 +5,7 @@ import android.app.Activity.RESULT_OK
import android.app.Dialog import android.app.Dialog
import android.content.DialogInterface import android.content.DialogInterface
import android.content.Intent import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
@ -15,6 +16,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import butterknife.ButterKnife import butterknife.ButterKnife
import butterknife.OnClick import butterknife.OnClick
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow import com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow
@ -236,40 +238,48 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() {
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val bottomSheetDialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
dialog.setOnShowListener {
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
dialog.behavior.halfExpandedRatio = .75f
val bottomSheet = dialog.findViewById<FrameLayout>(com.google.android.material.R.id.design_bottom_sheet)
BottomSheetBehavior.from(bottomSheet!!).state = BottomSheetBehavior.STATE_HALF_EXPANDED
dialog.behavior.peekHeight = bottomSheet.height
}
if (closeAutomatically()) { if (!closeAutomatically()) {
return bottomSheetDialog addButtons(dialog)
}
} }
return dialog
}
bottomSheetDialog.setOnShowListener { private fun addButtons(dialog: BottomSheetDialog) {
val coordinator = (it as BottomSheetDialog) val coordinator = dialog
.findViewById<CoordinatorLayout>(com.google.android.material.R.id.coordinator) .findViewById<CoordinatorLayout>(com.google.android.material.R.id.coordinator)
val containerLayout = val containerLayout =
it.findViewById<FrameLayout>(com.google.android.material.R.id.container) dialog.findViewById<FrameLayout>(com.google.android.material.R.id.container)
val buttons = bottomSheetDialog.layoutInflater.inflate(R.layout.dialog_date_time_picker_buttons, null) val buttons = dialog.layoutInflater.inflate(R.layout.dialog_date_time_picker_buttons, null)
buttons.findViewById<View>(R.id.cancel_button).setOnClickListener { dismiss() } buttons.findViewById<View>(R.id.cancel_button).setOnClickListener { dismiss() }
buttons.findViewById<View>(R.id.ok_button).setOnClickListener { sendSelected() } buttons.findViewById<View>(R.id.ok_button).setOnClickListener { sendSelected() }
buttons.layoutParams = FrameLayout.LayoutParams( buttons.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM
).apply { ).apply {
gravity = Gravity.BOTTOM gravity = Gravity.BOTTOM
} }
containerLayout!!.addView(buttons) containerLayout!!.addView(buttons)
buttons.post { buttons.post {
(coordinator!!.layoutParams as ViewGroup.MarginLayoutParams).apply { (coordinator!!.layoutParams as ViewGroup.MarginLayoutParams).apply {
buttons.measure( buttons.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
) )
this.bottomMargin = buttons.measuredHeight this.bottomMargin = buttons.measuredHeight
containerLayout.requestLayout() containerLayout.requestLayout()
}
} }
} }
return bottomSheetDialog
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

Loading…
Cancel
Save