1 contributor
//
// CBManagerState.swift
// USB Meter
//
// Created by Bogdan Timofte on 02/03/2020.
// Copyright © 2020 Bogdan Timofte. All rights reserved.
//
//import Foundation
import CoreBluetooth
import SwiftUI
//Manager States
//.poweredOff A state that indicates Bluetooth is currently powered off.
//.poweredOn A state that indicates Bluetooth is currently powered on and available to use.
//.resetting A state that indicates the connection with the system service was momentarily lost.
//.unauthorized A state that indicates the application isn’t authorized to use the Bluetooth low energy role.
//.unknown The manager’s state is unknown.
//.unsupported A state that indicates this device doesn’t support the Bluetooth low energy central or client role.
extension CBManagerState {
var description: String {
switch self {
case .poweredOff:
return "CBManagerState.poweredOff"
case .poweredOn:
return "CBManagerState.poweredOn"
case .resetting:
return "CBManagerState.resetting"
case .unauthorized:
return "CBManagerState.unauthorized"
case .unknown:
return "CBManagerState.unknown"
case .unsupported:
return "CBManagerState.unsupported"
default:
return "CBManagerState.other"
}
}
var color: Color {
switch self {
case .poweredOff:
return Color.red
case .poweredOn:
return Color.blue
case .resetting:
return Color.green
case .unauthorized:
return Color.orange
case .unknown:
return Color.secondary
case .unsupported:
return Color.gray
default:
return Color.yellow
}
}
var helpView: AnyView {
switch self {
case .poweredOff:
return AnyView(poweredOffHelperView())
case .poweredOn:
return AnyView(poweredOnHelperView())
case .resetting:
return AnyView(resettingHelperView())
case .unauthorized:
return AnyView(unauthorizedHelperView())
case .unknown:
return AnyView(unknownHelperView())
case .unsupported:
return AnyView(unsupportedHelperView())
default:
return AnyView(defaultHelperView())
}
}
private struct poweredOffHelperView: View {
var body: some View {
Text("Bluetooth is turned off on this device. Tou can turn it on in Settings->Bluetooth")
}
}
private struct poweredOnHelperView: View {
var body: some View {
Text("Bluetooth is up an running")
}
}
private struct resettingHelperView: View {
var body: some View {
VStack {
Text("Bluetooth is resetting")
Text("Maybe wait for a while...")
}
}
}
private struct unauthorizedHelperView: View {
var body: some View {
HStack {
Text("This application does not have permission to access Bluetooth. You can give it in ")
Button(action: { UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil) }) {
Text("Settings")
}
}
}
}
private struct unknownHelperView: View {
var body: some View {
VStack {
Text("Bluetooth state is unknown!")
Text("There is no help available for this situation.")
}
}
}
private struct unsupportedHelperView: View {
var body: some View {
VStack {
Text("Your device does not have required capabilities to establish Bluetooth connections with USB Meters")
Text("There is no help available for this situation.")
}
}
}
private struct defaultHelperView: View {
var body: some View {
VStack {
Text("Unknown Bluetooth state.")
Text("You may contact develloper.")
}
}
}
}