ios: restore onboarding step (#2384)

This commit is contained in:
spaced4ndy
2023-05-05 12:56:48 +04:00
committed by GitHub
parent b5f482bb50
commit aa2b36d5cc
8 changed files with 21 additions and 4 deletions
+4 -2
View File
@@ -1025,6 +1025,7 @@ func initializeChat(start: Bool, dbKey: String? = nil, refreshInvitations: Bool
m.chatInitialized = true
m.currentUser = try apiGetActiveUser()
if m.currentUser == nil {
onboardingStageDefault.set(.step1_SimpleXInfo)
m.onboardingStage = .step1_SimpleXInfo
} else if start {
try startChat(refreshInvitations: refreshInvitations)
@@ -1050,9 +1051,10 @@ func startChat(refreshInvitations: Bool = true) throws {
registerToken(token: token)
}
withAnimation {
m.onboardingStage = m.onboardingStage == .step2_CreateProfile && m.users.count == 1
let savedOnboardingStage = onboardingStageDefault.get()
m.onboardingStage = [.step1_SimpleXInfo, .step2_CreateProfile].contains(savedOnboardingStage) && m.users.count == 1
? .step3_CreateSimpleXAddress
: .onboardingComplete
: savedOnboardingStage
}
}
ChatReceiver.shared.start()
@@ -109,6 +109,7 @@ struct MigrateToAppGroupView: View {
do {
resetChatCtrl()
try initializeChat(start: true)
onboardingStageDefault.set(.step4_SetNotificationsMode)
chatModel.onboardingStage = .step4_SetNotificationsMode
setV3DBMigration(.ready)
} catch let error {
@@ -124,7 +124,10 @@ struct CreateProfile: View {
m.currentUser = try apiCreateActiveUser(profile)
if m.users.isEmpty {
try startChat()
withAnimation { m.onboardingStage = .step3_CreateSimpleXAddress }
withAnimation {
onboardingStageDefault.set(.step3_CreateSimpleXAddress)
m.onboardingStage = .step3_CreateSimpleXAddress
}
} else {
dismiss()
m.users = try listUsers()
@@ -113,6 +113,7 @@ struct CreateSimpleXAddress: View {
VStack(spacing: 8) {
Button {
withAnimation {
onboardingStageDefault.set(.step4_SetNotificationsMode)
m.onboardingStage = .step4_SetNotificationsMode
}
} label: {
@@ -154,6 +155,7 @@ struct CreateSimpleXAddress: View {
case let .success(composeResult):
switch composeResult {
case .sent:
onboardingStageDefault.set(.step4_SetNotificationsMode)
m.onboardingStage = .step4_SetNotificationsMode
default: ()
}
@@ -173,6 +175,7 @@ struct CreateSimpleXAddress: View {
private func continueButton() -> some View {
Button {
withAnimation {
onboardingStageDefault.set(.step4_SetNotificationsMode)
m.onboardingStage = .step4_SetNotificationsMode
}
} label: {
@@ -22,12 +22,14 @@ struct OnboardingView: View {
}
}
enum OnboardingStage {
enum OnboardingStage: String, Identifiable {
case step1_SimpleXInfo
case step2_CreateProfile
case step3_CreateSimpleXAddress
case step4_SetNotificationsMode
case onboardingComplete
public var id: Self { self }
}
struct OnboardingStepsView_Previews: PreviewProvider {
@@ -35,6 +35,7 @@ struct SetNotificationsMode: View {
} else {
AlertManager.shared.showAlertMsg(title: "No device token!")
}
onboardingStageDefault.set(.onboardingComplete)
m.onboardingStage = .onboardingComplete
} label: {
if case .off = notificationMode {
@@ -99,6 +99,7 @@ struct OnboardingActionButton: View {
private func actionButton(_ label: LocalizedStringKey, onboarding: OnboardingStage) -> some View {
Button {
withAnimation {
onboardingStageDefault.set(onboarding)
m.onboardingStage = onboarding
}
} label: {
@@ -45,6 +45,7 @@ let DEFAULT_LIVE_MESSAGE_ALERT_SHOWN = "liveMessageAlertShown"
let DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE = "showHiddenProfilesNotice"
let DEFAULT_SHOW_MUTE_PROFILE_ALERT = "showMuteProfileAlert"
let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion"
let DEFAULT_ONBOARDING_STAGE = "onboardingStage"
let appDefaults: [String: Any] = [
DEFAULT_SHOW_LA_NOTICE: false,
@@ -71,6 +72,7 @@ let appDefaults: [String: Any] = [
DEFAULT_LIVE_MESSAGE_ALERT_SHOWN: false,
DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE: true,
DEFAULT_SHOW_MUTE_PROFILE_ALERT: true,
DEFAULT_ONBOARDING_STAGE: OnboardingStage.onboardingComplete.rawValue,
]
enum SimpleXLinkMode: String, Identifiable {
@@ -105,6 +107,8 @@ let privacySimplexLinkModeDefault = EnumDefault<SimpleXLinkMode>(defaults: UserD
let privacyLocalAuthModeDefault = EnumDefault<LAMode>(defaults: UserDefaults.standard, forKey: DEFAULT_LA_MODE, withDefault: .system)
let onboardingStageDefault = EnumDefault<OnboardingStage>(defaults: UserDefaults.standard, forKey: DEFAULT_ONBOARDING_STAGE, withDefault: .onboardingComplete)
func setGroupDefaults() {
privacyAcceptImagesGroupDefault.set(UserDefaults.standard.bool(forKey: DEFAULT_PRIVACY_ACCEPT_IMAGES))
}