mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
eae464ecd7
* Timeline: add a Jump to Unread button and a new-message badge on the scroll-to-bottom button. * Rename scrollToFirstUnread to scrollToReadMarker for consistency with isReadMarkerVisible. * Cache readMarkerUniqueID and unreadMessageCount as stored properties on TimelineState. * TimelineViewModel: rename newTimelineItems and drop redundant ordering comment. * Use Compound chevron icons in TimelineScrollButton. * Fix TimelineScrollButton layout at large dynamic type sizes. * Add a trailingAccessory slot to topBanners and use it to dodge banners with the jump-to-read-marker button. * Put jump-to-read-marker behind a developer-options feature flag. * Fine-tune TimelineScrollButton sizing and badge colour. * Remove TimelineScrollButton chevron offset that was compensating for SF Symbol centering. * Drop the new-messages count, replace with a presence dot. * Move both timeline scroll buttons to bottom-right and revert topBanners trailingAccessory slot. * Position TimelineScrollButton badge above for up direction and below for down direction. * Add long-press mark-as-read pill to the timeline scroll buttons * Read isSwitchingTimelines from state in updateHasNewMessagesAtBottom. * Use assertionFailure when scrollToReadMarker is called with no read marker. * Add TimelineScrollButton preview snapshots. * (fix) design and various self-review issues * (fix) suppress scroll button tap after long-press * (feat) fall back to RoomInfo.fullyReadEventID for jump-to-unread * (fix) hide jump-to-unread immediately after mark-as-read * (fix) align with newer matrix-rust-sdk surface * Bump the RustSDK to v26.05.20 --------- Signed-off-by: Daniel Anderson <daniel.anderson@toptal.com> Co-authored-by: Stefan Ceriu <stefan.ceriu@gmail.com>
80 lines
2.3 KiB
Swift
80 lines
2.3 KiB
Swift
//
|
|
// Copyright 2025 Element Creations Ltd.
|
|
// Copyright 2022-2025 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
enum DeveloperOptionsScreenViewModelAction {
|
|
case clearCache
|
|
}
|
|
|
|
struct DeveloperOptionsScreenViewState: BindableState {
|
|
let elementCallBaseURL: URL
|
|
let appHooks: AppHooks
|
|
var storeSizes: [StoreSize]?
|
|
let shouldShowClearCache: Bool
|
|
let isPresentedModally: Bool
|
|
|
|
var bindings: DeveloperOptionsScreenViewStateBindings
|
|
|
|
struct StoreSize: Identifiable {
|
|
let name: String
|
|
let size: String
|
|
|
|
var id: String {
|
|
name + size
|
|
}
|
|
}
|
|
}
|
|
|
|
// periphery: ignore - subscripts are seen as false positive
|
|
@dynamicMemberLookup
|
|
struct DeveloperOptionsScreenViewStateBindings {
|
|
private let developerOptions: DeveloperOptionsProtocol
|
|
|
|
init(developerOptions: DeveloperOptionsProtocol) {
|
|
self.developerOptions = developerOptions
|
|
}
|
|
|
|
subscript<Setting>(dynamicMember keyPath: ReferenceWritableKeyPath<DeveloperOptionsProtocol, Setting>) -> Setting {
|
|
get { developerOptions[keyPath: keyPath] }
|
|
set { developerOptions[keyPath: keyPath] = newValue }
|
|
}
|
|
}
|
|
|
|
enum DeveloperOptionsScreenViewAction {
|
|
case clearCache
|
|
case markAllRoomsAsRead
|
|
}
|
|
|
|
protocol DeveloperOptionsProtocol: AnyObject {
|
|
var logLevel: LogLevel { get set }
|
|
var traceLogPacks: Set<TraceLogPack> { get set }
|
|
|
|
var enableOnlySignedDeviceIsolationMode: Bool { get set }
|
|
var hideQuietNotificationAlerts: Bool { get set }
|
|
var focusEventOnNotificationTap: Bool { get set }
|
|
var automaticBackPaginationEnabled: Bool { get set }
|
|
|
|
var roomListActivityVisibility: RoomListActivityVisibility { get set }
|
|
var elementCallBaseURLOverride: URL? { get set }
|
|
|
|
var fuzzyRoomListSearchEnabled: Bool { get set }
|
|
var lowPriorityFilterEnabled: Bool { get set }
|
|
var knockingEnabled: Bool { get set }
|
|
|
|
var linkPreviewsEnabled: Bool { get set }
|
|
|
|
var jumpToReadMarkerEnabled: Bool { get set }
|
|
|
|
var linkNewDeviceEnabled: Bool { get set }
|
|
|
|
var roomThreadListEnabled: Bool { get set }
|
|
}
|
|
|
|
extension AppSettings: DeveloperOptionsProtocol { }
|