From b57ba1557c6e9b5caf10ea028fd3f327da8bac4d Mon Sep 17 00:00:00 2001 From: Charles Pinesky <25388414+Vaidios@users.noreply.github.com> Date: Wed, 10 Dec 2025 07:51:33 +0100 Subject: [PATCH] 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 Co-authored-by: Ben Meadors --- .../Views/Helpers/ConnectedDevice.swift | 86 ++++++++++++------- .../Views/Helpers/RXTXIndicatorView.swift | 8 +- 2 files changed, 58 insertions(+), 36 deletions(-) diff --git a/Meshtastic/Views/Helpers/ConnectedDevice.swift b/Meshtastic/Views/Helpers/ConnectedDevice.swift index 1cb46948..deb26509 100644 --- a/Meshtastic/Views/Helpers/ConnectedDevice.swift +++ b/Meshtastic/Views/Helpers/ConnectedDevice.swift @@ -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) + } + ) + } } diff --git a/Meshtastic/Views/Helpers/RXTXIndicatorView.swift b/Meshtastic/Views/Helpers/RXTXIndicatorView.swift index 25168718..860b3734 100644 --- a/Meshtastic/Views/Helpers/RXTXIndicatorView.swift +++ b/Meshtastic/Views/Helpers/RXTXIndicatorView.swift @@ -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))