From 7d29bca3197d8499d8dee81373735bf58d08a42a Mon Sep 17 00:00:00 2001 From: Doug Date: Fri, 27 May 2022 20:42:44 +0100 Subject: [PATCH] Fixup missing colours and use resolved colours in UIKit. Fix the confetti colour when using DesignKit. Pin swift packages. Fix UI tests target. --- .gitignore | 8 +- .../xcshareddata/xcschemes/Riot.xcscheme | 2 +- .../xcshareddata/swiftpm/Package.resolved | 50 ++++++++++ .../Theme/ElementUIColorsResolved.swift | 91 +++++++++++++++++++ Riot/Managers/Theme/ThemeV2.swift | 22 +---- Riot/Managers/Theme/Themes/DarkTheme.swift | 2 +- Riot/Managers/Theme/Themes/DefaultTheme.swift | 2 +- .../SwiftUI/VectorHostingController.swift | 3 + .../Common/EffectsScene/EffectsScene.swift | 5 +- .../Common/EffectsScene/EffectsView.swift | 6 ++ .../Modules/Common/Theme/ThemeSwiftUI.swift | 11 ++- .../Common/Util/BorderedInputFieldStyle.swift | 2 +- .../Common/Util/ClearViewModifier.swift | 2 +- .../Common/Util/MultilineTextField.swift | 2 +- .../Modules/Common/Util/OptionButton.swift | 2 +- .../Modules/Common/Util/SearchBar.swift | 6 +- .../Util/SecondaryActionButtonStyle.swift | 2 +- .../Modules/Common/Util/WaitOverlay.swift | 2 +- .../OnboardingSplashScreenPageIndicator.swift | 2 +- .../View/RoomAccessTypeChooserRow.swift | 2 +- ...RestrictedAccessSpaceChooserSelector.swift | 4 +- .../View/TimelinePollAnswerOptionButton.swift | 4 +- .../View/FormInputFieldStyle.swift | 2 +- .../View/MatrixItemChooser.swift | 2 +- .../View/MatrixItemChooserSectionHeader.swift | 2 +- .../SpaceSettings/View/SpaceSettings.swift | 2 +- .../View/SpaceSettingsOptionListItem.swift | 2 +- RiotSwiftUI/targetUITests.yml | 1 + changelog.d/6276.change | 1 + project.yml | 2 +- 30 files changed, 195 insertions(+), 51 deletions(-) create mode 100644 Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 Riot/Managers/Theme/ElementUIColorsResolved.swift create mode 100644 changelog.d/6276.change diff --git a/.gitignore b/.gitignore index 695d4cd61..2530cc0a7 100644 --- a/.gitignore +++ b/.gitignore @@ -30,8 +30,14 @@ vendor/ Pods/ ## Ignore project files as we generate them with xcodegen (https://github.com/yonaskolb/XcodeGen) +# Plus ridiculous workaround to unignore the Package.resolved file for SwiftPM. *.xcodeproj -*.xcworkspace +*.xcworkspace/* +!Riot.xcworkspace/xcshareddata +Riot.xcworkspace/xcshareddata/* +!Riot.xcworkspace/xcshareddata/swiftpm/ +Riot.xcworkspace/xcshareddata/swiftpm/* +!Riot.xcworkspace/xcshareddata/swiftpm/Package.resolved # Fastlane fastlane/report.xml diff --git a/Riot.xcodeproj/xcshareddata/xcschemes/Riot.xcscheme b/Riot.xcodeproj/xcshareddata/xcschemes/Riot.xcscheme index a9bea1d96..f973b344c 100644 --- a/Riot.xcodeproj/xcshareddata/xcschemes/Riot.xcscheme +++ b/Riot.xcodeproj/xcshareddata/xcschemes/Riot.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> { } private func update(theme: Theme) { + // Ensure dynamic colors are shown correctly when the theme is the opposite appearance to the system. + overrideUserInterfaceStyle = theme.userInterfaceStyle + if let navigationBar = self.navigationController?.navigationBar { theme.applyStyle(onNavigationBar: navigationBar, withModernScrollEdgeAppearance: enableNavigationBarScrollEdgeAppearance) } diff --git a/RiotSwiftUI/Modules/Common/EffectsScene/EffectsScene.swift b/RiotSwiftUI/Modules/Common/EffectsScene/EffectsScene.swift index 67ef9bc7c..38eb5db11 100644 --- a/RiotSwiftUI/Modules/Common/EffectsScene/EffectsScene.swift +++ b/RiotSwiftUI/Modules/Common/EffectsScene/EffectsScene.swift @@ -65,9 +65,12 @@ fileprivate extension Color { /// /// SceneKit works in a colorspace with a linear gamma, which is why this conversion is necessary. var floatComponents: [Float]? { + // Get the CGColor from a UIColor as it is nil on Color when loaded from an asset catalog. + let cgColor = UIColor(self).cgColor + guard let colorSpace = CGColorSpace(name: CGColorSpace.extendedLinearSRGB), - let linearColor = cgColor?.converted(to: colorSpace, intent: .defaultIntent, options: nil), + let linearColor = cgColor.converted(to: colorSpace, intent: .defaultIntent, options: nil), let components = linearColor.components else { return nil } diff --git a/RiotSwiftUI/Modules/Common/EffectsScene/EffectsView.swift b/RiotSwiftUI/Modules/Common/EffectsScene/EffectsView.swift index 2422a2ef5..4ab2c5746 100644 --- a/RiotSwiftUI/Modules/Common/EffectsScene/EffectsView.swift +++ b/RiotSwiftUI/Modules/Common/EffectsScene/EffectsView.swift @@ -59,3 +59,9 @@ struct EffectsView: UIViewRepresentable { } } } + +struct EffectsView_Previews: PreviewProvider { + static var previews: some View { + EffectsView(effect: .confetti) + } +} diff --git a/RiotSwiftUI/Modules/Common/Theme/ThemeSwiftUI.swift b/RiotSwiftUI/Modules/Common/Theme/ThemeSwiftUI.swift index e0ff5bdc1..90d9a4852 100644 --- a/RiotSwiftUI/Modules/Common/Theme/ThemeSwiftUI.swift +++ b/RiotSwiftUI/Modules/Common/Theme/ThemeSwiftUI.swift @@ -36,11 +36,14 @@ public protocol ThemeSwiftUIType { /// may contain more design components in future, like icons, audio files etc. } -#warning("Temporary missing colors") public extension ElementColors { - var quarterlyContent: Color { quaternaryContent } - var navigation: Color { system } - var tile: Color { system } + // MARK: - Legacy + var legacyTile: Color { + let dynamicColor = UIColor { $0.userInterfaceStyle == .light ? .elementLight.tile : .elementDark.tile } + return Color(dynamicColor) + } + + // TODO: Generate in DesignTokens repo. var namesAndAvatars: [Color] { [ globalAzure, diff --git a/RiotSwiftUI/Modules/Common/Util/BorderedInputFieldStyle.swift b/RiotSwiftUI/Modules/Common/Util/BorderedInputFieldStyle.swift index fe75aa300..2615efa47 100644 --- a/RiotSwiftUI/Modules/Common/Util/BorderedInputFieldStyle.swift +++ b/RiotSwiftUI/Modules/Common/Util/BorderedInputFieldStyle.swift @@ -50,7 +50,7 @@ struct BorderedInputFieldStyle: TextFieldStyle { if (theme.identifier == ThemeIdentifier.dark) { return (isEnabled ? theme.colors.primaryContent : theme.colors.tertiaryContent) } else { - return (isEnabled ? theme.colors.primaryContent : theme.colors.quarterlyContent) + return (isEnabled ? theme.colors.primaryContent : theme.colors.quaternaryContent) } } diff --git a/RiotSwiftUI/Modules/Common/Util/ClearViewModifier.swift b/RiotSwiftUI/Modules/Common/Util/ClearViewModifier.swift index 7eb67d39c..6ab0832ac 100644 --- a/RiotSwiftUI/Modules/Common/Util/ClearViewModifier.swift +++ b/RiotSwiftUI/Modules/Common/Util/ClearViewModifier.swift @@ -47,7 +47,7 @@ struct ClearViewModifier: ViewModifier { }) { Image(systemName: "xmark.circle.fill") .renderingMode(.template) - .foregroundColor(theme.colors.quarterlyContent) + .foregroundColor(theme.colors.quaternaryContent) } .padding(.top, alignment == .top ? 8 : 0) .padding(.bottom, alignment == .bottom ? 8 : 0) diff --git a/RiotSwiftUI/Modules/Common/Util/MultilineTextField.swift b/RiotSwiftUI/Modules/Common/Util/MultilineTextField.swift index c447d7c7b..a03c4b21b 100644 --- a/RiotSwiftUI/Modules/Common/Util/MultilineTextField.swift +++ b/RiotSwiftUI/Modules/Common/Util/MultilineTextField.swift @@ -56,7 +56,7 @@ struct MultilineTextField: View { return theme.colors.accent } - return theme.colors.quarterlyContent + return theme.colors.quaternaryContent } private var borderWidth: CGFloat { diff --git a/RiotSwiftUI/Modules/Common/Util/OptionButton.swift b/RiotSwiftUI/Modules/Common/Util/OptionButton.swift index 17e54bbda..428ecf09c 100644 --- a/RiotSwiftUI/Modules/Common/Util/OptionButton.swift +++ b/RiotSwiftUI/Modules/Common/Util/OptionButton.swift @@ -55,7 +55,7 @@ struct OptionButton: View { } } Spacer() - Image(systemName: "chevron.right").font(.system(size: 16, weight: .regular)).foregroundColor(theme.colors.quarterlyContent) + Image(systemName: "chevron.right").font(.system(size: 16, weight: .regular)).foregroundColor(theme.colors.quaternaryContent) } .padding(EdgeInsets(top: 15, leading: 16, bottom: 15, trailing: 16)) .background(theme.colors.quinaryContent) diff --git a/RiotSwiftUI/Modules/Common/Util/SearchBar.swift b/RiotSwiftUI/Modules/Common/Util/SearchBar.swift index 4edaa2e5c..3901ea65a 100644 --- a/RiotSwiftUI/Modules/Common/Util/SearchBar.swift +++ b/RiotSwiftUI/Modules/Common/Util/SearchBar.swift @@ -38,7 +38,7 @@ struct SearchBar: View { } .padding(8) .padding(.horizontal, 25) - .background(theme.colors.navigation) + .background(theme.colors.system) .cornerRadius(8) .padding(.leading) .padding(.trailing, isEditing ? 8 : 16) @@ -46,7 +46,7 @@ struct SearchBar: View { HStack { Image(systemName: "magnifyingglass") .renderingMode(.template) - .foregroundColor(theme.colors.quarterlyContent) + .foregroundColor(theme.colors.quaternaryContent) .frame(minWidth: 0, maxWidth: .infinity, alignment: .leading) if isEditing && !text.isEmpty { @@ -55,7 +55,7 @@ struct SearchBar: View { }) { Image(systemName: "multiply.circle.fill") .renderingMode(.template) - .foregroundColor(theme.colors.quarterlyContent) + .foregroundColor(theme.colors.quaternaryContent) } } } diff --git a/RiotSwiftUI/Modules/Common/Util/SecondaryActionButtonStyle.swift b/RiotSwiftUI/Modules/Common/Util/SecondaryActionButtonStyle.swift index 8f0eb6aac..a20eba58e 100644 --- a/RiotSwiftUI/Modules/Common/Util/SecondaryActionButtonStyle.swift +++ b/RiotSwiftUI/Modules/Common/Util/SecondaryActionButtonStyle.swift @@ -68,7 +68,7 @@ struct SecondaryActionButtonStyle_Previews: PreviewProvider { Text("Custom") .foregroundColor(theme.colors.secondaryContent) } - .buttonStyle(SecondaryActionButtonStyle(customColor: theme.colors.quarterlyContent)) + .buttonStyle(SecondaryActionButtonStyle(customColor: theme.colors.quaternaryContent)) } .padding() } diff --git a/RiotSwiftUI/Modules/Common/Util/WaitOverlay.swift b/RiotSwiftUI/Modules/Common/Util/WaitOverlay.swift index 60f7315bb..4abada5e5 100644 --- a/RiotSwiftUI/Modules/Common/Util/WaitOverlay.swift +++ b/RiotSwiftUI/Modules/Common/Util/WaitOverlay.swift @@ -89,7 +89,7 @@ struct WaitOverlay: ViewModifier { } .padding(12) .background(RoundedRectangle(cornerRadius: 8, style: .continuous) - .fill(theme.colors.navigation.opacity(0.9))) + .fill(theme.colors.system.opacity(0.9))) } .edgesIgnoringSafeArea(.all) .transition(.opacity) diff --git a/RiotSwiftUI/Modules/Onboarding/SplashScreen/View/OnboardingSplashScreenPageIndicator.swift b/RiotSwiftUI/Modules/Onboarding/SplashScreen/View/OnboardingSplashScreenPageIndicator.swift index 63e8507a0..f2306eaf4 100644 --- a/RiotSwiftUI/Modules/Onboarding/SplashScreen/View/OnboardingSplashScreenPageIndicator.swift +++ b/RiotSwiftUI/Modules/Onboarding/SplashScreen/View/OnboardingSplashScreenPageIndicator.swift @@ -47,7 +47,7 @@ struct OnboardingSplashScreenPageIndicator: View { ForEach(0..