Skip to content

Commit 9918922

Browse files
committed
Added onboarding/what's new handler to select the proper sheet to pull up at open, and added what's new notes for this release. Added some logic so that the Connect screen doesn't start the scan until BLE is turned on.
1 parent 9561cb2 commit 9918922

13 files changed

Lines changed: 213 additions & 41 deletions

File tree

Infini-iOS.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
/* Begin PBXBuildFile section */
1010
2617EF37270364CE00FE6F48 /* ChartViewSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2617EF36270364CE00FE6F48 /* ChartViewSelector.swift */; };
11+
2617EF3927036C9B00FE6F48 /* WhatsNewSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2617EF3827036C9B00FE6F48 /* WhatsNewSheet.swift */; };
12+
2617EF3D27036DC600FE6F48 /* WhatsNewBody090.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2617EF3C27036DC600FE6F48 /* WhatsNewBody090.swift */; };
1113
26318B1626CB27E70036051E /* Infini_iOS.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 26318B1426CB27E70036051E /* Infini_iOS.xcdatamodeld */; };
1214
2632388426F2531C00D72B43 /* DFUWithBLE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2632388326F2531C00D72B43 /* DFUWithBLE.swift */; };
1315
2632388626F2548600D72B43 /* DFUWithoutBLE.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2632388526F2548600D72B43 /* DFUWithoutBLE.swift */; };
@@ -82,6 +84,8 @@
8284

8385
/* Begin PBXFileReference section */
8486
2617EF36270364CE00FE6F48 /* ChartViewSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartViewSelector.swift; sourceTree = "<group>"; };
87+
2617EF3827036C9B00FE6F48 /* WhatsNewSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatsNewSheet.swift; sourceTree = "<group>"; };
88+
2617EF3C27036DC600FE6F48 /* WhatsNewBody090.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhatsNewBody090.swift; sourceTree = "<group>"; };
8589
26318B1526CB27E70036051E /* Infini_iOS.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Infini_iOS.xcdatamodel; sourceTree = "<group>"; };
8690
2632388326F2531C00D72B43 /* DFUWithBLE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DFUWithBLE.swift; sourceTree = "<group>"; };
8791
2632388526F2548600D72B43 /* DFUWithoutBLE.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DFUWithoutBLE.swift; sourceTree = "<group>"; };
@@ -169,6 +173,15 @@
169173
/* End PBXFrameworksBuildPhase section */
170174

171175
/* Begin PBXGroup section */
176+
2617EF3A27036D9100FE6F48 /* What's New */ = {
177+
isa = PBXGroup;
178+
children = (
179+
2617EF3827036C9B00FE6F48 /* WhatsNewSheet.swift */,
180+
2617EF3C27036DC600FE6F48 /* WhatsNewBody090.swift */,
181+
);
182+
path = "What's New";
183+
sourceTree = "<group>";
184+
};
172185
2632389326F29A4100D72B43 /* Onboarding */ = {
173186
isa = PBXGroup;
174187
children = (
@@ -338,6 +351,7 @@
338351
26C5FAD726FC129400921207 /* ArbitraryNotificationView.swift */,
339352
26C5FAE226FEB0A400921207 /* DFUDownloadView.swift */,
340353
26C5FADB26FE7EB000921207 /* SheetCloseButton.swift */,
354+
2617EF3A27036D9100FE6F48 /* What's New */,
341355
2632389326F29A4100D72B43 /* Onboarding */,
342356
);
343357
path = Sheets;
@@ -508,6 +522,7 @@
508522
26A6315526C0297A005AE404 /* BLEWriteManager.swift in Sources */,
509523
26C5FAE126FE98F500921207 /* BLEAutoconnectManager.swift in Sources */,
510524
26A6316026C4BC25005AE404 /* DFUView.swift in Sources */,
525+
2617EF3927036C9B00FE6F48 /* WhatsNewSheet.swift in Sources */,
511526
2632389026F2980A00D72B43 /* OnboardingDismissButton.swift in Sources */,
512527
264AE04627026BD6001504A7 /* UptimeManager.swift in Sources */,
513528
26A6315226BF45E0005AE404 /* BLEMusic.swift in Sources */,
@@ -529,6 +544,7 @@
529544
26318B1626CB27E70036051E /* Infini_iOS.xcdatamodeld in Sources */,
530545
266F53EC26FAABE7007481A6 /* TimeRangeTabs.swift in Sources */,
531546
26C5FAD826FC129400921207 /* ArbitraryNotificationView.swift in Sources */,
547+
2617EF3D27036DC600FE6F48 /* WhatsNewBody090.swift in Sources */,
532548
264BFE7626BC52720050A223 /* HexStringToData.swift in Sources */,
533549
2632388626F2548600D72B43 /* DFUWithoutBLE.swift in Sources */,
534550
26C5FADC26FE7EB000921207 /* SheetCloseButton.swift in Sources */,

Infini-iOS/ContentView.swift

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ struct ContentView: View {
1818
@AppStorage("autoconnect") var autoconnect: Bool = false
1919
@AppStorage("autoconnectUUID") var autoconnectUUID: String = ""
2020
@AppStorage("batteryNotification") var batteryNotification: Bool = false
21-
@AppStorage("onboarding") var onboarding: Bool = true
21+
@AppStorage("onboarding") var onboarding: Bool!// = false
22+
@AppStorage("lastVersion") var lastVersion: String = ""
23+
let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
2224

2325

2426
init() {
@@ -60,10 +62,11 @@ struct ContentView: View {
6062
.sheet(isPresented: $sheetManager.showSheet, content: {
6163
SheetManager.CurrentSheet()
6264
.onDisappear {
63-
if onboarding {
64-
onboarding = false
65-
sheetManager.sheetSelection = .connect
66-
SheetManager.shared.showSheet = true
65+
if !sheetManager.upToDate {
66+
if onboarding == nil {
67+
onboarding = false
68+
}
69+
sheetManager.setNextSheet()
6770
}
6871
}
6972
})
@@ -96,15 +99,18 @@ struct ContentView: View {
9699
self.bleManager.startScanning()
97100
}
98101

99-
if onboarding {
100-
SheetManager.shared.sheetSelection = .onboarding
101-
SheetManager.shared.showSheet = true
102-
}
103-
104-
if (autoconnect && autoconnectUUID.isEmpty) || (!autoconnect && !bleManager.isConnectedToPinetime) && !onboarding {
105-
SheetManager.shared.sheetSelection = .connect
106-
SheetManager.shared.showSheet = true
107-
}
102+
sheetManager.setNextSheet()
103+
sheetManager.showSheet = true
104+
//
105+
// if onboarding {
106+
// SheetManager.shared.sheetSelection = .onboarding
107+
// SheetManager.shared.showSheet = true
108+
// }
109+
//
110+
// if (autoconnect && autoconnectUUID.isEmpty) || (!autoconnect && !bleManager.isConnectedToPinetime) && !onboarding {
111+
// SheetManager.shared.sheetSelection = .connect
112+
// SheetManager.shared.showSheet = true
113+
// }
108114
})
109115
}
110116
}

Infini-iOS/View Components/Chart View Components/ChartManager.swift

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,21 @@ struct DataPoint {
2424

2525
class ChartManager: ObservableObject {
2626

27+
@Published var dateRange: DateRange = .day
28+
@Published var currentChart: chartSelection = .battery
29+
var lastChartWasHeart = UserDefaults.standard.value(forKey: "lastStatusViewWasHeart") as? Bool ?? false
30+
31+
let viewContext = PersistenceController.shared.container.viewContext
32+
2733
static let shared = ChartManager()
28-
private init() {}
34+
35+
private init() {
36+
if lastChartWasHeart {
37+
currentChart = .heart
38+
} else {
39+
currentChart = .battery
40+
}
41+
}
2942

3043
@Published var trueIfHeart = true
3144
@Published var trueIfBat = false
@@ -48,10 +61,7 @@ class ChartManager: ObservableObject {
4861
case week = -604800
4962
}
5063

51-
@Published var dateRange: DateRange = .day//.all
52-
@Published var currentChart: chartSelection = .battery
53-
54-
let viewContext = PersistenceController.shared.container.viewContext
64+
5565

5666
func addItem(dataPoint: DataPoint) {
5767
let newItem = ChartDataPoint(context: viewContext)
@@ -99,8 +109,6 @@ class ChartManager: ObservableObject {
99109
dateValue = -86400
100110
case .week:
101111
dateValue = -604800
102-
// case .all:
103-
// dateValue = 0
104112
}
105113
return dateValue
106114
}
@@ -119,9 +127,4 @@ class ChartManager: ObservableObject {
119127
}
120128
return dataPoints
121129
}
122-
123-
func filterDates(results: FetchedResults<ChartDataPoint>) {
124-
125-
}
126-
127130
}

Infini-iOS/View Components/Chart View Components/ChartTabs.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ struct StatusTabs: View {
2222
HStack {
2323
Button (action: {
2424
chartManager.currentChart = .heart
25+
lastStatusViewWasHeart = true
2526
}) {
2627
(Text(Image(systemName: "heart"))
2728
.foregroundColor(Color.pink) +
@@ -32,20 +33,23 @@ struct StatusTabs: View {
3233
.font(.body))
3334
.frame(maxWidth:.infinity, alignment: .center)
3435
.padding()
35-
.background(colorScheme == .dark ? (chartManager.currentChart == .heart ? Color.darkGray : Color.darkestGray) : (chartManager.currentChart == .heart ? Color.gray : Color.lightGray))
36+
.background(colorScheme == .dark ? (chartManager.currentChart == .heart ? Color.darkGray : Color.darkestGray) : Color.blue)
37+
.opacity(colorScheme == .dark ? 1.0 : (chartManager.currentChart == .heart ? 1.0 : 0.3))
3638
.cornerRadius(5)
3739
.font(.title)
3840
}.padding(.leading, 10)
3941
Button (action: {
4042
chartManager.currentChart = .battery
43+
lastStatusViewWasHeart = false
4144
}) {
4245
(Text(Image(systemName: "battery.100"))
4346
.foregroundColor(Color.green) +
4447
Text(": " + String(format: "%.0f", bleManager.batteryLevel) + "%")
4548
.foregroundColor(Color.white))
4649
.frame(maxWidth: .infinity, alignment: .center)
4750
.padding()
48-
.background(colorScheme == .dark ? (chartManager.currentChart == .battery ? Color.darkGray : Color.darkestGray) : (chartManager.currentChart == .battery ? Color.gray : Color.lightGray))
51+
.background(colorScheme == .dark ? (chartManager.currentChart == .battery ? Color.darkGray : Color.darkestGray) : Color.blue)
52+
.opacity(colorScheme == .dark ? 1.0 : (chartManager.currentChart == .battery ? 1.0 : 0.3))
4953
.cornerRadius(5)
5054
.font(.title)
5155
}

Infini-iOS/View Components/Chart View Components/TimeRangeTabs.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ struct TimeRangeTabs: View {
3636
.foregroundColor(Color.white))
3737
.frame(maxWidth: .infinity, alignment: .center)
3838
.padding()
39-
.background(colorScheme == .dark ? (chartManager.dateRange == .hour ? Color.darkGray : Color.darkestGray) : (chartManager.dateRange == .hour ? Color.gray : Color.lightGray))
39+
.background(colorScheme == .dark ? (chartManager.dateRange == .hour ? Color.darkGray : Color.darkestGray) : (Color.blue))
40+
.opacity(colorScheme == .dark ? 1.0 : (chartManager.dateRange == .hour ? 1.0 : 0.3))
4041
.cornerRadius(5)
4142
.font(.title)
4243
}
@@ -50,7 +51,8 @@ struct TimeRangeTabs: View {
5051
.foregroundColor(Color.white))
5152
.frame(maxWidth: .infinity, alignment: .center)
5253
.padding()
53-
.background(colorScheme == .dark ? (chartManager.dateRange == .day ? Color.darkGray : Color.darkestGray) : (chartManager.dateRange == .day ? Color.gray : Color.lightGray))
54+
.background(colorScheme == .dark ? (chartManager.dateRange == .day ? Color.darkGray : Color.darkestGray) : (Color.blue))
55+
.opacity(colorScheme == .dark ? 1.0 : (chartManager.dateRange == .day ? 1.0 : 0.3))
5456
.cornerRadius(5)
5557
.font(.title)
5658
}
@@ -64,7 +66,8 @@ struct TimeRangeTabs: View {
6466
.foregroundColor(Color.white))
6567
.frame(maxWidth: .infinity, alignment: .center)
6668
.padding()
67-
.background(colorScheme == .dark ? (chartManager.dateRange == .week ? Color.darkGray : Color.darkestGray) : (chartManager.dateRange == .week ? Color.gray : Color.lightGray))
69+
.background(colorScheme == .dark ? (chartManager.dateRange == .week ? Color.darkGray : Color.darkestGray) : (Color.blue))
70+
.opacity(colorScheme == .dark ? 1.0 : (chartManager.dateRange == .week ? 1.0 : 0.3))
6871
.cornerRadius(5)
6972
.font(.title)
7073
}

Infini-iOS/View Components/DFU View/DFUStartTransferButton.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct DFUStartTransferButton: View {
2929
dfuUpdater.firmwareSelected = false
3030
dfuUpdater.firmwareFilename = ""
3131
} else {
32+
dfuUpdater.percentComplete = 0
3233
if dfuUpdater.local {
3334
dfuUpdater.transfer()
3435
updateStarted = true

Infini-iOS/View Components/SettingsView.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,23 @@ struct Settings_Page: View {
9393
(Text("Clear All Battery Chart Data"))
9494
}
9595
}
96+
97+
Section(header: Text("Onboarding Information")) {
98+
99+
Button {
100+
SheetManager.shared.sheetSelection = .onboarding
101+
SheetManager.shared.showSheet = true
102+
} label: {
103+
Text("Open Onboarding Page")
104+
}
105+
Button {
106+
SheetManager.shared.sheetSelection = .whatsNew
107+
SheetManager.shared.showSheet = true
108+
} label: {
109+
Text("Open 'What's New' Page for This Version")
110+
}
111+
}
112+
96113
Section(header: Text("Links")) {
97114
Link("Infini-iOS GitHub", destination: URL(string: "https://github.com/xan-m/Infini-iOS")!)
98115
Link("Matrix", destination: URL(string: "https://matrix.to/#/@xanm:matrix.org")!)

Infini-iOS/View Components/Sheets/BLEConnectView.swift

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,24 @@ struct Connect: View {
1919
var body: some View {
2020
SheetCloseButton()
2121
VStack (){
22-
Text("Available Devices")
23-
.font(.largeTitle)
24-
.padding()
25-
.frame(maxWidth: .infinity, alignment: .leading)
26-
.onAppear {
27-
bleManager.startScanning()
28-
}
22+
if bleManager.isSwitchedOn {
23+
Text("Available Devices")
24+
.font(.largeTitle)
25+
.padding()
26+
.frame(maxWidth: .infinity, alignment: .leading)
27+
.onAppear {
28+
bleManager.startScanning()
29+
}
30+
} else {
31+
Text("Available Devices")
32+
.font(.largeTitle)
33+
.padding()
34+
.frame(maxWidth: .infinity, alignment: .leading)
35+
Text("Waiting for Bluetooth")
36+
.font(.title)
37+
.padding()
38+
.frame(maxWidth: .infinity, alignment: .leading)
39+
}
2940
List(bleManager.peripherals) { peripheral in
3041
let deviceName = DeviceNameManager.init().getName(deviceUUID: peripheral.stringUUID)
3142
HStack {

Infini-iOS/View Components/Sheets/Onboarding/OnboardingBody.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
//
88

99

10-
import Foundation
11-
1210
import SwiftUI
1311

1412
struct OnboardingBody: View {

Infini-iOS/View Components/Sheets/SheetManager.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,58 @@ enum SheetSelection {
1515
case connect
1616
case notification
1717
case downloadUpdate
18+
case whatsNew
1819
}
1920

2021
class SheetManager: ObservableObject {
2122
static let shared = SheetManager()
2223

2324
@Published var showSheet: Bool = false
2425
@Published var sheetSelection: SheetSelection = .connect
26+
@Published var upToDate: Bool = false
27+
28+
private var whatsNew: Bool = true
29+
30+
let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
31+
var lastVersion = UserDefaults.standard.value(forKey: "lastVersion") as? String ?? ""
32+
33+
func showWhatsNew () -> Bool {
34+
if !whatsNew {
35+
return false
36+
} else {
37+
var showSheet = false
38+
39+
print("before: ", lastVersion, " <last | current> ", currentVersion)
40+
if lastVersion == "" {
41+
lastVersion = "0.0.0"
42+
}
43+
44+
let comparison = currentVersion.compare(lastVersion, options: .numeric)
45+
if comparison == .orderedDescending {
46+
showSheet = true
47+
}
48+
lastVersion = currentVersion
49+
whatsNew = false
50+
51+
print(showSheet)
52+
return showSheet
53+
}
54+
}
55+
56+
func setNextSheet() {
57+
let onboarding = UserDefaults.standard.value(forKey: "onboarding")// as? Bool ?? true
58+
if onboarding == nil {
59+
SheetManager.shared.sheetSelection = .onboarding
60+
SheetManager.shared.showSheet = true
61+
} else if SheetManager.shared.showWhatsNew() {
62+
SheetManager.shared.sheetSelection = .whatsNew
63+
SheetManager.shared.showSheet = true
64+
} else {
65+
SheetManager.shared.sheetSelection = .connect
66+
SheetManager.shared.showSheet = true
67+
SheetManager.shared.upToDate = true
68+
}
69+
}
2570

2671
struct CurrentSheet: View {
2772
var body: some View {
@@ -34,6 +79,8 @@ class SheetManager: ObservableObject {
3479
ArbitraryNotificationSheet()
3580
case .downloadUpdate:
3681
DownloadView()
82+
case .whatsNew:
83+
WhatsNew()
3784
}
3885
}
3986
}

0 commit comments

Comments
 (0)