Make SysUICutoutProvider a @PerDisplaySingleton
Test: atest SystemUITests
Test: Build and run SystemUI
Fixes: 431942810
Flag: EXEMPT dagger change that can't be flagged
Change-Id: Ifc2ec8fa2dfd75f111dd3a9f27dcaeb234c3b3a0
diff --git a/packages/SystemUI/src/com/android/systemui/SysUICutoutProvider.kt b/packages/SystemUI/src/com/android/systemui/SysUICutoutProvider.kt
index b4cb103..5313672 100644
--- a/packages/SystemUI/src/com/android/systemui/SysUICutoutProvider.kt
+++ b/packages/SystemUI/src/com/android/systemui/SysUICutoutProvider.kt
@@ -21,10 +21,9 @@
import android.util.RotationUtils
import android.view.Display
import android.view.DisplayCutout
+import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.naturalBounds
-import dagger.assisted.Assisted
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
+import javax.inject.Inject
interface SysUICutoutProvider {
@@ -37,11 +36,12 @@
fun cutoutInfoForCurrentDisplayAndRotation(): SysUICutoutInformation?
}
+@PerDisplaySingleton
class SysUICutoutProviderImpl
-@AssistedInject
+@Inject
constructor(
- @Assisted private val context: Context,
- @Assisted private val cameraProtectionLoader: CameraProtectionLoader,
+ private val context: Context,
+ private val cameraProtectionLoader: CameraProtectionLoader,
) : SysUICutoutProvider {
private val cameraProtectionList by lazy {
@@ -81,12 +81,4 @@
)
return rotatedBoundsOut
}
-
- @AssistedFactory
- interface Factory {
- fun create(
- context: Context,
- cameraProtectionLoader: CameraProtectionLoader,
- ): SysUICutoutProviderImpl
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/display/dagger/PerDisplayCommonModule.kt b/packages/SystemUI/src/com/android/systemui/display/dagger/PerDisplayCommonModule.kt
index edb4f1e..9c264b2 100644
--- a/packages/SystemUI/src/com/android/systemui/display/dagger/PerDisplayCommonModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/display/dagger/PerDisplayCommonModule.kt
@@ -19,6 +19,10 @@
import android.content.Context
import android.view.Display
import com.android.app.displaylib.DisplayRepository
+import com.android.systemui.CameraProtectionLoader
+import com.android.systemui.CameraProtectionLoaderImpl
+import com.android.systemui.SysUICutoutProvider
+import com.android.systemui.SysUICutoutProviderImpl
import com.android.systemui.coroutines.newTracingContext
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
@@ -69,10 +73,22 @@
@DisplayAware
fun sysUiDarkIconDispatcher(impl: DarkIconDispatcherImpl): SysuiDarkIconDispatcher
+ @Binds @DisplayAware fun sysUICutoutProvider(impl: SysUICutoutProviderImpl): SysUICutoutProvider
+
companion object {
@Provides
@PerDisplaySingleton
+ @DisplayAware
+ fun cameraProtectionLoader(
+ factory: CameraProtectionLoaderImpl.Factory,
+ @DisplayAware context: Context,
+ ): CameraProtectionLoader {
+ return factory.create(context)
+ }
+
+ @Provides
+ @PerDisplaySingleton
fun provideDisplay(
@DisplayId displayId: Int,
displayRepository: DisplayRepository,
diff --git a/packages/SystemUI/src/com/android/systemui/display/dagger/SystemUIDisplaySubcomponent.kt b/packages/SystemUI/src/com/android/systemui/display/dagger/SystemUIDisplaySubcomponent.kt
index 79e3e93..500e189 100644
--- a/packages/SystemUI/src/com/android/systemui/display/dagger/SystemUIDisplaySubcomponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/display/dagger/SystemUIDisplaySubcomponent.kt
@@ -16,6 +16,7 @@
package com.android.systemui.display.dagger
+import com.android.systemui.SysUICutoutProvider
import com.android.systemui.common.ui.ConfigurationState
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent.PerDisplaySingleton
import com.android.systemui.display.data.repository.DisplayStateRepository
@@ -67,6 +68,8 @@
@get:DisplayAware val configurationState: ConfigurationState
+ @get:DisplayAware val sysUICutoutProvider: SysUICutoutProvider
+
@Subcomponent.Factory
interface Factory {
fun create(@BindsInstance @DisplayId displayId: Int): SystemUIDisplaySubcomponent
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt
index ddf0691..ba7da57 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarModule.kt
@@ -19,12 +19,11 @@
import android.content.Context
import android.view.Display
import android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR
-import com.android.systemui.CameraProtectionLoader
+import com.android.app.displaylib.PerDisplayRepository
import com.android.systemui.CoreStartable
-import com.android.systemui.SysUICutoutProvider
-import com.android.systemui.SysUICutoutProviderImpl
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Main
+import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepositoryImpl
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.LogBufferFactory
@@ -181,23 +180,18 @@
@Provides
@SysUISingleton
- fun sysUiCutoutProvider(
- factory: SysUICutoutProviderImpl.Factory,
- context: Context,
- cameraProtectionLoader: CameraProtectionLoader,
- ): SysUICutoutProvider {
- return factory.create(context, cameraProtectionLoader)
- }
-
- @Provides
- @SysUISingleton
fun contentInsetsProvider(
factory: StatusBarContentInsetsProviderImpl.Factory,
context: Context,
configurationController: ConfigurationController,
- sysUICutoutProvider: SysUICutoutProvider,
+ displaySubcomponentRepo: PerDisplayRepository<SystemUIDisplaySubcomponent>,
): StatusBarContentInsetsProvider {
- return factory.create(context, configurationController, sysUICutoutProvider)
+ val displaySubcomponent = displaySubcomponentRepo[Display.DEFAULT_DISPLAY]!!
+ return factory.create(
+ context,
+ configurationController,
+ displaySubcomponent.sysUICutoutProvider,
+ )
}
@Provides
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStore.kt b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStore.kt
index 3cd4b5c..807c269 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStore.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStore.kt
@@ -17,11 +17,11 @@
package com.android.systemui.statusbar.data.repository
import android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR
-import com.android.systemui.CameraProtectionLoaderImpl
+import com.android.app.displaylib.PerDisplayRepository
import com.android.systemui.CoreStartable
-import com.android.systemui.SysUICutoutProviderImpl
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
+import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
import com.android.systemui.display.data.repository.DisplayRepository
import com.android.systemui.display.data.repository.DisplayWindowPropertiesRepository
import com.android.systemui.display.data.repository.PerDisplayStore
@@ -49,8 +49,7 @@
private val factory: StatusBarContentInsetsProviderImpl.Factory,
private val displayWindowPropertiesRepository: DisplayWindowPropertiesRepository,
private val statusBarConfigurationControllerStore: StatusBarConfigurationControllerStore,
- private val sysUICutoutProviderFactory: SysUICutoutProviderImpl.Factory,
- private val cameraProtectionLoaderFactory: CameraProtectionLoaderImpl.Factory,
+ private val displaySubcomponentRepo: PerDisplayRepository<SystemUIDisplaySubcomponent>,
) :
StatusBarContentInsetsProviderStore,
StatusBarPerDisplayStoreImpl<StatusBarContentInsetsProvider>(
@@ -64,13 +63,9 @@
val context = displayWindowProperties.context
val configurationController =
statusBarConfigurationControllerStore.forDisplay(displayId) ?: return null
- val cameraProtectionLoader = cameraProtectionLoaderFactory.create(context)
+ val displaySubcomponent = displaySubcomponentRepo[displayId] ?: return null
return factory
- .create(
- context,
- configurationController,
- sysUICutoutProviderFactory.create(context, cameraProtectionLoader),
- )
+ .create(context, configurationController, displaySubcomponent.sysUICutoutProvider)
.also { it.start() }
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSysUICutoutProviderFactory.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSysUICutoutProviderFactory.kt
deleted file mode 100644
index 4eb3780..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/FakeSysUICutoutProviderFactory.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2024 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
-
-import android.content.Context
-import org.mockito.kotlin.mock
-
-class FakeSysUICutoutProviderFactory : SysUICutoutProviderImpl.Factory {
-
- override fun create(
- context: Context,
- cameraProtectionLoader: CameraProtectionLoader,
- ): SysUICutoutProviderImpl {
- return mock<SysUICutoutProviderImpl>()
- }
-}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/SysUICutoutProviderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/SysUICutoutProviderKosmos.kt
deleted file mode 100644
index 412ed72..0000000
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/SysUICutoutProviderKosmos.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2024 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
-
-import com.android.systemui.kosmos.Kosmos
-
-val Kosmos.fakeSysUICutoutProviderFactory by Kosmos.Fixture { FakeSysUICutoutProviderFactory() }
-
-var Kosmos.sysUICutoutProviderFactory: SysUICutoutProviderImpl.Factory by
- Kosmos.Fixture { fakeSysUICutoutProviderFactory }
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayRepositoryKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayRepositoryKosmos.kt
index 5cf3c00..b7d801e 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayRepositoryKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/display/data/repository/DisplayRepositoryKosmos.kt
@@ -22,6 +22,7 @@
import android.view.Display
import android.view.mockIWindowManager
import com.android.app.displaylib.fakes.FakePerDisplayRepository
+import com.android.systemui.SysUICutoutProvider
import com.android.systemui.common.ui.ConfigurationState
import com.android.systemui.common.ui.configurationState
import com.android.systemui.display.dagger.SystemUIDisplaySubcomponent
@@ -104,6 +105,9 @@
override val configurationState: ConfigurationState
get() = configurationState
+ override val sysUICutoutProvider: SysUICutoutProvider
+ get() = mock<SysUICutoutProvider>()
+
override val homeStatusBarComponentFactory: HomeStatusBarComponent.Factory
get() = mock<HomeStatusBarComponent.Factory>()
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStoreKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStoreKosmos.kt
index af7a463..5e22a65 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStoreKosmos.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/data/repository/StatusBarContentInsetsProviderStoreKosmos.kt
@@ -16,13 +16,12 @@
package com.android.systemui.statusbar.data.repository
-import com.android.systemui.cameraProtectionLoaderFactory
import com.android.systemui.display.data.repository.displayRepository
+import com.android.systemui.display.data.repository.displaySubcomponentPerDisplayRepository
import com.android.systemui.display.data.repository.displayWindowPropertiesRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.statusbar.layout.statusBarContentInsetsProviderFactory
-import com.android.systemui.sysUICutoutProviderFactory
val Kosmos.fakeStatusBarContentInsetsProviderStore by
Kosmos.Fixture { FakeStatusBarContentInsetsProviderStore() }
@@ -35,8 +34,7 @@
statusBarContentInsetsProviderFactory,
displayWindowPropertiesRepository,
statusBarConfigurationControllerStore,
- sysUICutoutProviderFactory,
- cameraProtectionLoaderFactory,
+ displaySubcomponentPerDisplayRepository,
)
}