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

Commit 80dbd94b authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB] Add multi-display store for StatusBarContentInsetsViewModel.

Bug: 364653005
Flag: EXEMPT code currently unused
Test: atest StatusBarContentInsetsViewModelTest
Change-Id: I4eb5358e52ec84fb903de4d25d59dbb05714a7cb
parent 4f5ced01
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.statusbar.data.StatusBarDataLayerModule
import com.android.systemui.statusbar.data.repository.LightBarControllerStore
import com.android.systemui.statusbar.layout.StatusBarContentInsetsProvider
import com.android.systemui.statusbar.layout.StatusBarContentInsetsProviderImpl
import com.android.systemui.statusbar.layout.ui.viewmodel.StatusBarContentInsetsViewModel
import com.android.systemui.statusbar.phone.AutoHideController
import com.android.systemui.statusbar.phone.AutoHideControllerImpl
import com.android.systemui.statusbar.phone.LightBarController
@@ -39,6 +40,7 @@ import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallLog
import com.android.systemui.statusbar.phone.ongoingcall.StatusBarChipsModernization
import com.android.systemui.statusbar.phone.ongoingcall.domain.interactor.OngoingCallInteractor
import com.android.systemui.statusbar.policy.ConfigurationController
import com.android.systemui.statusbar.ui.StatusBarUiLayerModule
import com.android.systemui.statusbar.ui.SystemBarUtilsProxyImpl
import com.android.systemui.statusbar.window.MultiDisplayStatusBarWindowControllerStore
import com.android.systemui.statusbar.window.SingleDisplayStatusBarWindowControllerStore
@@ -60,7 +62,14 @@ import dagger.multibindings.IntoMap
 *   ([com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule],
 *   [com.android.systemui.statusbar.policy.dagger.StatusBarPolicyModule], etc.).
 */
@Module(includes = [StatusBarDataLayerModule::class, SystemBarUtilsProxyImpl.Module::class])
@Module(
    includes =
        [
            StatusBarDataLayerModule::class,
            StatusBarUiLayerModule::class,
            SystemBarUtilsProxyImpl.Module::class,
        ]
)
interface StatusBarModule {

    @Binds
@@ -169,5 +178,13 @@ interface StatusBarModule {
        ): StatusBarContentInsetsProvider {
            return factory.create(context, configurationController, sysUICutoutProvider)
        }

        @Provides
        @SysUISingleton
        fun contentInsetsViewModel(
            insetsProvider: StatusBarContentInsetsProvider
        ): StatusBarContentInsetsViewModel {
            return StatusBarContentInsetsViewModel(insetsProvider)
        }
    }
}
+99 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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.layout.ui.viewmodel

import com.android.systemui.CoreStartable
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.display.data.repository.PerDisplayStore
import com.android.systemui.display.data.repository.PerDisplayStoreImpl
import com.android.systemui.display.data.repository.SingleDisplayStore
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.android.systemui.statusbar.data.repository.StatusBarContentInsetsProviderStore
import dagger.Lazy
import dagger.Module
import dagger.Provides
import dagger.multibindings.ClassKey
import dagger.multibindings.IntoMap
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope

/** Provides per-display instances of [StatusBarContentInsetsViewModel]. */
interface StatusBarContentInsetsViewModelStore : PerDisplayStore<StatusBarContentInsetsViewModel>

@SysUISingleton
class MultiDisplayStatusBarContentInsetsViewModelStore
@Inject
constructor(
    @Background backgroundApplicationScope: CoroutineScope,
    displayRepository: DisplayRepository,
    private val statusBarContentInsetsProviderStore: StatusBarContentInsetsProviderStore,
) :
    StatusBarContentInsetsViewModelStore,
    PerDisplayStoreImpl<StatusBarContentInsetsViewModel>(
        backgroundApplicationScope,
        displayRepository,
    ) {

    override fun createInstanceForDisplay(displayId: Int): StatusBarContentInsetsViewModel? {
        val insetsProvider =
            statusBarContentInsetsProviderStore.forDisplay(displayId) ?: return null
        return StatusBarContentInsetsViewModel(insetsProvider)
    }

    override val instanceClass = StatusBarContentInsetsViewModel::class.java
}

@SysUISingleton
class SingleDisplayStatusBarContentInsetsViewModelStore
@Inject
constructor(statusBarContentInsetsViewModel: StatusBarContentInsetsViewModel) :
    StatusBarContentInsetsViewModelStore,
    PerDisplayStore<StatusBarContentInsetsViewModel> by SingleDisplayStore(
        defaultInstance = statusBarContentInsetsViewModel
    )

@Module
object StatusBarContentInsetsViewModelStoreModule {
    @Provides
    @SysUISingleton
    @IntoMap
    @ClassKey(StatusBarContentInsetsViewModelStore::class)
    fun storeAsCoreStartable(
        multiDisplayLazy: Lazy<MultiDisplayStatusBarContentInsetsViewModelStore>
    ): CoreStartable {
        return if (StatusBarConnectedDisplays.isEnabled) {
            return multiDisplayLazy.get()
        } else {
            CoreStartable.NOP
        }
    }

    @Provides
    @SysUISingleton
    fun store(
        singleDisplayLazy: Lazy<SingleDisplayStatusBarContentInsetsViewModelStore>,
        multiDisplayLazy: Lazy<MultiDisplayStatusBarContentInsetsViewModelStore>,
    ): StatusBarContentInsetsViewModelStore {
        return if (StatusBarConnectedDisplays.isEnabled) {
            multiDisplayLazy.get()
        } else {
            singleDisplayLazy.get()
        }
    }
}
+23 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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.ui

import com.android.systemui.statusbar.layout.ui.viewmodel.StatusBarContentInsetsViewModelStoreModule
import dagger.Module

@Module(includes = [StatusBarContentInsetsViewModelStoreModule::class])
object StatusBarUiLayerModule