Loading packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalAutoOpenInteractorTest.kt +17 −25 Original line number Diff line number Diff line Loading @@ -55,9 +55,11 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { fun setUp() { runBlocking { kosmos.fakeUserRepository.asMainUser() } with(kosmos.fakeSettings) { putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, false, MAIN_USER_ID) putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, false, MAIN_USER_ID) putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, false, MAIN_USER_ID) putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_NEVER, MAIN_USER_ID, ) } } Loading @@ -67,9 +69,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING, MAIN_USER_ID, ) Loading @@ -91,9 +93,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_DOCKED, MAIN_USER_ID, ) Loading @@ -118,9 +120,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING_UPRIGHT, MAIN_USER_ID, ) Loading @@ -144,19 +146,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, false, MAIN_USER_ID, ) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, false, MAIN_USER_ID, ) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, false, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_NEVER, MAIN_USER_ID, ) Loading packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSettingsInteractorTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.app.admin.devicePolicyManager import android.content.Intent import android.content.pm.UserInfo import android.os.UserManager import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest Loading @@ -32,6 +34,7 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.settings.fakeUserTracker import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.fakeUserRepository import com.android.systemui.util.settings.fakeSettings import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull Loading Loading @@ -82,6 +85,19 @@ class CommunalSettingsInteractorTest : SysuiTestCase() { assertEquals(USER_INFO_WORK.id, disallowedUser!!.id) } @Test fun whenToStartHub_matchesRepository() = kosmos.runTest { fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING, MAIN_USER_INFO.id, ) val startCondition by collectLastValue(underTest.whenToStartHub) assertEquals(startCondition, WhenToStartHub.WHILE_CHARGING) } private fun setKeyguardFeaturesDisabled(user: UserInfo, disabledFlags: Int) { whenever( kosmos.devicePolicyManager.getKeyguardDisabledFeatures( Loading packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt +36 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.data.repository.CommunalSettingsRepositoryModule.Companion.DEFAULT_BACKGROUND_TYPE import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main Loading Loading @@ -64,6 +65,12 @@ interface CommunalSettingsRepository { */ fun getWhenToDreamState(user: UserInfo): Flow<WhenToDream> /** * Returns a[WhenToStartHub] for the specified user, indicating what state the device should be * in to automatically display the hub. */ fun getWhenToStartHubState(user: UserInfo): Flow<WhenToStartHub> /** Returns whether glanceable hub is enabled by the current user. */ fun getSettingEnabledByUser(user: UserInfo): Flow<Boolean> Loading Loading @@ -124,6 +131,10 @@ constructor( resources.getBoolean(com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault) } private val whenToStartHubByDefault by lazy { resources.getInteger(com.android.internal.R.integer.config_whenToStartHubModeDefault) } private val _suppressionReasons = MutableStateFlow<List<SuppressionReason>>( // Suppress hub by default until we get an initial update. Loading Loading @@ -195,6 +206,31 @@ constructor( } .flowOn(bgDispatcher) override fun getWhenToStartHubState(user: UserInfo): Flow<WhenToStartHub> = secureSettings .observerFlow( userId = user.id, names = arrayOf(Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB), ) .emitOnStart() .map { when ( secureSettings.getIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, whenToStartHubByDefault, user.id, ) ) { Settings.Secure.GLANCEABLE_HUB_START_NEVER -> WhenToStartHub.NEVER Settings.Secure.GLANCEABLE_HUB_START_CHARGING -> WhenToStartHub.WHILE_CHARGING Settings.Secure.GLANCEABLE_HUB_START_CHARGING_UPRIGHT -> WhenToStartHub.WHILE_CHARGING_AND_POSTURED Settings.Secure.GLANCEABLE_HUB_START_DOCKED -> WhenToStartHub.WHILE_DOCKED else -> WhenToStartHub.NEVER } } .flowOn(bgDispatcher) override fun getAllowedByDevicePolicy(user: UserInfo): Flow<Boolean> = broadcastDispatcher .broadcastFlow( Loading packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalAutoOpenInteractor.kt +8 −8 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import com.android.systemui.communal.data.model.FEATURE_AUTO_OPEN import com.android.systemui.communal.data.model.FEATURE_MANUAL_OPEN import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.posturing.domain.interactor.PosturingInteractor import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dock.DockManager Loading @@ -49,17 +49,17 @@ constructor( @Named(SWIPE_TO_HUB) private val allowSwipeAlways: Boolean, ) { val shouldAutoOpen: Flow<Boolean> = communalSettingsInteractor.whenToDream .flatMapLatestConflated { whenToDream -> when (whenToDream) { WhenToDream.WHILE_CHARGING -> batteryInteractor.isDevicePluggedIn WhenToDream.WHILE_DOCKED -> { communalSettingsInteractor.whenToStartHub .flatMapLatestConflated { whenToStartHub -> when (whenToStartHub) { WhenToStartHub.WHILE_CHARGING -> batteryInteractor.isDevicePluggedIn WhenToStartHub.WHILE_DOCKED -> { allOf(batteryInteractor.isDevicePluggedIn, dockManager.retrieveIsDocked()) } WhenToDream.WHILE_POSTURED -> { WhenToStartHub.WHILE_CHARGING_AND_POSTURED -> { allOf(batteryInteractor.isDevicePluggedIn, posturingInteractor.postured) } WhenToDream.NEVER -> flowOf(false) WhenToStartHub.NEVER -> flowOf(false) } } .flowOn(backgroundContext) Loading packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSettingsInteractor.kt +8 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.communal.domain.interactor import android.content.pm.UserInfo import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import com.android.systemui.communal.data.model.FEATURE_AUTO_OPEN import com.android.systemui.communal.data.model.FEATURE_ENABLED import com.android.systemui.communal.data.model.FEATURE_MANUAL_OPEN Loading @@ -25,10 +24,12 @@ import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.data.repository.CommunalSettingsRepository import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.settings.UserTracker import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import java.util.concurrent.Executor import javax.inject.Inject Loading Loading @@ -79,6 +80,12 @@ constructor( repository.getWhenToDreamState(user) } /** When to automatically start hub for the currently selected user. */ val whenToStartHub: Flow<WhenToStartHub> = userInteractor.selectedUserInfo.flatMapLatest { user -> repository.getWhenToStartHubState(user) } /** Whether communal hub is allowed by device policy for the current user */ val allowedForCurrentUserByDevicePolicy: Flow<Boolean> = userInteractor.selectedUserInfo.flatMapLatestConflated { user -> Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalAutoOpenInteractorTest.kt +17 −25 Original line number Diff line number Diff line Loading @@ -55,9 +55,11 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { fun setUp() { runBlocking { kosmos.fakeUserRepository.asMainUser() } with(kosmos.fakeSettings) { putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, false, MAIN_USER_ID) putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, false, MAIN_USER_ID) putBoolForUser(Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, false, MAIN_USER_ID) putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_NEVER, MAIN_USER_ID, ) } } Loading @@ -67,9 +69,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING, MAIN_USER_ID, ) Loading @@ -91,9 +93,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_DOCKED, MAIN_USER_ID, ) Loading @@ -118,9 +120,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, true, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING_UPRIGHT, MAIN_USER_ID, ) Loading @@ -144,19 +146,9 @@ class CommunalAutoOpenInteractorTest : SysuiTestCase() { val shouldAutoOpen by collectLastValue(underTest.shouldAutoOpen) val suppressionReason by collectLastValue(underTest.suppressionReason) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, false, MAIN_USER_ID, ) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, false, MAIN_USER_ID, ) fakeSettings.putBoolForUser( Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED, false, fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_NEVER, MAIN_USER_ID, ) Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/communal/domain/interactor/CommunalSettingsInteractorTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -21,10 +21,12 @@ import android.app.admin.devicePolicyManager import android.content.Intent import android.content.pm.UserInfo import android.os.UserManager import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.collectLastValue import com.android.systemui.kosmos.runTest Loading @@ -32,6 +34,7 @@ import com.android.systemui.kosmos.useUnconfinedTestDispatcher import com.android.systemui.settings.fakeUserTracker import com.android.systemui.testKosmos import com.android.systemui.user.data.repository.fakeUserRepository import com.android.systemui.util.settings.fakeSettings import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull Loading Loading @@ -82,6 +85,19 @@ class CommunalSettingsInteractorTest : SysuiTestCase() { assertEquals(USER_INFO_WORK.id, disallowedUser!!.id) } @Test fun whenToStartHub_matchesRepository() = kosmos.runTest { fakeSettings.putIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, Settings.Secure.GLANCEABLE_HUB_START_CHARGING, MAIN_USER_INFO.id, ) val startCondition by collectLastValue(underTest.whenToStartHub) assertEquals(startCondition, WhenToStartHub.WHILE_CHARGING) } private fun setKeyguardFeaturesDisabled(user: UserInfo, disabledFlags: Int) { whenever( kosmos.devicePolicyManager.getKeyguardDisabledFeatures( Loading
packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt +36 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.data.repository.CommunalSettingsRepositoryModule.Companion.DEFAULT_BACKGROUND_TYPE import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main Loading Loading @@ -64,6 +65,12 @@ interface CommunalSettingsRepository { */ fun getWhenToDreamState(user: UserInfo): Flow<WhenToDream> /** * Returns a[WhenToStartHub] for the specified user, indicating what state the device should be * in to automatically display the hub. */ fun getWhenToStartHubState(user: UserInfo): Flow<WhenToStartHub> /** Returns whether glanceable hub is enabled by the current user. */ fun getSettingEnabledByUser(user: UserInfo): Flow<Boolean> Loading Loading @@ -124,6 +131,10 @@ constructor( resources.getBoolean(com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault) } private val whenToStartHubByDefault by lazy { resources.getInteger(com.android.internal.R.integer.config_whenToStartHubModeDefault) } private val _suppressionReasons = MutableStateFlow<List<SuppressionReason>>( // Suppress hub by default until we get an initial update. Loading Loading @@ -195,6 +206,31 @@ constructor( } .flowOn(bgDispatcher) override fun getWhenToStartHubState(user: UserInfo): Flow<WhenToStartHub> = secureSettings .observerFlow( userId = user.id, names = arrayOf(Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB), ) .emitOnStart() .map { when ( secureSettings.getIntForUser( Settings.Secure.WHEN_TO_START_GLANCEABLE_HUB, whenToStartHubByDefault, user.id, ) ) { Settings.Secure.GLANCEABLE_HUB_START_NEVER -> WhenToStartHub.NEVER Settings.Secure.GLANCEABLE_HUB_START_CHARGING -> WhenToStartHub.WHILE_CHARGING Settings.Secure.GLANCEABLE_HUB_START_CHARGING_UPRIGHT -> WhenToStartHub.WHILE_CHARGING_AND_POSTURED Settings.Secure.GLANCEABLE_HUB_START_DOCKED -> WhenToStartHub.WHILE_DOCKED else -> WhenToStartHub.NEVER } } .flowOn(bgDispatcher) override fun getAllowedByDevicePolicy(user: UserInfo): Flow<Boolean> = broadcastDispatcher .broadcastFlow( Loading
packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalAutoOpenInteractor.kt +8 −8 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ import com.android.systemui.communal.data.model.FEATURE_AUTO_OPEN import com.android.systemui.communal.data.model.FEATURE_MANUAL_OPEN import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.posturing.domain.interactor.PosturingInteractor import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dock.DockManager Loading @@ -49,17 +49,17 @@ constructor( @Named(SWIPE_TO_HUB) private val allowSwipeAlways: Boolean, ) { val shouldAutoOpen: Flow<Boolean> = communalSettingsInteractor.whenToDream .flatMapLatestConflated { whenToDream -> when (whenToDream) { WhenToDream.WHILE_CHARGING -> batteryInteractor.isDevicePluggedIn WhenToDream.WHILE_DOCKED -> { communalSettingsInteractor.whenToStartHub .flatMapLatestConflated { whenToStartHub -> when (whenToStartHub) { WhenToStartHub.WHILE_CHARGING -> batteryInteractor.isDevicePluggedIn WhenToStartHub.WHILE_DOCKED -> { allOf(batteryInteractor.isDevicePluggedIn, dockManager.retrieveIsDocked()) } WhenToDream.WHILE_POSTURED -> { WhenToStartHub.WHILE_CHARGING_AND_POSTURED -> { allOf(batteryInteractor.isDevicePluggedIn, posturingInteractor.postured) } WhenToDream.NEVER -> flowOf(false) WhenToStartHub.NEVER -> flowOf(false) } } .flowOn(backgroundContext) Loading
packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalSettingsInteractor.kt +8 −1 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.communal.domain.interactor import android.content.pm.UserInfo import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import com.android.systemui.communal.data.model.FEATURE_AUTO_OPEN import com.android.systemui.communal.data.model.FEATURE_ENABLED import com.android.systemui.communal.data.model.FEATURE_MANUAL_OPEN Loading @@ -25,10 +24,12 @@ import com.android.systemui.communal.data.model.SuppressionReason import com.android.systemui.communal.data.repository.CommunalSettingsRepository import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.communal.shared.model.WhenToDream import com.android.systemui.communal.shared.model.WhenToStartHub import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.settings.UserTracker import com.android.systemui.user.domain.interactor.SelectedUserInteractor import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow import com.android.systemui.utils.coroutines.flow.flatMapLatestConflated import java.util.concurrent.Executor import javax.inject.Inject Loading Loading @@ -79,6 +80,12 @@ constructor( repository.getWhenToDreamState(user) } /** When to automatically start hub for the currently selected user. */ val whenToStartHub: Flow<WhenToStartHub> = userInteractor.selectedUserInfo.flatMapLatest { user -> repository.getWhenToStartHubState(user) } /** Whether communal hub is allowed by device policy for the current user */ val allowedForCurrentUserByDevicePolicy: Flow<Boolean> = userInteractor.selectedUserInfo.flatMapLatestConflated { user -> Loading