Loading packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java +6 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.systemui.media.controls.ui.MediaHierarchyManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.LockscreenShadeTransitionController; Loading Loading @@ -136,6 +137,7 @@ public class QuickSettingsController { private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; private final FeatureFlags mFeatureFlags; private final InteractionJankMonitor mInteractionJankMonitor; private final ShadeRepository mShadeRepository; private final FalsingManager mFalsingManager; private final AccessibilityManager mAccessibilityManager; private final MetricsLogger mMetricsLogger; Loading Loading @@ -321,7 +323,8 @@ public class QuickSettingsController { FeatureFlags featureFlags, InteractionJankMonitor interactionJankMonitor, ShadeLogger shadeLog, KeyguardFaceAuthInteractor keyguardFaceAuthInteractor KeyguardFaceAuthInteractor keyguardFaceAuthInteractor, ShadeRepository shadeRepository ) { mPanelViewControllerLazy = panelViewControllerLazy; mPanelView = panelView; Loading Loading @@ -363,6 +366,7 @@ public class QuickSettingsController { mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor; mFeatureFlags = featureFlags; mInteractionJankMonitor = interactionJankMonitor; mShadeRepository = shadeRepository; mLockscreenShadeTransitionController.addCallback(new LockscreenShadeTransitionCallback()); } Loading Loading @@ -1001,6 +1005,7 @@ public class QuickSettingsController { mDepthController.setQsPanelExpansion(qsExpansionFraction); mStatusBarKeyguardViewManager.setQsExpansion(qsExpansionFraction); mShadeRepository.setQsExpansion(qsExpansionFraction); // TODO (b/265193930): remove dependency on NPVC float shadeExpandedFraction = mBarState == KEYGUARD Loading packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt +26 −0 Original line number Diff line number Diff line Loading @@ -25,11 +25,23 @@ import com.android.systemui.shade.domain.model.ShadeModel import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged interface ShadeRepository { /** ShadeModel information regarding shade expansion events */ val shadeModel: Flow<ShadeModel> /** Amount qs has expanded. Quick Settings can be expanded without the full shade expansion. */ val qsExpansion: StateFlow<Float> /** Amount shade has expanded with regard to the UDFPS location */ val udfpsTransitionToFullShadeProgress: StateFlow<Float> fun setQsExpansion(qsExpansion: Float) fun setUdfpsTransitionToFullShadeProgress(progress: Float) } /** Business logic for shade interactions */ Loading Loading @@ -62,6 +74,20 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos } .distinctUntilChanged() private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion: StateFlow<Float> = _qsExpansion.asStateFlow() private var _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f) override val udfpsTransitionToFullShadeProgress: StateFlow<Float> = _udfpsTransitionToFullShadeProgress.asStateFlow() override fun setQsExpansion(qsExpansion: Float) { _qsExpansion.value = qsExpansion } override fun setUdfpsTransitionToFullShadeProgress(progress: Float) { _udfpsTransitionToFullShadeProgress.value = progress } companion object { private const val TAG = "ShadeRepository" } Loading packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView Loading Loading @@ -74,6 +75,7 @@ class LockscreenShadeTransitionController @Inject constructor( falsingManager: FalsingManager, dumpManager: DumpManager, qsTransitionControllerFactory: LockscreenShadeQsTransitionController.Factory, private val shadeRepository: ShadeRepository, ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting Loading Loading @@ -449,6 +451,7 @@ class LockscreenShadeTransitionController @Inject constructor( } val udfpsProgress = MathUtils.saturate(dragDownAmount / udfpsTransitionDistance) shadeRepository.setUdfpsTransitionToFullShadeProgress(udfpsProgress) udfpsKeyguardViewController?.setTransitionToFullShadeProgress(udfpsProgress) val statusBarProgress = MathUtils.saturate(dragDownAmount / statusBarTransitionDistance) Loading packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.QSFragment; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.KeyguardIndicationController; Loading Loading @@ -304,6 +305,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mEmptySpaceClickListenerCaptor; @Mock protected ActivityStarter mActivityStarter; @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; @Mock protected ShadeRepository mShadeRepository; protected final int mMaxUdfpsBurnInOffsetY = 5; protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; Loading Loading @@ -672,7 +674,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mFeatureFlags, mInteractionJankMonitor, mShadeLog, mKeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor, mShadeRepository ); } Loading packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java +5 −3 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.QSFragment; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.NotificationRemoteInputManager; Loading @@ -88,6 +89,8 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import dagger.Lazy; import org.junit.After; import org.junit.Before; import org.junit.Test; Loading @@ -98,8 +101,6 @@ import org.mockito.MockitoAnnotations; import java.util.List; import dagger.Lazy; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper(setAsMainLooper = true) Loading Loading @@ -241,7 +242,8 @@ public class QuickSettingsControllerTest extends SysuiTestCase { mFeatureFlags, mInteractionJankMonitor, mShadeLogger, mock(KeyguardFaceAuthInteractor.class) mock(KeyguardFaceAuthInteractor.class), mock(ShadeRepository.class) ); mFragmentListener = mQsController.getQsFragmentListener(); Loading Loading
packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java +6 −1 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import com.android.systemui.media.controls.ui.MediaHierarchyManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.statusbar.LockscreenShadeTransitionController; Loading Loading @@ -136,6 +137,7 @@ public class QuickSettingsController { private final KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; private final FeatureFlags mFeatureFlags; private final InteractionJankMonitor mInteractionJankMonitor; private final ShadeRepository mShadeRepository; private final FalsingManager mFalsingManager; private final AccessibilityManager mAccessibilityManager; private final MetricsLogger mMetricsLogger; Loading Loading @@ -321,7 +323,8 @@ public class QuickSettingsController { FeatureFlags featureFlags, InteractionJankMonitor interactionJankMonitor, ShadeLogger shadeLog, KeyguardFaceAuthInteractor keyguardFaceAuthInteractor KeyguardFaceAuthInteractor keyguardFaceAuthInteractor, ShadeRepository shadeRepository ) { mPanelViewControllerLazy = panelViewControllerLazy; mPanelView = panelView; Loading Loading @@ -363,6 +366,7 @@ public class QuickSettingsController { mKeyguardFaceAuthInteractor = keyguardFaceAuthInteractor; mFeatureFlags = featureFlags; mInteractionJankMonitor = interactionJankMonitor; mShadeRepository = shadeRepository; mLockscreenShadeTransitionController.addCallback(new LockscreenShadeTransitionCallback()); } Loading Loading @@ -1001,6 +1005,7 @@ public class QuickSettingsController { mDepthController.setQsPanelExpansion(qsExpansionFraction); mStatusBarKeyguardViewManager.setQsExpansion(qsExpansionFraction); mShadeRepository.setQsExpansion(qsExpansionFraction); // TODO (b/265193930): remove dependency on NPVC float shadeExpandedFraction = mBarState == KEYGUARD Loading
packages/SystemUI/src/com/android/systemui/shade/data/repository/ShadeRepository.kt +26 −0 Original line number Diff line number Diff line Loading @@ -25,11 +25,23 @@ import com.android.systemui.shade.domain.model.ShadeModel import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.distinctUntilChanged interface ShadeRepository { /** ShadeModel information regarding shade expansion events */ val shadeModel: Flow<ShadeModel> /** Amount qs has expanded. Quick Settings can be expanded without the full shade expansion. */ val qsExpansion: StateFlow<Float> /** Amount shade has expanded with regard to the UDFPS location */ val udfpsTransitionToFullShadeProgress: StateFlow<Float> fun setQsExpansion(qsExpansion: Float) fun setUdfpsTransitionToFullShadeProgress(progress: Float) } /** Business logic for shade interactions */ Loading Loading @@ -62,6 +74,20 @@ constructor(shadeExpansionStateManager: ShadeExpansionStateManager) : ShadeRepos } .distinctUntilChanged() private val _qsExpansion = MutableStateFlow(0f) override val qsExpansion: StateFlow<Float> = _qsExpansion.asStateFlow() private var _udfpsTransitionToFullShadeProgress = MutableStateFlow(0f) override val udfpsTransitionToFullShadeProgress: StateFlow<Float> = _udfpsTransitionToFullShadeProgress.asStateFlow() override fun setQsExpansion(qsExpansion: Float) { _qsExpansion.value = qsExpansion } override fun setUdfpsTransitionToFullShadeProgress(progress: Float) { _udfpsTransitionToFullShadeProgress.value = progress } companion object { private const val TAG = "ShadeRepository" } Loading
packages/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt +3 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.plugins.FalsingManager import com.android.systemui.plugins.qs.QS import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.shade.ShadeViewController import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableView Loading Loading @@ -74,6 +75,7 @@ class LockscreenShadeTransitionController @Inject constructor( falsingManager: FalsingManager, dumpManager: DumpManager, qsTransitionControllerFactory: LockscreenShadeQsTransitionController.Factory, private val shadeRepository: ShadeRepository, ) : Dumpable { private var pulseHeight: Float = 0f @get:VisibleForTesting Loading Loading @@ -449,6 +451,7 @@ class LockscreenShadeTransitionController @Inject constructor( } val udfpsProgress = MathUtils.saturate(dragDownAmount / udfpsTransitionDistance) shadeRepository.setUdfpsTransitionToFullShadeProgress(udfpsProgress) udfpsKeyguardViewController?.setTransitionToFullShadeProgress(udfpsProgress) val statusBarProgress = MathUtils.saturate(dragDownAmount / statusBarTransitionDistance) Loading
packages/SystemUI/tests/src/com/android/systemui/shade/NotificationPanelViewControllerBaseTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -115,6 +115,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.QSFragment; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.statusbar.CommandQueue; import com.android.systemui.statusbar.KeyguardIndicationController; Loading Loading @@ -304,6 +305,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mEmptySpaceClickListenerCaptor; @Mock protected ActivityStarter mActivityStarter; @Mock protected KeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor; @Mock protected ShadeRepository mShadeRepository; protected final int mMaxUdfpsBurnInOffsetY = 5; protected KeyguardBottomAreaInteractor mKeyguardBottomAreaInteractor; Loading Loading @@ -672,7 +674,8 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase { mFeatureFlags, mInteractionJankMonitor, mShadeLog, mKeyguardFaceAuthInteractor mKeyguardFaceAuthInteractor, mShadeRepository ); } Loading
packages/SystemUI/tests/src/com/android/systemui/shade/QuickSettingsControllerTest.java +5 −3 Original line number Diff line number Diff line Loading @@ -69,6 +69,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; import com.android.systemui.qs.QSFragment; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.transition.ShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController; import com.android.systemui.statusbar.NotificationRemoteInputManager; Loading @@ -88,6 +89,8 @@ import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import dagger.Lazy; import org.junit.After; import org.junit.Before; import org.junit.Test; Loading @@ -98,8 +101,6 @@ import org.mockito.MockitoAnnotations; import java.util.List; import dagger.Lazy; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper(setAsMainLooper = true) Loading Loading @@ -241,7 +242,8 @@ public class QuickSettingsControllerTest extends SysuiTestCase { mFeatureFlags, mInteractionJankMonitor, mShadeLogger, mock(KeyguardFaceAuthInteractor.class) mock(KeyguardFaceAuthInteractor.class), mock(ShadeRepository.class) ); mFragmentListener = mQsController.getQsFragmentListener(); Loading