Preview enabled in connected devices (#1509)

* Update Muzi R1 Neo to actively supported

* Preview enabled in connected devices

* Fixing indentation

* Fixing indentation

---------

Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
Charles Pinesky 2025-12-10 07:51:33 +01:00 committed by GitHub
parent 13fd9c3a93
commit b57ba1557c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 58 additions and 36 deletions

View file

@ -1,22 +1,31 @@
/*
Abstract:
A view draws the indicator used in the upper right corner for views using BLE
*/
Abstract:
A view draws the indicator used in the upper right corner for views using BLE
*/
import SwiftUI
struct ConnectedDevice: View {
@EnvironmentObject var accessoryManager: AccessoryManager
var deviceConnected: Bool
var name: String
var mqttProxyConnected: Bool = false
var mqttUplinkEnabled: Bool = false
var mqttDownlinkEnabled: Bool = false
var mqttTopic: String = ""
var phoneOnly: Bool = false
var showActivityLights: Bool
init(deviceConnected: Bool, name: String, mqttProxyConnected: Bool = false, mqttUplinkEnabled: Bool = false, mqttDownlinkEnabled: Bool = false, mqttTopic: String = "", phoneOnly: Bool = false, showActivityLights: Bool = true) {
let deviceConnected: Bool
let name: String
let mqttProxyConnected: Bool
let mqttUplinkEnabled: Bool
let mqttDownlinkEnabled: Bool
let mqttTopic: String
let phoneOnly: Bool
let showActivityLights: Bool
init(
deviceConnected: Bool,
name: String,
mqttProxyConnected: Bool = false,
mqttUplinkEnabled: Bool = false,
mqttDownlinkEnabled: Bool = false,
mqttTopic: String = "",
phoneOnly: Bool = false,
showActivityLights: Bool = true
) {
self.deviceConnected = deviceConnected
self.name = name
self.mqttProxyConnected = mqttProxyConnected
@ -27,12 +36,12 @@ struct ConnectedDevice: View {
self.showActivityLights = showActivityLights
}
var body: some View {
var body: some View {
HStack {
if showActivityLights {
RXTXIndicatorWidget()
}
if (phoneOnly && UIDevice.current.userInterfaceIdiom == .phone) || !phoneOnly {
if (phoneOnly && UIDevice.current.userInterfaceIdiom == .phone) || !phoneOnly {
if deviceConnected {
// Create an HStack for connected state with proper accessibility
HStack {
@ -64,24 +73,37 @@ struct ConnectedDevice: View {
.accessibilityElement(children: .ignore)
.accessibilityLabel("No Bluetooth device connected".localized)
}
}
}
}
.if(.os26) { $0.padding(.leading, 5.0) }
}
}
}
struct ConnectedDevice_Previews: PreviewProvider {
static var previews: some View {
VStack(alignment: .trailing) {
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: true, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: true, mqttDownlinkEnabled: true, mqttTopic: "msh/US/2/e/#")
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: true, mqttDownlinkEnabled: false)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: true, mqttDownlinkEnabled: false)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: false, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: false, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true)
ConnectedDevice(deviceConnected: false, name: "MEMO", mqttProxyConnected: false)
}.previewLayout(.fixed(width: 150, height: 275))
}
#Preview("Multiple variants") {
VStack(alignment: .trailing) {
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: true, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: true, mqttDownlinkEnabled: true, mqttTopic: "msh/US/2/e/#")
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: true, mqttDownlinkEnabled: false)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: true, mqttDownlinkEnabled: false)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false, mqttUplinkEnabled: false, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true, mqttUplinkEnabled: false, mqttDownlinkEnabled: true)
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: true)
ConnectedDevice(deviceConnected: false, name: "MEMO", mqttProxyConnected: false)
}
.environmentObject(AccessoryManager.shared)
}
#Preview("Navigation header item") {
NavigationView {
Text("Connect screen")
.navigationTitle("Connect")
.navigationBarItems(
leading: MeshtasticLogo(),
trailing: ZStack {
ConnectedDevice(deviceConnected: true, name: "MEMO", mqttProxyConnected: false)
.environmentObject(AccessoryManager.shared)
}
)
}
}

View file

@ -12,7 +12,7 @@ import OSLog
struct RXTXIndicatorWidget: View {
@EnvironmentObject var accessoryManager: AccessoryManager
@State private var isPopoverOpen = false
let fontSize: CGFloat = 7.0
var body: some View {
Button( action: {
@ -38,7 +38,7 @@ struct RXTXIndicatorWidget: View {
#else
self.isPopoverOpen.toggle()
#endif
}) {
VStack(spacing: 3.0) {
HStack(spacing: 2.0) {
@ -102,9 +102,9 @@ struct LEDIndicator: View {
@Environment(\.colorScheme) var colorScheme
@Binding var flash: Int
let color: Color
@State private var brightness: Double = 0.0
var body: some View {
Circle()
.foregroundColor(color.opacity(brightness))