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

Commit 8180a9f6 authored by Justin Weir's avatar Justin Weir
Browse files

Turn PanelExpansionInteractor into an interface

Flag: ACONFIG com.android.systemui.scene_container DEVELOPMENT
Test: Updated and ran affected test
Bug: 303267342
Change-Id: Ied8ebd0a85579a6cf4faf1de90675ae323b2a3dc
parent 2633c06a
Loading
Loading
Loading
Loading
+6 −37
Original line number Diff line number Diff line
@@ -16,24 +16,21 @@

@file:OptIn(ExperimentalCoroutinesApi::class)

package com.android.systemui.scene.domain.interactor
package com.android.systemui.shade.domain.interactor

import android.platform.test.annotations.DisableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.Flags.FLAG_SCENE_CONTAINER
import com.android.systemui.SysuiTestCase
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.domain.interactor.deviceUnlockedInteractor
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.fakeSceneDataSource
import com.android.systemui.shade.data.repository.fakeShadeRepository
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.panelExpansionInteractor
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -48,7 +45,7 @@ import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
class PanelExpansionInteractorTest : SysuiTestCase() {
class PanelExpansionInteractorImplTest : SysuiTestCase() {

    private val kosmos = testKosmos()
    private val testScope = kosmos.testScope
@@ -60,9 +57,8 @@ class PanelExpansionInteractorTest : SysuiTestCase() {
            ObservableTransitionState.Idle(Scenes.Lockscreen)
        )
    private val fakeSceneDataSource = kosmos.fakeSceneDataSource
    private val fakeShadeRepository = kosmos.fakeShadeRepository

    private lateinit var underTest: PanelExpansionInteractor
    private lateinit var underTest: PanelExpansionInteractorImpl

    @Before
    fun setUp() {
@@ -73,7 +69,7 @@ class PanelExpansionInteractorTest : SysuiTestCase() {
    @EnableSceneContainer
    fun legacyPanelExpansion_whenIdle_whenLocked() =
        testScope.runTest {
            underTest = kosmos.panelExpansionInteractor
            underTest = kosmos.panelExpansionInteractorImpl
            setUnlocked(false)
            val panelExpansion by collectLastValue(underTest.legacyPanelExpansion)

@@ -97,7 +93,7 @@ class PanelExpansionInteractorTest : SysuiTestCase() {
    @EnableSceneContainer
    fun legacyPanelExpansion_whenIdle_whenUnlocked() =
        testScope.runTest {
            underTest = kosmos.panelExpansionInteractor
            underTest = kosmos.panelExpansionInteractorImpl
            setUnlocked(true)
            val panelExpansion by collectLastValue(underTest.legacyPanelExpansion)

@@ -116,33 +112,6 @@ class PanelExpansionInteractorTest : SysuiTestCase() {
            changeScene(Scenes.Communal) { assertThat(panelExpansion).isEqualTo(1f) }
            assertThat(panelExpansion).isEqualTo(1f)
        }

    @Test
    @DisableFlags(FLAG_SCENE_CONTAINER)
    fun legacyPanelExpansion_whenInLegacyMode() =
        testScope.runTest {
            underTest = kosmos.panelExpansionInteractor
            val leet = 0.1337f
            fakeShadeRepository.setLegacyShadeExpansion(leet)
            setUnlocked(false)
            val panelExpansion by collectLastValue(underTest.legacyPanelExpansion)

            changeScene(Scenes.Lockscreen)
            assertThat(panelExpansion).isEqualTo(leet)

            changeScene(Scenes.Bouncer)
            assertThat(panelExpansion).isEqualTo(leet)

            changeScene(Scenes.Shade)
            assertThat(panelExpansion).isEqualTo(leet)

            changeScene(Scenes.QuickSettings)
            assertThat(panelExpansion).isEqualTo(leet)

            changeScene(Scenes.Communal)
            assertThat(panelExpansion).isEqualTo(leet)
        }

    private fun TestScope.setUnlocked(isUnlocked: Boolean) {
        val isDeviceUnlocked by collectLastValue(deviceUnlockedInteractor.isDeviceUnlocked)
        deviceEntryRepository.setUnlocked(isUnlocked)
+6 −0
Original line number Diff line number Diff line
@@ -246,6 +246,7 @@ import javax.inject.Inject;
import javax.inject.Provider;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.flow.Flow;

@SysUISingleton
public final class NotificationPanelViewController implements ShadeSurface, Dumpable {
@@ -3997,6 +3998,11 @@ public final class NotificationPanelViewController implements ShadeSurface, Dump
        return mExpandedFraction;
    }

    @Override
    public Flow<Float> getLegacyPanelExpansion() {
        return  mShadeRepository.getLegacyShadeExpansion();
    }

    @Override
    public boolean isFullyExpanded() {
        return mExpandedHeight >= getMaxPanelTransitionDistance();
+7 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.shade.data.repository.PrivacyChipRepository
import com.android.systemui.shade.data.repository.PrivacyChipRepositoryImpl
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.shade.data.repository.ShadeRepositoryImpl
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorEmptyImpl
import com.android.systemui.shade.domain.interactor.ShadeBackActionInteractor
@@ -64,6 +65,12 @@ abstract class ShadeEmptyImplModule {
        sai: ShadeAnimationInteractorEmptyImpl
    ): ShadeAnimationInteractor

    @Binds
    @SysUISingleton
    abstract fun bindsPanelExpansionInteractor(
        sbai: ShadeViewControllerEmptyImpl
    ): PanelExpansionInteractor

    @Binds
    @SysUISingleton
    abstract fun bindsPrivacyChipRepository(impl: PrivacyChipRepositoryImpl): PrivacyChipRepository
+16 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import com.android.systemui.shade.data.repository.PrivacyChipRepositoryImpl
import com.android.systemui.shade.data.repository.ShadeRepository
import com.android.systemui.shade.data.repository.ShadeRepositoryImpl
import com.android.systemui.shade.domain.interactor.BaseShadeInteractor
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractorImpl
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractor
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorLegacyImpl
import com.android.systemui.shade.domain.interactor.ShadeAnimationInteractorSceneContainerImpl
@@ -114,6 +116,20 @@ abstract class ShadeModule {
            }
        }

        @Provides
        @SysUISingleton
        fun providePanelExpansionInteractor(
            sceneContainerFlags: SceneContainerFlags,
            sceneContainerOn: Provider<PanelExpansionInteractorImpl>,
            sceneContainerOff: Provider<NotificationPanelViewController>
        ): PanelExpansionInteractor {
            return if (sceneContainerFlags.isEnabled()) {
                sceneContainerOn.get()
            } else {
                sceneContainerOff.get()
            }
        }

        @Provides
        @SysUISingleton
        fun provideQuickSettingsController(
+6 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.systemui.shade

import android.view.ViewPropertyAnimator
import com.android.systemui.shade.domain.interactor.PanelExpansionInteractor
import com.android.systemui.shade.domain.interactor.ShadeBackActionInteractor
import com.android.systemui.statusbar.GestureRecorder
import com.android.systemui.statusbar.phone.CentralSurfaces
@@ -26,7 +27,11 @@ import com.android.systemui.statusbar.policy.HeadsUpManager
 * this class. If any method in this class is needed outside of CentralSurfacesImpl, it must be
 * pulled up into ShadeViewController.
 */
interface ShadeSurface : ShadeViewController, ShadeBackActionInteractor, ShadeLockscreenInteractor {
interface ShadeSurface :
    ShadeViewController,
    ShadeBackActionInteractor,
    ShadeLockscreenInteractor,
    PanelExpansionInteractor {
    /** Initialize objects instead of injecting to avoid circular dependencies. */
    fun initDependencies(
        centralSurfaces: CentralSurfaces,
Loading