Loading core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -2779,6 +2779,9 @@ If empty, logs "other" for all. --> <string-array name="config_loggable_dream_prefixes"></string-array> <!-- Whether to enable glanceable hub features on this device. --> <bool name="config_glanceableHubEnabled">false</bool> <!-- ComponentName of a dream to show whenever the system would otherwise have gone to sleep. When the PowerManager is asked to go to sleep, it will instead try to start this dream if possible. The dream should typically call startDozing() Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -2054,6 +2054,7 @@ <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" /> <java-symbol type="bool" name="config_keepDreamingWhenUnplugging" /> <java-symbol type="bool" name="config_glanceableHubEnabled" /> <java-symbol type="integer" name="config_keyguardDrawnTimeout" /> <java-symbol type="bool" name="config_goToSleepOnButtonPressTheaterMode" /> <java-symbol type="bool" name="config_supportLongPressPowerWhenNonInteractive" /> Loading packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt +65 −15 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL import android.app.admin.devicePolicyManager import android.content.Intent import android.content.pm.UserInfo import android.content.res.mainResources import android.os.UserManager.USER_TYPE_PROFILE_MANAGED import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags Loading @@ -29,6 +30,7 @@ import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_COMMUNAL_HUB import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2 import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.communal.data.model.DisabledReason Loading @@ -53,7 +55,8 @@ import org.mockito.ArgumentMatchers.eq @SmallTest @RunWith(AndroidJUnit4::class) class CommunalSettingsRepositoryImplTest : SysuiTestCase() { private val kosmos = testKosmos() private val kosmos = testKosmos().apply { mainResources = mContext.orCreateTestableResources.resources } private val testScope = kosmos.testScope private lateinit var underTest: CommunalSettingsRepository Loading @@ -67,6 +70,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { } @EnableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_bothEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true) Loading @@ -74,7 +78,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isTrue() } @DisableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_COMMUNAL_HUB, FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_bothDisabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) Loading @@ -82,7 +86,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isFalse() } @DisableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_COMMUNAL_HUB, FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_onlyClassicFlagEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true) Loading @@ -91,6 +95,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { } @EnableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_onlyTrunkFlagEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) Loading @@ -98,6 +103,57 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_mobileConfigEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) assertThat(underTest.getFlagEnabled()).isTrue() } @DisableFlags(FLAG_GLANCEABLE_HUB_V2, FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_onlyMobileConfigEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_onlyMobileFlagEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, false, ) assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_oldFlagIgnored() { // New config flag enabled. mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) // Old config flag disabled. kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) assertThat(underTest.getFlagEnabled()).isTrue() } @EnableFlags(FLAG_COMMUNAL_HUB) @Test fun secondaryUserIsInvalid() = Loading Loading @@ -134,7 +190,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id PRIMARY_USER.id, ) val enabledState by collectLastValue(underTest.getEnabledState(PRIMARY_USER)) assertThat(enabledState?.enabled).isFalse() Loading @@ -143,14 +199,14 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 1, SECONDARY_USER.id SECONDARY_USER.id, ) assertThat(enabledState?.enabled).isFalse() kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 1, PRIMARY_USER.id PRIMARY_USER.id, ) assertThat(enabledState?.enabled).isTrue() } Loading Loading @@ -201,7 +257,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id PRIMARY_USER.id, ) setKeyguardFeaturesDisabled(PRIMARY_USER, KEYGUARD_DISABLE_WIDGETS_ALL) Loading @@ -228,7 +284,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( GLANCEABLE_HUB_BACKGROUND_SETTING, type.value, PRIMARY_USER.id PRIMARY_USER.id, ) assertWithMessage( "Expected $type when $GLANCEABLE_HUB_BACKGROUND_SETTING is set to" + Loading @@ -253,12 +309,6 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { UserInfo(/* id= */ 0, /* name= */ "primary user", /* flags= */ UserInfo.FLAG_MAIN) val SECONDARY_USER = UserInfo(/* id= */ 1, /* name= */ "secondary user", /* flags= */ 0) val WORK_PROFILE = UserInfo( 10, "work", /* iconPath= */ "", /* flags= */ 0, USER_TYPE_PROFILE_MANAGED, ) UserInfo(10, "work", /* iconPath= */ "", /* flags= */ 0, USER_TYPE_PROFILE_MANAGED) } } packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt +37 −5 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL import android.content.IntentFilter import android.content.pm.UserInfo import android.content.res.Resources import android.os.UserHandle import android.provider.Settings import com.android.systemui.Flags.communalHub import com.android.systemui.Flags.glanceableHubV2 import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.communal.data.model.CommunalEnabledState import com.android.systemui.communal.data.model.DisabledReason Loading @@ -33,6 +35,7 @@ import com.android.systemui.communal.data.model.DisabledReason.DISABLED_REASON_U import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.util.kotlin.emitOnStart Loading @@ -53,13 +56,30 @@ interface CommunalSettingsRepository { fun getEnabledState(user: UserInfo): Flow<CommunalEnabledState> /** * Returns true if both the communal trunk-stable flag and resource flag are enabled. * Returns true if any glanceable hub functionality should be enabled via configs and flags. * * The trunk-stable flag is controlled by server rollout and is on all devices. The resource * flag is enabled via resource overlay only on products we want the hub to be present on. * This should be used for preventing basic glanceable hub functionality from running on devices * that don't need it. * * If the glanceable_hub_v2 flag is enabled, checks the config_glanceableHubEnabled Android * config boolean. Otherwise, checks the old config_communalServiceEnabled config and * communal_hub flag. */ fun getFlagEnabled(): Boolean /** * Returns true if the Android config config_glanceableHubEnabled and the glanceable_hub_v2 flag * are enabled. * * This should be used to flag off new glanceable hub or dream behavior that should launch * together with the new hub experience that brings the hub to mobile. * * The trunk-stable flag is controlled by server rollout and is on all devices. The Android * config flag is enabled via resource overlay only on products we want the hub to be present * on. */ fun getV2FlagEnabled(): Boolean /** Keyguard widgets enabled state by Device Policy Manager for the specified user. */ fun getAllowedByDevicePolicy(user: UserInfo): Flow<Boolean> Loading @@ -72,6 +92,7 @@ class CommunalSettingsRepositoryImpl @Inject constructor( @Background private val bgDispatcher: CoroutineDispatcher, @Main private val resources: Resources, private val featureFlagsClassic: FeatureFlagsClassic, private val secureSettings: SecureSettings, private val broadcastDispatcher: BroadcastDispatcher, Loading @@ -79,7 +100,18 @@ constructor( ) : CommunalSettingsRepository { override fun getFlagEnabled(): Boolean { return featureFlagsClassic.isEnabled(Flags.COMMUNAL_SERVICE_ENABLED) && communalHub() return if (getV2FlagEnabled()) { true } else { // This config (exposed as a classic feature flag) is targeted only to tablet. // TODO(b/379181581): clean up usages of communal_hub flag featureFlagsClassic.isEnabled(Flags.COMMUNAL_SERVICE_ENABLED) && communalHub() } } override fun getV2FlagEnabled(): Boolean { return resources.getBoolean(com.android.internal.R.bool.config_glanceableHubEnabled) && glanceableHubV2() } override fun getEnabledState(user: UserInfo): Flow<CommunalEnabledState> { Loading Loading @@ -128,7 +160,7 @@ constructor( secureSettings.getIntForUser( GLANCEABLE_HUB_BACKGROUND_SETTING, CommunalBackgroundType.ANIMATED.value, user.id user.id, ) CommunalBackgroundType.entries.find { type -> type.value == intType } ?: CommunalBackgroundType.ANIMATED Loading packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.communal.data.repository import android.app.admin.devicePolicyManager import android.content.res.mainResources import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.flags.featureFlagsClassic import com.android.systemui.kosmos.Kosmos Loading @@ -27,6 +28,7 @@ val Kosmos.communalSettingsRepository: CommunalSettingsRepository by Kosmos.Fixture { CommunalSettingsRepositoryImpl( bgDispatcher = testDispatcher, resources = mainResources, featureFlagsClassic = featureFlagsClassic, secureSettings = fakeSettings, broadcastDispatcher = broadcastDispatcher, Loading Loading
core/res/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -2779,6 +2779,9 @@ If empty, logs "other" for all. --> <string-array name="config_loggable_dream_prefixes"></string-array> <!-- Whether to enable glanceable hub features on this device. --> <bool name="config_glanceableHubEnabled">false</bool> <!-- ComponentName of a dream to show whenever the system would otherwise have gone to sleep. When the PowerManager is asked to go to sleep, it will instead try to start this dream if possible. The dream should typically call startDozing() Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -2054,6 +2054,7 @@ <java-symbol type="bool" name="config_allowTheaterModeWakeFromDock" /> <java-symbol type="bool" name="config_allowTheaterModeWakeFromWindowLayout" /> <java-symbol type="bool" name="config_keepDreamingWhenUnplugging" /> <java-symbol type="bool" name="config_glanceableHubEnabled" /> <java-symbol type="integer" name="config_keyguardDrawnTimeout" /> <java-symbol type="bool" name="config_goToSleepOnButtonPressTheaterMode" /> <java-symbol type="bool" name="config_supportLongPressPowerWhenNonInteractive" /> Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryImplTest.kt +65 −15 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL import android.app.admin.devicePolicyManager import android.content.Intent import android.content.pm.UserInfo import android.content.res.mainResources import android.os.UserManager.USER_TYPE_PROFILE_MANAGED import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags Loading @@ -29,6 +30,7 @@ import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.Flags.FLAG_COMMUNAL_HUB import com.android.systemui.Flags.FLAG_GLANCEABLE_HUB_V2 import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.communal.data.model.DisabledReason Loading @@ -53,7 +55,8 @@ import org.mockito.ArgumentMatchers.eq @SmallTest @RunWith(AndroidJUnit4::class) class CommunalSettingsRepositoryImplTest : SysuiTestCase() { private val kosmos = testKosmos() private val kosmos = testKosmos().apply { mainResources = mContext.orCreateTestableResources.resources } private val testScope = kosmos.testScope private lateinit var underTest: CommunalSettingsRepository Loading @@ -67,6 +70,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { } @EnableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_bothEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true) Loading @@ -74,7 +78,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isTrue() } @DisableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_COMMUNAL_HUB, FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_bothDisabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) Loading @@ -82,7 +86,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isFalse() } @DisableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_COMMUNAL_HUB, FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_onlyClassicFlagEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, true) Loading @@ -91,6 +95,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { } @EnableFlags(FLAG_COMMUNAL_HUB) @DisableFlags(FLAG_GLANCEABLE_HUB_V2) @Test fun getFlagEnabled_onlyTrunkFlagEnabled() { kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) Loading @@ -98,6 +103,57 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_mobileConfigEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) assertThat(underTest.getFlagEnabled()).isTrue() } @DisableFlags(FLAG_GLANCEABLE_HUB_V2, FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_onlyMobileConfigEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_onlyMobileFlagEnabled() { mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, false, ) assertThat(underTest.getFlagEnabled()).isFalse() } @EnableFlags(FLAG_GLANCEABLE_HUB_V2) @DisableFlags(FLAG_COMMUNAL_HUB) @Test fun getFlagEnabled_oldFlagIgnored() { // New config flag enabled. mContext.orCreateTestableResources.addOverride( com.android.internal.R.bool.config_glanceableHubEnabled, true, ) // Old config flag disabled. kosmos.fakeFeatureFlagsClassic.set(COMMUNAL_SERVICE_ENABLED, false) assertThat(underTest.getFlagEnabled()).isTrue() } @EnableFlags(FLAG_COMMUNAL_HUB) @Test fun secondaryUserIsInvalid() = Loading Loading @@ -134,7 +190,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id PRIMARY_USER.id, ) val enabledState by collectLastValue(underTest.getEnabledState(PRIMARY_USER)) assertThat(enabledState?.enabled).isFalse() Loading @@ -143,14 +199,14 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 1, SECONDARY_USER.id SECONDARY_USER.id, ) assertThat(enabledState?.enabled).isFalse() kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 1, PRIMARY_USER.id PRIMARY_USER.id, ) assertThat(enabledState?.enabled).isTrue() } Loading Loading @@ -201,7 +257,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( Settings.Secure.GLANCEABLE_HUB_ENABLED, 0, PRIMARY_USER.id PRIMARY_USER.id, ) setKeyguardFeaturesDisabled(PRIMARY_USER, KEYGUARD_DISABLE_WIDGETS_ALL) Loading @@ -228,7 +284,7 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { kosmos.fakeSettings.putIntForUser( GLANCEABLE_HUB_BACKGROUND_SETTING, type.value, PRIMARY_USER.id PRIMARY_USER.id, ) assertWithMessage( "Expected $type when $GLANCEABLE_HUB_BACKGROUND_SETTING is set to" + Loading @@ -253,12 +309,6 @@ class CommunalSettingsRepositoryImplTest : SysuiTestCase() { UserInfo(/* id= */ 0, /* name= */ "primary user", /* flags= */ UserInfo.FLAG_MAIN) val SECONDARY_USER = UserInfo(/* id= */ 1, /* name= */ "secondary user", /* flags= */ 0) val WORK_PROFILE = UserInfo( 10, "work", /* iconPath= */ "", /* flags= */ 0, USER_TYPE_PROFILE_MANAGED, ) UserInfo(10, "work", /* iconPath= */ "", /* flags= */ 0, USER_TYPE_PROFILE_MANAGED) } }
packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalSettingsRepository.kt +37 −5 Original line number Diff line number Diff line Loading @@ -20,9 +20,11 @@ import android.app.admin.DevicePolicyManager import android.app.admin.DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL import android.content.IntentFilter import android.content.pm.UserInfo import android.content.res.Resources import android.os.UserHandle import android.provider.Settings import com.android.systemui.Flags.communalHub import com.android.systemui.Flags.glanceableHubV2 import com.android.systemui.broadcast.BroadcastDispatcher import com.android.systemui.communal.data.model.CommunalEnabledState import com.android.systemui.communal.data.model.DisabledReason Loading @@ -33,6 +35,7 @@ import com.android.systemui.communal.data.model.DisabledReason.DISABLED_REASON_U import com.android.systemui.communal.shared.model.CommunalBackgroundType import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.flags.FeatureFlagsClassic import com.android.systemui.flags.Flags import com.android.systemui.util.kotlin.emitOnStart Loading @@ -53,13 +56,30 @@ interface CommunalSettingsRepository { fun getEnabledState(user: UserInfo): Flow<CommunalEnabledState> /** * Returns true if both the communal trunk-stable flag and resource flag are enabled. * Returns true if any glanceable hub functionality should be enabled via configs and flags. * * The trunk-stable flag is controlled by server rollout and is on all devices. The resource * flag is enabled via resource overlay only on products we want the hub to be present on. * This should be used for preventing basic glanceable hub functionality from running on devices * that don't need it. * * If the glanceable_hub_v2 flag is enabled, checks the config_glanceableHubEnabled Android * config boolean. Otherwise, checks the old config_communalServiceEnabled config and * communal_hub flag. */ fun getFlagEnabled(): Boolean /** * Returns true if the Android config config_glanceableHubEnabled and the glanceable_hub_v2 flag * are enabled. * * This should be used to flag off new glanceable hub or dream behavior that should launch * together with the new hub experience that brings the hub to mobile. * * The trunk-stable flag is controlled by server rollout and is on all devices. The Android * config flag is enabled via resource overlay only on products we want the hub to be present * on. */ fun getV2FlagEnabled(): Boolean /** Keyguard widgets enabled state by Device Policy Manager for the specified user. */ fun getAllowedByDevicePolicy(user: UserInfo): Flow<Boolean> Loading @@ -72,6 +92,7 @@ class CommunalSettingsRepositoryImpl @Inject constructor( @Background private val bgDispatcher: CoroutineDispatcher, @Main private val resources: Resources, private val featureFlagsClassic: FeatureFlagsClassic, private val secureSettings: SecureSettings, private val broadcastDispatcher: BroadcastDispatcher, Loading @@ -79,7 +100,18 @@ constructor( ) : CommunalSettingsRepository { override fun getFlagEnabled(): Boolean { return featureFlagsClassic.isEnabled(Flags.COMMUNAL_SERVICE_ENABLED) && communalHub() return if (getV2FlagEnabled()) { true } else { // This config (exposed as a classic feature flag) is targeted only to tablet. // TODO(b/379181581): clean up usages of communal_hub flag featureFlagsClassic.isEnabled(Flags.COMMUNAL_SERVICE_ENABLED) && communalHub() } } override fun getV2FlagEnabled(): Boolean { return resources.getBoolean(com.android.internal.R.bool.config_glanceableHubEnabled) && glanceableHubV2() } override fun getEnabledState(user: UserInfo): Flow<CommunalEnabledState> { Loading Loading @@ -128,7 +160,7 @@ constructor( secureSettings.getIntForUser( GLANCEABLE_HUB_BACKGROUND_SETTING, CommunalBackgroundType.ANIMATED.value, user.id user.id, ) CommunalBackgroundType.entries.find { type -> type.value == intType } ?: CommunalBackgroundType.ANIMATED Loading
packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/CommunalSettingsRepositoryKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.communal.data.repository import android.app.admin.devicePolicyManager import android.content.res.mainResources import com.android.systemui.broadcast.broadcastDispatcher import com.android.systemui.flags.featureFlagsClassic import com.android.systemui.kosmos.Kosmos Loading @@ -27,6 +28,7 @@ val Kosmos.communalSettingsRepository: CommunalSettingsRepository by Kosmos.Fixture { CommunalSettingsRepositoryImpl( bgDispatcher = testDispatcher, resources = mainResources, featureFlagsClassic = featureFlagsClassic, secureSettings = fakeSettings, broadcastDispatcher = broadcastDispatcher, Loading