mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
A couple of small tweaks. (#4569)
* Stop ignoring the safe area with the suggestions view. They weren't visible on iPad (hidden behind the sidebar) and I can't find any instance when they're shown where the safe area comes into play. * Make sure the room list deselects the cell when dismissed a room. * Use the backports pattern in more places. * Fix the annoying header on macOS. * Silence some warnings * Fix compound CI branch name.
This commit is contained in:
@@ -5,7 +5,7 @@ name: Compound
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ develop ]
|
||||||
|
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
|
|||||||
@@ -719,7 +719,6 @@
|
|||||||
8015842CB4DE1BE414D2CDED /* AppLockSetupBiometricsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C62E07C1164F5120727A2A8 /* AppLockSetupBiometricsScreenCoordinator.swift */; };
|
8015842CB4DE1BE414D2CDED /* AppLockSetupBiometricsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C62E07C1164F5120727A2A8 /* AppLockSetupBiometricsScreenCoordinator.swift */; };
|
||||||
804C15D8ADE0EA7A5268F58A /* OverridableAvatarImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD1C10E4957CB791FE0B8 /* OverridableAvatarImage.swift */; };
|
804C15D8ADE0EA7A5268F58A /* OverridableAvatarImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648DD1C10E4957CB791FE0B8 /* OverridableAvatarImage.swift */; };
|
||||||
80DEA2A4B20F9E279EAE6B2B /* UserProfile+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD01F7FC2BBAC7351948595 /* UserProfile+Mock.swift */; };
|
80DEA2A4B20F9E279EAE6B2B /* UserProfile+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD01F7FC2BBAC7351948595 /* UserProfile+Mock.swift */; };
|
||||||
80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018194CAFBE80720FECCEDEE /* ZoomTransition.swift */; };
|
|
||||||
80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; };
|
80F6C8EFCA4564B67F0D34B0 /* DeactivateAccountScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77F75B3E9F99864048A422A /* DeactivateAccountScreenViewModelTests.swift */; };
|
||||||
81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.swift */; };
|
81A7C020CB5F6232242A8414 /* UserSessionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36C0A6D59717193F49EA986 /* UserSessionTests.swift */; };
|
||||||
8285FF4B2C2331758C437FF7 /* ReportContentScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */; };
|
8285FF4B2C2331758C437FF7 /* ReportContentScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713B48DBF65DE4B0DD445D66 /* ReportContentScreenViewModelProtocol.swift */; };
|
||||||
@@ -1495,7 +1494,6 @@
|
|||||||
00E5B2CBEF8F96424F095508 /* RoomDetailsEditScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenViewModelTests.swift; sourceTree = "<group>"; };
|
00E5B2CBEF8F96424F095508 /* RoomDetailsEditScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
011AFA4990C585D157829679 /* DeclineAndBlockScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeclineAndBlockScreenViewModel.swift; sourceTree = "<group>"; };
|
011AFA4990C585D157829679 /* DeclineAndBlockScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeclineAndBlockScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
012A284622B32052015F1F89 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; };
|
012A284622B32052015F1F89 /* ReadMarkerRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReadMarkerRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
018194CAFBE80720FECCEDEE /* ZoomTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoomTransition.swift; sourceTree = "<group>"; };
|
|
||||||
01B795AAAB7B8747FE2FF311 /* LogViewerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenModels.swift; sourceTree = "<group>"; };
|
01B795AAAB7B8747FE2FF311 /* LogViewerScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogViewerScreenModels.swift; sourceTree = "<group>"; };
|
||||||
01C4C7DB37597D7D8379511A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
01C4C7DB37597D7D8379511A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreenViewModel.swift; sourceTree = "<group>"; };
|
022E6BD64CB4610B9C95FC02 /* UserDetailsEditScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDetailsEditScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -6139,7 +6137,6 @@
|
|||||||
children = (
|
children = (
|
||||||
EF1593DD87F974F8509BB619 /* ElementAnimations.swift */,
|
EF1593DD87F974F8509BB619 /* ElementAnimations.swift */,
|
||||||
97CE98208321C4D66E363612 /* ShimmerModifier.swift */,
|
97CE98208321C4D66E363612 /* ShimmerModifier.swift */,
|
||||||
018194CAFBE80720FECCEDEE /* ZoomTransition.swift */,
|
|
||||||
);
|
);
|
||||||
path = Animation;
|
path = Animation;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -8445,7 +8442,6 @@
|
|||||||
B773ACD8881DB18E876D950C /* WaveformSource.swift in Sources */,
|
B773ACD8881DB18E876D950C /* WaveformSource.swift in Sources */,
|
||||||
08CB4BD12CEEDE6AAE4A18DD /* WindowManager.swift in Sources */,
|
08CB4BD12CEEDE6AAE4A18DD /* WindowManager.swift in Sources */,
|
||||||
AE5AAD9E32511544FDFA5560 /* WindowManagerProtocol.swift in Sources */,
|
AE5AAD9E32511544FDFA5560 /* WindowManagerProtocol.swift in Sources */,
|
||||||
80F1B442DB5E2C362ACDD8E2 /* ZoomTransition.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -280,6 +280,8 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
switch context.toState {
|
switch context.toState {
|
||||||
case .roomList(detailState: .room(let detailStateRoomID)):
|
case .roomList(detailState: .room(let detailStateRoomID)):
|
||||||
self?.selectedRoomSubject.send(detailStateRoomID)
|
self?.selectedRoomSubject.send(detailStateRoomID)
|
||||||
|
case .roomList(detailState: nil):
|
||||||
|
self?.selectedRoomSubject.send(nil)
|
||||||
default:
|
default:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright 2024 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 SwiftUI
|
|
||||||
|
|
||||||
extension View {
|
|
||||||
/// A convenience modifier to conditionally apply `.navigationTransition(.zoom(…))` when available.
|
|
||||||
@ViewBuilder
|
|
||||||
func zoomTransition(sourceID: some Hashable, in namespace: Namespace.ID) -> some View {
|
|
||||||
if #available(iOS 18.0, *) {
|
|
||||||
navigationTransition(.zoom(sourceID: sourceID, in: namespace))
|
|
||||||
} else {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A convenience modifier to conditionally apply `.matchedTransitionSource(…)` when available.
|
|
||||||
@ViewBuilder
|
|
||||||
func zoomTransitionSource(id: some Hashable, in namespace: Namespace.ID) -> some View {
|
|
||||||
if #available(iOS 18.0, *) {
|
|
||||||
matchedTransitionSource(id: id, in: namespace)
|
|
||||||
} else {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,12 +8,68 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
extension View {
|
extension View {
|
||||||
@ViewBuilder
|
// MARK: iOS 18
|
||||||
func backportTabBarMinimizeBehaviorOnScrollDown() -> some View {
|
|
||||||
|
/// Uses the old page style modal so that on iPadOS 18 the presentation detents have no effect.
|
||||||
|
@ViewBuilder func backportPresentationSizingPage() -> some View {
|
||||||
|
if #available(iOS 18.0, *) {
|
||||||
|
presentationSizing(.page)
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A convenience modifier to conditionally apply `.navigationTransition(.zoom(…))` when available.
|
||||||
|
@ViewBuilder func backportNavigationTransitionZoom(sourceID: some Hashable, in namespace: Namespace.ID) -> some View {
|
||||||
|
if #available(iOS 18.0, *) {
|
||||||
|
navigationTransition(.zoom(sourceID: sourceID, in: namespace))
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A convenience modifier to conditionally apply `.matchedTransitionSource(…)` when available.
|
||||||
|
@ViewBuilder func backportMatchedTransitionSource(id: some Hashable, in namespace: Namespace.ID) -> some View {
|
||||||
|
if #available(iOS 18.0, *) {
|
||||||
|
matchedTransitionSource(id: id, in: namespace)
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ViewBuilder func backportAccessibilityHint(_ hint: String, isEnabled: Bool) -> some View {
|
||||||
|
if #available(iOS 18, *) {
|
||||||
|
accessibilityHint(hint, isEnabled: isEnabled)
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: iOS 26
|
||||||
|
|
||||||
|
@ViewBuilder func backportTabBarMinimizeBehaviorOnScrollDown() -> some View {
|
||||||
if #available(iOS 26.0, *) {
|
if #available(iOS 26.0, *) {
|
||||||
tabBarMinimizeBehavior(.onScrollDown)
|
tabBarMinimizeBehavior(.onScrollDown)
|
||||||
} else {
|
} else {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ViewBuilder func backportScrollEdgeEffectHidden() -> some View {
|
||||||
|
if #available(iOS 26, *) {
|
||||||
|
scrollEdgeEffectHidden()
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension ToolbarContent {
|
||||||
|
@ToolbarContentBuilder func backportSharedBackgroundVisibility(_ visibility: Visibility) -> some ToolbarContent {
|
||||||
|
if #available(iOS 26.0, *) {
|
||||||
|
sharedBackgroundVisibility(visibility)
|
||||||
|
} else {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ extension TextFieldStyle where Self == ElementTextFieldStyle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The text field style used in authentication screens.
|
/// The text field style used in authentication screens.
|
||||||
struct ElementTextFieldStyle: TextFieldStyle {
|
struct ElementTextFieldStyle: @MainActor TextFieldStyle {
|
||||||
enum State {
|
enum State {
|
||||||
case success
|
case success
|
||||||
case error
|
case error
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ struct RoomHeaderView: View {
|
|||||||
let mediaProvider: MediaProviderProtocol?
|
let mediaProvider: MediaProviderProtocol?
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if ProcessInfo.isRunningAccessibilityTests {
|
if ProcessInfo.isRunningAccessibilityTests || ProcessInfo.processInfo.isiOSAppOnMac {
|
||||||
// Accessibility tests scale up the dynamic size in real time which may break the view
|
// Accessibility tests scale up the dynamic size in real time which may break the view.
|
||||||
|
// macOS really doesn't like the greedy size and does weird things to it.
|
||||||
content
|
content
|
||||||
} else {
|
} else {
|
||||||
content
|
content
|
||||||
|
|||||||
@@ -22,14 +22,7 @@ struct HomeScreen: View {
|
|||||||
actions: leaveRoomAlertActions,
|
actions: leaveRoomAlertActions,
|
||||||
message: leaveRoomAlertMessage)
|
message: leaveRoomAlertMessage)
|
||||||
.navigationTitle(L10n.screenRoomlistMainSpaceTitle)
|
.navigationTitle(L10n.screenRoomlistMainSpaceTitle)
|
||||||
.toolbar {
|
.toolbar { toolbar }
|
||||||
if #available(iOS 26, *) {
|
|
||||||
toolbar
|
|
||||||
.sharedBackgroundVisibility(.hidden)
|
|
||||||
} else {
|
|
||||||
toolbar
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
|
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
|
||||||
.track(screen: .Home)
|
.track(screen: .Home)
|
||||||
.bloom()
|
.bloom()
|
||||||
@@ -43,10 +36,12 @@ struct HomeScreen: View {
|
|||||||
ToolbarItem(placement: .navigationBarLeading) {
|
ToolbarItem(placement: .navigationBarLeading) {
|
||||||
settingsButton
|
settingsButton
|
||||||
}
|
}
|
||||||
|
.backportSharedBackgroundVisibility(.hidden)
|
||||||
|
|
||||||
ToolbarItem(placement: .primaryAction) {
|
ToolbarItem(placement: .primaryAction) {
|
||||||
newRoomButton
|
newRoomButton
|
||||||
}
|
}
|
||||||
|
.backportSharedBackgroundVisibility(.hidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
private var settingsButton: some View {
|
private var settingsButton: some View {
|
||||||
|
|||||||
+5
-9
@@ -47,15 +47,11 @@ struct MediaEventsTimelineScreen: View {
|
|||||||
if context.viewState.shouldShowEmptyState {
|
if context.viewState.shouldShowEmptyState {
|
||||||
emptyState
|
emptyState
|
||||||
} else {
|
} else {
|
||||||
if #available(iOS 26, *) {
|
scrollView
|
||||||
scrollView
|
// Remove the glass effect of iOS 26+
|
||||||
// Remove the glass effect of iOS 26+
|
// A flipped table view will always trigger it
|
||||||
// A flipped table view will always trigger it
|
// since the nav bar thinks is always at the bottom.
|
||||||
// since the nav bar thinks is always at the bottom.
|
.backportScrollEdgeEffectHidden()
|
||||||
.scrollEdgeEffectHidden()
|
|
||||||
} else {
|
|
||||||
scrollView
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-1
@@ -99,7 +99,6 @@ private struct BackgroundView<Content: View>: View {
|
|||||||
.clipShape(RoundedCornerShape(radius: shadowRadius, corners: [.topLeft, .topRight]))
|
.clipShape(RoundedCornerShape(radius: shadowRadius, corners: [.topLeft, .topRight]))
|
||||||
.shadow(color: .black.opacity(0.20), radius: 20.0, x: 0.0, y: 3.0)
|
.shadow(color: .black.opacity(0.20), radius: 20.0, x: 0.0, y: 3.0)
|
||||||
.mask(Rectangle().padding(.init(top: -(shadowRadius * 2), leading: 0.0, bottom: 0.0, trailing: 0.0)))
|
.mask(Rectangle().padding(.init(top: -(shadowRadius * 2), leading: 0.0, bottom: 0.0, trailing: 0.0)))
|
||||||
.edgesIgnoringSafeArea(.all)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,14 +20,7 @@ struct SpaceListScreen: View {
|
|||||||
}
|
}
|
||||||
.navigationTitle(L10n.screenSpaceListTitle)
|
.navigationTitle(L10n.screenSpaceListTitle)
|
||||||
.navigationBarTitleDisplayMode(.inline)
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
.toolbar {
|
.toolbar { toolbar }
|
||||||
if #available(iOS 26, *) {
|
|
||||||
toolbar
|
|
||||||
.sharedBackgroundVisibility(.hidden)
|
|
||||||
} else {
|
|
||||||
toolbar
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
|
.background(Color.compound.bgCanvasDefault.ignoresSafeArea())
|
||||||
.bloom()
|
.bloom()
|
||||||
}
|
}
|
||||||
@@ -90,11 +83,13 @@ struct SpaceListScreen: View {
|
|||||||
}
|
}
|
||||||
.accessibilityLabel(L10n.commonSettings)
|
.accessibilityLabel(L10n.commonSettings)
|
||||||
}
|
}
|
||||||
|
.backportSharedBackgroundVisibility(.hidden)
|
||||||
|
|
||||||
ToolbarItem(placement: .principal) {
|
ToolbarItem(placement: .principal) {
|
||||||
// Hides the navigationTitle (which is set for the navigation stack label).
|
// Hides the navigationTitle (which is set for the navigation stack label).
|
||||||
Text("").accessibilityHidden(true)
|
Text("").accessibilityHidden(true)
|
||||||
}
|
}
|
||||||
|
.backportSharedBackgroundVisibility(.hidden)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ struct TimelineItemMenu: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.accessibilityIdentifier(A11yIdentifiers.roomScreen.timelineItemActionMenu)
|
.accessibilityIdentifier(A11yIdentifiers.roomScreen.timelineItemActionMenu)
|
||||||
.presentationPage()
|
.backportPresentationSizingPage()
|
||||||
.presentationDetents([.medium, .large])
|
.presentationDetents([.medium, .large])
|
||||||
.presentationBackground(Color.compound.bgCanvasDefault)
|
.presentationBackground(Color.compound.bgCanvasDefault)
|
||||||
.presentationDragIndicator(.visible)
|
.presentationDragIndicator(.visible)
|
||||||
@@ -251,17 +251,6 @@ private extension EncryptionAuthenticity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension View {
|
|
||||||
/// Uses the old page style modal so that on iPadOS 18 the presentation detents have no effect.
|
|
||||||
@ViewBuilder func presentationPage() -> some View {
|
|
||||||
if #available(iOS 18.0, *) {
|
|
||||||
presentationSizing(.page)
|
|
||||||
} else {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Previews
|
// MARK: - Previews
|
||||||
|
|
||||||
struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview {
|
struct TimelineItemMenu_Previews: PreviewProvider, TestablePreview {
|
||||||
|
|||||||
@@ -92,13 +92,9 @@ struct PollView: View {
|
|||||||
|
|
||||||
private var optionsView: some View {
|
private var optionsView: some View {
|
||||||
ForEach(poll.options, id: \.id) { option in
|
ForEach(poll.options, id: \.id) { option in
|
||||||
if #available(iOS 18, *) {
|
pollOption(option: option)
|
||||||
pollOption(option: option)
|
.backportAccessibilityHint(L10n.a11yPollsWillRemoveSelection,
|
||||||
.accessibilityHint(L10n.a11yPollsWillRemoveSelection,
|
isEnabled: isRemovePreviousSelectionHintEnabled(option: option))
|
||||||
isEnabled: isRemovePreviousSelectionHintEnabled(option: option))
|
|
||||||
} else {
|
|
||||||
pollOption(option: option)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ struct RoomEventStringBuilder {
|
|||||||
default: L10n.commonWaitingForDecryptionKey
|
default: L10n.commonWaitingForDecryptionKey
|
||||||
}
|
}
|
||||||
return prefix(errorMessage, with: displayName, isOutgoing: isOutgoing)
|
return prefix(errorMessage, with: displayName, isOutgoing: isOutgoing)
|
||||||
case .other(eventType: let eventType):
|
case .other:
|
||||||
return nil // We shouldn't receive these without asking for custom event types.
|
return nil // We shouldn't receive these without asking for custom event types.
|
||||||
}
|
}
|
||||||
case .failedToParseMessageLike, .failedToParseState:
|
case .failedToParseMessageLike, .failedToParseState:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
|
|||||||
return buildRedactedTimelineItem(eventItemProxy, messageLikeContent, isOutgoing)
|
return buildRedactedTimelineItem(eventItemProxy, messageLikeContent, isOutgoing)
|
||||||
case .unableToDecrypt(let encryptedMessage):
|
case .unableToDecrypt(let encryptedMessage):
|
||||||
return buildEncryptedTimelineItem(eventItemProxy, messageLikeContent, encryptedMessage, isOutgoing)
|
return buildEncryptedTimelineItem(eventItemProxy, messageLikeContent, encryptedMessage, isOutgoing)
|
||||||
case .other(eventType: let eventType):
|
case .other:
|
||||||
return nil // We shouldn't receive these without asking for custom event types.
|
return nil // We shouldn't receive these without asking for custom event types.
|
||||||
}
|
}
|
||||||
case .failedToParseMessageLike(let eventType, let error):
|
case .failedToParseMessageLike(let eventType, let error):
|
||||||
|
|||||||
@@ -467,7 +467,7 @@ final class TimelineProxy: TimelineProxyProtocol {
|
|||||||
MXLog.info("Toggling reaction \(reaction) for event: \(eventOrTransactionID)")
|
MXLog.info("Toggling reaction \(reaction) for event: \(eventOrTransactionID)")
|
||||||
|
|
||||||
do {
|
do {
|
||||||
try await timeline.toggleReaction(itemId: eventOrTransactionID.rustValue, key: reaction)
|
_ = try await timeline.toggleReaction(itemId: eventOrTransactionID.rustValue, key: reaction)
|
||||||
MXLog.info("Finished toggling reaction for event: \(eventOrTransactionID)")
|
MXLog.info("Finished toggling reaction for event: \(eventOrTransactionID)")
|
||||||
return .success(())
|
return .success(())
|
||||||
} catch {
|
} catch {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ extension RestorationToken: Codable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MatrixRustSDK.Session: Codable {
|
extension MatrixRustSDK.Session: @retroactive Codable {
|
||||||
public init(from decoder: Decoder) throws {
|
public init(from decoder: Decoder) throws {
|
||||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import Combine
|
|||||||
import KZFileWatchers
|
import KZFileWatchers
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
extension Notification.Name: Codable { }
|
extension Notification.Name: @retroactive Codable { }
|
||||||
|
|
||||||
enum UITestsSignal: Codable, Equatable {
|
enum UITestsSignal: Codable, Equatable {
|
||||||
/// An internal signal used to indicate that one side of the connection is ready.
|
/// An internal signal used to indicate that one side of the connection is ready.
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08
|
oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede
|
||||||
size 99216
|
size 99354
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013
|
oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842
|
||||||
size 80689
|
size 80874
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:850872071e8b5915603490be276665b781c6cc3fc5f1620ae2fd6263b07d0b08
|
oid sha256:0df4048601119a0808c12b35d6302c842b7e2cf7d25600d2dd2ae0b4f7ba2ede
|
||||||
size 99216
|
size 99354
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a1e7ca6b6b2965e992f5068273af35b4f2f5425326551674cc3b0bec7f49e013
|
oid sha256:543ad54d777a9fd6f744b288c0c0235259d1c0e62cb3d1e26b492c18f726f842
|
||||||
size 80689
|
size 80874
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3
|
oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a
|
||||||
size 54559
|
size 54665
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c
|
oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196
|
||||||
size 39716
|
size 39813
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:98e2b2cdab292a01ed1480a10e1e31d4ba634b48b132d3ebe4b23f93f31dabd3
|
oid sha256:ea44d602dcab96041250a3ac2548936a3e1dfa77c2be234424383c73904b881a
|
||||||
size 54559
|
size 54665
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:a9c50c2096a9d5e5113d88541cf8e5b4d3045586414357ae096bea037db4739c
|
oid sha256:6d6588cafee096a7bf0f891047bd174c0da05eb110acc1eeebd082db5de1d196
|
||||||
size 39716
|
size 39813
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c1586c67413d70917cff66ec2e9a9805f5128d7adf9a462ae4a739ea9df7984d
|
oid sha256:7b900bb2a2da0750a6f4bf14e07b5ae0b884325844f7672417f05b91a6d07aeb
|
||||||
size 108204
|
size 108348
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:425ce93eb6169673298f7bf05f2125bf6fb86809abc46273861bec324e24c635
|
oid sha256:46ba3c105adda9a91f1b6227b15455200b8b1f5b8e87d6826067cdfec5dca334
|
||||||
size 108619
|
size 108764
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:4b5bcf8c408e25881df6b552614b8181bc71858a52894ce7354240c1f3f1b6fc
|
oid sha256:9a2a6c34e7e14ecee0dcc66f519f95344ce67a9029f21727d6325d195e3320d0
|
||||||
size 62582
|
size 62683
|
||||||
|
|||||||
+2
-2
@@ -1,3 +1,3 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:8868848eeeb66d2b1bf2ce93e0c8c36f309e315c8edf3f26361ee1b91b68a1be
|
oid sha256:2120e2fc71bf507895247ed0443a0be8e031fb64918e298b0a8e567101e0c4f7
|
||||||
size 62995
|
size 63096
|
||||||
|
|||||||
@@ -182,8 +182,7 @@ struct CompoundIcon_Previews: PreviewProvider, TestablePreview {
|
|||||||
|
|
||||||
static var accessibilityLabels: some View {
|
static var accessibilityLabels: some View {
|
||||||
Grid(alignment: .leading) {
|
Grid(alignment: .leading) {
|
||||||
ForEach(DynamicTypeSize.allCases, id: \.self) {
|
ForEach(DynamicTypeSize.allCases, id: \.self) { size in
|
||||||
size in
|
|
||||||
GridRow {
|
GridRow {
|
||||||
Label("Test XS", icon: \.userProfile, iconSize: .xSmall, relativeTo: .compound.bodyXS)
|
Label("Test XS", icon: \.userProfile, iconSize: .xSmall, relativeTo: .compound.bodyXS)
|
||||||
.font(.compound.bodyXS)
|
.font(.compound.bodyXS)
|
||||||
|
|||||||
Reference in New Issue
Block a user