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

Commit c2ece8d4 authored by Kshitij Gupta's avatar Kshitij Gupta
Browse files

ModesDndTile: Drop usages of runBlocking

- This CL refactors ModesDndTile to drop use of runBlocking.
  Previously, runBlocking was used to call userActionInteractor's
  handleClick() method which could take up time and block the main
  thread.
- We now do this asynchronously via lifecycleScope. While
  lifecycleScope also uses the main thread internally, we do not block
  the main thread anymore. Additionally, the life of this coroutine is
  managed by the lifecycle of the Tile.

Bug: 423462317
Flag: com.android.systemui.do_not_use_run_blocking
Test: atest ModesDndTileTest
Change-Id: I317e6d4c82e0f62296a00b7ca965bf051e248beb
parent 4ae82493
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -24233,7 +24233,7 @@
        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
        <location
            file="frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/ModesDndTile.kt"
            line="28"
            line="29"
            column="1"/>
    </issue>
+19 −3
Original line number Diff line number Diff line
@@ -17,13 +17,15 @@
package com.android.systemui.qs.tiles

import android.os.Handler
import android.platform.test.flag.junit.FlagsParameterization
import android.platform.test.flag.junit.FlagsParameterization.allCombinationsOf
import android.service.quicksettings.Tile
import android.testing.TestableLooper
import android.testing.TestableLooper.RunWithLooper
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.logging.MetricsLogger
import com.android.settingslib.notification.modes.TestModeBuilder
import com.android.systemui.Flags.FLAG_DO_NOT_USE_RUN_BLOCKING
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.FalsingManagerFake
import com.android.systemui.kosmos.mainCoroutineContext
@@ -63,11 +65,13 @@ import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.whenever
import platform.test.runner.parameterized.ParameterizedAndroidJunit4
import platform.test.runner.parameterized.Parameters

@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWith(ParameterizedAndroidJunit4::class)
@RunWithLooper(setAsMainLooper = true)
class ModesDndTileTest : SysuiTestCase() {
class ModesDndTileTest(flags: FlagsParameterization) : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
    private val testDispatcher = kosmos.testDispatcher
@@ -90,6 +94,18 @@ class ModesDndTileTest : SysuiTestCase() {

    @Mock private lateinit var settingsPackageRepository: QSSettingsPackageRepository

    init {
        mSetFlagsRule.setFlagsParameterization(flags)
    }

    companion object {
        @JvmStatic
        @Parameters(name = "{0}")
        fun getParams(): List<FlagsParameterization> {
            return allCombinationsOf(FLAG_DO_NOT_USE_RUN_BLOCKING)
        }
    }

    private val inputHandler = FakeQSTileIntentUserInputHandler()
    private val zenModeRepository = kosmos.zenModeRepository
    private val tileDataInteractor =
+12 −2
Original line number Diff line number Diff line
@@ -23,10 +23,12 @@ import androidx.annotation.DrawableRes
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.coroutineScope
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.app.tracing.coroutines.runBlockingTraced as runBlocking
import com.android.internal.logging.MetricsLogger
import com.android.systemui.Flags
import com.android.systemui.animation.Expandable
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -104,9 +106,17 @@ constructor(

    override fun newTileState(): BooleanState = BooleanState()

    override fun handleClick(expandable: Expandable?) = runBlocking {
    override fun handleClick(expandable: Expandable?) {
        if (Flags.doNotUseRunBlocking()) {
            lifecycleScope.launch {
                userActionInteractor.handleClick()
            }
        } else {
            runBlocking {
                userActionInteractor.handleClick()
            }
        }
    }

    override fun getLongClickIntent(): Intent? = userActionInteractor.getSettingsIntent()