diff --git a/app/src/main/java/chat/revolt/api/settings/FeatureFlags.kt b/app/src/main/java/chat/revolt/api/settings/FeatureFlags.kt index e2823368..1196561a 100644 --- a/app/src/main/java/chat/revolt/api/settings/FeatureFlags.kt +++ b/app/src/main/java/chat/revolt/api/settings/FeatureFlags.kt @@ -3,20 +3,25 @@ package chat.revolt.api.settings import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import chat.revolt.api.RevoltAPI annotation class FeatureFlag(val name: String) annotation class Treatment(val description: String) -@FeatureFlag("TiramisuFilePicker") -enum class FilePickerFeatureFlagVariates { - @Treatment("Use the READ_MEDIA_IMAGES or READ_MEDIA_VIDEO permissions introduced in Android Tiramisu") - TiramisuMediaPermissions, +@FeatureFlag("ClosedBetaAccessControl") +sealed class ClosedBetaAccessControlVariates { + @Treatment("Restrict access to the app to users that meet certain or all criteria (implementation-specific)") + data class Restricted(val predicate: () -> Boolean) : ClosedBetaAccessControlVariates() - @Treatment("Use the DocumentsUI picker introduced in Android KitKat") - DocumentsUI + @Treatment("Allow access to the app to all users") + data object Unrestricted : ClosedBetaAccessControlVariates() } object FeatureFlags { - @FeatureFlag("TiramisuFilePicker") - var filePickerType by mutableStateOf(FilePickerFeatureFlagVariates.TiramisuMediaPermissions) -} \ No newline at end of file + @FeatureFlag("ClosedBetaAccessControl") + var closedBetaAccessControl by mutableStateOf( + ClosedBetaAccessControlVariates.Restricted { + RevoltAPI.channelCache.containsKey("01H7X2KRB0CA4QDSMB4N7WGERF") + }) +} + diff --git a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt index e898cbe2..9ad2cdcb 100644 --- a/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/ChatRouterScreen.kt @@ -73,7 +73,9 @@ import chat.revolt.api.realtime.RealtimeSocket import chat.revolt.api.routes.server.fetchMembers import chat.revolt.api.schemas.ChannelType import chat.revolt.api.schemas.User +import chat.revolt.api.settings.ClosedBetaAccessControlVariates import chat.revolt.api.settings.FeatureFlag +import chat.revolt.api.settings.FeatureFlags import chat.revolt.api.settings.SyncedSettings import chat.revolt.callbacks.Action import chat.revolt.callbacks.ActionChannel @@ -199,9 +201,13 @@ class ChatRouterViewModel @Inject constructor( fun navigateToChannel(channelId: String, navController: NavController, pure: Boolean = false) { if (!pure) setSaveCurrentChannel(channelId) - // Only allow access to closed beta users, currently "has access to #beta-chat in Jenvolt" @FeatureFlag("ClosedBetaAccessControl") - if (RevoltAPI.channelCache.size > 0 && !RevoltAPI.channelCache.containsKey("01H7X2KRB0CA4QDSMB4N7WGERF")) { + if (RevoltAPI.channelCache.size > 0 + && FeatureFlags.closedBetaAccessControl is ClosedBetaAccessControlVariates.Restricted + && (FeatureFlags.closedBetaAccessControl as ClosedBetaAccessControlVariates.Restricted) + .predicate() + .not() + ) { Pipebomb.incrementHardCrashCounter() navController.navigate("no_current_channel") { diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt index b7efdbfb..cba80d1a 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreen.kt @@ -72,9 +72,6 @@ import chat.revolt.api.internals.ChannelUtils import chat.revolt.api.routes.microservices.autumn.FileArgs import chat.revolt.api.schemas.Channel import chat.revolt.api.schemas.ChannelType -import chat.revolt.api.settings.FeatureFlag -import chat.revolt.api.settings.FeatureFlags -import chat.revolt.api.settings.FilePickerFeatureFlagVariates import chat.revolt.components.chat.Message import chat.revolt.components.chat.MessageField import chat.revolt.components.chat.SystemMessage @@ -491,10 +488,8 @@ fun ChannelScreen( onAddAttachment = { val isTiramisu = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU - @FeatureFlag("TiramisuFilePicker") when { - FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.TiramisuMediaPermissions - && isTiramisu -> { + isTiramisu -> { focusManager.clearFocus() if (viewModel.currentBottomPane == BottomPane.InbuiltMediaPicker) { viewModel.currentBottomPane = BottomPane.None @@ -503,8 +498,7 @@ fun ChannelScreen( } } - FeatureFlags.filePickerType == FilePickerFeatureFlagVariates.DocumentsUI - || !isTiramisu -> { + !isTiramisu -> { pickFileLauncher.launch(arrayOf("*/*")) } } @@ -592,7 +586,7 @@ fun ChannelScreen( ) } } - + AnimatedVisibility(visible = viewModel.currentBottomPane == BottomPane.EmojiPicker) { BackHandler(enabled = viewModel.currentBottomPane == BottomPane.EmojiPicker) { viewModel.currentBottomPane = BottomPane.None diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt index d389ddf7..75e08376 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt @@ -40,7 +40,6 @@ import chat.revolt.api.routes.server.fetchMember import chat.revolt.api.routes.user.addUserIfUnknown import chat.revolt.api.schemas.Channel import chat.revolt.api.schemas.Message -import chat.revolt.api.settings.FeatureFlag import chat.revolt.callbacks.UiCallback import chat.revolt.callbacks.UiCallbacks import io.ktor.http.ContentType @@ -57,8 +56,6 @@ import kotlinx.datetime.Instant sealed class BottomPane { data object None : BottomPane() - - @FeatureFlag("TiramisuFilePicker") data object InbuiltMediaPicker : BottomPane() data object EmojiPicker : BottomPane() }