Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt +61 −73 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,8 @@ * limitations under the License. * limitations under the License. */ */ @file:OptIn(ExperimentalCoroutinesApi::class) package com.android.systemui.statusbar.notification.collection.coordinator package com.android.systemui.statusbar.notification.collection.coordinator import android.app.Notification import android.app.Notification Loading @@ -22,83 +24,92 @@ import android.app.NotificationManager import android.os.UserHandle import android.os.UserHandle import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import android.service.notification.StatusBarNotification import android.service.notification.StatusBarNotification import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.keyguardUpdateMonitor import com.android.server.notification.Flags.FLAG_SCREENSHARE_NOTIFICATION_HIDING import com.android.server.notification.Flags.FLAG_SCREENSHARE_NOTIFICATION_HIDING import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.flags.andSceneContainer import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.plugins.statusbar.fakeStatusBarStateController import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.DynamicPrivacyController import com.android.systemui.statusbar.notification.DynamicPrivacyController import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable import com.android.systemui.statusbar.notification.collection.notifPipeline import com.android.systemui.statusbar.notification.dynamicPrivacyController import com.android.systemui.statusbar.notification.mockDynamicPrivacyController import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.mockSensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.sensitiveNotificationProtectionController import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.withArgCaptor import com.android.systemui.util.mockito.withArgCaptor import dagger.BindsInstance import kotlinx.coroutines.ExperimentalCoroutinesApi import dagger.Component import kotlinx.coroutines.CoroutineScope import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue import org.junit.Test import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.Mockito.never import org.mockito.kotlin.any import org.mockito.Mockito.verify import org.mockito.kotlin.eq import org.mockito.Mockito.`when` as whenever import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(ParameterizedAndroidJunit4::class) class SensitiveContentCoordinatorTest : SysuiTestCase() { class SensitiveContentCoordinatorTest(flags: FlagsParameterization) : SysuiTestCase() { val kosmos = testKosmos() val kosmos = testKosmos().apply { val dynamicPrivacyController: DynamicPrivacyController = mock() // Override some Kosmos objects with mocks or fakes for easier testability val lockscreenUserManager: NotificationLockscreenUserManager = mock() dynamicPrivacyController = mockDynamicPrivacyController val pipeline: NotifPipeline = mock() sensitiveNotificationProtectionController = val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock() mockSensitiveNotificationProtectionController val statusBarStateController: StatusBarStateController = mock() statusBarStateController = fakeStatusBarStateController val keyguardStateController: KeyguardStateController = mock() } val mSelectedUserInteractor: SelectedUserInteractor = mock() val dynamicPrivacyController: DynamicPrivacyController = kosmos.mockDynamicPrivacyController val lockscreenUserManager: NotificationLockscreenUserManager = kosmos.notificationLockscreenUserManager val pipeline: NotifPipeline = kosmos.notifPipeline val keyguardUpdateMonitor: KeyguardUpdateMonitor = kosmos.keyguardUpdateMonitor val statusBarStateController: SysuiStatusBarStateController = kosmos.fakeStatusBarStateController val sensitiveNotificationProtectionController: SensitiveNotificationProtectionController = val sensitiveNotificationProtectionController: SensitiveNotificationProtectionController = mock() kosmos.mockSensitiveNotificationProtectionController val deviceEntryInteractor: DeviceEntryInteractor = mock() val sceneInteractor: SceneInteractor = kosmos.sceneInteractor val sceneInteractor: SceneInteractor = mock() val coordinator: SensitiveContentCoordinator by lazy { kosmos.sensitiveContentCoordinator } val coordinator: SensitiveContentCoordinator = DaggerTestSensitiveContentCoordinatorComponent.factory() companion object { .create( @JvmStatic dynamicPrivacyController, @Parameters(name = "{0}") lockscreenUserManager, fun getParams(): List<FlagsParameterization> { keyguardUpdateMonitor, return FlagsParameterization.allCombinationsOf().andSceneContainer() statusBarStateController, } keyguardStateController, } mSelectedUserInteractor, sensitiveNotificationProtectionController, init { deviceEntryInteractor, mSetFlagsRule.setFlagsParameterization(flags) sceneInteractor, } kosmos.applicationCoroutineScope, ) .coordinator @Test @Test fun onDynamicPrivacyChanged_invokeInvalidationListener() { fun onDynamicPrivacyChanged_invokeInvalidationListener() { Loading Loading @@ -143,7 +154,7 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { fun screenshareSecretFilter_flagDisabled_filterNoAdded() { fun screenshareSecretFilter_flagDisabled_filterNoAdded() { coordinator.attach(pipeline) coordinator.attach(pipeline) verify(pipeline, never()).addFinalizeFilter(any(NotifFilter::class.java)) verify(pipeline, never()).addFinalizeFilter(any()) } } @Test @Test Loading Loading @@ -675,13 +686,13 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { whenever(lockscreenUserManager.isLockscreenPublicMode(1)).thenReturn(true) whenever(lockscreenUserManager.isLockscreenPublicMode(1)).thenReturn(true) whenever(lockscreenUserManager.userAllowsPrivateNotificationsInPublic(1)).thenReturn(false) whenever(lockscreenUserManager.userAllowsPrivateNotificationsInPublic(1)).thenReturn(false) whenever(dynamicPrivacyController.isDynamicallyUnlocked).thenReturn(true) whenever(dynamicPrivacyController.isDynamicallyUnlocked).thenReturn(true) whenever(statusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD) whenever(keyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing(any())) whenever(keyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing(any())) .thenReturn(true) .thenReturn(true) val entry = fakeNotification(2, true) val entry = fakeNotification(2, true) whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(sensitiveNotificationProtectionController.shouldProtectNotification(any())) whenever(sensitiveNotificationProtectionController.shouldProtectNotification(any())) .thenReturn(true) .thenReturn(true) statusBarStateController.state = StatusBarState.KEYGUARD onBeforeRenderListListener.onBeforeRenderList(listOf(entry)) onBeforeRenderListListener.onBeforeRenderList(listOf(entry)) Loading Loading @@ -733,26 +744,3 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { return notificationEntry return notificationEntry } } } } @CoordinatorScope @Component(modules = [SensitiveContentCoordinatorModule::class]) interface TestSensitiveContentCoordinatorComponent { val coordinator: SensitiveContentCoordinator @Component.Factory interface Factory { fun create( @BindsInstance dynamicPrivacyController: DynamicPrivacyController, @BindsInstance lockscreenUserManager: NotificationLockscreenUserManager, @BindsInstance keyguardUpdateMonitor: KeyguardUpdateMonitor, @BindsInstance statusBarStateController: StatusBarStateController, @BindsInstance keyguardStateController: KeyguardStateController, @BindsInstance selectedUserInteractor: SelectedUserInteractor, @BindsInstance sensitiveNotificationProtectionController: SensitiveNotificationProtectionController, @BindsInstance deviceEntryInteractor: DeviceEntryInteractor, @BindsInstance sceneInteractor: SceneInteractor, @BindsInstance @Application scope: CoroutineScope, ): TestSensitiveContentCoordinatorComponent } } packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt +4 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.scene.domain.interactor.sceneBackInteractor import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.FakeStatusBarStateController import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock Loading @@ -49,3 +50,6 @@ var Kosmos.statusBarStateController: SysuiStatusBarStateController by { alternateBouncerInteractor }, { alternateBouncerInteractor }, ) ) } } var Kosmos.fakeStatusBarStateController: SysuiStatusBarStateController by Kosmos.Fixture { FakeStatusBarStateController() } packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerKosmos.kt 0 → 100644 +34 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.notification import com.android.systemui.kosmos.Kosmos import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.keyguardStateController import org.mockito.kotlin.mock var Kosmos.dynamicPrivacyController: DynamicPrivacyController by Kosmos.Fixture { DynamicPrivacyController( notificationLockscreenUserManager, keyguardStateController, statusBarStateController, ) } var Kosmos.mockDynamicPrivacyController: DynamicPrivacyController by Kosmos.Fixture { mock() } packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorKosmos.kt 0 → 100644 +47 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.notification.collection.coordinator import com.android.keyguard.keyguardUpdateMonitor import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.statusbar.notification.dynamicPrivacyController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.keyguardStateController import com.android.systemui.statusbar.policy.sensitiveNotificationProtectionController import com.android.systemui.user.domain.interactor.selectedUserInteractor import kotlinx.coroutines.ExperimentalCoroutinesApi @OptIn(ExperimentalCoroutinesApi::class) var Kosmos.sensitiveContentCoordinator: SensitiveContentCoordinator by Kosmos.Fixture { SensitiveContentCoordinatorImpl( dynamicPrivacyController, notificationLockscreenUserManager, keyguardUpdateMonitor, statusBarStateController, keyguardStateController, selectedUserInteractor, sensitiveNotificationProtectionController, deviceEntryInteractor, sceneInteractor, testScope, ) } packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerKosmos.kt 0 → 100644 +26 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.policy import com.android.systemui.kosmos.Kosmos import org.mockito.kotlin.mock var Kosmos.sensitiveNotificationProtectionController: SensitiveNotificationProtectionController by Kosmos.Fixture { mockSensitiveNotificationProtectionController } val Kosmos.mockSensitiveNotificationProtectionController: SensitiveNotificationProtectionController by Kosmos.Fixture { mock<SensitiveNotificationProtectionController>() } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorTest.kt +61 −73 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,8 @@ * limitations under the License. * limitations under the License. */ */ @file:OptIn(ExperimentalCoroutinesApi::class) package com.android.systemui.statusbar.notification.collection.coordinator package com.android.systemui.statusbar.notification.collection.coordinator import android.app.Notification import android.app.Notification Loading @@ -22,83 +24,92 @@ import android.app.NotificationManager import android.os.UserHandle import android.os.UserHandle import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.FlagsParameterization import android.service.notification.StatusBarNotification import android.service.notification.StatusBarNotification import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.KeyguardUpdateMonitor import com.android.keyguard.keyguardUpdateMonitor import com.android.server.notification.Flags.FLAG_SCREENSHARE_NOTIFICATION_HIDING import com.android.server.notification.Flags.FLAG_SCREENSHARE_NOTIFICATION_HIDING import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.flags.andSceneContainer import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor import com.android.systemui.plugins.statusbar.fakeStatusBarStateController import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.domain.interactor.SceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.NotificationLockscreenUserManager import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.RankingBuilder import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.StatusBarState import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.notification.DynamicPrivacyController import com.android.systemui.statusbar.notification.DynamicPrivacyController import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.ListEntry import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntry import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener import com.android.systemui.statusbar.notification.collection.listbuilder.OnBeforeRenderListListener import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Invalidator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifFilter import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable import com.android.systemui.statusbar.notification.collection.notifPipeline import com.android.systemui.statusbar.notification.dynamicPrivacyController import com.android.systemui.statusbar.notification.mockDynamicPrivacyController import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.mockSensitiveNotificationProtectionController import com.android.systemui.statusbar.policy.sensitiveNotificationProtectionController import com.android.systemui.testKosmos import com.android.systemui.testKosmos import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.withArgCaptor import com.android.systemui.util.mockito.withArgCaptor import dagger.BindsInstance import kotlinx.coroutines.ExperimentalCoroutinesApi import dagger.Component import kotlinx.coroutines.CoroutineScope import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue import org.junit.Test import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.Mockito.never import org.mockito.kotlin.any import org.mockito.Mockito.verify import org.mockito.kotlin.eq import org.mockito.Mockito.`when` as whenever import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import platform.test.runner.parameterized.ParameterizedAndroidJunit4 import platform.test.runner.parameterized.Parameters @SmallTest @SmallTest @RunWith(AndroidJUnit4::class) @RunWith(ParameterizedAndroidJunit4::class) class SensitiveContentCoordinatorTest : SysuiTestCase() { class SensitiveContentCoordinatorTest(flags: FlagsParameterization) : SysuiTestCase() { val kosmos = testKosmos() val kosmos = testKosmos().apply { val dynamicPrivacyController: DynamicPrivacyController = mock() // Override some Kosmos objects with mocks or fakes for easier testability val lockscreenUserManager: NotificationLockscreenUserManager = mock() dynamicPrivacyController = mockDynamicPrivacyController val pipeline: NotifPipeline = mock() sensitiveNotificationProtectionController = val keyguardUpdateMonitor: KeyguardUpdateMonitor = mock() mockSensitiveNotificationProtectionController val statusBarStateController: StatusBarStateController = mock() statusBarStateController = fakeStatusBarStateController val keyguardStateController: KeyguardStateController = mock() } val mSelectedUserInteractor: SelectedUserInteractor = mock() val dynamicPrivacyController: DynamicPrivacyController = kosmos.mockDynamicPrivacyController val lockscreenUserManager: NotificationLockscreenUserManager = kosmos.notificationLockscreenUserManager val pipeline: NotifPipeline = kosmos.notifPipeline val keyguardUpdateMonitor: KeyguardUpdateMonitor = kosmos.keyguardUpdateMonitor val statusBarStateController: SysuiStatusBarStateController = kosmos.fakeStatusBarStateController val sensitiveNotificationProtectionController: SensitiveNotificationProtectionController = val sensitiveNotificationProtectionController: SensitiveNotificationProtectionController = mock() kosmos.mockSensitiveNotificationProtectionController val deviceEntryInteractor: DeviceEntryInteractor = mock() val sceneInteractor: SceneInteractor = kosmos.sceneInteractor val sceneInteractor: SceneInteractor = mock() val coordinator: SensitiveContentCoordinator by lazy { kosmos.sensitiveContentCoordinator } val coordinator: SensitiveContentCoordinator = DaggerTestSensitiveContentCoordinatorComponent.factory() companion object { .create( @JvmStatic dynamicPrivacyController, @Parameters(name = "{0}") lockscreenUserManager, fun getParams(): List<FlagsParameterization> { keyguardUpdateMonitor, return FlagsParameterization.allCombinationsOf().andSceneContainer() statusBarStateController, } keyguardStateController, } mSelectedUserInteractor, sensitiveNotificationProtectionController, init { deviceEntryInteractor, mSetFlagsRule.setFlagsParameterization(flags) sceneInteractor, } kosmos.applicationCoroutineScope, ) .coordinator @Test @Test fun onDynamicPrivacyChanged_invokeInvalidationListener() { fun onDynamicPrivacyChanged_invokeInvalidationListener() { Loading Loading @@ -143,7 +154,7 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { fun screenshareSecretFilter_flagDisabled_filterNoAdded() { fun screenshareSecretFilter_flagDisabled_filterNoAdded() { coordinator.attach(pipeline) coordinator.attach(pipeline) verify(pipeline, never()).addFinalizeFilter(any(NotifFilter::class.java)) verify(pipeline, never()).addFinalizeFilter(any()) } } @Test @Test Loading Loading @@ -675,13 +686,13 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { whenever(lockscreenUserManager.isLockscreenPublicMode(1)).thenReturn(true) whenever(lockscreenUserManager.isLockscreenPublicMode(1)).thenReturn(true) whenever(lockscreenUserManager.userAllowsPrivateNotificationsInPublic(1)).thenReturn(false) whenever(lockscreenUserManager.userAllowsPrivateNotificationsInPublic(1)).thenReturn(false) whenever(dynamicPrivacyController.isDynamicallyUnlocked).thenReturn(true) whenever(dynamicPrivacyController.isDynamicallyUnlocked).thenReturn(true) whenever(statusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD) whenever(keyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing(any())) whenever(keyguardUpdateMonitor.getUserUnlockedWithBiometricAndIsBypassing(any())) .thenReturn(true) .thenReturn(true) val entry = fakeNotification(2, true) val entry = fakeNotification(2, true) whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(sensitiveNotificationProtectionController.isSensitiveStateActive).thenReturn(true) whenever(sensitiveNotificationProtectionController.shouldProtectNotification(any())) whenever(sensitiveNotificationProtectionController.shouldProtectNotification(any())) .thenReturn(true) .thenReturn(true) statusBarStateController.state = StatusBarState.KEYGUARD onBeforeRenderListListener.onBeforeRenderList(listOf(entry)) onBeforeRenderListListener.onBeforeRenderList(listOf(entry)) Loading Loading @@ -733,26 +744,3 @@ class SensitiveContentCoordinatorTest : SysuiTestCase() { return notificationEntry return notificationEntry } } } } @CoordinatorScope @Component(modules = [SensitiveContentCoordinatorModule::class]) interface TestSensitiveContentCoordinatorComponent { val coordinator: SensitiveContentCoordinator @Component.Factory interface Factory { fun create( @BindsInstance dynamicPrivacyController: DynamicPrivacyController, @BindsInstance lockscreenUserManager: NotificationLockscreenUserManager, @BindsInstance keyguardUpdateMonitor: KeyguardUpdateMonitor, @BindsInstance statusBarStateController: StatusBarStateController, @BindsInstance keyguardStateController: KeyguardStateController, @BindsInstance selectedUserInteractor: SelectedUserInteractor, @BindsInstance sensitiveNotificationProtectionController: SensitiveNotificationProtectionController, @BindsInstance deviceEntryInteractor: DeviceEntryInteractor, @BindsInstance sceneInteractor: SceneInteractor, @BindsInstance @Application scope: CoroutineScope, ): TestSensitiveContentCoordinatorComponent } }
packages/SystemUI/tests/utils/src/com/android/systemui/plugins/statusbar/StatusBarStateControllerKosmos.kt +4 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.systemui.scene.domain.interactor.sceneBackInteractor import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor import com.android.systemui.scene.domain.interactor.sceneContainerOcclusionInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.statusbar.FakeStatusBarStateController import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.StatusBarStateControllerImpl import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.statusbar.SysuiStatusBarStateController import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock Loading @@ -49,3 +50,6 @@ var Kosmos.statusBarStateController: SysuiStatusBarStateController by { alternateBouncerInteractor }, { alternateBouncerInteractor }, ) ) } } var Kosmos.fakeStatusBarStateController: SysuiStatusBarStateController by Kosmos.Fixture { FakeStatusBarStateController() }
packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/DynamicPrivacyControllerKosmos.kt 0 → 100644 +34 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.notification import com.android.systemui.kosmos.Kosmos import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.keyguardStateController import org.mockito.kotlin.mock var Kosmos.dynamicPrivacyController: DynamicPrivacyController by Kosmos.Fixture { DynamicPrivacyController( notificationLockscreenUserManager, keyguardStateController, statusBarStateController, ) } var Kosmos.mockDynamicPrivacyController: DynamicPrivacyController by Kosmos.Fixture { mock() }
packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/coordinator/SensitiveContentCoordinatorKosmos.kt 0 → 100644 +47 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.notification.collection.coordinator import com.android.keyguard.keyguardUpdateMonitor import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testScope import com.android.systemui.plugins.statusbar.statusBarStateController import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.statusbar.notification.dynamicPrivacyController import com.android.systemui.statusbar.notificationLockscreenUserManager import com.android.systemui.statusbar.policy.keyguardStateController import com.android.systemui.statusbar.policy.sensitiveNotificationProtectionController import com.android.systemui.user.domain.interactor.selectedUserInteractor import kotlinx.coroutines.ExperimentalCoroutinesApi @OptIn(ExperimentalCoroutinesApi::class) var Kosmos.sensitiveContentCoordinator: SensitiveContentCoordinator by Kosmos.Fixture { SensitiveContentCoordinatorImpl( dynamicPrivacyController, notificationLockscreenUserManager, keyguardUpdateMonitor, statusBarStateController, keyguardStateController, selectedUserInteractor, sensitiveNotificationProtectionController, deviceEntryInteractor, sceneInteractor, testScope, ) }
packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/policy/SensitiveNotificationProtectionControllerKosmos.kt 0 → 100644 +26 −0 Original line number Original line Diff line number Diff line /* * 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.statusbar.policy import com.android.systemui.kosmos.Kosmos import org.mockito.kotlin.mock var Kosmos.sensitiveNotificationProtectionController: SensitiveNotificationProtectionController by Kosmos.Fixture { mockSensitiveNotificationProtectionController } val Kosmos.mockSensitiveNotificationProtectionController: SensitiveNotificationProtectionController by Kosmos.Fixture { mock<SensitiveNotificationProtectionController>() }