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

Commit d19b0e07 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Roll back to use bacground executor

Using dispatchers delays the registering of callback. This leads to some
issues with showing the seekbar on binding. Rolling back to executor
till we find out a solution.

Flag: ACONFIG com.android.systemui.media_controls_refactor DISABLED
Bug: 328207006
Test: atest SeekBarViewModelTest
Change-Id: I5678f4f9b821c80e12d4ec6274f32b913104f771
parent 56b251e4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import com.android.systemui.statusbar.notification.collection.provider.VisualSta
import com.android.systemui.util.Utils
import com.android.systemui.util.kotlin.pairwiseBy
import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import java.util.concurrent.Executor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
@@ -50,6 +51,7 @@ constructor(
    @Application private val applicationScope: CoroutineScope,
    @Application private val applicationContext: Context,
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @Background private val backgroundExecutor: Executor,
    private val visualStabilityProvider: VisualStabilityProvider,
    private val interactor: MediaCarouselInteractor,
    private val controlInteractorFactory: MediaControlInteractorFactory,
@@ -142,9 +144,9 @@ constructor(

    private fun createMediaControlViewModel(instanceId: InstanceId): MediaControlViewModel {
        return MediaControlViewModel(
            applicationScope = applicationScope,
            applicationContext = applicationContext,
            backgroundDispatcher = backgroundDispatcher,
            backgroundExecutor = backgroundExecutor,
            interactor = controlInteractorFactory.create(instanceId),
            logger = logger,
        )
+6 −10
Original line number Diff line number Diff line
@@ -41,8 +41,8 @@ import com.android.systemui.monet.ColorScheme
import com.android.systemui.monet.Style
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.sample
import java.util.concurrent.Executor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -50,14 +50,12 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

/** Models UI state and handles user input for a media control. */
class MediaControlViewModel(
    @Application private val applicationScope: CoroutineScope,
    @Application private val applicationContext: Context,
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @Background private val backgroundExecutor: Executor,
    private val interactor: MediaControlInteractor,
    private val logger: MediaUiEventLogger,
) {
@@ -169,15 +167,13 @@ class MediaControlViewModel(
                if (model.isResume && model.resumeProgress != null) {
                    seekBarViewModel.updateStaticProgress(model.resumeProgress)
                } else {
                    applicationScope.launch {
                        withContext(backgroundDispatcher) {
                    backgroundExecutor.execute {
                        seekBarViewModel.updateController(
                            model.token?.let { MediaController(applicationContext, it) }
                        )
                    }
                }
            }
            }
        )
    }

+3 −23
Original line number Diff line number Diff line
@@ -33,19 +33,12 @@ import androidx.core.view.GestureDetectorCompat
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.android.systemui.classifier.Classifier.MEDIA_SEEKBAR
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.controls.util.MediaFlags
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.statusbar.NotificationMediaManager
import com.android.systemui.util.concurrency.RepeatableExecutor
import javax.inject.Inject
import kotlin.math.abs
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L
private const val MIN_FLING_VELOCITY_SCALE_FACTOR = 10
@@ -88,11 +81,8 @@ private fun PlaybackState.computePosition(duration: Long): Long {
class SeekBarViewModel
@Inject
constructor(
    @Application private val applicationScope: CoroutineScope,
    @Main private val mainDispatcher: CoroutineDispatcher,
    @Background private val bgExecutor: RepeatableExecutor,
    private val falsingManager: FalsingManager,
    private val mediaFlags: MediaFlags,
) {
    private var _data =
        Progress(
@@ -118,19 +108,9 @@ constructor(
    private var controller: MediaController? = null
        set(value) {
            if (field?.sessionToken != value?.sessionToken) {
                if (!mediaFlags.isMediaControlsRefactorEnabled()) {
                field?.unregisterCallback(callback)
                value?.registerCallback(callback)
                field = value
                } else {
                    applicationScope.launch {
                        withContext(mainDispatcher) {
                            field?.unregisterCallback(callback)
                            value?.registerCallback(callback)
                            field = value
                        }
                    }
                }
            }
        }
    private var playbackState: PlaybackState? = null
+1 −16
Original line number Diff line number Diff line
@@ -29,12 +29,7 @@ import androidx.arch.core.executor.TaskExecutor
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.classifier.Classifier
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.media.controls.util.MediaFlags
import com.android.systemui.media.controls.util.mediaFlags
import com.android.systemui.plugins.FalsingManager
import com.android.systemui.testKosmos
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.concurrency.FakeRepeatableExecutor
import com.android.systemui.util.time.FakeSystemClock
@@ -61,7 +56,6 @@ import org.mockito.junit.MockitoJUnit
@RunWith(AndroidTestingRunner::class)
@TestableLooper.RunWithLooper(setAsMainLooper = true)
public class SeekBarViewModelTest : SysuiTestCase() {
    val kosmos = testKosmos()

    private lateinit var viewModel: SeekBarViewModel
    private lateinit var fakeExecutor: FakeExecutor
@@ -81,7 +75,6 @@ public class SeekBarViewModelTest : SysuiTestCase() {
    @Mock private lateinit var mockTransport: MediaController.TransportControls
    @Mock private lateinit var falsingManager: FalsingManager
    @Mock private lateinit var mockBar: SeekBar
    @Mock private lateinit var mediaFlags: MediaFlags
    private val token1 = MediaSession.Token(1, null)
    private val token2 = MediaSession.Token(2, null)

@@ -90,18 +83,10 @@ public class SeekBarViewModelTest : SysuiTestCase() {
    @Before
    fun setUp() {
        fakeExecutor = FakeExecutor(FakeSystemClock())
        viewModel =
            SeekBarViewModel(
                kosmos.applicationCoroutineScope,
                kosmos.testDispatcher,
                FakeRepeatableExecutor(fakeExecutor),
                falsingManager,
                mediaFlags,
            )
        viewModel = SeekBarViewModel(FakeRepeatableExecutor(fakeExecutor), falsingManager)
        viewModel.logSeek = {}
        whenever(mockController.sessionToken).thenReturn(token1)
        whenever(mockBar.context).thenReturn(context)
        whenever(mediaFlags.isMediaControlsRefactorEnabled()).thenReturn(false)

        // LiveData to run synchronously
        ArchTaskExecutor.getInstance().setDelegate(taskExecutor)
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.media.controls.ui.viewmodel

import android.content.applicationContext
import com.android.systemui.concurrency.fakeExecutor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
@@ -32,6 +33,7 @@ val Kosmos.mediaCarouselViewModel by
            applicationScope = applicationCoroutineScope,
            applicationContext = applicationContext,
            backgroundDispatcher = testDispatcher,
            backgroundExecutor = fakeExecutor,
            visualStabilityProvider = visualStabilityProvider,
            interactor = mediaCarouselInteractor,
            controlInteractorFactory = mediaControlInteractorFactory,
Loading