Browse Source

Apply layout insets to more activities

Peter Cai 1 year ago
parent
commit
a6777d1d17

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

@@ -19,6 +19,9 @@ import android.widget.PopupMenu
 import android.widget.TextView
 import android.widget.TextView
 import android.widget.Toast
 import android.widget.Toast
 import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AlertDialog
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -76,6 +79,21 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,
         fab = view.requireViewById(R.id.fab)
         fab = view.requireViewById(R.id.fab)
         profileList = view.requireViewById(R.id.profile_list)
         profileList = view.requireViewById(R.id.profile_list)
 
 
+        val origFabMarginRight = (fab.layoutParams as ViewGroup.MarginLayoutParams).rightMargin
+        val origFabMarginBottom = (fab.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin
+        ViewCompat.setOnApplyWindowInsetsListener(fab) { v, insets ->
+            val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+
+            v.updateLayoutParams<ViewGroup.MarginLayoutParams> {
+                rightMargin = origFabMarginRight + bars.right
+                bottomMargin = origFabMarginBottom + bars.bottom
+            }
+
+            WindowInsetsCompat.CONSUMED
+        }
+
+        setupRootViewInsets(profileList)
+
         return view
         return view
     }
     }
 
 

+ 2 - 0
app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt

@@ -49,6 +49,8 @@ class LogsActivity : AppCompatActivity() {
         scrollView = requireViewById(R.id.scroll_view)
         scrollView = requireViewById(R.id.scroll_view)
         logText = requireViewById(R.id.log_text)
         logText = requireViewById(R.id.log_text)
 
 
+        setupRootViewInsets(scrollView)
+
         swipeRefresh.setOnRefreshListener {
         swipeRefresh.setOnRefreshListener {
             lifecycleScope.launch {
             lifecycleScope.launch {
                 reload()
                 reload()

+ 5 - 3
app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt

@@ -42,15 +42,17 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker {
         setSupportActionBar(requireViewById(R.id.toolbar))
         setSupportActionBar(requireViewById(R.id.toolbar))
         setupToolbarInsets()
         setupToolbarInsets()
         supportActionBar!!.setDisplayHomeAsUpEnabled(true)
         supportActionBar!!.setDisplayHomeAsUpEnabled(true)
+
+        swipeRefresh = requireViewById(R.id.swipe_refresh)
+        notificationList = requireViewById(R.id.recycler_view)
+
+        setupRootViewInsets(notificationList)
     }
     }
 
 
     override fun onInit() {
     override fun onInit() {
         euiccChannel = euiccChannelManager
         euiccChannel = euiccChannelManager
             .findEuiccChannelBySlotBlocking(intent.getIntExtra("logicalSlotId", 0))!!
             .findEuiccChannelBySlotBlocking(intent.getIntExtra("logicalSlotId", 0))!!
 
 
-        swipeRefresh = requireViewById(R.id.swipe_refresh)
-        notificationList = requireViewById(R.id.recycler_view)
-
         notificationList.layoutManager =
         notificationList.layoutManager =
             LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
             LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
         notificationList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
         notificationList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))

+ 11 - 0
app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt

@@ -3,6 +3,9 @@ package im.angry.openeuicc.ui
 import android.content.Intent
 import android.content.Intent
 import android.net.Uri
 import android.net.Uri
 import android.os.Bundle
 import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 import androidx.datastore.preferences.core.Preferences
 import androidx.datastore.preferences.core.Preferences
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.lifecycleScope
 import androidx.preference.CheckBoxPreference
 import androidx.preference.CheckBoxPreference
@@ -46,6 +49,14 @@ class SettingsFragment: PreferenceFragmentCompat() {
             ?.bindBooleanFlow(preferenceRepository.disableSafeguardFlow, PreferenceKeys.DISABLE_SAFEGUARD_REMOVABLE_ESIM)
             ?.bindBooleanFlow(preferenceRepository.disableSafeguardFlow, PreferenceKeys.DISABLE_SAFEGUARD_REMOVABLE_ESIM)
     }
     }
 
 
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View {
+        return super.onCreateView(inflater, container, savedInstanceState).also(::setupRootViewInsets)
+    }
+
     private fun CheckBoxPreference.bindBooleanFlow(flow: Flow<Boolean>, key: Preferences.Key<Boolean>) {
     private fun CheckBoxPreference.bindBooleanFlow(flow: Flow<Boolean>, key: Preferences.Key<Boolean>) {
         lifecycleScope.launch {
         lifecycleScope.launch {
             flow.collect { isChecked = it }
             flow.collect { isChecked = it }

+ 14 - 0
app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt

@@ -55,3 +55,17 @@ fun AppCompatActivity.setupToolbarInsets() {
         WindowInsetsCompat.CONSUMED
         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
+    }
+}

+ 2 - 0
app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt

@@ -35,6 +35,8 @@ class CompatibilityCheckActivity: AppCompatActivity() {
             LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
             LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
         compatibilityCheckList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
         compatibilityCheckList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
         compatibilityCheckList.adapter = adapter
         compatibilityCheckList.adapter = adapter
+
+        setupRootViewInsets(compatibilityCheckList)
     }
     }
 
 
     override fun onStart() {
     override fun onStart() {