diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt index ac0a99f..b9b5e59 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/EuiccManagementFragment.kt +++ b/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.Toast 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.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager @@ -76,6 +79,21 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener, fab = view.requireViewById(R.id.fab) 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 { + rightMargin = origFabMarginRight + bars.right + bottomMargin = origFabMarginBottom + bars.bottom + } + + WindowInsetsCompat.CONSUMED + } + + setupRootViewInsets(profileList) + return view } diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt index 558e69a..e1c9ea1 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/LogsActivity.kt @@ -49,6 +49,8 @@ class LogsActivity : AppCompatActivity() { scrollView = requireViewById(R.id.scroll_view) logText = requireViewById(R.id.log_text) + setupRootViewInsets(scrollView) + swipeRefresh.setOnRefreshListener { lifecycleScope.launch { reload() diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt index dd14d8e..01de1fc 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/NotificationsActivity.kt @@ -42,15 +42,17 @@ class NotificationsActivity: BaseEuiccAccessActivity(), OpenEuiccContextMarker { setSupportActionBar(requireViewById(R.id.toolbar)) setupToolbarInsets() supportActionBar!!.setDisplayHomeAsUpEnabled(true) + + swipeRefresh = requireViewById(R.id.swipe_refresh) + notificationList = requireViewById(R.id.recycler_view) + + setupRootViewInsets(notificationList) } override fun onInit() { euiccChannel = euiccChannelManager .findEuiccChannelBySlotBlocking(intent.getIntExtra("logicalSlotId", 0))!! - swipeRefresh = requireViewById(R.id.swipe_refresh) - notificationList = requireViewById(R.id.recycler_view) - notificationList.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) notificationList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL)) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt index d471efa..841b8bd 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/SettingsFragment.kt +++ b/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.net.Uri import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup import androidx.datastore.preferences.core.Preferences import androidx.lifecycle.lifecycleScope import androidx.preference.CheckBoxPreference @@ -46,6 +49,14 @@ class SettingsFragment: PreferenceFragmentCompat() { ?.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, key: Preferences.Key) { lifecycleScope.launch { flow.collect { isChecked = it } diff --git a/app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt b/app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt index 6aa62c2..b54b494 100644 --- a/app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt +++ b/app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt @@ -52,7 +52,20 @@ fun AppCompatActivity.setupToolbarInsets() { height = v.top } - android.util.Log.d("aaa", "${(v as Toolbar).minimumHeight}") 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 + } +} \ No newline at end of file diff --git a/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt b/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt index 5ff7b65..06b46df 100644 --- a/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt +++ b/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt @@ -26,7 +26,7 @@ class CompatibilityCheckActivity: AppCompatActivity() { enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_compatibility_check) - setSupportActionBar(requireViewById(R.id.toolbar)) + setSupportActionBar(requireViewById(im.angry.openeuicc.common.R.id.toolbar)) setupToolbarInsets() supportActionBar!!.setDisplayHomeAsUpEnabled(true) @@ -35,6 +35,8 @@ class CompatibilityCheckActivity: AppCompatActivity() { LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) compatibilityCheckList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL)) compatibilityCheckList.adapter = adapter + + setupRootViewInsets(compatibilityCheckList) } override fun onStart() {