Browse Source

ui: Improve window inset calculation

We don't care if system bars are hidden or not: we should always apply
the full inset.
Peter Cai 1 month ago
parent
commit
aca541593c

+ 1 - 1
app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt

@@ -109,7 +109,7 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
         val origFabMarginRight = (fab.layoutParams as ViewGroup.MarginLayoutParams).rightMargin
         val origFabMarginRight = (fab.layoutParams as ViewGroup.MarginLayoutParams).rightMargin
         val origFabMarginBottom = (fab.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin
         val origFabMarginBottom = (fab.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin
         ViewCompat.setOnApplyWindowInsetsListener(fab) { v, insets ->
         ViewCompat.setOnApplyWindowInsetsListener(fab) { v, insets ->
-            val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+            val bars = insets.getInsetsIgnoringVisibility(WindowInsetsCompat.Type.systemBars())
 
 
             v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
             v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
                 rightMargin = origFabMarginRight + bars.right
                 rightMargin = origFabMarginRight + bars.right

+ 6 - 5
app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardActivity.kt

@@ -24,6 +24,7 @@ import im.angry.openeuicc.util.OpenEuiccContextMarker
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import net.typeblog.lpac_jni.LocalProfileAssistant
 import net.typeblog.lpac_jni.LocalProfileAssistant
+import kotlin.math.max
 
 
 class DownloadWizardActivity : BaseEuiccAccessActivity() {
 class DownloadWizardActivity : BaseEuiccAccessActivity() {
     data class DownloadWizardState(
     data class DownloadWizardState(
@@ -97,21 +98,21 @@ class DownloadWizardActivity : BaseEuiccAccessActivity() {
         val origHeight = navigation.layoutParams.height
         val origHeight = navigation.layoutParams.height
 
 
         ViewCompat.setOnApplyWindowInsetsListener(navigation) { v, insets ->
         ViewCompat.setOnApplyWindowInsetsListener(navigation) { v, insets ->
-            val bars = insets.getInsets(
+            val bars = insets.getInsetsIgnoringVisibility(
                 WindowInsetsCompat.Type.systemBars()
                 WindowInsetsCompat.Type.systemBars()
                     or WindowInsetsCompat.Type.displayCutout()
                     or WindowInsetsCompat.Type.displayCutout()
-                    or WindowInsetsCompat.Type.ime()
             )
             )
-            v.updatePadding(bars.left, 0, bars.right, bars.bottom)
+            val ime = insets.getInsets(WindowInsetsCompat.Type.ime())
+            v.updatePadding(bars.left, 0, bars.right, max(bars.bottom, ime.bottom))
             val newParams = navigation.layoutParams
             val newParams = navigation.layoutParams
-            newParams.height = origHeight + bars.bottom
+            newParams.height = origHeight + max(bars.bottom, ime.bottom)
             navigation.layoutParams = newParams
             navigation.layoutParams = newParams
             WindowInsetsCompat.CONSUMED
             WindowInsetsCompat.CONSUMED
         }
         }
 
 
         val fragmentRoot = requireViewById<View>(R.id.step_fragment_container)
         val fragmentRoot = requireViewById<View>(R.id.step_fragment_container)
         ViewCompat.setOnApplyWindowInsetsListener(fragmentRoot) { v, insets ->
         ViewCompat.setOnApplyWindowInsetsListener(fragmentRoot) { v, insets ->
-            val bars = insets.getInsets(
+            val bars = insets.getInsetsIgnoringVisibility(
                 WindowInsetsCompat.Type.systemBars()
                 WindowInsetsCompat.Type.systemBars()
                     or WindowInsetsCompat.Type.displayCutout()
                     or WindowInsetsCompat.Type.displayCutout()
             )
             )

+ 1 - 9
app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt

@@ -34,18 +34,10 @@ fun DialogFragment.setWidthPercent(percentage: Int) {
     dialog?.window?.setLayout(percentWidth.toInt(), ViewGroup.LayoutParams.WRAP_CONTENT)
     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() {
 fun AppCompatActivity.setupToolbarInsets() {
     val spacer = requireViewById<View>(R.id.toolbar_spacer)
     val spacer = requireViewById<View>(R.id.toolbar_spacer)
     ViewCompat.setOnApplyWindowInsetsListener(requireViewById(R.id.toolbar)) { v, insets ->
     ViewCompat.setOnApplyWindowInsetsListener(requireViewById(R.id.toolbar)) { v, insets ->
-        val bars = insets.getInsets(
+        val bars = insets.getInsetsIgnoringVisibility(
             WindowInsetsCompat.Type.systemBars()
             WindowInsetsCompat.Type.systemBars()
                 or WindowInsetsCompat.Type.displayCutout()
                 or WindowInsetsCompat.Type.displayCutout()
         )
         )

+ 1 - 1
app/src/main/java/im/angry/openeuicc/ui/LuiActivity.kt

@@ -17,7 +17,7 @@ class LuiActivity : AppCompatActivity() {
         setContentView(R.layout.activity_lui)
         setContentView(R.layout.activity_lui)
 
 
         ViewCompat.setOnApplyWindowInsetsListener(requireViewById(R.id.lui_container)) { v, insets ->
         ViewCompat.setOnApplyWindowInsetsListener(requireViewById(R.id.lui_container)) { v, insets ->
-            val bars = insets.getInsets(
+            val bars = insets.getInsetsIgnoringVisibility(
                 WindowInsetsCompat.Type.systemBars()
                 WindowInsetsCompat.Type.systemBars()
                     or WindowInsetsCompat.Type.displayCutout()
                     or WindowInsetsCompat.Type.displayCutout()
             )
             )