mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-04-11 23:05:49 +00:00
* ios: wallpapers (#4304) * ios: wallpapers * theme selection * applied theme colors and preset wallpaper * more places with background * one more * accent color * defaults * rename * background * no change to cell color * unneeded * changes * no global tint * defaults * removed unneeded class * for merging * ios: wallpapers types (#4325) * types and api * divided types per target * creating directory for wallpapers * creating wallpaper dir at launch * ios: wallpapers appearance (#4335) * appearance * changes * refactor * scale * lambda to function --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> * ios: wallpapers user/chat overrides (#4345) * ios: wallpapers user/chat overrides * chat overrides * color picker updates colors correctly * fix state update * labels * background for light theme * small optimization * removed commented code * ios: enhancements to wallpapers (#4361) * ios: enhancements to wallpapers * colors for background * ios: wallpapers import/export (#4362) * ios: wallpapers import/export * comment * ios: wallpapers theme updates (#4365) * ios: wallpapers theme updates * group member background * colors * profile picture colors * unneeded * optimizations, images, state fixes * fixes * no editing of title color * rename Menus and alerts, refactor * tint applying fix * fixes * migration of accent and themes * fix updating system theme * migration changes * limiting color range * ios: wallpapers rename enum (#4384) * ios: wallpapers rename enum2 (#4385) * ios: wallpapers rename enum2 * change * colors were commented * fix build and look --------- Co-authored-by: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com>
162 lines
5.6 KiB
Swift
162 lines
5.6 KiB
Swift
//
|
||
// SimpleXInfo.swift
|
||
// SimpleX (iOS)
|
||
//
|
||
// Created by Evgeny on 07/05/2022.
|
||
// Copyright © 2022 SimpleX Chat. All rights reserved.
|
||
//
|
||
|
||
import SwiftUI
|
||
import SimpleXChat
|
||
|
||
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
|
||
ScrollView {
|
||
VStack(alignment: .leading) {
|
||
Image(colorScheme == .light ? "logo" : "logo-light")
|
||
.resizable()
|
||
.aspectRatio(contentMode: .fit)
|
||
.frame(width: g.size.width * 0.67)
|
||
.padding(.bottom, 8)
|
||
.frame(maxWidth: .infinity, minHeight: 48, alignment: .top)
|
||
|
||
VStack(alignment: .leading) {
|
||
Text("The next generation of private messaging")
|
||
.font(.title2)
|
||
.padding(.bottom, 30)
|
||
.padding(.horizontal, 40)
|
||
.frame(maxWidth: .infinity)
|
||
.multilineTextAlignment(.center)
|
||
infoRow("privacy", "Privacy redefined",
|
||
"The 1st platform without any user identifiers – private by design.", width: 48)
|
||
infoRow("shield", "Immune to spam and abuse",
|
||
"People can connect to you only via the links you share.", width: 46)
|
||
infoRow(colorScheme == .light ? "decentralized" : "decentralized-light", "Decentralized",
|
||
"Open-source protocol and code – anybody can run the servers.", width: 44)
|
||
}
|
||
|
||
Spacer()
|
||
if onboarding {
|
||
OnboardingActionButton()
|
||
Spacer()
|
||
|
||
Button {
|
||
m.migrationState = .pasteOrScanLink
|
||
} label: {
|
||
Label("Migrate from another device", systemImage: "tray.and.arrow.down")
|
||
.font(.subheadline)
|
||
}
|
||
.padding(.bottom, 8)
|
||
.frame(maxWidth: .infinity)
|
||
}
|
||
|
||
Button {
|
||
showHowItWorks = true
|
||
} label: {
|
||
Label("How it works", systemImage: "info.circle")
|
||
.font(.subheadline)
|
||
}
|
||
.padding(.bottom, 8)
|
||
.frame(maxWidth: .infinity)
|
||
|
||
}
|
||
.frame(minHeight: g.size.height)
|
||
}
|
||
.sheet(isPresented: Binding(
|
||
get: { m.migrationState != nil },
|
||
set: { _ in
|
||
m.migrationState = nil
|
||
MigrationToDeviceState.save(nil) }
|
||
)) {
|
||
NavigationView {
|
||
VStack(alignment: .leading) {
|
||
MigrateToDevice(migrationState: $m.migrationState)
|
||
}
|
||
.navigationTitle("Migrate here")
|
||
.modifier(ThemedBackground(grouped: true))
|
||
}
|
||
}
|
||
.sheet(isPresented: $showHowItWorks) {
|
||
HowItWorks(onboarding: onboarding)
|
||
}
|
||
}
|
||
.frame(maxHeight: .infinity)
|
||
.padding()
|
||
}
|
||
|
||
private func infoRow(_ image: String, _ title: LocalizedStringKey, _ text: LocalizedStringKey, width: CGFloat) -> some View {
|
||
HStack(alignment: .top) {
|
||
Image(image)
|
||
.resizable()
|
||
.scaledToFit()
|
||
.frame(width: width, height: 54)
|
||
.frame(width: 54)
|
||
.padding(.top, 4)
|
||
.padding(.leading, 4)
|
||
.padding(.trailing, 10)
|
||
VStack(alignment: .leading, spacing: 4) {
|
||
Text(title).font(.headline)
|
||
Text(text).frame(minHeight: 40, alignment: .top)
|
||
}
|
||
}
|
||
.padding(.bottom, 20)
|
||
.padding(.trailing, 6)
|
||
}
|
||
}
|
||
|
||
struct OnboardingActionButton: View {
|
||
@EnvironmentObject var m: ChatModel
|
||
@Environment(\.colorScheme) var colorScheme
|
||
|
||
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 {
|
||
onboardingStageDefault.set(onboarding)
|
||
m.onboardingStage = onboarding
|
||
}
|
||
} label: {
|
||
HStack {
|
||
Text(label).font(.title2)
|
||
Image(systemName: "greaterthan")
|
||
}
|
||
}
|
||
.frame(maxWidth: .infinity)
|
||
.padding(.bottom)
|
||
}
|
||
|
||
private func actionButton(_ label: LocalizedStringKey, action: @escaping () -> Void) -> some View {
|
||
Button {
|
||
withAnimation {
|
||
action()
|
||
}
|
||
} 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)
|
||
}
|
||
}
|