| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package im.angry.openeuicc.util
- import android.content.res.Resources
- import android.graphics.Rect
- import android.view.View
- import android.view.ViewGroup
- import androidx.appcompat.app.AppCompatActivity
- import androidx.appcompat.widget.Toolbar
- import androidx.core.view.ViewCompat
- import androidx.core.view.WindowInsetsCompat
- import androidx.core.view.updateLayoutParams
- import androidx.core.view.updatePadding
- import androidx.fragment.app.DialogFragment
- import im.angry.openeuicc.common.R
- // Source: <https://stackoverflow.com/questions/12478520/how-to-set-dialogfragments-width-and-height>
- /**
- * Call this method (in onActivityCreated or later) to set
- * the width of the dialog to a percentage of the current
- * screen width.
- */
- fun DialogFragment.setWidthPercent(percentage: Int) {
- val percent = percentage.toFloat() / 100
- val dm = Resources.getSystem().displayMetrics
- val rect = dm.run { Rect(0, 0, widthPixels, heightPixels) }
- val percentWidth = rect.width() * percent
- dialog?.window?.setLayout(percentWidth.toInt(), ViewGroup.LayoutParams.WRAP_CONTENT)
- }
- /**
- * Call this method (in onActivityCreated or later)
- * to make the dialog near-full screen.
- */
- fun DialogFragment.setFullScreen() {
- dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
- }
- fun AppCompatActivity.setupToolbarInsets() {
- val spacer = requireViewById<View>(R.id.toolbar_spacer)
- ViewCompat.setOnApplyWindowInsetsListener(requireViewById(R.id.toolbar)) { v, insets ->
- val bars = insets.getInsets(
- WindowInsetsCompat.Type.systemBars()
- or WindowInsetsCompat.Type.displayCutout()
- )
- v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
- topMargin = bars.top
- }
- v.updatePadding(bars.left, v.paddingTop, bars.right, v.paddingBottom)
- spacer.updateLayoutParams {
- height = v.top
- }
- WindowInsetsCompat.CONSUMED
- }
- }
- fun setupRootViewInsets(view: View) {
- ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets ->
- val bars = insets.getInsets(
- WindowInsetsCompat.Type.systemBars()
- or WindowInsetsCompat.Type.displayCutout()
- )
- // Don't set padding bottom because we do want scrolling root views to extend into nav bar
- v.updatePadding(bars.left, v.paddingTop, bars.right, v.paddingBottom)
- WindowInsetsCompat.CONSUMED
- }
- }
|