From 42c101605fdf9bdaa894574d15964bc843fa4bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6ttger?= Date: Fri, 13 Mar 2026 19:48:36 +0100 Subject: [PATCH] Show unknown devicrd --- .../Connection/NearbyConnectionManager.swift | 26 +- QuickDrop/Localizable.xcstrings | 233 ++++++++++++++++++ 2 files changed, 250 insertions(+), 9 deletions(-) diff --git a/NearbyShare/Connection/NearbyConnectionManager.swift b/NearbyShare/Connection/NearbyConnectionManager.swift index 3ffb4f7..22d4454 100644 --- a/NearbyShare/Connection/NearbyConnectionManager.swift +++ b/NearbyShare/Connection/NearbyConnectionManager.swift @@ -49,6 +49,7 @@ public class NearbyConnectionManager: NSObject, NetServiceDelegate, InboundNearb private let txtKeyNotificationSyncCapabilities = "qd_caps" private let txtKeyNotificationSyncKeyFingerprint = "qd_kid" private let notificationSyncCapabilityToken = "nsync1" + private let unnamedAndroidFallbackDeviceName = "AndroidDevice".localized() // MARK: Shared Instance @@ -540,22 +541,22 @@ public class NearbyConnectionManager: NSObject, NetServiceDelegate, InboundNearb guard case let NWBrowser.Result.Metadata.bonjour(txtRecord) = service.metadata else { return } guard let endpointInfoEncoded = txtRecord.dictionary[txtKeyEndpointInfo] else { return } guard let endpointInfoData = Data.dataFromUrlSafeBase64(endpointInfoEncoded) else { return } - guard var endpointInfo = EndpointInfo(data: endpointInfoData) else { return } - var deviceInfo: RemoteDeviceInfo? - - if let _ = endpointInfo.name { - deviceInfo = addFoundDevice(foundService: &foundService, endpointInfo: endpointInfo, endpointID: endpointID) + var endpointInfo = EndpointInfo(data: endpointInfoData) + ?? EndpointInfo(name: unnamedAndroidFallbackDeviceName, deviceType: .unknown) + + let cleanedName = endpointInfo.name?.trimmingCharacters(in: .whitespacesAndNewlines) + if cleanedName?.isEmpty != false { + endpointInfo.name = unnamedAndroidFallbackDeviceName } + let deviceInfo = addFoundDevice(foundService: &foundService, endpointInfo: endpointInfo, endpointID: endpointID) if let qrData = endpointInfo.qrCodeData, let qrCodeAdvertisingToken = qrCodeAdvertisingToken, let qrCodeNameEncryptionKey = qrCodeNameEncryptionKey { log("[NearbyConnectionManager] Device has QR data: \(qrData.base64EncodedString()), advertising token is \(qrCodeAdvertisingToken.base64EncodedString())") if qrData == qrCodeAdvertisingToken { - if let deviceInfo = deviceInfo { - for delegate in outboundAppDelegates { - delegate.startTransferWithQrCode(device: deviceInfo) - } + for delegate in outboundAppDelegates { + delegate.startTransferWithQrCode(device: deviceInfo) } } else if qrData.count > 28 { @@ -577,10 +578,17 @@ public class NearbyConnectionManager: NSObject, NetServiceDelegate, InboundNearb private func addFoundDevice(foundService: inout FoundServiceInfo, endpointInfo: EndpointInfo, endpointID: String) -> RemoteDeviceInfo { + let hadPreviousDevice = foundServices[endpointID]?.device != nil let deviceInfo = RemoteDeviceInfo(info: endpointInfo, id: endpointID) foundService.device = deviceInfo foundServices[endpointID] = foundService + if hadPreviousDevice { + for delegate in outboundAppDelegates { + delegate.removeDevice(id: endpointID) + } + } + for delegate in outboundAppDelegates { delegate.addDevice(device: deviceInfo) } diff --git a/QuickDrop/Localizable.xcstrings b/QuickDrop/Localizable.xcstrings index b906b45..b3a14b8 100644 --- a/QuickDrop/Localizable.xcstrings +++ b/QuickDrop/Localizable.xcstrings @@ -1165,6 +1165,239 @@ } } }, + "AndroidDevice" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "جهاز أندرويد" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositiu Android" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Zařízení Android" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-enhed" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-Gerät" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Συσκευή Android" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android Device" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android Device" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android Device" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android Device" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositivo Android" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositivo Android" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-laite" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appareil Android" + } + }, + "fr-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Appareil Android" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "מכשיר אנדרואיד" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android डिवाइस" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android uređaj" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android eszköz" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Perangkat Android" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositivo Android" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Androidデバイス" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android 기기" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Peranti Android" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-enhet" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-apparaat" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Urządzenie z Androidem" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositivo Android" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispositivo Android" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dispozitiv Android" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Устройство Android" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android-enhet" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "อุปกรณ์ Android" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android Cihazı" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Пристрій Android" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thiết bị Android" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android 设备" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "Android 裝置" + } + } + } + }, "ApIsolationAction" : { "extractionState" : "manual", "localizations" : {