Просмотр исходного кода

38mm watch support and fixed bolus rounding

Ivan Valkou 4 лет назад
Родитель
Сommit
1e5c754ea2

+ 3 - 3
FreeAPS.xcodeproj/xcuserdata/i.valkou.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -33,17 +33,17 @@
 		<key>FreeAPSWatch (Complication).xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>132</integer>
+			<integer>136</integer>
 		</dict>
 		<key>FreeAPSWatch (Notification).xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>131</integer>
+			<integer>135</integer>
 		</dict>
 		<key>FreeAPSWatch.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>130</integer>
+			<integer>134</integer>
 		</dict>
 		<key>ReactiveSwift (Playground) 1.xcscheme</key>
 		<dict>

+ 60 - 50
FreeAPSWatch WatchKit Extension/Views/BolusView.swift

@@ -10,62 +10,65 @@ struct BolusView: View {
         formatter.numberStyle = .decimal
         formatter.minimum = 0
         formatter.maximum = Double((state.maxBolus ?? 5) / (state.bolusIncrement ?? 0.1)) as NSNumber
-        formatter.maximumFractionDigits = 2
-        formatter.minimumFractionDigits = 2
+        formatter.maximumFractionDigits = (state.bolusIncrement ?? 0.1) > 0.05 ? 1 : 2
+        formatter.minimumFractionDigits = (state.bolusIncrement ?? 0.1) > 0.05 ? 1 : 2
         formatter.allowsFloats = true
+        formatter.roundingIncrement = Double(state.bolusIncrement ?? 0.1) as NSNumber
         return formatter
     }
 
     var body: some View {
-        VStack(spacing: 16) {
-            HStack {
-                Button {
-                    let newValue = steps - 1
-                    steps = max(newValue, 0)
-                } label: { Image(systemName: "minus") }
-                    .frame(width: 50)
-                Spacer()
-                Text(numberFormatter.string(from: (steps * Double(state.bolusIncrement ?? 0.1)) as NSNumber)! + " U")
-                    .font(.headline)
-                    .focusable(true)
-                    .digitalCrownRotation(
-                        $steps,
-                        from: 0,
-                        through: Double((state.maxBolus ?? 5) / (state.bolusIncrement ?? 0.1)),
-                        by: 1,
-                        sensitivity: .medium,
-                        isContinuous: false,
-                        isHapticFeedbackEnabled: true
-                    )
-                Spacer()
-                Button {
-                    let newValue = steps + 1
-                    steps = min(newValue, Double((state.maxBolus ?? 5) / (state.bolusIncrement ?? 0.1)))
-                } label: { Image(systemName: "plus") }
-                    .frame(width: 50)
-            }
-
-            HStack {
-                Button {
-                    state.isBolusViewActive = false
-                }
-                label: {
-                    Image(systemName: "xmark.circle.fill")
-                        .resizable()
-                        .foregroundColor(.loopRed)
-                        .frame(width: 30, height: 30)
+        GeometryReader { geo in
+            VStack(spacing: 16) {
+                HStack {
+                    Button {
+                        let newValue = steps - 1
+                        steps = max(newValue, 0)
+                    } label: { Image(systemName: "minus") }
+                        .frame(width: geo.size.width / 4)
+                    Spacer()
+                    Text(numberFormatter.string(from: (steps * Double(state.bolusIncrement ?? 0.1)) as NSNumber)! + " U")
+                        .font(.headline)
+                        .focusable(true)
+                        .digitalCrownRotation(
+                            $steps,
+                            from: 0,
+                            through: Double((state.maxBolus ?? 5) / (state.bolusIncrement ?? 0.1)),
+                            by: 1,
+                            sensitivity: .medium,
+                            isContinuous: false,
+                            isHapticFeedbackEnabled: true
+                        )
+                    Spacer()
+                    Button {
+                        let newValue = steps + 1
+                        steps = min(newValue, Double((state.maxBolus ?? 5) / (state.bolusIncrement ?? 0.1)))
+                    } label: { Image(systemName: "plus") }
+                        .frame(width: geo.size.width / 4)
                 }
-                Button {
-                    enactBolus()
-                }
-                label: {
-                    Image(systemName: "checkmark.circle.fill")
-                        .resizable()
-                        .foregroundColor(.loopGreen)
-                        .frame(width: 30, height: 30)
+
+                HStack {
+                    Button {
+                        state.isBolusViewActive = false
+                    }
+                    label: {
+                        Image(systemName: "xmark.circle.fill")
+                            .resizable()
+                            .foregroundColor(.loopRed)
+                            .frame(width: 30, height: 30)
+                    }
+                    Button {
+                        enactBolus()
+                    }
+                    label: {
+                        Image(systemName: "checkmark.circle.fill")
+                            .resizable()
+                            .foregroundColor(.loopGreen)
+                            .frame(width: 30, height: 30)
+                    }
+                    .disabled(steps <= 0)
                 }
-                .disabled(steps <= 0)
-            }
+            }.frame(maxHeight: .infinity)
         }
         .navigationTitle("Enact Bolus")
         .onAppear {
@@ -81,6 +84,13 @@ struct BolusView: View {
 
 struct BolusView_Previews: PreviewProvider {
     static var previews: some View {
-        BolusView().environmentObject(WatchStateModel())
+        let state = WatchStateModel()
+        state.bolusRecommended = 10.3
+        state.bolusIncrement = 0.05
+        return Group {
+            BolusView()
+            BolusView().previewDevice("Apple Watch Series 5 - 40mm")
+            BolusView().previewDevice("Apple Watch Series 3 - 38mm")
+        }.environmentObject(state)
     }
 }

+ 51 - 40
FreeAPSWatch WatchKit Extension/Views/CarbsView.swift

@@ -16,47 +16,51 @@ struct CarbsView: View {
     }
 
     var body: some View {
-        VStack(spacing: 16) {
-            HStack {
-                Button {
-                    let newValue = amount - 5
-                    amount = max(newValue, 0)
-                } label: { Image(systemName: "minus") }
-                    .frame(width: 50)
-                Spacer()
-                Text(numberFormatter.string(from: amount as NSNumber)! + " g")
-                    .font(.title2)
-                    .focusable(true)
-                    .digitalCrownRotation(
-                        $amount,
-                        from: 0,
-                        through: Double(state.maxCOB ?? 120),
-                        by: 1,
-                        sensitivity: .medium,
-                        isContinuous: false,
-                        isHapticFeedbackEnabled: true
-                    )
-                Spacer()
-                Button {
-                    let newValue = amount + 5
-                    amount = min(newValue, Double(state.maxCOB ?? 120))
-                } label: { Image(systemName: "plus") }
-                    .frame(width: 50)
-            }
-            Button {
-                state.addCarbs(Int(amount))
-            }
-            label: {
+        GeometryReader { geo in
+            VStack(spacing: 16) {
                 HStack {
-                    Image("carbs", bundle: nil)
-                        .renderingMode(.template)
-                        .resizable()
-                        .frame(width: 24, height: 24)
-                        .foregroundColor(.loopGreen)
-                    Text("Add Carbs")
+                    Button {
+                        let newValue = amount - 5
+                        amount = max(newValue, 0)
+                    } label: {
+                        Image(systemName: "minus")
+                    }
+                    .frame(width: geo.size.width / 4)
+                    Spacer()
+                    Text(numberFormatter.string(from: amount as NSNumber)! + " g")
+                        .font(.title2)
+                        .focusable(true)
+                        .digitalCrownRotation(
+                            $amount,
+                            from: 0,
+                            through: Double(state.maxCOB ?? 120),
+                            by: 1,
+                            sensitivity: .medium,
+                            isContinuous: false,
+                            isHapticFeedbackEnabled: true
+                        )
+                    Spacer()
+                    Button {
+                        let newValue = amount + 5
+                        amount = min(newValue, Double(state.maxCOB ?? 120))
+                    } label: { Image(systemName: "plus") }
+                        .frame(width: geo.size.width / 4)
+                }
+                Button {
+                    state.addCarbs(Int(amount))
+                }
+                label: {
+                    HStack {
+                        Image("carbs", bundle: nil)
+                            .renderingMode(.template)
+                            .resizable()
+                            .frame(width: 24, height: 24)
+                            .foregroundColor(.loopGreen)
+                        Text("Add Carbs")
+                    }
                 }
-            }
-            .disabled(amount <= 0)
+                .disabled(amount <= 0)
+            }.frame(maxHeight: .infinity)
         }
         .navigationTitle("Add Carbs")
         .onAppear {
@@ -67,6 +71,13 @@ struct CarbsView: View {
 
 struct CarbsView_Previews: PreviewProvider {
     static var previews: some View {
-        CarbsView().environmentObject(WatchStateModel())
+        let state = WatchStateModel()
+        state.carbsRequired = 120
+        return Group {
+            CarbsView()
+            CarbsView().previewDevice("Apple Watch Series 5 - 40mm")
+            CarbsView().previewDevice("Apple Watch Series 3 - 38mm")
+        }
+        .environmentObject(state)
     }
 }

+ 5 - 1
FreeAPSWatch WatchKit Extension/Views/MainView.swift

@@ -54,7 +54,10 @@ struct MainView: View {
                         Text(state.glucose).font(.largeTitle)
                             .scaledToFill()
                             .minimumScaleFactor(0.5)
+                            .padding(.top, 4)
                         Text(state.trend)
+                            .scaledToFill()
+                            .minimumScaleFactor(0.5)
                     }
                     Text(state.delta).font(.caption2)
                         .scaledToFill()
@@ -191,7 +194,7 @@ struct ContentView_Previews: PreviewProvider {
     static var previews: some View {
         let state = WatchStateModel()
 
-        state.glucose = "888"
+        state.glucose = "15,8"
         state.delta = "+888"
         state.iob = 100.38
         state.cob = 112.123
@@ -204,6 +207,7 @@ struct ContentView_Previews: PreviewProvider {
         return Group {
             MainView()
             MainView().previewDevice("Apple Watch Series 5 - 40mm")
+            MainView().previewDevice("Apple Watch Series 3 - 38mm")
         }.environmentObject(state)
     }
 }