From 77d95e4d0247eabc6d41c57f6a6d82c7f46bc6bc Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 28 Sep 2024 10:44:29 -0400 Subject: [PATCH 1/3] Remove unused log --- app-common/src/main/java/im/angry/openeuicc/util/UiUtils.kt | 1 - 1 file changed, 1 deletion(-) 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..5810dff 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,6 @@ fun AppCompatActivity.setupToolbarInsets() { height = v.top } - android.util.Log.d("aaa", "${(v as Toolbar).minimumHeight}") WindowInsetsCompat.CONSUMED } } From dc70f7ca4626e02d53908489cc9de1283b180b99 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 28 Sep 2024 10:58:46 -0400 Subject: [PATCH 2/3] Fix toolbar id in app-unpriv --- .../java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..8ac43c1 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) From a6777d1d1780a157cc0d8e31bc5aad5bcc072d93 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 28 Sep 2024 11:05:18 -0400 Subject: [PATCH 3/3] Apply layout insets to more activities --- .../openeuicc/ui/EuiccManagementFragment.kt | 18 ++++++++++++++++++ .../java/im/angry/openeuicc/ui/LogsActivity.kt | 2 ++ .../openeuicc/ui/NotificationsActivity.kt | 8 +++++--- .../im/angry/openeuicc/ui/SettingsFragment.kt | 11 +++++++++++ .../java/im/angry/openeuicc/util/UiUtils.kt | 14 ++++++++++++++ .../openeuicc/ui/CompatibilityCheckActivity.kt | 2 ++ 6 files changed, 52 insertions(+), 3 deletions(-) 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 5810dff..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 @@ -55,3 +55,17 @@ fun AppCompatActivity.setupToolbarInsets() { 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 8ac43c1..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 @@ -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() {