From 17238b45d34c8c0b62cceafb13127475f7c49965 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Fri, 10 Apr 2020 09:50:43 -0500 Subject: [PATCH] Override default peek behavior in landscape mode --- .../java/org/tasks/dialogs/DateTimePicker.kt | 68 +++++++++++-------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt index 21c456c70..a3db1974e 100644 --- a/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt +++ b/app/src/main/java/org/tasks/dialogs/DateTimePicker.kt @@ -5,6 +5,7 @@ import android.app.Activity.RESULT_OK import android.app.Dialog import android.content.DialogInterface import android.content.Intent +import android.content.res.Configuration import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -15,6 +16,7 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.fragment.app.Fragment import butterknife.ButterKnife import butterknife.OnClick +import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities.atLeastMarshmallow @@ -236,40 +238,48 @@ class DateTimePicker : InjectingBottomSheetDialogFragment() { } 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(com.google.android.material.R.id.design_bottom_sheet) + BottomSheetBehavior.from(bottomSheet!!).state = BottomSheetBehavior.STATE_HALF_EXPANDED + dialog.behavior.peekHeight = bottomSheet.height + } - if (closeAutomatically()) { - return bottomSheetDialog + if (!closeAutomatically()) { + addButtons(dialog) + } } + return dialog + } - bottomSheetDialog.setOnShowListener { - val coordinator = (it as BottomSheetDialog) - .findViewById(com.google.android.material.R.id.coordinator) - val containerLayout = - it.findViewById(com.google.android.material.R.id.container) - val buttons = bottomSheetDialog.layoutInflater.inflate(R.layout.dialog_date_time_picker_buttons, null) - buttons.findViewById(R.id.cancel_button).setOnClickListener { dismiss() } - buttons.findViewById(R.id.ok_button).setOnClickListener { sendSelected() } - buttons.layoutParams = FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM - ).apply { - gravity = Gravity.BOTTOM - } - containerLayout!!.addView(buttons) - - buttons.post { - (coordinator!!.layoutParams as ViewGroup.MarginLayoutParams).apply { - buttons.measure( - View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), - View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) - ) - this.bottomMargin = buttons.measuredHeight - containerLayout.requestLayout() - } + private fun addButtons(dialog: BottomSheetDialog) { + val coordinator = dialog + .findViewById(com.google.android.material.R.id.coordinator) + val containerLayout = + dialog.findViewById(com.google.android.material.R.id.container) + val buttons = dialog.layoutInflater.inflate(R.layout.dialog_date_time_picker_buttons, null) + buttons.findViewById(R.id.cancel_button).setOnClickListener { dismiss() } + buttons.findViewById(R.id.ok_button).setOnClickListener { sendSelected() } + buttons.layoutParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM + ).apply { + gravity = Gravity.BOTTOM + } + containerLayout!!.addView(buttons) + + buttons.post { + (coordinator!!.layoutParams as ViewGroup.MarginLayoutParams).apply { + buttons.measure( + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ) + this.bottomMargin = buttons.measuredHeight + containerLayout.requestLayout() } } - return bottomSheetDialog } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {