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

Commit d154b106 authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Rewire mIsBlurSupported for row transparency rendering

ActivatableNotificationView has 2 children, ExpandableNotificationRow and NotificationShelf. NotificationShelf has the ViewBinder, ViewModel structure while ExpandableNotificationRow doesn't. Previously the signal only piped into NotificationShelf through ActivatableNotificationViewBinder. This change moves it to NotificationShelfViewBinder instead, while adding a collectFlow call to ExpandableNotificationRowController. Since those expandable notifications are in a list, I don't imagine a refactor to binder structure would be easy, so beyond the scope of this change

Bug: 388891313
Test: manual
Flag: com.android.systemui.notification_row_transparency
Change-Id: Ib049b9ae82a4d9733afb235283c075749cde05a6
parent f6992ead
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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)

+1 −7
Original line number Diff line number Diff line
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -343,7 +343,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
    }

    protected boolean usesTransparentBackground() {
        return false;
        return mIsBlurSupported && notificationRowTransparency();
    }

    @Override
+1 −3
Original line number Diff line number Diff line
@@ -4657,8 +4657,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;
    }
}
+14 −7
Original line number Diff line number Diff line
@@ -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 =
Loading