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

Commit 7226caf4 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Ensure that NotificationStackAppearanceViewBinder updates happen synchronously on the main thread

Note: this doesn't fully fix the frame delay for scroll position updates, but is required.

Bug: 325467496
Test: atest SystemUITests
Flag: ACONFIG com.android.systemui.scene_container DEVELOPMENT
Change-Id: Ieebf0ee27a090f3bf11a2f0355f1b384d3746c6e
parent dd8353a6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ constructor(
    notificationStackAppearanceViewModel: NotificationStackAppearanceViewModel,
    ambientState: AmbientState,
    notificationStackSizeCalculator: NotificationStackSizeCalculator,
    @Main private val mainDispatcher: CoroutineDispatcher,
    @Main private val mainImmediateDispatcher: CoroutineDispatcher,
) {

    init {
@@ -80,7 +80,7 @@ constructor(
            sceneContainerFlags,
            controller,
            notificationStackSizeCalculator,
            mainDispatcher,
            mainImmediateDispatcher = mainImmediateDispatcher,
        )

        if (sceneContainerFlags.flexiNotifsEnabled()) {
@@ -90,6 +90,7 @@ constructor(
                notificationStackAppearanceViewModel,
                ambientState,
                controller,
                mainImmediateDispatcher = mainImmediateDispatcher,
            )
        }
    }
+2 −1
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ constructor(
                sceneContainerFlags,
                controller,
                notificationStackSizeCalculator,
                mainDispatcher,
                mainImmediateDispatcher = mainDispatcher,
            )
        )

@@ -123,6 +123,7 @@ constructor(
                    notificationStackAppearanceViewModel,
                    ambientState,
                    controller,
                    mainImmediateDispatcher = mainDispatcher,
                )
            )
        }
+4 −1
Original line number Diff line number Diff line
@@ -20,12 +20,14 @@ import android.content.Context
import android.util.TypedValue
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.repeatOnLifecycle
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.statusbar.notification.stack.AmbientState
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController
import com.android.systemui.statusbar.notification.stack.ui.view.SharedNotificationContainer
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationStackAppearanceViewModel
import kotlin.math.roundToInt
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.launch

@@ -40,8 +42,9 @@ object NotificationStackAppearanceViewBinder {
        viewModel: NotificationStackAppearanceViewModel,
        ambientState: AmbientState,
        controller: NotificationStackScrollLayoutController,
        @Main mainImmediateDispatcher: CoroutineDispatcher,
    ): DisposableHandle {
        return view.repeatWhenAttached {
        return view.repeatWhenAttached(mainImmediateDispatcher) {
            repeatOnLifecycle(Lifecycle.State.CREATED) {
                launch {
                    viewModel.stackBounds.collect { bounds ->