Add a feature flag for the new RoomThreadList screen.

This commit is contained in:
Stefan Ceriu
2026-03-23 17:58:14 +02:00
committed by Stefan Ceriu
parent ba810116a0
commit 5120a117cc
6 changed files with 23 additions and 6 deletions

View File

@@ -75,7 +75,7 @@ final class AppSettings {
case enableKeyShareOnInvite
case knockingEnabled
case threadsEnabled
case developerOptionsEnabled
case roomThreadListEnabled
case linkPreviewsEnabled
case focusEventOnNotificationTap
case linkNewDeviceEnabled
@@ -85,6 +85,8 @@ final class AppSettings {
// Doug's tweaks 🔧
case hideUnreadMessagesBadge
case hideQuietNotificationAlerts
case developerOptionsEnabled
}
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
@@ -429,6 +431,9 @@ final class AppSettings {
@UserPreference(key: UserDefaultsKeys.threadsEnabled, defaultValue: false, storageType: .userDefaults(store))
var threadsEnabled
@UserPreference(key: UserDefaultsKeys.roomThreadListEnabled, defaultValue: false, storageType: .userDefaults(store))
var roomThreadListEnabled
@UserPreference(key: UserDefaultsKeys.focusEventOnNotificationTap, defaultValue: false, storageType: .userDefaults(store))
var focusEventOnNotificationTap

View File

@@ -62,6 +62,7 @@ struct RoomScreenViewState: BindableState {
isCallingEnabled && !isParticipatingInOngoingCall // Hide the join call button when already in the call
}
var roomThreadListEnabled = false
var isKnockingEnabled = false
var isKnockableRoom = false
var canAcceptKnocks = false

View File

@@ -164,6 +164,10 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
// MARK: - Private
private func setupSubscriptions(ongoingCallRoomIDPublisher: CurrentValuePublisher<String?, Never>) {
appSettings.$roomThreadListEnabled
.weakAssign(to: \.state.roomThreadListEnabled, on: self)
.store(in: &cancellables)
appSettings.$knockingEnabled
.weakAssign(to: \.state.isKnockingEnabled, on: self)
.store(in: &cancellables)

View File

@@ -179,6 +179,8 @@ struct RoomScreen: View {
}
}
}
if context.viewState.roomThreadListEnabled {
if #available(iOS 26, *) {
ToolbarSpacer(.fixed, placement: .primaryAction)
}
@@ -190,6 +192,7 @@ struct RoomScreen: View {
CompoundIcon(\.threads)
}
}
}
}
@ViewBuilder

View File

@@ -71,6 +71,8 @@ protocol DeveloperOptionsProtocol: AnyObject {
var liveLocationSharingEnabled: Bool { get set }
var floatingTimelineDateEnabled: Bool { get set }
var roomThreadListEnabled: Bool { get set }
}
extension AppSettings: DeveloperOptionsProtocol { }

View File

@@ -69,7 +69,11 @@ struct DeveloperOptionsScreen: View {
}
}
Section("Timeline") {
Section("Room") {
Toggle(isOn: $context.roomThreadListEnabled) {
Text("Room thread list")
}
Toggle(isOn: $context.linkPreviewsEnabled) {
Text("Link previews")
Text("Follows the timeline media visibility settings.")
@@ -80,14 +84,12 @@ struct DeveloperOptionsScreen: View {
Toggle(isOn: $context.liveLocationSharingEnabled) {
Text("Live location sharing")
}
Toggle(isOn: $context.floatingTimelineDateEnabled) {
Text("Floating timeline date")
Text("Shows a floating date badge while scrolling the timeline.")
}
}
Section("Join rules") {
Toggle(isOn: $context.knockingEnabled) {
Text("Knocking")
Text("Ask to join rooms")