You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/Session/Onboarding/LandingView.swift

151 lines
6.1 KiB
Swift

// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import SwiftUI
import SessionUIKit
struct LandingView: View {
var body: some View {
NavigationView {
ZStack (alignment: .topLeading) {
if #available(iOS 14.0, *) {
ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary).ignoresSafeArea()
} else {
ThemeManager.currentTheme.colorSwiftUI(for: .backgroundPrimary)
}
VStack(
alignment: .center,
spacing: 16
) {
2 years ago
Spacer(minLength: Values.massiveSpacing)
Text("onboarding_landing_title".localized())
.bold()
2 years ago
.font(.system(size: Values.veryLargeFontSize))
.foregroundColor(themeColor: .textPrimary)
2 years ago
.padding(.vertical, Values.mediumSpacing)
FakeChat()
2 years ago
Spacer(minLength: Values.massiveSpacing)
Button {
} label: {
Text("onboarding_landing_register_button_title".localized())
.bold()
2 years ago
.font(.system(size: Values.smallFontSize))
.foregroundColor(themeColor: .sessionButton_primaryFilledText)
.frame(
2 years ago
maxWidth: .infinity,
maxHeight: Values.largeButtonHeight,
alignment: .center
)
2 years ago
.backgroundColor(themeColor: .sessionButton_primaryFilledBackground)
.cornerRadius(Values.largeButtonHeight / 2)
}
2 years ago
.padding(.horizontal, Values.massiveSpacing)
Button {
} label: {
Text("onboarding_landing_restore_button_title".localized())
.bold()
2 years ago
.font(.system(size: Values.smallFontSize))
.foregroundColor(themeColor: .sessionButton_text)
.frame(
2 years ago
maxWidth: .infinity,
maxHeight: Values.largeButtonHeight,
alignment: .center
)
.overlay(
Capsule()
.stroke(themeColor: .sessionButton_border)
)
}
2 years ago
.padding(.horizontal, Values.massiveSpacing)
Button {
} label: {
let attributedText: NSAttributedString = {
let text = String(format: "onboarding_T&C".localized(), "terms_of_service".localized(), "privacy_policy".localized())
let result = NSMutableAttributedString(
string: text,
attributes: [ .font : UIFont.systemFont(ofSize: Values.verySmallFontSize)]
)
result.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: Values.verySmallFontSize), range: (text as NSString).range(of: "terms_of_service".localized()))
result.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: Values.verySmallFontSize), range: (text as NSString).range(of: "privacy_policy".localized()))
return result
}()
AttributedText(attributedText)
.foregroundColor(themeColor: .textPrimary)
}
2 years ago
.padding(.horizontal, Values.massiveSpacing)
}
2 years ago
.padding(.vertical, Values.mediumSpacing)
}
}
}
}
struct ChatBubble: View {
let text: String
let outgoing: Bool
var body: some View {
let backgroundColor: Color? = ThemeManager.currentTheme.colorSwiftUI(for: (outgoing ? .messageBubble_outgoingBackground : .messageBubble_incomingBackground))
Text(text)
.foregroundColor(themeColor: (outgoing ? .messageBubble_outgoingText : .messageBubble_incomingText))
.font(.system(size: 16))
.padding(.all, 12)
.background(backgroundColor)
.cornerRadius(13)
.frame(
maxWidth: 230,
alignment: (outgoing ? .trailing : .leading)
)
}
}
struct FakeChat: View {
let chatBubbles: [ChatBubble] = [
ChatBubble(text: "onboarding_chat_bubble_1".localized(), outgoing: false),
ChatBubble(text: "onboarding_chat_bubble_2".localized(), outgoing: true),
ChatBubble(text: "onboarding_chat_bubble_3".localized(), outgoing: false),
ChatBubble(text: "onboarding_chat_bubble_4".localized(), outgoing: true),
]
var body: some View {
ScrollView(
.vertical,
showsIndicators: false
) {
VStack(
alignment: .leading,
spacing: 18
) {
ForEach(
0...(chatBubbles.count - 1),
id: \.self
) { index in
let chatBubble: ChatBubble = chatBubbles[index]
chatBubble
.frame(
maxWidth: .infinity,
alignment: chatBubble.outgoing ? .trailing : .leading
)
}
}
.padding(.horizontal, 36)
}
}
}
struct LandingView_Previews: PreviewProvider {
static var previews: some View {
LandingView()
}
}