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: /** * 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(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 { 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 } }