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

Commit 84256a77 authored by Steve Elliott's avatar Steve Elliott Committed by Android (Google) Code Review
Browse files

Merge "Move AOD NotifIcon coloring to view-binder" into main

parents c8e28094 db8f43ad
Loading
Loading
Loading
Loading
+22 −3
Original line number Diff line number Diff line
@@ -17,11 +17,13 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder

import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.graphics.Color
import android.graphics.Rect
import android.view.View
import android.view.ViewGroup
import android.view.ViewPropertyAnimator
import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.collection.ArrayMap
import androidx.lifecycle.lifecycleScope
import com.android.app.animation.Interpolators
@@ -56,6 +58,7 @@ import com.android.systemui.util.ui.AnimatedValue
import com.android.systemui.util.ui.isAnimating
import com.android.systemui.util.ui.stopAnimating
import com.android.systemui.util.ui.value
import javax.inject.Inject
import kotlinx.coroutines.DisposableHandle
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
@@ -64,7 +67,6 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.mapNotNull
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import javax.inject.Inject

/** Binds a view-model to a [NotificationIconContainer]. */
object NotificationIconContainerViewBinder {
@@ -120,7 +122,6 @@ object NotificationIconContainerViewBinder {
        screenOffAnimationController: ScreenOffAnimationController,
        viewStore: IconViewStore,
    ): DisposableHandle {
        val contrastColorUtil = ContrastColorUtil.getInstance(view.context)
        return view.repeatWhenAttached {
            lifecycleScope.launch {
                launch {
@@ -143,7 +144,11 @@ object NotificationIconContainerViewBinder {
                        screenOffAnimationController,
                    )
                }
                launch { viewModel.iconColors.bindIconColors(view, contrastColorUtil) }
                launch {
                    configuration
                        .getColorAttr(R.attr.wallpaperTextColor, DEFAULT_AOD_ICON_COLOR)
                        .bindIconColors(view)
                }
            }
        }
    }
@@ -165,6 +170,19 @@ object NotificationIconContainerViewBinder {
            .collect { iconLookup -> view.applyTint(iconLookup, contrastColorUtil) }
    }

    /**
     * Binds to the [StatusBarIconView.setStaticDrawableColor] and [StatusBarIconView.setDecorColor]
     * of the [children] of an [NotificationIconContainer].
     */
    private suspend fun Flow<Int>.bindIconColors(view: NotificationIconContainer) {
        collect { tint ->
            view.children.filterIsInstance<StatusBarIconView>().forEach { icon ->
                icon.staticDrawableColor = tint
                icon.setDecorColor(tint)
            }
        }
    }

    private suspend fun Flow<AnimatedValue<Boolean>>.bindIsDozing(
        view: NotificationIconContainer,
        dozeParameters: DozeParameters,
@@ -415,6 +433,7 @@ object NotificationIconContainerViewBinder {
    }

    private const val AOD_ICONS_APPEAR_DURATION: Long = 200
    @ColorInt private val DEFAULT_AOD_ICON_COLOR = Color.WHITE
}

/** [IconViewStore] for the [com.android.systemui.statusbar.NotificationShelf] */
+0 −15
Original line number Diff line number Diff line
@@ -15,10 +15,7 @@
 */
package com.android.systemui.statusbar.notification.icon.ui.viewmodel

import android.graphics.Color
import android.graphics.Rect
import androidx.annotation.ColorInt
import com.android.systemui.common.ui.ConfigurationState
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
import com.android.systemui.flags.FeatureFlagsClassic
@@ -27,7 +24,6 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.res.R
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor
import com.android.systemui.statusbar.notification.icon.domain.interactor.AlwaysOnDisplayNotificationIconsInteractor
@@ -50,7 +46,6 @@ import kotlinx.coroutines.flow.map
class NotificationIconContainerAlwaysOnDisplayViewModel
@Inject
constructor(
    configuration: ConfigurationState,
    private val deviceEntryInteractor: DeviceEntryInteractor,
    private val dozeParameters: DozeParameters,
    private val featureFlags: FeatureFlagsClassic,
@@ -62,12 +57,6 @@ constructor(
    shadeInteractor: ShadeInteractor,
) {

    /** The colors with which to display the notification icons. */
    val iconColors: Flow<NotificationIconColorLookup> =
        configuration.getColorAttr(R.attr.wallpaperTextColor, DEFAULT_AOD_ICON_COLOR).map { tint ->
            NotificationIconColorLookup { IconColorsImpl(tint) }
        }

    /** Are changes to the icon container animated? */
    val animationsEnabled: Flow<Boolean> =
        combine(
@@ -180,8 +169,4 @@ constructor(
    private class IconColorsImpl(override val tint: Int) : NotificationIconColors {
        override fun staticDrawableColor(viewBounds: Rect, isColorized: Boolean): Int = tint
    }

    companion object {
        @ColorInt private val DEFAULT_AOD_ICON_COLOR = Color.WHITE
    }
}