mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
2.7.2 Working Changes (#1397)
* Bump version * iOS 26 styled keyboard toolbar Update tips backgrounds * Link the logo to the about page * Remove double logo on node list, update scary location log message, update tls toggle visibility and keyboard scroll dismiss on mqtt config * Remove redundant colorScheme check
This commit is contained in:
parent
f5ad2454bb
commit
5b060f9aa5
11 changed files with 76 additions and 49 deletions
|
|
@ -2052,7 +2052,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.7.1;
|
||||
MARKETING_VERSION = 2.7.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
@ -2086,7 +2086,7 @@
|
|||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.7.1;
|
||||
MARKETING_VERSION = 2.7.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTS_MACCATALYST = YES;
|
||||
|
|
@ -2117,7 +2117,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.7.1;
|
||||
MARKETING_VERSION = 2.7.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
@ -2149,7 +2149,7 @@
|
|||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 2.7.1;
|
||||
MARKETING_VERSION = 2.7.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ import OSLog
|
|||
return CLLocationCoordinate2D(latitude: lat, longitude: lon)
|
||||
}
|
||||
// Fallback 2: Default location if no other location is available.
|
||||
Logger.services.warning("📍 [App] No Location and no last known location, something is really wrong. Teleporting user to Apple Park")
|
||||
Logger.services.warning("📍 [App] No Location and no last known location, check your location settings. Falling back to default location.")
|
||||
return DefaultLocation
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ struct Connect: View {
|
|||
|
||||
@Environment(\.managedObjectContext) var context
|
||||
@EnvironmentObject var accessoryManager: AccessoryManager
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
@State var router: Router
|
||||
@State var node: NodeInfoEntity?
|
||||
@State var isUnsetRegion = false
|
||||
|
|
@ -37,6 +38,8 @@ struct Connect: View {
|
|||
accessoryManager.isConnected || accessoryManager.isConnecting {
|
||||
TipView(ConnectionTip(), arrowEdge: .bottom)
|
||||
.tipViewStyle(PersistentTip())
|
||||
.tipBackground(colorScheme == .dark ? Color(.systemBackground) : Color(.secondarySystemBackground))
|
||||
.listRowSeparator(.hidden)
|
||||
VStack(alignment: .leading) {
|
||||
HStack {
|
||||
VStack(alignment: .center) {
|
||||
|
|
|
|||
|
|
@ -13,33 +13,38 @@ struct MeshtasticLogo: View {
|
|||
var body: some View {
|
||||
#if targetEnvironment(macCatalyst)
|
||||
VStack {
|
||||
if #available(iOS 26.0, macOS 26.0, *) {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.foregroundColor(.accentColor)
|
||||
.scaledToFit()
|
||||
} else {
|
||||
Image("logo-white")
|
||||
.resizable()
|
||||
.foregroundColor(.accentColor)
|
||||
.scaledToFit()
|
||||
Link(destination: URL(string: "meshtastic:///settings/about")!) {
|
||||
if #available(iOS 26.0, macOS 26.0, *) {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.foregroundColor(.accentColor)
|
||||
.scaledToFit()
|
||||
} else {
|
||||
Image("logo-white")
|
||||
.resizable()
|
||||
.foregroundColor(.accentColor)
|
||||
.scaledToFit()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
.padding(.top, 5)
|
||||
#else
|
||||
if #available(iOS 26.0, macOS 26.0, *) {
|
||||
VStack {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
Link(destination: URL(string: "meshtastic:///settings/about")!) {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
VStack {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
Link(destination: URL(string: "meshtastic:///settings/about")!) {
|
||||
Image(colorScheme == .dark ? "logo-white" : "logo-black")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,16 +13,10 @@ import TipKit
|
|||
struct Messages: View {
|
||||
|
||||
@Environment(\.managedObjectContext) var context
|
||||
|
||||
@ObservedObject
|
||||
var router: Router
|
||||
|
||||
@Binding
|
||||
var unreadChannelMessages: Int
|
||||
|
||||
@Binding
|
||||
var unreadDirectMessages: Int
|
||||
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
@ObservedObject var router: Router
|
||||
@Binding var unreadChannelMessages: Int
|
||||
@Binding var unreadDirectMessages: Int
|
||||
@State var node: NodeInfoEntity?
|
||||
@State private var userSelection: UserEntity? // Nothing selected by default.
|
||||
@State private var channelSelection: ChannelEntity? // Nothing selected by default.
|
||||
|
|
@ -63,6 +57,8 @@ struct Messages: View {
|
|||
|
||||
TipView(MessagesTip(), arrowEdge: .top)
|
||||
.tipViewStyle(PersistentTip())
|
||||
.tipBackground(colorScheme == .dark ? Color(.systemBackground) : Color(.secondarySystemBackground))
|
||||
.listRowSeparator(.hidden)
|
||||
}
|
||||
.navigationTitle("Messages")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ struct TextMessageField: View {
|
|||
.focused($isFocused)
|
||||
.multilineTextAlignment(.leading)
|
||||
.onSubmit {
|
||||
|
||||
#if targetEnvironment(macCatalyst)
|
||||
sendMessage()
|
||||
#endif
|
||||
|
|
@ -69,18 +70,35 @@ struct TextMessageField: View {
|
|||
}
|
||||
.padding(15)
|
||||
if isFocused {
|
||||
Divider()
|
||||
HStack {
|
||||
if #available(iOS 26.0, macOS 26.0, *) {
|
||||
HStack {
|
||||
Spacer()
|
||||
AlertButton { typingMessage += "🔔 Alert Bell Character! \u{7}" }
|
||||
Spacer()
|
||||
RequestPositionButton(action: requestPosition)
|
||||
Spacer()
|
||||
TextMessageSize(maxbytes: Self.maxbytes, totalBytes: totalBytes)
|
||||
}
|
||||
.padding(.vertical, 8)
|
||||
.padding(.horizontal)
|
||||
.background(.ultraThinMaterial, in: Capsule())
|
||||
Spacer()
|
||||
AlertButton { typingMessage += "🔔 Alert Bell Character! \u{7}" }
|
||||
Spacer()
|
||||
RequestPositionButton(action: requestPosition)
|
||||
Spacer()
|
||||
TextMessageSize(maxbytes: Self.maxbytes, totalBytes: totalBytes)
|
||||
.frame(height: 10)
|
||||
|
||||
} else {
|
||||
Divider()
|
||||
HStack {
|
||||
Spacer()
|
||||
AlertButton { typingMessage += "🔔 Alert Bell Character! \u{7}" }
|
||||
Spacer()
|
||||
RequestPositionButton(action: requestPosition)
|
||||
Spacer()
|
||||
TextMessageSize(maxbytes: Self.maxbytes, totalBytes: totalBytes)
|
||||
}
|
||||
.padding(.horizontal, 15)
|
||||
.padding(.vertical, 10)
|
||||
.background(.bar)
|
||||
}
|
||||
.padding(.horizontal, 15)
|
||||
.padding(.vertical, 10)
|
||||
.background(.bar)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,7 +227,6 @@ struct NodeList: View {
|
|||
)
|
||||
.edgesIgnoringSafeArea([.leading, .trailing])
|
||||
.navigationBarItems(
|
||||
leading: MeshtasticLogo(),
|
||||
trailing: ZStack {
|
||||
ConnectedDevice(
|
||||
deviceConnected: accessoryManager.isConnected,
|
||||
|
|
@ -236,7 +235,7 @@ struct NodeList: View {
|
|||
)
|
||||
}
|
||||
// Make sure the ZStack passes through accessibility to the ConnectedDevice component
|
||||
.accessibilityElement(children: .contain)
|
||||
.accessibilityElement(children: .contain)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ struct Channels: View {
|
|||
@EnvironmentObject var accessoryManager: AccessoryManager
|
||||
@Environment(\.dismiss) private var goBack
|
||||
@Environment(\.sizeCategory) var sizeCategory
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
|
||||
var node: NodeInfoEntity?
|
||||
|
||||
|
|
@ -62,6 +63,8 @@ struct Channels: View {
|
|||
VStack {
|
||||
List {
|
||||
TipView(CreateChannelsTip(), arrowEdge: .bottom)
|
||||
.tipBackground(colorScheme == .dark ? Color(.systemBackground) : Color(.secondarySystemBackground))
|
||||
.listRowSeparator(.hidden)
|
||||
if node != nil && node?.myInfo != nil {
|
||||
ForEach(node?.myInfo?.channels?.array as? [ChannelEntity] ?? [], id: \.self) { (channel: ChannelEntity) in
|
||||
Button(action: {
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ struct MQTTConfig: View {
|
|||
.foregroundColor(.gray)
|
||||
}
|
||||
.keyboardType(.asciiCapable)
|
||||
.scrollDismissesKeyboard(.interactively)
|
||||
.disableAutocorrection(true)
|
||||
.listRowSeparator(.hidden)
|
||||
Text("The root topic to use for MQTT.")
|
||||
|
|
@ -216,7 +215,6 @@ struct MQTTConfig: View {
|
|||
.foregroundColor(.gray)
|
||||
}
|
||||
.keyboardType(.default)
|
||||
.scrollDismissesKeyboard(.interactively)
|
||||
HStack {
|
||||
Label("Password", systemImage: "wallet.pass")
|
||||
TextField("Password", text: $password)
|
||||
|
|
@ -235,10 +233,9 @@ struct MQTTConfig: View {
|
|||
.foregroundColor(.gray)
|
||||
}
|
||||
.keyboardType(.default)
|
||||
.scrollDismissesKeyboard(.interactively)
|
||||
.listRowSeparator(/*@START_MENU_TOKEN@*/.visible/*@END_MENU_TOKEN@*/)
|
||||
}
|
||||
if address != "mqtt.meshtastic.org" && !proxyToClientEnabled {
|
||||
if !address.contains("mqtt.meshtastic.org") && !proxyToClientEnabled {
|
||||
Toggle(isOn: $tlsEnabled) {
|
||||
Label("TLS Enabled", systemImage: "checkmark.shield.fill")
|
||||
Text("Your MQTT Server must support TLS.")
|
||||
|
|
@ -249,7 +246,7 @@ struct MQTTConfig: View {
|
|||
Text("For all Mqtt functionality other than the map report you must also set uplink and downlink for each channel you want to bridge over Mqtt.")
|
||||
.font(.callout)
|
||||
}
|
||||
.scrollDismissesKeyboard(.interactively)
|
||||
.scrollDismissesKeyboard(.immediately)
|
||||
.disabled(!accessoryManager.isConnected || node?.mqttConfig == nil)
|
||||
|
||||
SaveConfigButton(node: node, hasChanges: $hasChanges) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import MeshtasticProtobufs
|
|||
|
||||
struct Settings: View {
|
||||
@Environment(\.managedObjectContext) var context
|
||||
@Environment(\.colorScheme) private var colorScheme
|
||||
@EnvironmentObject var accessoryManager: AccessoryManager
|
||||
@FetchRequest(
|
||||
sortDescriptors: [
|
||||
|
|
@ -445,6 +446,8 @@ struct Settings: View {
|
|||
}
|
||||
TipView(AdminChannelTip(), arrowEdge: .top)
|
||||
.tipViewStyle(PersistentTip())
|
||||
.tipBackground(colorScheme == .dark ? Color(.systemBackground) : Color(.secondarySystemBackground))
|
||||
.listRowSeparator(.hidden)
|
||||
} else {
|
||||
if accessoryManager.isConnected {
|
||||
Text("Connected Node \(node?.user?.longName?.addingVariationSelectors ?? "Unknown".localized)")
|
||||
|
|
|
|||
|
|
@ -55,7 +55,10 @@ struct ShareChannels: View {
|
|||
|
||||
VStack {
|
||||
TipView(ShareChannelsTip(), arrowEdge: .bottom)
|
||||
.tipBackground(Color(.secondarySystemBackground))
|
||||
.listRowSeparator(.hidden)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
GeometryReader { bounds in
|
||||
let smallest = min(bounds.size.width, bounds.size.height)
|
||||
ScrollView {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue