From 0f9a00f58f2c1c3c085e220aeb92a9eb5810bd62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de> Date: Fri, 7 Jan 2022 10:56:43 +0100 Subject: [PATCH] Add DesktopFeatureFlags to disable certain features in code base --- .../briar/desktop/DesktopFeatureFlags.kt | 12 +++++++ .../briar/desktop/DesktopModule.kt | 11 +++++++ .../briar/desktop/navigation/BriarSidebar.kt | 32 ++++++++++--------- .../briarproject/briar/desktop/ui/BriarUi.kt | 8 ++++- .../briar/desktop/ui/MainScreen.kt | 2 +- .../briar/desktop/utils/FeatureFlagUtils.kt | 9 ++++++ .../briar/desktop/DesktopTestModule.kt | 11 +++++++ 7 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt create mode 100644 src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt new file mode 100644 index 0000000000..c52ff899cf --- /dev/null +++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopFeatureFlags.kt @@ -0,0 +1,12 @@ +package org.briarproject.briar.desktop + +interface DesktopFeatureFlags { + + fun shouldEnablePrivateGroups(): Boolean + + fun shouldEnableForums(): Boolean + + fun shouldEnableBlogs(): Boolean + + fun shouldEnableTransportSettings(): Boolean +} diff --git a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt index e5727398c4..1e436ca9ef 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt @@ -130,6 +130,17 @@ internal class DesktopModule( override fun shouldEnableDisappearingMessages() = false } + @Provides + @Singleton + internal fun provideDesktopFeatureFlags() = object : DesktopFeatureFlags { + // TODO: once we have shouldEnableBlogsInCore() in briar core, wire them up with these here + // so that the value for shouldEnableBlogs() is always the same the respective core flag. + override fun shouldEnablePrivateGroups() = false + override fun shouldEnableForums() = false + override fun shouldEnableBlogs() = false + override fun shouldEnableTransportSettings() = false + } + @Provides @Singleton internal fun provideImageCompressor(imageCompressor: ImageCompressorImpl): ImageCompressor { diff --git a/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt b/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt index 6bdbae821b..c07b4bd594 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/navigation/BriarSidebar.kt @@ -27,6 +27,7 @@ import org.briarproject.bramble.api.identity.LocalAuthor import org.briarproject.briar.desktop.contact.ProfileCircle import org.briarproject.briar.desktop.theme.sidebarSurface import org.briarproject.briar.desktop.ui.UiMode +import org.briarproject.briar.desktop.utils.getDesktopFeatureFlags val SIDEBAR_WIDTH = 56.dp @@ -54,26 +55,27 @@ fun BriarSidebar( ) { account?.let { ProfileCircle(size = 45.dp, it.id.bytes) } } - - for ( - (mode, icon) in listOf( - Pair(UiMode.CONTACTS, Icons.Filled.Contacts), - Pair(UiMode.GROUPS, Icons.Filled.Group), - Pair(UiMode.FORUMS, Icons.Filled.Forum), - Pair(UiMode.BLOGS, Icons.Filled.ChromeReaderMode), - ) - ) { + val items = buildList { + add(Pair(UiMode.CONTACTS, Icons.Filled.Contacts)) + val featureFlags = getDesktopFeatureFlags() + if (featureFlags.shouldEnablePrivateGroups()) add(Pair(UiMode.GROUPS, Icons.Filled.Group)) + if (featureFlags.shouldEnableForums()) add(Pair(UiMode.FORUMS, Icons.Filled.Forum)) + if (featureFlags.shouldEnableBlogs()) add(Pair(UiMode.BLOGS, Icons.Filled.ChromeReaderMode)) + } + for ((mode, icon) in items) { displayButton(uiMode, mode, icon) } } Column(verticalArrangement = Arrangement.Bottom) { - for ( - (mode, icon) in listOf( - Pair(UiMode.TRANSPORTS, Icons.Filled.WifiTethering), - Pair(UiMode.SETTINGS, Icons.Filled.Settings), - Pair(UiMode.SIGNOUT, Icons.Filled.Logout), + val items = buildList { + val featureFlags = getDesktopFeatureFlags() + if (featureFlags.shouldEnableTransportSettings()) add( + Pair(UiMode.TRANSPORTS, Icons.Filled.WifiTethering) ) - ) { + add(Pair(UiMode.SETTINGS, Icons.Filled.Settings)) + add(Pair(UiMode.SIGNOUT, Icons.Filled.Logout)) + } + for ((mode, icon) in items) { displayButton(uiMode, mode, icon) } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt index 3d9ad8ddfc..fb92e15d27 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.window.Window import org.briarproject.bramble.api.account.AccountManager import org.briarproject.bramble.api.lifecycle.LifecycleManager import org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.RUNNING +import org.briarproject.briar.desktop.DesktopFeatureFlags import org.briarproject.briar.desktop.login.LoginScreen import org.briarproject.briar.desktop.login.RegistrationScreen import org.briarproject.briar.desktop.theme.BriarTheme @@ -37,6 +38,7 @@ interface BriarUi { } val LocalViewModelProvider = staticCompositionLocalOf<ViewModelProvider?> { null } +val LocalDesktopFeatureFlags = staticCompositionLocalOf<DesktopFeatureFlags?> { null } @Immutable @Singleton @@ -46,6 +48,7 @@ constructor( private val accountManager: AccountManager, private val lifecycleManager: LifecycleManager, private val viewModelProvider: ViewModelProvider, + private val desktopFeatureFlags: DesktopFeatureFlags, ) : BriarUi { override fun stop() { @@ -79,7 +82,10 @@ constructor( icon = painterResource("images/logo_circle.svg") ) { window.minimumSize = Dimension(800, 600) - CompositionLocalProvider(LocalViewModelProvider provides viewModelProvider) { + CompositionLocalProvider( + LocalViewModelProvider provides viewModelProvider, + LocalDesktopFeatureFlags provides desktopFeatureFlags + ) { BriarTheme(isDarkTheme = isDark) { when (screenState) { Screen.REGISTRATION -> diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt index c636fa7384..7196cc58f1 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/MainScreen.kt @@ -23,7 +23,7 @@ fun MainScreen( BriarSidebar( viewModel.account.value, viewModel.uiMode.value, - viewModel::setUiMode + viewModel::setUiMode, ) VerticalDivider() when (viewModel.uiMode.value) { diff --git a/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt new file mode 100644 index 0000000000..1e79562469 --- /dev/null +++ b/src/main/kotlin/org/briarproject/briar/desktop/utils/FeatureFlagUtils.kt @@ -0,0 +1,9 @@ +package org.briarproject.briar.desktop.utils + +import androidx.compose.runtime.Composable +import org.briarproject.briar.desktop.ui.LocalDesktopFeatureFlags + +@Composable +fun getDesktopFeatureFlags() = checkNotNull(LocalDesktopFeatureFlags.current) { + "No DesktopFeatureFlags was provided via LocalDesktopFeatureFlags" +} diff --git a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt index 7bf547826e..f5a066935d 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt @@ -136,6 +136,17 @@ internal class DesktopTestModule( override fun shouldEnableDisappearingMessages() = false } + @Provides + @Singleton + internal fun provideDesktopFeatureFlags() = object : DesktopFeatureFlags { + // TODO: once we have shouldEnableBlogsInCore() in briar core, wire them up with these here + // so that the value for shouldEnableBlogs() is always the same the respective core flag. + override fun shouldEnablePrivateGroups() = false + override fun shouldEnableForums() = false + override fun shouldEnableBlogs() = false + override fun shouldEnableTransportSettings() = false + } + @Provides @Singleton internal fun provideImageCompressor(imageCompressor: ImageCompressorImpl): ImageCompressor { -- GitLab