Skip to content

Commit 6b2829d

Browse files
committed
- Bug fixes
- UI Improvements - Turned Connect view into a Sheet-type view that appears automatically if a main device hasn't been selected, and otherwise can be summoned from the side menu.
1 parent eb7da8c commit 6b2829d

5 files changed

Lines changed: 123 additions & 113 deletions

File tree

Infini-iOS/BLE/BLEManager.swift

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,6 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate {
104104
isConnectedToPinetime = true
105105
}
106106
}
107-
func autoconnect() {
108-
if autoconnectPeripheral != nil {
109-
self.myCentral.stopScan()
110-
isScanning = false
111-
112-
self.infiniTime = autoconnectPeripheral
113-
infiniTime.delegate = self
114-
self.myCentral.connect(autoconnectPeripheral, options: nil)
115-
116-
isConnectedToPinetime = true
117-
}
118-
}
119107

120108
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
121109

@@ -140,12 +128,12 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate {
140128
let devUUID: CBUUID = CBUUID(string: devUUIDString)
141129
let newPeripheral = Peripheral(id: peripheralDictionary.count, name: peripheralName, rssi: RSSI.intValue, peripheralHash: peripheral.hash, deviceUUID: devUUID)
142130

143-
print(peripheralName + ": " + String(peripheral.identifier.uuidString))
131+
//print(peripheralName + ": " + String(peripheral.identifier.uuidString))
144132

145133
// handle autoconnect defaults
146134
let settings = UserDefaults.standard
147135
let autoconnect = settings.object(forKey: "autoconnect") as? Bool ?? true
148-
let autoconnectUUID = settings.object(forKey: "autoconnectUUID") as! String
136+
let autoconnectUUID = settings.object(forKey: "autoconnectUUID") as? String ?? ""
149137

150138
if autoconnect && devUUIDString == autoconnectUUID {
151139
connect(peripheral: peripheral)

Infini-iOS/ContentView.swift

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,84 +10,93 @@ import CoreData
1010

1111
struct ContentView: View {
1212

13-
@State var showMenu = false
13+
//@State var showMenu = false
1414
@EnvironmentObject var pageSwitcher: PageSwitcher
1515
@EnvironmentObject var bleManager: BLEManager
16+
@AppStorage("autoconnect") var autoconnect: Bool = false
17+
@AppStorage("autoconnectUUID") var autoconnectUUID: String = ""
1618

1719
init() {
18-
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default)
19-
UINavigationBar.appearance().shadowImage = UIImage()
20-
UINavigationBar.appearance().isTranslucent = true
21-
UINavigationBar.appearance().tintColor = .clear
22-
UINavigationBar.appearance().backgroundColor = .clear
20+
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: UIBarMetrics.default)
21+
UINavigationBar.appearance().shadowImage = UIImage()
22+
UINavigationBar.appearance().isTranslucent = true
23+
UINavigationBar.appearance().tintColor = .clear
24+
UINavigationBar.appearance().backgroundColor = .clear
2325
}
24-
26+
27+
2528

2629
var body: some View {
2730
let drag = DragGesture()
2831
.onEnded {
2932
if $0.translation.width < -100 {
3033
withAnimation {
31-
self.showMenu = false
34+
self.pageSwitcher.showMenu = false
3235
}
3336
} else if $0.translation.width > 100 {
3437
withAnimation {
35-
self.showMenu = true
38+
self.pageSwitcher.showMenu = true
3639
}
40+
//} else if $0.translation.height < -300 {
41+
// pageSwitcher.connectViewLoad = true
3742
}
3843
}
39-
if bleManager.batteryLevel == "20" {
40-
let batNotification = UserDefaults.standard.object(forKey: "batteryNotification") as? Bool ?? false
41-
if batNotification {
42-
bleManager.sendNotification(notification: "Battery at 20%")
43-
print("20")
44-
}
45-
}
46-
4744
return NavigationView {
4845
GeometryReader { geometry in
4946
ZStack(alignment: .leading) {
50-
MainView(showMenu: self.$showMenu)
47+
MainView()
48+
.sheet(isPresented: $pageSwitcher.connectViewLoad, content: {
49+
Connect().environmentObject(self.bleManager)
50+
})
5151
.frame(width: geometry.size.width, height: geometry.size.height)
52-
.offset(x: self.showMenu ? geometry.size.width/2 : 0)
53-
.disabled(self.showMenu ? true : false)
54-
if self.showMenu {
55-
SideMenu(isOpen: self.$showMenu)
52+
.offset(x: self.pageSwitcher.showMenu ? geometry.size.width/2 : 0)
53+
.disabled(self.pageSwitcher.showMenu ? true : false)
54+
.onAppear(){
55+
if autoconnect && bleManager.isSwitchedOn {
56+
self.bleManager.startScanning()
57+
}
58+
if (autoconnect && autoconnectUUID == "") || (!autoconnect && !bleManager.isConnectedToPinetime) {
59+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
60+
withAnimation {
61+
pageSwitcher.connectViewLoad = true
62+
}
63+
})
64+
}
65+
}
66+
if self.pageSwitcher.showMenu {
67+
SideMenu(isOpen: self.$pageSwitcher.showMenu)
5668
.frame(width: geometry.size.width/2)
5769
.transition(.move(edge: .leading))
5870
.ignoresSafeArea()
5971
}
6072
}
61-
}
62-
.navigationBarItems(leading: (
63-
Button(action: {
64-
withAnimation {
65-
self.showMenu.toggle()
73+
.navigationBarItems(leading: (
74+
Button(action: {
75+
withAnimation {
76+
self.pageSwitcher.showMenu.toggle()
77+
}
78+
}) {
79+
Image(systemName: "line.horizontal.3")
80+
.imageScale(.large)
81+
.foregroundColor(Color.gray)
6682
}
67-
}) {
68-
Image(systemName: "line.horizontal.3")
69-
.imageScale(.large)
70-
.foregroundColor(Color.gray)
71-
}
72-
))
73-
.background(Color.black)
74-
.navigationBarTitleDisplayMode(.inline)
83+
))
84+
.background(Color.black)
85+
.navigationBarTitleDisplayMode(.inline)
86+
}
87+
.gesture(drag)
7588
}
76-
.gesture(drag)
7789
}
7890
}
79-
80-
struct MainView: View {
8191

82-
@Binding var showMenu: Bool
83-
@State var currentPage: Page = .connect
92+
struct MainView: View {
93+
8494
@EnvironmentObject var pageSwitcher: PageSwitcher
8595
@EnvironmentObject var bleManager: BLEManager
8696

97+
8798
var body: some View {
8899
switch pageSwitcher.currentPage {
89-
case .connect:
90-
Connect()
91100
case .dfu:
92101
DFU_Page(dfuUpdater: DFU_Updater(ble: bleManager))
93102
case .status:
@@ -98,6 +107,7 @@ struct MainView: View {
98107
}
99108
}
100109

110+
101111
struct ContentView_Previews: PreviewProvider {
102112
static var previews: some View {
103113
ContentView()

Infini-iOS/View Components/BLEConnectView.swift

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ import SwiftUI
1010

1111
struct Connect: View {
1212

13+
@EnvironmentObject var pageSwitcher: PageSwitcher
1314
@EnvironmentObject var bleManager: BLEManager
15+
@Environment(\.presentationMode) var presentation
1416
@State var scanOrStopScan: Bool = true
1517
@AppStorage("autoconnect") var autoconnect: Bool = false
1618
@AppStorage("autoconnectUUID") var autoconnectUUID: String = ""
19+
20+
init(){
21+
UITableView.appearance().backgroundColor = .clear
22+
}
1723

1824
var body: some View {
1925

@@ -22,12 +28,15 @@ struct Connect: View {
2228
.font(.largeTitle)
2329
.padding()
2430
.frame(maxWidth: .infinity, alignment: .leading)
25-
//.padding(.bottom, 30)
31+
.onAppear {
32+
bleManager.startScanning()
33+
}
2634
List(bleManager.peripherals) { peripheral in
2735
HStack {
2836
Button(action: {
2937
self.bleManager.deviceToConnect = peripheral.peripheralHash
3038
self.bleManager.connect(peripheral: self.bleManager.peripheralDictionary[peripheral.peripheralHash]!)
39+
presentation.wrappedValue.dismiss()
3140
}) {
3241
Text(peripheral.name)
3342
}
@@ -36,18 +45,13 @@ struct Connect: View {
3645
}
3746
}
3847

39-
Spacer()
40-
41-
//let autoconnect = UserDefaults.standard.object(forKey: "autoconnect") as? Bool ?? true
42-
if autoconnect {
43-
//Button(action: {
44-
// self.bleManager.startScanning()
45-
//}) {
46-
if bleManager.isSwitchedOn {
47-
Text("Scanning")
48-
.onAppear {
49-
self.bleManager.startScanning()
50-
}
48+
Spacer()/*
49+
if scanOrStopScan {
50+
Button(action: {
51+
self.bleManager.startScanning()
52+
self.scanOrStopScan.toggle()
53+
}) {
54+
Text("Scan")
5155
.padding()
5256
.padding(.vertical, 7)
5357
.frame(maxWidth: .infinity, alignment: .center)
@@ -57,37 +61,29 @@ struct Connect: View {
5761
.padding(.horizontal, 20)
5862
}
5963
} else {
60-
if scanOrStopScan {
61-
Button(action: {
62-
self.bleManager.startScanning()
63-
self.scanOrStopScan.toggle()
64-
}) {
65-
Text("Scan")
66-
.padding()
67-
.padding(.vertical, 7)
68-
.frame(maxWidth: .infinity, alignment: .center)
69-
.background(Color.gray)
70-
.foregroundColor(Color.white)
71-
.cornerRadius(10)
72-
.padding(.horizontal, 20)
73-
}
74-
} else {
75-
76-
Button(action: {
77-
self.bleManager.stopScanning()
78-
self.scanOrStopScan.toggle()
79-
}) {
80-
Text("Stop Scanning")
81-
.padding()
82-
.padding(.vertical, 7)
83-
.frame(maxWidth: .infinity, alignment: .center)
84-
.background(Color.gray)
85-
.foregroundColor(Color.white)
86-
.cornerRadius(10)
87-
.padding(.horizontal, 20)
88-
}
64+
65+
Button(action: {
66+
self.bleManager.stopScanning()
67+
self.scanOrStopScan.toggle()
68+
}) {
69+
Text("Stop Scanning")
70+
.padding()
71+
.padding(.vertical, 7)
72+
.frame(maxWidth: .infinity, alignment: .center)
73+
.background(Color.gray)
74+
.foregroundColor(Color.white)
75+
.cornerRadius(10)
76+
.padding(.horizontal, 20)
8977
}
90-
}
78+
}*/
9179
}
9280
}
9381
}
82+
83+
struct ConnectView_Previews: PreviewProvider {
84+
static var previews: some View {
85+
Connect()
86+
.environmentObject(PageSwitcher())
87+
.environmentObject(BLEManager())
88+
}
89+
}

Infini-iOS/View Components/PageSwitcher.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,28 @@
88
import Foundation
99

1010
enum Page {
11-
case connect
11+
//case connect
1212
case dfu
1313
case status
1414
case settings
1515
}
1616

1717
class PageSwitcher: ObservableObject {
1818

19-
@Published var currentPage: Page = .connect
19+
@Published var currentPage: Page = .status
2020
@Published var currentPageTitle: String = "Connect to Your Device"
21+
@Published var connectViewLoad: Bool = false
22+
@Published var showMenu: Bool = false
23+
24+
/*init() {
25+
if UserDefaults.standard.object(forKey: "autoconnect") as! Bool {
26+
currentPage = .status
27+
} else {
28+
currentPage = .connect
29+
}
30+
}*/
31+
}
2132

33+
class connectViewLoader: ObservableObject {
34+
@Published var load: Bool = false
2235
}

Infini-iOS/View Components/SideMenu.swift

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,6 @@ struct SideMenu: View {
2323

2424
var body: some View {
2525
VStack(alignment: .leading) {
26-
HStack {
27-
Button(action: {changePage(newPage: .connect)}) {
28-
Image(systemName: "radiowaves.right")
29-
.foregroundColor(.gray)
30-
.imageScale(.large)
31-
Text("Connect to PineTime")
32-
.foregroundColor(.gray)
33-
.padding(5)
34-
}
35-
}
36-
.padding(.top, 100)
3726
HStack {
3827
Button(action: {changePage(newPage: .status)}) {
3928
Image(systemName: "heart")
@@ -44,7 +33,7 @@ struct SideMenu: View {
4433
.padding(5)
4534
}
4635
}
47-
.padding(.top, 20)
36+
.padding(.top, 100)
4837
HStack {
4938
Button(action: {changePage(newPage: .dfu)}) {
5039
Image(systemName: "arrow.up.doc")
@@ -69,6 +58,20 @@ struct SideMenu: View {
6958
.padding(.top, 20)
7059

7160
Spacer()
61+
HStack {
62+
Button(action: {
63+
pageSwitcher.connectViewLoad = true
64+
pageSwitcher.showMenu = false
65+
}) {
66+
Image(systemName: "radiowaves.right")
67+
.foregroundColor(.gray)
68+
.imageScale(.large)
69+
Text("Connect to PineTime")
70+
.foregroundColor(.gray)
71+
.padding(5)
72+
}
73+
}
74+
.padding(.top, 100)
7275

7376
VStack (alignment: .center, spacing:10) {
7477
Text("STATUS")

0 commit comments

Comments
 (0)