diff options
| author | 2025-03-12 12:40:48 -0700 | |
|---|---|---|
| committer | 2025-03-12 12:40:48 -0700 | |
| commit | ef90cbdc40f4108fcbb3f990798657152811993b (patch) | |
| tree | 5444537f680fb68f715696ad93b3b13e965054d8 | |
| parent | 620d39409e53609318b35e5c69c4cf42a549c34f (diff) | |
| parent | d154b1062fc8d46a7fd802fe801193850d28e759 (diff) | |
Merge "Rewire mIsBlurSupported for row transparency rendering" into main
11 files changed, 35 insertions, 38 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt index bb12eff51288..d306a5bea433 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowControllerTest.kt @@ -58,11 +58,13 @@ import com.android.systemui.statusbar.notification.stack.ui.view.NotificationRow import com.android.systemui.statusbar.phone.KeyguardBypassController import com.android.systemui.statusbar.policy.SmartReplyConstants import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent +import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.withArgCaptor import com.android.systemui.util.time.SystemClock +import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor import com.google.android.msdl.domain.MSDLPlayer import junit.framework.Assert import org.junit.After @@ -84,6 +86,8 @@ class ExpandableNotificationRowControllerTest : SysuiTestCase() { private val appName = "MyApp" private val notifKey = "MyNotifKey" + private val kosmos = testKosmos() + private val view: ExpandableNotificationRow = mock() private val activableNotificationViewController: ActivatableNotificationViewController = mock() private val rivSubComponentFactory: RemoteInputViewSubcomponent.Factory = mock() @@ -160,6 +164,7 @@ class ExpandableNotificationRowControllerTest : SysuiTestCase() { msdlPlayer, rebindingTracker, entryAdapterFactory, + kosmos.windowRootViewBlurInteractor, ) whenever(view.childrenContainer).thenReturn(childrenContainer) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt index 3d1fdee306f4..961616c99cb1 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelTest.kt @@ -22,8 +22,6 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.accessibility.data.repository.FakeAccessibilityRepository import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor import com.android.systemui.coroutines.collectLastValue -import com.android.systemui.testKosmos -import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest @@ -34,16 +32,12 @@ import org.junit.runner.RunWith @SmallTest class ActivatableNotificationViewModelTest : SysuiTestCase() { - private val kosmos = testKosmos() - // fakes private val a11yRepo = FakeAccessibilityRepository() // real impls private val a11yInteractor = AccessibilityInteractor(a11yRepo) - private val windowRootViewBlurInteractor = kosmos.windowRootViewBlurInteractor - private val underTest = ActivatableNotificationViewModel(a11yInteractor, - windowRootViewBlurInteractor) + private val underTest = ActivatableNotificationViewModel(a11yInteractor) @Test fun isTouchable_whenA11yTouchExplorationDisabled() = runTest { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java index e76867373139..b0b08a928f6c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ActivatableNotificationView.java @@ -343,7 +343,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView } protected boolean usesTransparentBackground() { - return false; + return mIsBlurSupported && notificationRowTransparency(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java index 3c386a56ab4e..5160b909fd6a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRow.java @@ -4684,8 +4684,6 @@ public class ExpandableNotificationRow extends ActivatableNotificationView protected boolean usesTransparentBackground() { // Row background should be opaque when it's displayed as a heads-up notification or // displayed on keyguard. - // TODO(b/388891313): Account for isBlurSupported when it is initialized and updated - // correctly. - return notificationRowTransparency() && !mIsHeadsUp && !mOnKeyguard; + return super.usesTransparentBackground() && !mIsHeadsUp && !mOnKeyguard; } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java index 7c0ee6685e6b..49d715cfc84f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowController.java @@ -20,6 +20,7 @@ import static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME import static com.android.systemui.statusbar.NotificationRemoteInputManager.ENABLE_REMOTE_INPUT; import static com.android.systemui.statusbar.StatusBarState.KEYGUARD; import static com.android.systemui.statusbar.notification.NotificationUtils.logKey; +import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; import android.net.Uri; import android.os.UserHandle; @@ -35,8 +36,8 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.UiEventLogger; import com.android.internal.statusbar.IStatusBarService; +import com.android.systemui.Flags; import com.android.systemui.flags.FeatureFlagsClassic; -import com.android.systemui.flags.Flags; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.PluginManager; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; @@ -45,11 +46,8 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag; import com.android.systemui.statusbar.SmartReplyController; import com.android.systemui.statusbar.notification.ColorUpdateLogger; import com.android.systemui.statusbar.notification.FeedbackIcon; -import com.android.systemui.statusbar.notification.NotificationActivityStarter; import com.android.systemui.statusbar.notification.collection.EntryAdapterFactory; -import com.android.systemui.statusbar.notification.collection.EntryAdapterFactoryImpl; import com.android.systemui.statusbar.notification.collection.PipelineEntry; -import com.android.systemui.statusbar.notification.collection.coordinator.VisualStabilityCoordinator; import com.android.systemui.statusbar.notification.collection.provider.NotificationDismissibilityProvider; import com.android.systemui.statusbar.notification.collection.render.GroupExpansionManager; import com.android.systemui.statusbar.notification.collection.render.GroupMembershipManager; @@ -60,7 +58,6 @@ import com.android.systemui.statusbar.notification.people.PeopleNotificationIden import com.android.systemui.statusbar.notification.row.dagger.AppName; import com.android.systemui.statusbar.notification.row.dagger.NotificationKey; import com.android.systemui.statusbar.notification.row.dagger.NotificationRowScope; -import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProvider; import com.android.systemui.statusbar.notification.shared.NotificationBundleUi; import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainerLogger; import com.android.systemui.statusbar.notification.stack.NotificationListContainer; @@ -69,6 +66,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.policy.SmartReplyConstants; import com.android.systemui.statusbar.policy.dagger.RemoteInputViewSubcomponent; import com.android.systemui.util.time.SystemClock; +import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor; import com.google.android.msdl.data.model.MSDLToken; import com.google.android.msdl.domain.MSDLPlayer; @@ -125,6 +123,7 @@ public class ExpandableNotificationRowController implements NotifViewController private final MSDLPlayer mMSDLPlayer; private final NotificationSettingsController mSettingsController; private final EntryAdapterFactory mEntryAdapterFactory; + private final WindowRootViewBlurInteractor mWindowRootViewBlurInteractor; @VisibleForTesting final NotificationSettingsController.Listener mSettingsListener = @@ -291,7 +290,8 @@ public class ExpandableNotificationRowController implements NotifViewController UiEventLogger uiEventLogger, MSDLPlayer msdlPlayer, NotificationRebindingTracker notificationRebindingTracker, - EntryAdapterFactory entryAdapterFactory) { + EntryAdapterFactory entryAdapterFactory, + WindowRootViewBlurInteractor windowRootViewBlurInteractor) { mView = view; mListContainer = listContainer; mRemoteInputViewSubcomponentFactory = rivSubcomponentFactory; @@ -329,6 +329,7 @@ public class ExpandableNotificationRowController implements NotifViewController mUiEventLogger = uiEventLogger; mMSDLPlayer = msdlPlayer; mEntryAdapterFactory = entryAdapterFactory; + mWindowRootViewBlurInteractor = windowRootViewBlurInteractor; } /** @@ -367,7 +368,8 @@ public class ExpandableNotificationRowController implements NotifViewController ); mView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); if (mAllowLongPress) { - if (mFeatureFlags.isEnabled(Flags.NOTIFICATION_DRAG_TO_CONTENTS)) { + if (mFeatureFlags.isEnabled( + com.android.systemui.flags.Flags.NOTIFICATION_DRAG_TO_CONTENTS)) { mView.setDragController(mDragController); } @@ -416,6 +418,11 @@ public class ExpandableNotificationRowController implements NotifViewController mSettingsController.removeCallback(BUBBLES_SETTING_URI, mSettingsListener); } }); + + if (Flags.notificationRowTransparency()) { + collectFlow(mView, mWindowRootViewBlurInteractor.isBlurCurrentlySupported(), + mView::setIsBlurSupported); + } } private final StatusBarStateController.StateListener mStatusBarStateListener = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt index 8984f2c4220d..f0b5c3667962 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewbinder/ActivatableNotificationViewBinder.kt @@ -50,15 +50,6 @@ object ActivatableNotificationViewBinder { view.registerListenersWhileAttached(touchHandler) } } - view.repeatWhenAttached { - repeatOnLifecycle(Lifecycle.State.STARTED) { - launch { - viewModel.isBlurSupported.collect { supported -> - view.setIsBlurSupported(supported) - } - } - } - } } private suspend fun ActivatableNotificationView.registerListenersWhileAttached( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt index 9a86ffbe33b6..2d2fd6082cac 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModel.kt @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.notification.row.ui.viewmodel import com.android.systemui.accessibility.domain.interactor.AccessibilityInteractor -import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import dagger.Module import dagger.Provides import kotlinx.coroutines.flow.Flow @@ -27,26 +26,21 @@ import kotlinx.coroutines.flow.map interface ActivatableNotificationViewModel : ExpandableOutlineViewModel { /** Does the view react to touches? */ val isTouchable: Flow<Boolean> - val isBlurSupported: Flow<Boolean> companion object { operator fun invoke( a11yInteractor: AccessibilityInteractor, - windowRootViewBlurInteractor: WindowRootViewBlurInteractor ): ActivatableNotificationViewModel = - ActivatableNotificationViewModelImpl(a11yInteractor, windowRootViewBlurInteractor) + ActivatableNotificationViewModelImpl(a11yInteractor) } } private class ActivatableNotificationViewModelImpl( a11yInteractor: AccessibilityInteractor, - windowRootViewBlurInteractor: WindowRootViewBlurInteractor, ) : ActivatableNotificationViewModel { override val isTouchable: Flow<Boolean> = // If a11y touch exploration is enabled, then the activatable view should ignore touches a11yInteractor.isTouchExplorationEnabled.map { !it } - override val isBlurSupported: Flow<Boolean> = - windowRootViewBlurInteractor.isBlurCurrentlySupported } @Module @@ -54,7 +48,6 @@ object ActivatableNotificationViewModelModule { @Provides fun provideViewModel( a11yInteractor: AccessibilityInteractor, - windowRootViewBlurInteractor: WindowRootViewBlurInteractor ) = - ActivatableNotificationViewModel(a11yInteractor, windowRootViewBlurInteractor) + ActivatableNotificationViewModel(a11yInteractor) } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt index f663ea019319..a75330b329d3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewbinder/NotificationShelfViewBinder.kt @@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.shelf.ui.viewbinder import com.android.app.tracing.coroutines.launchTraced as launch import com.android.app.tracing.traceSection +import com.android.systemui.Flags import com.android.systemui.plugins.FalsingManager import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.statusbar.NotificationShelf @@ -47,6 +48,10 @@ object NotificationShelfViewBinder { launch { viewModel.isAlignedToEnd.collect(::setAlignedToEnd) } } + if (Flags.notificationRowTransparency()) { + launch { viewModel.isBlurSupported.collect(shelf::setIsBlurSupported) } + } + registerViewListenersWhileAttached(shelf, viewModel) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt index 96cdda6d4a23..9eb1ece63846 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModel.kt @@ -21,6 +21,7 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag import com.android.systemui.statusbar.NotificationShelf import com.android.systemui.statusbar.notification.row.ui.viewmodel.ActivatableNotificationViewModel import com.android.systemui.statusbar.notification.shelf.domain.interactor.NotificationShelfInteractor +import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf @@ -32,6 +33,7 @@ class NotificationShelfViewModel @Inject constructor( private val interactor: NotificationShelfInteractor, + windowRootViewBlurInteractor: WindowRootViewBlurInteractor, activatableViewModel: ActivatableNotificationViewModel, ) : ActivatableNotificationViewModel by activatableViewModel { /** Is the shelf allowed to be clickable when it has content? */ @@ -51,6 +53,8 @@ constructor( } } + val isBlurSupported: Flow<Boolean> = windowRootViewBlurInteractor.isBlurCurrentlySupported + /** Notifies that the user has clicked the shelf. */ fun onShelfClicked() { interactor.goToLockedShadeFromShelf() diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt index 7ccbdb79101c..2523975c182c 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ui/viewmodel/ActivatableNotificationViewModelKosmos.kt @@ -19,11 +19,9 @@ package com.android.systemui.statusbar.notification.row.ui.viewmodel import com.android.systemui.accessibility.domain.interactor.accessibilityInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture -import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor val Kosmos.activatableNotificationViewModel by Fixture { ActivatableNotificationViewModel.invoke( a11yInteractor = accessibilityInteractor, - windowRootViewBlurInteractor = windowRootViewBlurInteractor, ) } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelKosmos.kt index b906b6060245..81b134920f60 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/shelf/ui/viewmodel/NotificationShelfViewModelKosmos.kt @@ -20,10 +20,12 @@ import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.statusbar.notification.row.ui.viewmodel.activatableNotificationViewModel import com.android.systemui.statusbar.notification.shelf.domain.interactor.notificationShelfInteractor +import com.android.systemui.window.domain.interactor.windowRootViewBlurInteractor val Kosmos.notificationShelfViewModel by Fixture { NotificationShelfViewModel( interactor = notificationShelfInteractor, + windowRootViewBlurInteractor = windowRootViewBlurInteractor, activatableViewModel = activatableNotificationViewModel, ) } |