Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76ef63ef authored by Peter Cai's avatar Peter Cai
Browse files

refactor: Only handle window inset events in the main view hierarchy

...so that this isn't completely broken by some versions of Android with
the broken dispatch behavior.
parent b7fc164a
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -24,11 +24,12 @@ import im.angry.openeuicc.core.EuiccChannel
import im.angry.openeuicc.core.EuiccChannelManager
import im.angry.openeuicc.util.EUICC_DEFAULT_ISDR_AID
import im.angry.openeuicc.util.OpenEuiccContextMarker
import im.angry.openeuicc.util.activityToolbarInsetHandler
import im.angry.openeuicc.util.decodeHex
import im.angry.openeuicc.util.encodeHex
import im.angry.openeuicc.util.formatFreeSpace
import im.angry.openeuicc.util.setupRootViewInsets
import im.angry.openeuicc.util.setupToolbarInsets
import im.angry.openeuicc.util.mainViewPaddingInsetHandler
import im.angry.openeuicc.util.setupRootViewSystemBarInsets
import im.angry.openeuicc.util.tryParseEuiccVendorInfo
import kotlinx.coroutines.launch
import net.typeblog.lpac_jni.impl.PKID_GSMA_LIVE_CI
@@ -64,7 +65,6 @@ class EuiccInfoActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_euicc_info)
        setSupportActionBar(requireViewById(R.id.toolbar))
        setupToolbarInsets()
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        swipeRefresh = requireViewById(R.id.swipe_refresh)
@@ -92,7 +92,10 @@ class EuiccInfoActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {

        swipeRefresh.setOnRefreshListener { refresh() }

        setupRootViewInsets(infoList)
        setupRootViewSystemBarInsets(window.decorView.rootView, arrayOf(
            this::activityToolbarInsetHandler,
            mainViewPaddingInsetHandler(infoList)
        ))
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
+11 −13
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@ 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.isVisible
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment
@@ -43,11 +41,12 @@ import im.angry.openeuicc.util.euiccChannelManager
import im.angry.openeuicc.util.euiccChannelManagerService
import im.angry.openeuicc.util.isEnabled
import im.angry.openeuicc.util.isUsb
import im.angry.openeuicc.util.mainViewPaddingInsetHandler
import im.angry.openeuicc.util.newInstanceEuicc
import im.angry.openeuicc.util.operational
import im.angry.openeuicc.util.portId
import im.angry.openeuicc.util.seId
import im.angry.openeuicc.util.setupRootViewInsets
import im.angry.openeuicc.util.setupRootViewSystemBarInsets
import im.angry.openeuicc.util.slotId
import im.angry.openeuicc.util.withEuiccChannel
import kotlinx.coroutines.Dispatchers
@@ -108,18 +107,17 @@ open class EuiccManagementFragment : Fragment(), EuiccProfilesChangedListener,

        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
        setupRootViewSystemBarInsets(
            view, arrayOf(
            mainViewPaddingInsetHandler(profileList),
            { insets ->
                fab.updateLayoutParams<ViewGroup.MarginLayoutParams> {
                    rightMargin = origFabMarginRight + insets.right
                    bottomMargin = origFabMarginBottom + insets.bottom
                }

            WindowInsetsCompat.CONSUMED
            }

        setupRootViewInsets(profileList)
        ))

        return view
    }
+11 −3
Original line number Diff line number Diff line
@@ -10,8 +10,10 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import im.angry.openeuicc.common.R
import im.angry.openeuicc.util.activityToolbarInsetHandler
import im.angry.openeuicc.util.mainViewPaddingInsetHandler
import im.angry.openeuicc.util.preferenceRepository
import im.angry.openeuicc.util.setupToolbarInsets
import im.angry.openeuicc.util.setupRootViewSystemBarInsets
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -24,11 +26,17 @@ class IsdrAidListActivity : AppCompatActivity() {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_isdr_aid_list)
        setSupportActionBar(requireViewById(R.id.toolbar))
        setupToolbarInsets()
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        isdrAidListEditor = requireViewById(R.id.isdr_aid_list_editor)

        setupRootViewSystemBarInsets(
            window.decorView.rootView, arrayOf(
                this::activityToolbarInsetHandler,
                mainViewPaddingInsetHandler(isdrAidListEditor)
            )
        )

        lifecycleScope.launch {
            preferenceRepository.isdrAidListFlow.onEach {
                isdrAidListEditor.text = Editable.Factory.getInstance().newEditable(it)
+9 −4
Original line number Diff line number Diff line
@@ -13,11 +13,12 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import im.angry.openeuicc.common.R
import im.angry.openeuicc.util.activityToolbarInsetHandler
import im.angry.openeuicc.util.mainViewPaddingInsetHandler
import im.angry.openeuicc.util.readSelfLog
import im.angry.openeuicc.util.selfAppVersion
import im.angry.openeuicc.util.setupLogSaving
import im.angry.openeuicc.util.setupRootViewInsets
import im.angry.openeuicc.util.setupToolbarInsets
import im.angry.openeuicc.util.setupRootViewSystemBarInsets
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -55,14 +56,18 @@ class LogsActivity : AppCompatActivity() {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_logs)
        setSupportActionBar(requireViewById(R.id.toolbar))
        setupToolbarInsets()
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)

        swipeRefresh = requireViewById(R.id.swipe_refresh)
        scrollView = requireViewById(R.id.scroll_view)
        logText = requireViewById(R.id.log_text)

        setupRootViewInsets(scrollView)
        setupRootViewSystemBarInsets(
            window.decorView.rootView, arrayOf(
                this::activityToolbarInsetHandler,
                mainViewPaddingInsetHandler(scrollView)
            )
        )

        swipeRefresh.setOnRefreshListener {
            lifecycleScope.launch {
+8 −2
Original line number Diff line number Diff line
@@ -29,7 +29,8 @@ import im.angry.openeuicc.common.R
import im.angry.openeuicc.core.EuiccChannelManager
import im.angry.openeuicc.ui.wizard.DownloadWizardActivity
import im.angry.openeuicc.util.OpenEuiccContextMarker
import im.angry.openeuicc.util.setupToolbarInsets
import im.angry.openeuicc.util.activityToolbarInsetHandler
import im.angry.openeuicc.util.setupRootViewSystemBarInsets
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.first
@@ -83,7 +84,6 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(requireViewById(R.id.toolbar))
        setupToolbarInsets()
        loadingProgress = requireViewById(R.id.loading)
        tabs = requireViewById(R.id.main_tabs)
        viewPager = requireViewById(R.id.view_pager)
@@ -99,6 +99,12 @@ open class MainActivity : BaseEuiccAccessActivity(), OpenEuiccContextMarker {
            addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
            addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
        })

        setupRootViewSystemBarInsets(
            window.decorView.rootView, arrayOf(
                this::activityToolbarInsetHandler
            ), consume = false
        )
    }

    override fun onDestroy() {
Loading