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

Commit 19543611 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Optimize sysuiResTag" into main

parents 0057771f 12ccfca8
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -25,12 +25,20 @@ import androidx.compose.ui.semantics.testTagsAsResourceId
/**
 * Set a test tag on this node so that it is associated with [resId]. This node will then be
 * accessible by integration tests using `sysuiResSelector(resId)`.
 *
 * Important: This modifier will work only when contained under a [sysUiResTagContainer].
 *
 * @see sysUiResTagContainer
 */
@Stable
fun Modifier.sysuiResTag(resId: String): Modifier {
    // TODO(b/372412931): Only compose the semantics modifier once, at the root of the SystemUI
    // window.
    return this.then(TestTagAsResourceIdModifier).testTag("com.android.systemui:id/$resId")
    return this.testTag("com.android.systemui:id/$resId")
}

/** Mark this node as a container that contains one or more [sysuiResTag] descendants. */
@Stable
fun Modifier.sysUiResTagContainer(): Modifier {
    return this.then(TestTagAsResourceIdModifier)
}

private val TestTagAsResourceIdModifier = Modifier.semantics { testTagsAsResourceId = true }
+2 −2
Original line number Diff line number Diff line
@@ -204,7 +204,7 @@ fun SceneContainer(

    Box(
        modifier =
            Modifier.fillMaxSize().pointerInput(Unit) {
            modifier.fillMaxSize().pointerInput(Unit) {
                awaitEachGesture {
                    awaitFirstDown(false)
                    viewModel.onSceneContainerUserInputStarted()
@@ -219,7 +219,7 @@ fun SceneContainer(

        SceneTransitionLayout(
            state = state,
            modifier = modifier.fillMaxSize(),
            modifier = Modifier.fillMaxSize(),
            swipeSourceDetector = viewModel.swipeSourceDetector,
        ) {
            sceneByKey.forEach { (sceneKey, scene) ->
+9 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import android.view.ViewGroup
import androidx.activity.OnBackPressedDispatcher
import androidx.activity.OnBackPressedDispatcherOwner
import androidx.activity.setViewTreeOnBackPressedDispatcherOwner
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.lifecycle.Lifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
@@ -12,6 +13,7 @@ import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.composable.BouncerContainer
import com.android.systemui.bouncer.ui.viewmodel.BouncerContainerViewModel
import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.compose.modifiers.sysUiResTagContainer
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.lifecycle.WindowLifecycleState
import com.android.systemui.lifecycle.repeatWhenAttached
@@ -81,7 +83,13 @@ object ComposeBouncerViewBinder {

                    view.addView(
                        ComposeView(view.context).apply {
                            setContent { BouncerContainer(viewModelFactory, dialogFactory) }
                            setContent {
                                BouncerContainer(
                                    viewModelFactory,
                                    dialogFactory,
                                    Modifier.sysUiResTagContainer(),
                                )
                            }
                        }
                    )
                    awaitCancellation()
+2 −1
Original line number Diff line number Diff line
@@ -33,12 +33,13 @@ import com.android.systemui.lifecycle.rememberViewModel
fun BouncerContainer(
    viewModelFactory: BouncerOverlayContentViewModel.Factory,
    dialogFactory: BouncerDialogFactory,
    modifier: Modifier = Modifier,
) {
    PlatformTheme {
        val backgroundColor = MaterialTheme.colorScheme.surface

        val bouncerViewModel = rememberViewModel("BouncerContainer") { viewModelFactory.create() }
        Box {
        Box(modifier) {
            Canvas(Modifier.fillMaxSize()) { drawRect(color = backgroundColor) }

            // Separate the bouncer content into a reusable composable that doesn't have any
+11 −1
Original line number Diff line number Diff line
@@ -22,12 +22,14 @@ import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.ui.Modifier
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.android.app.tracing.coroutines.launchTraced as launch
import com.android.compose.theme.PlatformTheme
import com.android.systemui.compose.modifiers.sysUiResTagContainer
import com.android.systemui.people.ui.compose.PeopleScreen
import com.android.systemui.people.ui.viewmodel.PeopleViewModel
import javax.inject.Inject
@@ -62,7 +64,15 @@ constructor(private val viewModelFactory: PeopleViewModel.Factory) : ComponentAc
        }

        // Set the content of the activity, using either the View or Compose implementation.
        setContent { PlatformTheme { PeopleScreen(viewModel, onResult = { finishActivity(it) }) } }
        setContent {
            PlatformTheme {
                PeopleScreen(
                    viewModel,
                    onResult = { finishActivity(it) },
                    Modifier.sysUiResTagContainer(),
                )
            }
        }
    }

    private fun finishActivity(result: PeopleViewModel.Result) {
Loading