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

Commit 591d5fba authored by Evan Laird's avatar Evan Laird Committed by Android (Google) Code Review
Browse files

Merge changes I2539124b,I98093976 into main

* changes:
  [sb] use HeadsUpNotificationInteractor to control clock visibility
  [sb] Don't show notifs in view model if any chip is showing
parents 5ba5551e 219e8cde
Loading
Loading
Loading
Loading
+197 −112

File changed.

Preview size limit exceeded, changes collapsed.

+11 −21
Original line number Diff line number Diff line
@@ -98,10 +98,7 @@ constructor(
    }

    /** Are there any pinned heads up rows to display? */
    val hasPinnedRows: Flow<Boolean> by lazy {
        if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
            flowOf(false)
        } else {
    val hasPinnedRows: Flow<Boolean> =
        headsUpRepository.activeHeadsUpRows.flatMapLatest { rows ->
            if (rows.isNotEmpty()) {
                combine(rows.map { it.pinnedStatus }) { pinnedStatus ->
@@ -112,8 +109,6 @@ constructor(
                flowOf(false)
            }
        }
        }
    }

    val isHeadsUpOrAnimatingAway: Flow<Boolean> by lazy {
        if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
@@ -143,15 +138,10 @@ constructor(
            }
        }

    val showHeadsUpStatusBar: Flow<Boolean> by lazy {
        if (SceneContainerFlag.isUnexpectedlyInLegacyMode()) {
            flowOf(false)
        } else {
    val showHeadsUpStatusBar =
        combine(hasPinnedRows, canShowHeadsUp) { hasPinnedRows, canShowHeadsUp ->
            hasPinnedRows && canShowHeadsUp
        }
        }
    }

    fun headsUpRow(key: HeadsUpRowKey): HeadsUpRowInteractor =
        HeadsUpRowInteractor(key as HeadsUpRowRepository)
+9 −4
Original line number Diff line number Diff line
@@ -37,19 +37,20 @@ import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.CrossFadeHelper;
import com.android.systemui.statusbar.HeadsUpStatusBarView;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.core.StatusBarRootModernization;
import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator;
import com.android.systemui.statusbar.notification.SourceType;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationIconInteractor;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.notification.headsup.OnHeadsUpChangedListener;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.shared.AsyncGroupHeaderViewInflation;
import com.android.systemui.statusbar.notification.stack.NotificationRoundnessManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.fragment.dagger.HomeStatusBarScope;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.notification.headsup.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.notification.headsup.OnHeadsUpChangedListener;
import com.android.systemui.util.ViewController;

import java.util.ArrayList;
@@ -249,10 +250,14 @@ public class HeadsUpAppearanceController extends ViewController<HeadsUpStatusBar
                updateParentClipping(false /* shouldClip */);
                mView.setVisibility(View.VISIBLE);
                show(mView);
                if (!StatusBarRootModernization.isEnabled()) {
                    hide(mClockView, View.INVISIBLE);
                }
                mOperatorNameViewOptional.ifPresent(view -> hide(view, View.INVISIBLE));
            } else {
                if (!StatusBarRootModernization.isEnabled()) {
                    show(mClockView);
                }
                mOperatorNameViewOptional.ifPresent(this::show);
                hide(mView, View.GONE, () -> {
                    updateParentClipping(true /* shouldClip */);
+2 −2
Original line number Diff line number Diff line
@@ -30,13 +30,13 @@ import kotlinx.coroutines.flow.map
@SysUISingleton
class CollapsedStatusBarInteractor
@Inject
constructor(DisableFlagsInteractor: DisableFlagsInteractor) {
constructor(disableFlagsInteractor: DisableFlagsInteractor) {
    /**
     * The visibilities of various status bar child views, based only on the information we received
     * from disable flags.
     */
    val visibilityViaDisableFlags: Flow<StatusBarDisableFlagsVisibilityModel> =
        DisableFlagsInteractor.disableFlags.map {
        disableFlagsInteractor.disableFlags.map {
            StatusBarDisableFlagsVisibilityModel(
                isClockAllowed = it.isClockEnabled,
                areNotificationIconsAllowed = it.areNotificationIconsEnabled,
+32 −9
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.chips.notification.shared.StatusBarNotifChips
import com.android.systemui.statusbar.chips.ui.model.MultipleOngoingActivityChipsModel
import com.android.systemui.statusbar.chips.ui.model.OngoingActivityChipModel
import com.android.systemui.statusbar.chips.ui.viewmodel.OngoingActivityChipsViewModel
@@ -39,6 +40,7 @@ import com.android.systemui.statusbar.events.domain.interactor.SystemStatusEvent
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState
import com.android.systemui.statusbar.events.shared.model.SystemEventAnimationState.Idle
import com.android.systemui.statusbar.notification.domain.interactor.ActiveNotificationsInteractor
import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationInteractor
import com.android.systemui.statusbar.notification.shared.NotificationsLiveDataStoreRefactor
import com.android.systemui.statusbar.phone.domain.interactor.LightsOutInteractor
import com.android.systemui.statusbar.pipeline.shared.domain.interactor.CollapsedStatusBarInteractor
@@ -137,6 +139,7 @@ constructor(
    collapsedStatusBarInteractor: CollapsedStatusBarInteractor,
    private val lightsOutInteractor: LightsOutInteractor,
    private val notificationsInteractor: ActiveNotificationsInteractor,
    headsUpNotificationInteractor: HeadsUpNotificationInteractor,
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
    keyguardInteractor: KeyguardInteractor,
    sceneInteractor: SceneInteractor,
@@ -222,27 +225,43 @@ constructor(
            isHomeStatusBarAllowed && !isSecureCameraActive
        }

    private val isAnyChipVisible =
        if (StatusBarNotifChips.isEnabled) {
            ongoingActivityChips.map { it.primary is OngoingActivityChipModel.Shown }
        } else {
            primaryOngoingActivityChip.map { it is OngoingActivityChipModel.Shown }
        }

    override val isClockVisible: Flow<VisibilityModel> =
        combine(
            shouldHomeStatusBarBeVisible,
            headsUpNotificationInteractor.showHeadsUpStatusBar,
            collapsedStatusBarInteractor.visibilityViaDisableFlags,
        ) { shouldStatusBarBeVisible, visibilityViaDisableFlags ->
            val showClock = shouldStatusBarBeVisible && visibilityViaDisableFlags.isClockAllowed
            // TODO(b/364360986): Take CollapsedStatusBarFragment.clockHiddenMode into account.
            VisibilityModel(showClock.toVisibilityInt(), visibilityViaDisableFlags.animate)
        ) { shouldStatusBarBeVisible, showHeadsUp, visibilityViaDisableFlags ->
            val showClock =
                shouldStatusBarBeVisible && visibilityViaDisableFlags.isClockAllowed && !showHeadsUp
            // Always use View.INVISIBLE here, so that animations work
            VisibilityModel(showClock.toVisibleOrInvisible(), visibilityViaDisableFlags.animate)
        }
    override val isNotificationIconContainerVisible: Flow<VisibilityModel> =
        combine(
            shouldHomeStatusBarBeVisible,
            isAnyChipVisible,
            collapsedStatusBarInteractor.visibilityViaDisableFlags,
        ) { shouldStatusBarBeVisible, visibilityViaDisableFlags ->
        ) { shouldStatusBarBeVisible, anyChipVisible, visibilityViaDisableFlags ->
            val showNotificationIconContainer =
                shouldStatusBarBeVisible && visibilityViaDisableFlags.areNotificationIconsAllowed
                if (anyChipVisible) {
                    false
                } else {
                    shouldStatusBarBeVisible &&
                        visibilityViaDisableFlags.areNotificationIconsAllowed
                }
            VisibilityModel(
                showNotificationIconContainer.toVisibilityInt(),
                showNotificationIconContainer.toVisibleOrGone(),
                visibilityViaDisableFlags.animate,
            )
        }

    private val isSystemInfoVisible =
        combine(
            shouldHomeStatusBarBeVisible,
@@ -250,7 +269,7 @@ constructor(
        ) { shouldStatusBarBeVisible, visibilityViaDisableFlags ->
            val showSystemInfo =
                shouldStatusBarBeVisible && visibilityViaDisableFlags.isSystemInfoAllowed
            VisibilityModel(showSystemInfo.toVisibilityInt(), visibilityViaDisableFlags.animate)
            VisibilityModel(showSystemInfo.toVisibleOrGone(), visibilityViaDisableFlags.animate)
        }

    override val systemInfoCombinedVis =
@@ -270,7 +289,11 @@ constructor(
            )

    @View.Visibility
    private fun Boolean.toVisibilityInt(): Int {
    private fun Boolean.toVisibleOrGone(): Int {
        return if (this) View.VISIBLE else View.GONE
    }

    // Similar to the above, but uses INVISIBLE in place of GONE
    @View.Visibility
    private fun Boolean.toVisibleOrInvisible(): Int = if (this) View.VISIBLE else View.INVISIBLE
}
Loading