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

Commit 7fa0fded authored by András Kurucz's avatar András Kurucz Committed by Android (Google) Code Review
Browse files

Merge "Modernize LightsOutNotifController" into main

parents 1adaf7ac 0f95290d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.flags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.statusbar.notification.footer.shared.FooterViewRefactor
import com.android.systemui.statusbar.notification.shared.NotificationIconContainerRefactor
import com.android.systemui.statusbar.notification.shared.NotificationsLiveDataStoreRefactor
import javax.inject.Inject

/** A class in which engineers can define flag dependencies */
@@ -26,6 +27,7 @@ import javax.inject.Inject
class FlagDependencies @Inject constructor(featureFlags: FeatureFlagsClassic, handler: Handler) :
    FlagDependenciesBase(featureFlags, handler) {
    override fun defineDependencies() {
        NotificationsLiveDataStoreRefactor.token dependsOn NotificationIconContainerRefactor.token
        FooterViewRefactor.token dependsOn NotificationIconContainerRefactor.token
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -36,7 +36,8 @@ enum class StatusBarMode {
    /**
     * A mode where notification icons in the status bar are hidden and replaced by a dot (this mode
     * can be requested by apps). See
     * [com.android.systemui.statusbar.phone.LightsOutNotifController].
     * [com.android.systemui.statusbar.phone.LegacyLightsOutNotifController] and
     * [com.android.systemui.statusbar.phone.domain.interactor.LightsOutInteractor].
     */
    LIGHTS_OUT,
    /** Similar to [LIGHTS_OUT], but also with a transparent background for the status bar. */
+1 −1
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ import kotlinx.coroutines.flow.merge

/**
 * Repository for data that's specific to the status bar **on keyguard**. For data that applies to
 * all status bars, use [StatusBarModeRepository].
 * all status bars, use [StatusBarModeRepositoryStore].
 */
interface KeyguardStatusBarRepository {
    /** True if we can show the user switcher on keyguard and false otherwise. */
+13 −28
Original line number Diff line number Diff line
@@ -25,10 +25,8 @@ import android.view.WindowInsetsController.APPEARANCE_SEMI_TRANSPARENT_STATUS_BA
import android.view.WindowInsetsController.Appearance
import com.android.internal.statusbar.LetterboxDetails
import com.android.internal.view.AppearanceRegion
import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.Dumpable
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.DisplayId
import com.android.systemui.statusbar.CommandQueue
import com.android.systemui.statusbar.core.StatusBarInitializer.OnStatusBarViewInitializedListener
import com.android.systemui.statusbar.data.model.StatusBarAppearance
@@ -38,13 +36,10 @@ import com.android.systemui.statusbar.phone.LetterboxAppearanceCalculator
import com.android.systemui.statusbar.phone.StatusBarBoundsProvider
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
import com.android.systemui.statusbar.phone.ongoingcall.data.repository.OngoingCallRepository
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import dagger.multibindings.IntoSet
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import java.io.PrintWriter
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
@@ -61,7 +56,7 @@ import kotlinx.coroutines.flow.stateIn
 * Note: These status bar modes are status bar *window* states that are sent to us from
 * WindowManager, not determined internally.
 */
interface StatusBarModeRepository {
interface StatusBarModePerDisplayRepository {
    /**
     * True if the status bar window is showing transiently and will disappear soon, and false
     * otherwise. ("Otherwise" in this case means the status bar is persistently hidden OR
@@ -108,16 +103,15 @@ interface StatusBarModeRepository {
    fun clearTransient()
}

@SysUISingleton
class StatusBarModeRepositoryImpl
@Inject
class StatusBarModePerDisplayRepositoryImpl
@AssistedInject
constructor(
    @Application scope: CoroutineScope,
    @DisplayId thisDisplayId: Int,
    @Assisted("displayId") thisDisplayId: Int,
    private val commandQueue: CommandQueue,
    private val letterboxAppearanceCalculator: LetterboxAppearanceCalculator,
    ongoingCallRepository: OngoingCallRepository,
) : StatusBarModeRepository, CoreStartable, OnStatusBarViewInitializedListener {
) : StatusBarModePerDisplayRepository, OnStatusBarViewInitializedListener, Dumpable {

    private val commandQueueCallback =
        object : CommandQueue.Callbacks {
@@ -166,7 +160,7 @@ constructor(
            }
        }

    override fun start() {
    fun start() {
        commandQueue.addCallback(commandQueueCallback)
    }

@@ -340,16 +334,7 @@ constructor(
    )
}

@Module
interface StatusBarModeRepositoryModule {
    @Binds fun bindImpl(impl: StatusBarModeRepositoryImpl): StatusBarModeRepository

    @Binds
    @IntoMap
    @ClassKey(StatusBarModeRepositoryImpl::class)
    fun bindCoreStartable(impl: StatusBarModeRepositoryImpl): CoreStartable

    @Binds
    @IntoSet
    fun bindViewInitListener(impl: StatusBarModeRepositoryImpl): OnStatusBarViewInitializedListener
@AssistedFactory
interface StatusBarModePerDisplayRepositoryFactory {
    fun create(@Assisted("displayId") displayId: Int): StatusBarModePerDisplayRepositoryImpl
}
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.statusbar.data.repository

import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.DisplayId
import com.android.systemui.statusbar.core.StatusBarInitializer
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent
import dagger.Binds
import dagger.Module
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import dagger.multibindings.IntoSet
import java.io.PrintWriter
import javax.inject.Inject

interface StatusBarModeRepositoryStore {
    val defaultDisplay: StatusBarModePerDisplayRepository
    fun forDisplay(displayId: Int): StatusBarModePerDisplayRepository
}

@SysUISingleton
class StatusBarModeRepositoryImpl
@Inject
constructor(
    @DisplayId private val displayId: Int,
    factory: StatusBarModePerDisplayRepositoryFactory
) :
    StatusBarModeRepositoryStore,
    CoreStartable,
    StatusBarInitializer.OnStatusBarViewInitializedListener {
    override val defaultDisplay = factory.create(displayId)

    override fun forDisplay(displayId: Int) =
        if (this.displayId == displayId) {
            defaultDisplay
        } else {
            TODO("b/127878649 implement multi-display state management")
        }

    override fun start() {
        defaultDisplay.start()
    }

    override fun onStatusBarViewInitialized(component: StatusBarFragmentComponent) {
        defaultDisplay.onStatusBarViewInitialized(component)
    }

    override fun dump(pw: PrintWriter, args: Array<out String>) {
        defaultDisplay.dump(pw, args)
    }
}

@Module
interface StatusBarModeRepositoryModule {
    @Binds fun bindImpl(impl: StatusBarModeRepositoryImpl): StatusBarModeRepositoryStore

    @Binds
    @IntoMap
    @ClassKey(StatusBarModeRepositoryStore::class)
    fun bindCoreStartable(impl: StatusBarModeRepositoryImpl): CoreStartable

    @Binds
    @IntoSet
    fun bindViewInitListener(
        impl: StatusBarModeRepositoryImpl
    ): StatusBarInitializer.OnStatusBarViewInitializedListener
}
Loading