Updates following PR review.

Fix tests by moving constants out of Coordinator (as it is only part of the Riot target).
This commit is contained in:
Doug
2022-01-27 14:44:10 +00:00
parent 229ce51691
commit 7deb71810d
14 changed files with 110 additions and 50 deletions
@@ -14,19 +14,18 @@
// limitations under the License.
//
import Foundation
import UIKit
import SwiftUI
struct OnboardingSplashScreenCoordinatorParameters { }
protocol OnboardingSplashScreenCoordinatorProtocol: Coordinator, Presentable {
var completion: ((OnboardingSplashScreenViewModelResult) -> Void)? { get set }
}
final class OnboardingSplashScreenCoordinator: Coordinator, Presentable {
final class OnboardingSplashScreenCoordinator: OnboardingSplashScreenCoordinatorProtocol {
// MARK: - Properties
// MARK: Private
private let parameters: OnboardingSplashScreenCoordinatorParameters
private let onboardingSplashScreenHostingController: UIViewController
private var onboardingSplashScreenViewModel: OnboardingSplashScreenViewModelProtocol
@@ -39,8 +38,7 @@ final class OnboardingSplashScreenCoordinator: Coordinator, Presentable {
// MARK: - Setup
@available(iOS 14.0, *)
init(parameters: OnboardingSplashScreenCoordinatorParameters) {
self.parameters = parameters
init() {
let viewModel = OnboardingSplashScreenViewModel()
let view = OnboardingSplashScreen(viewModel: viewModel.context)
onboardingSplashScreenViewModel = viewModel
@@ -43,6 +43,21 @@ enum OnboardingSplashScreenViewModelResult {
@available(iOS 13.0, *)
struct OnboardingSplashScreenViewState: BindableState, CustomDebugStringConvertible {
// MARK: - Constants
private enum Constants {
static let gradientColors = [
Color(red: 0.95, green: 0.98, blue: 0.96),
Color(red: 0.89, green: 0.96, blue: 0.97),
Color(red: 0.95, green: 0.89, blue: 0.97),
Color(red: 0.81, green: 0.95, blue: 0.91),
Color(red: 0.95, green: 0.98, blue: 0.96)
]
}
// MARK: - Properties
/// An array containing all content of the carousel pages
let content: [OnboardingSplashScreenPageContent]
var bindings: OnboardingSplashScreenBindings
@@ -62,34 +77,22 @@ struct OnboardingSplashScreenViewState: BindableState, CustomDebugStringConverti
message: VectorL10n.onboardingSplashPage1Message,
image: Asset.Images.onboardingSplashScreenPage1,
darkImage: Asset.Images.onboardingSplashScreenPage1Dark,
gradient: Gradient(colors: [
Color(red: 0.95, green: 0.98, blue: 0.96),
Color(red: 0.89, green: 0.96, blue: 0.97)
])),
gradient: Gradient(colors: [Constants.gradientColors[0], Constants.gradientColors[1]])),
OnboardingSplashScreenPageContent(title: VectorL10n.onboardingSplashPage2Title,
message: VectorL10n.onboardingSplashPage2Message,
image: Asset.Images.onboardingSplashScreenPage2,
darkImage: Asset.Images.onboardingSplashScreenPage2Dark,
gradient: Gradient(colors: [
Color(red: 0.89, green: 0.96, blue: 0.97),
Color(red: 0.95, green: 0.89, blue: 0.97)
])),
gradient: Gradient(colors: [Constants.gradientColors[1], Constants.gradientColors[2]])),
OnboardingSplashScreenPageContent(title: VectorL10n.onboardingSplashPage3Title,
message: VectorL10n.onboardingSplashPage3Message,
image: Asset.Images.onboardingSplashScreenPage3,
darkImage: Asset.Images.onboardingSplashScreenPage3Dark,
gradient: Gradient(colors: [
Color(red: 0.95, green: 0.89, blue: 0.97),
Color(red: 0.81, green: 0.95, blue: 0.91)
])),
gradient: Gradient(colors: [Constants.gradientColors[2], Constants.gradientColors[3]])),
OnboardingSplashScreenPageContent(title: page4Title,
message: VectorL10n.onboardingSplashPage4Message,
image: Asset.Images.onboardingSplashScreenPage4,
darkImage: Asset.Images.onboardingSplashScreenPage4Dark,
gradient: Gradient(colors: [
Color(red: 0.81, green: 0.95, blue: 0.91),
Color(red: 0.95, green: 0.98, blue: 0.96)
])),
gradient: Gradient(colors: [Constants.gradientColors[3], Constants.gradientColors[4]])),
]
self.bindings = OnboardingSplashScreenBindings()
}
@@ -70,7 +70,7 @@ struct OnboardingSplashScreen: View {
buttons
.padding(.horizontal, 16)
.frame(maxWidth: OnboardingCoordinator.maxContentWidth)
.frame(maxWidth: OnboardingConstants.maxContentWidth)
Spacer()
}
.background(ViewFrameReader(frame: $overlayFrame))
@@ -195,6 +195,5 @@ struct OnboardingSplashScreen_Previews: PreviewProvider {
static let stateRenderer = MockOnboardingSplashScreenScreenState.stateRenderer
static var previews: some View {
stateRenderer.screenGroup()
// .environment(\.layoutDirection, .rightToLeft)
}
}
@@ -30,15 +30,11 @@ struct OnboardingSplashScreenPage: View {
/// The height of the non-scrollable content in the splash screen.
let overlayHeight: CGFloat
var isDarkModeEnabled: Bool {
theme.identifier != .light
}
// MARK: - Views
@ViewBuilder
var backgroundGradient: some View {
if !isDarkModeEnabled {
if !theme.isDark {
LinearGradient(gradient: content.gradient, startPoint: .leading, endPoint: .trailing)
.flipsForRightToLeftLayoutDirection(true)
}
@@ -47,7 +43,7 @@ struct OnboardingSplashScreenPage: View {
var body: some View {
VStack {
VStack {
Image(isDarkModeEnabled ? content.darkImage.name : content.image.name)
Image(theme.isDark ? content.darkImage.name : content.image.name)
.resizable()
.scaledToFit()
.frame(maxWidth: 300)
@@ -70,8 +66,8 @@ struct OnboardingSplashScreenPage: View {
Spacer().frame(maxHeight: overlayHeight)
}
.padding(.horizontal, 16)
.frame(maxWidth: OnboardingCoordinator.maxContentWidth,
maxHeight: OnboardingCoordinator.maxContentHeight)
.frame(maxWidth: OnboardingConstants.maxContentWidth,
maxHeight: OnboardingConstants.maxContentHeight)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(backgroundGradient.ignoresSafeArea())