Files
simplex-chat/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift
2022-09-22 08:37:45 +01:00

112 lines
3.5 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// SimpleXInfo.swift
// SimpleX (iOS)
//
// Created by Evgeny on 07/05/2022.
// Copyright © 2022 SimpleX Chat. All rights reserved.
//
import SwiftUI
struct SimpleXInfo: View {
@EnvironmentObject var m: ChatModel
@Environment(\.colorScheme) var colorScheme: ColorScheme
@State private var showHowItWorks = false
var onboarding: Bool
var body: some View {
GeometryReader { g in
VStack(alignment: .leading) {
Image(colorScheme == .light ? "logo" : "logo-light")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: g.size.width * 0.7)
.padding(.bottom, 8)
.frame(maxWidth: .infinity)
VStack(alignment: .leading) {
Text("The next generation of private messaging")
.font(.title)
.padding(.bottom, 24)
.frame(maxWidth: .infinity)
.multilineTextAlignment(.center)
infoRow("privacy", "Privacy redefined",
"The 1st platform without any user identifiers private by design.")
infoRow("shield", "Immune to spam and abuse",
"People can connect to you only via the links you share.")
infoRow("decentralized", "Decentralized",
"Open-source protocol and code anybody can run the servers.")
}
Spacer()
if onboarding {
OnboardingActionButton()
Spacer()
}
Button {
showHowItWorks = true
} label: {
Label("How it works", systemImage: "info.circle")
.font(.subheadline)
}
.padding(.bottom, 8)
.frame(maxWidth: .infinity)
}
.sheet(isPresented: $showHowItWorks) {
HowItWorks(onboarding: onboarding)
}
}
.padding()
}
private func infoRow(_ image: String, _ title: LocalizedStringKey, _ text: LocalizedStringKey) -> some View {
HStack(alignment: .top) {
Image(image)
.resizable()
.scaledToFit()
.frame(width: 36, height: 40)
.padding(.top, 4)
.padding(.trailing, 6)
VStack(alignment: .leading) {
Text(title).font(.headline)
Text(text)
}
}
.padding(.bottom, 8)
}
}
struct OnboardingActionButton: View {
@EnvironmentObject var m: ChatModel
var body: some View {
if m.currentUser == nil {
actionButton("Create your profile", onboarding: .step2_CreateProfile)
} else {
actionButton("Make a private connection", onboarding: .onboardingComplete)
}
}
private func actionButton(_ label: LocalizedStringKey, onboarding: OnboardingStage) -> some View {
Button {
withAnimation {
m.onboardingStage = onboarding
}
} label: {
HStack {
Text(label).font(.title2)
Image(systemName: "greaterthan")
}
}
.frame(maxWidth: .infinity)
.padding(.bottom)
}
}
struct SimpleXInfo_Previews: PreviewProvider {
static var previews: some View {
SimpleXInfo(onboarding: true)
}
}