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

Commit 7baba0f1 authored by Fabián Kozynski's avatar Fabián Kozynski
Browse files

Add logs for Brightness changes

Also, use a StateFlow in the ViewModel so the last value of the brightness is
kept when there are no subscribers.

Fixes: 331199596
Fixes: 339262873
Test: dump and bugreport
Flag: com.android.systemui.qs_ui_refactor
Change-Id: Ie7198cef8e93e6aed064956a10ac2d22b98e4daf
parent 6a9bfe6f
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -25,15 +25,18 @@ import android.view.Display
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.brightness.data.model.LinearBrightness
import com.android.systemui.brightness.shared.model.LinearBrightness
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.core.FakeLogBuffer
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -74,6 +77,8 @@ class ScreenBrightnessDisplayManagerRepositoryTest : SysuiTestCase() {
            ScreenBrightnessDisplayManagerRepository(
                displayId,
                displayManager,
                FakeLogBuffer.Factory.create(),
                mock<TableLogBuffer>(),
                kosmos.applicationCoroutineScope,
                kosmos.testDispatcher,
            )
+13 −3
Original line number Diff line number Diff line
@@ -20,13 +20,16 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.settingslib.display.BrightnessUtils
import com.android.systemui.SysuiTestCase
import com.android.systemui.brightness.data.model.LinearBrightness
import com.android.systemui.brightness.data.repository.fakeScreenBrightnessRepository
import com.android.systemui.brightness.data.repository.screenBrightnessRepository
import com.android.systemui.brightness.shared.GammaBrightness
import com.android.systemui.brightness.shared.model.GammaBrightness
import com.android.systemui.brightness.shared.model.LinearBrightness
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.mock
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runCurrent
@@ -41,7 +44,14 @@ class ScreenBrightnessInteractorTest : SysuiTestCase() {

    private val kosmos = testKosmos()

    private val underTest = ScreenBrightnessInteractor(kosmos.screenBrightnessRepository)
    private val underTest =
        with(kosmos) {
            ScreenBrightnessInteractor(
                screenBrightnessRepository,
                applicationCoroutineScope,
                mock<TableLogBuffer>()
            )
        }

    @Test
    fun gammaBrightness() =
+4 −2
Original line number Diff line number Diff line
@@ -20,15 +20,16 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.settingslib.display.BrightnessUtils
import com.android.systemui.SysuiTestCase
import com.android.systemui.brightness.data.model.LinearBrightness
import com.android.systemui.brightness.data.repository.fakeScreenBrightnessRepository
import com.android.systemui.brightness.domain.interactor.brightnessPolicyEnforcementInteractor
import com.android.systemui.brightness.domain.interactor.screenBrightnessInteractor
import com.android.systemui.brightness.shared.GammaBrightness
import com.android.systemui.brightness.shared.model.GammaBrightness
import com.android.systemui.brightness.shared.model.LinearBrightness
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.common.shared.model.Text
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.res.R
import com.android.systemui.testKosmos
@@ -52,6 +53,7 @@ class BrightnessSliderViewModelTest : SysuiTestCase() {
            BrightnessSliderViewModel(
                screenBrightnessInteractor,
                brightnessPolicyEnforcementInteractor,
                applicationCoroutineScope,
            )
        }

+23 −0
Original line number Diff line number Diff line
@@ -20,8 +20,15 @@ import com.android.systemui.brightness.data.repository.BrightnessPolicyRepositor
import com.android.systemui.brightness.data.repository.BrightnessPolicyRepositoryImpl
import com.android.systemui.brightness.data.repository.ScreenBrightnessDisplayManagerRepository
import com.android.systemui.brightness.data.repository.ScreenBrightnessRepository
import com.android.systemui.brightness.shared.model.BrightnessLog
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogBufferFactory
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.TableLogBufferFactory
import dagger.Binds
import dagger.Module
import dagger.Provides

@Module
interface ScreenBrightnessModule {
@@ -33,4 +40,20 @@ interface ScreenBrightnessModule {

    @Binds
    fun bindPolicyRepository(impl: BrightnessPolicyRepositoryImpl): BrightnessPolicyRepository

    companion object {
        @Provides
        @SysUISingleton
        @BrightnessLog
        fun providesBrightnessTableLog(factory: TableLogBufferFactory): TableLogBuffer {
            return factory.create("BrightnessTableLog", 50)
        }

        @Provides
        @SysUISingleton
        @BrightnessLog
        fun providesBrightnessLog(factory: LogBufferFactory): LogBuffer {
            return factory.create("BrightnessLog", 50)
        }
    }
}
+35 −6
Original line number Diff line number Diff line
@@ -19,12 +19,18 @@ package com.android.systemui.brightness.data.repository
import android.annotation.SuppressLint
import android.hardware.display.BrightnessInfo
import android.hardware.display.DisplayManager
import com.android.systemui.brightness.data.model.LinearBrightness
import com.android.systemui.brightness.shared.model.BrightnessLog
import com.android.systemui.brightness.shared.model.LinearBrightness
import com.android.systemui.brightness.shared.model.formatBrightness
import com.android.systemui.brightness.shared.model.logDiffForTable
import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.DisplayId
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.table.TableLogBuffer
import javax.inject.Inject
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
@@ -32,13 +38,13 @@ import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.Channel.Factory.UNLIMITED
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -78,6 +84,8 @@ class ScreenBrightnessDisplayManagerRepository
constructor(
    @DisplayId private val displayId: Int,
    private val displayManager: DisplayManager,
    @BrightnessLog private val logBuffer: LogBuffer,
    @BrightnessLog private val tableBuffer: TableLogBuffer,
    @Application private val applicationScope: CoroutineScope,
    @Background private val backgroundContext: CoroutineContext,
) : ScreenBrightnessRepository {
@@ -100,6 +108,7 @@ constructor(
                        displayManager.setBrightness(displayId, value)
                    }
                }
                logBrightnessChange(call is SetBrightnessMethod.Permanent, value)
            }
        }
    }
@@ -147,13 +156,15 @@ constructor(
        brightnessInfo
            .filterNotNull()
            .map { LinearBrightness(it.brightnessMinimum) }
            .shareIn(applicationScope, SharingStarted.WhileSubscribed())
            .logDiffForTable(tableBuffer, TABLE_PREFIX_LINEAR, TABLE_COLUMN_MIN, null)
            .stateIn(applicationScope, SharingStarted.WhileSubscribed(), LinearBrightness(0f))

    override val maxLinearBrightness =
    override val maxLinearBrightness: SharedFlow<LinearBrightness> =
        brightnessInfo
            .filterNotNull()
            .map { LinearBrightness(it.brightnessMaximum) }
            .shareIn(applicationScope, SharingStarted.WhileSubscribed())
            .logDiffForTable(tableBuffer, TABLE_PREFIX_LINEAR, TABLE_COLUMN_MAX, null)
            .stateIn(applicationScope, SharingStarted.WhileSubscribed(), LinearBrightness(1f))

    override suspend fun getMinMaxLinearBrightness(): Pair<LinearBrightness, LinearBrightness> {
        val brightnessInfo = brightnessInfo.value ?: brightnessInfoValue()
@@ -166,7 +177,8 @@ constructor(
        brightnessInfo
            .filterNotNull()
            .map { LinearBrightness(it.brightness) }
            .shareIn(applicationScope, SharingStarted.WhileSubscribed())
            .logDiffForTable(tableBuffer, TABLE_PREFIX_LINEAR, TABLE_COLUMN_BRIGHTNESS, null)
            .stateIn(applicationScope, SharingStarted.WhileSubscribed(), LinearBrightness(0f))

    override fun setTemporaryBrightness(value: LinearBrightness) {
        apiQueue.trySend(SetBrightnessMethod.Temporary(value))
@@ -183,4 +195,21 @@ constructor(
        @JvmInline
        value class Permanent(override val value: LinearBrightness) : SetBrightnessMethod
    }

    private fun logBrightnessChange(permanent: Boolean, value: Float) {
        logBuffer.log(
            LOG_BUFFER_BRIGHTNESS_CHANGE_TAG,
            if (permanent) LogLevel.DEBUG else LogLevel.VERBOSE,
            { str1 = value.formatBrightness() },
            { "Change requested: $str1" }
        )
    }

    private companion object {
        const val TABLE_COLUMN_BRIGHTNESS = "brightness"
        const val TABLE_COLUMN_MIN = "min"
        const val TABLE_COLUMN_MAX = "max"
        const val TABLE_PREFIX_LINEAR = "linear"
        const val LOG_BUFFER_BRIGHTNESS_CHANGE_TAG = "BrightnessChange"
    }
}
Loading