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

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

Merge "Reload statusbar icons correctly per-display" into main

parents 7620c1a5 fcddac76
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.never
import org.mockito.kotlin.verify

@@ -53,6 +54,8 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {
    private val fakeInitializerStore = kosmos.fakeStatusBarInitializerStore
    private val fakePrivacyDotStore = kosmos.fakePrivacyDotWindowControllerStore
    private val fakeLightBarStore = kosmos.fakeLightBarControllerStore
    private val fakeStatusBarIconRefreshPerDisplayRepository =
        kosmos.statusBarIconRefreshPerDisplayRepository

    // Lazy, so that @EnableFlags is set before initializer is instantiated.
    private val underTest by lazy { kosmos.multiDisplayStatusBarStarter }
@@ -89,12 +92,17 @@ class MultiDisplayStatusBarStarterTest : SysuiTestCase() {
    @Test
    fun start_triggerAddDisplaySystemDecoration_startsOrchestratorForDisplay() =
        testScope.runTest {
            fakeStatusBarIconRefreshPerDisplayRepository.add(DISPLAY_2, mock())

            underTest.start()
            runCurrent()

            assertThat(fakeStatusBarIconRefreshPerDisplayRepository[DISPLAY_2]).isNotNull()
            fakeDisplayRepository.triggerAddDisplaySystemDecorationEvent(
                displayId = DEFAULT_DISPLAY
            )
            fakeDisplayRepository.addDisplay(DISPLAY_2)
            runCurrent()
            fakeDisplayRepository.triggerAddDisplaySystemDecorationEvent(displayId = DISPLAY_2)
            runCurrent()

+23 −0
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ import com.android.systemui.statusbar.data.model.StatusBarMode.LIGHTS_OUT_TRANSP
import com.android.systemui.statusbar.data.model.StatusBarMode.OPAQUE
import com.android.systemui.statusbar.data.model.StatusBarMode.TRANSPARENT
import com.android.systemui.statusbar.data.repository.fakeStatusBarModePerDisplayRepository
import com.android.systemui.statusbar.phone.ui.statusBarIconController
import com.android.systemui.statusbar.policy.fakeConfigurationController
import com.android.systemui.statusbar.window.data.repository.fakeStatusBarWindowStatePerDisplayRepository
import com.android.systemui.statusbar.window.fakeStatusBarWindowController
import com.android.systemui.statusbar.window.shared.model.StatusBarWindowState
@@ -48,6 +50,7 @@ import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.any
import org.mockito.kotlin.never
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
@@ -72,6 +75,7 @@ class StatusBarOrchestratorTest : SysuiTestCase() {
    private val fakeStatusBarWindowController = kosmos.fakeStatusBarWindowController
    private val fakeStatusBarInitializer = kosmos.fakeStatusBarInitializer
    private val dumpManager = kosmos.dumpManager
    private val statusBarIconRefreshInteractor = kosmos.statusBarIconRefreshInteractor

    private val orchestrator = kosmos.statusBarOrchestrator

@@ -302,6 +306,25 @@ class StatusBarOrchestratorTest : SysuiTestCase() {
        verify(dumpManager).unregisterDumpable("StatusBarOrchestrator")
    }

    @Test
    fun start_densityChange_IconRefresh() {
        orchestrator.start()

        kosmos.fakeConfigurationController.notifyDensityOrFontScaleChanged()

        verify(kosmos.statusBarIconController).refreshIconGroups(any())
    }

    @Test
    fun stop_densityChange_noIconRefresh() {
        orchestrator.start()
        orchestrator.stop()

        kosmos.fakeConfigurationController.notifyDensityOrFontScaleChanged()

        verify(kosmos.statusBarIconController, never()).refreshIconGroups(any())
    }

    private fun putDeviceToSleep() {
        fakePowerRepository.updateWakefulness(
            rawState = WakefulnessState.ASLEEP,
+60 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.domain.interactor

import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.statusbar.core.statusBarIconRefreshInteractor
import com.android.systemui.statusbar.phone.ui.statusBarIconController
import com.android.systemui.statusbar.policy.fakeConfigurationController
import com.android.systemui.testKosmos
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.verify
import org.mockito.kotlin.any
import org.mockito.kotlin.never

@SmallTest
@RunWith(AndroidJUnit4::class)
class StatusBarIconRefreshInteractorTest : SysuiTestCase() {

    private val kosmos = testKosmos()

    private val fakeConfigurationController = kosmos.fakeConfigurationController
    private val mockIconController = kosmos.statusBarIconController
    private val underTest = kosmos.statusBarIconRefreshInteractor

    @Test
    fun start_propagatesConfigChanges() {
        underTest.start()

        fakeConfigurationController.notifyDensityOrFontScaleChanged()

        verify(mockIconController).refreshIconGroups(any())
    }

    @Test
    fun stop_doesNotPropagatesConfigChanges() {
        underTest.start()
        underTest.stop()

        fakeConfigurationController.notifyDensityOrFontScaleChanged()

        verify(mockIconController, never()).refreshIconGroups(any())
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -83,5 +83,7 @@ interface PerDisplayCommonModule {
                backgroundDispatcher + newTracingContext("DisplayScope(id=$displayId)")
            )
        }

        @Provides @DisplayAware fun provideDisplayId(@DisplayId displayId: Int): Int = displayId
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.systemui.display.dagger
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.data.repository.DisplayStateRepository
import com.android.systemui.display.domain.interactor.DisplayStateInteractor
import com.android.systemui.statusbar.dagger.StatusBarPerDisplayModule
import com.android.systemui.statusbar.domain.interactor.StatusBarIconRefreshInteractor
import dagger.BindsInstance
import dagger.Subcomponent
import javax.inject.Qualifier
@@ -35,7 +37,7 @@ import kotlinx.coroutines.CoroutineScope
 * thread is not feasible as it would cause jank.
 */
@PerDisplaySingleton
@Subcomponent(modules = [PerDisplayCommonModule::class])
@Subcomponent(modules = [PerDisplayCommonModule::class, StatusBarPerDisplayModule::class])
interface SystemUIDisplaySubcomponent {

    @get:DisplayAware val displayCoroutineScope: CoroutineScope
@@ -44,6 +46,8 @@ interface SystemUIDisplaySubcomponent {

    @get:DisplayAware val displayStateInteractor: DisplayStateInteractor

    @get:DisplayAware val statusBarIconRefreshInteractor: StatusBarIconRefreshInteractor

    @Subcomponent.Factory
    interface Factory {
        fun create(@BindsInstance @DisplayId displayId: Int): SystemUIDisplaySubcomponent
@@ -63,6 +67,7 @@ interface SystemUIDisplaySubcomponent {

    /**
     * Annotates the displaylib implementation of a class.
     *
     * TODO(b/408503553): Remove this annotation once the flag is cleaned up.
     */
    @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class DisplayLib
Loading