mirror of
https://github.com/leonboe1/QuickDrop.git
synced 2026-11-11 02:51:11 +00:00
iOS: Localize local network access, add alert if no local network access
This commit is contained in:
1 parent
6087a274ad
commit
22e86bc4f5
23 files changed
+501
-29
No files matched your search
@@ -42,7 +42,7 @@ public class NearbyConnectionManager: NSObject, NetServiceDelegate, InboundNearb
|
||||
public static let shared = NearbyConnectionManager()
|
||||
|
||||
@Published var attachments: AttachmentDetails? = nil
|
||||
|
||||
@Published var hasLocalNetworkAccess = true
|
||||
|
||||
override init() {
|
||||
#if os(macOS)
|
||||
@@ -206,6 +206,26 @@ public class NearbyConnectionManager: NSObject, NetServiceDelegate, InboundNearb
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
browser.stateUpdateHandler = { newState in
|
||||
switch newState {
|
||||
case .failed(let error):
|
||||
log("[NearbyConnectionManager] Browser failed: \(error)")
|
||||
case .ready:
|
||||
log("[NearbyConnectionManager] Browser ready")
|
||||
self.hasLocalNetworkAccess = true
|
||||
case .waiting(let error):
|
||||
log("[NearbyConnectionManager] Browser waiting: \(error)")
|
||||
|
||||
if error.errorCode == -65570 {
|
||||
log("[NearbyConnectionManager] Local network access not granted.")
|
||||
self.hasLocalNetworkAccess = false
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
browser.start(queue: .main)
|
||||
browsers.append(browser)
|
||||
}
|
||||
|
||||
@@ -86,6 +86,8 @@
|
||||
EB7654A12E53252D006B4AA3 /* AttachmentDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B762E521712002D68FA /* AttachmentDetails.swift */; };
|
||||
EB7654C02E534A8E006B4AA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; };
|
||||
EB7654C12E534A8E006B4AA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; };
|
||||
EB7654C42E534E89006B4AA3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB7654C32E534E89006B4AA3 /* InfoPlist.strings */; };
|
||||
EB7654C62E534E89006B4AA3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB7654C32E534E89006B4AA3 /* InfoPlist.strings */; };
|
||||
EB7CD1452D6FB0C300CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; };
|
||||
EB7CD1462D6FB0E800CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; };
|
||||
EB7F54122D78E96000989564 /* TutorialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7F54112D78E95C00989564 /* TutorialView.swift */; };
|
||||
@@ -299,6 +301,22 @@
|
||||
EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
||||
EB704A812E4A7BAE008E608F /* DistributionDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DistributionDetector.swift; sourceTree = "<group>"; };
|
||||
EB7654772E525ACC006B4AA3 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
|
||||
EB7654C22E534E89006B4AA3 /* InfoPlist.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654C82E534F2C006B4AA3 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654C92E534F2D006B4AA3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
EB7654CA2E534F31006B4AA3 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654CB2E534F32006B4AA3 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654CC2E534F33006B4AA3 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654CD2E534F33006B4AA3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654CE2E534F34006B4AA3 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654CF2E534F35006B4AA3 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654D02E534F35006B4AA3 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
EB7654D12E534F41006B4AA3 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
EB7654D22E534F42006B4AA3 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654D32E534F43006B4AA3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654D42E534F43006B4AA3 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654D52E534F44006B4AA3 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7654D62E534F45006B4AA3 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
||||
EB7F54112D78E95C00989564 /* TutorialView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialView.swift; sourceTree = "<group>"; };
|
||||
EB7F54132D78E9E400989564 /* LicenseWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseWindow.swift; sourceTree = "<group>"; };
|
||||
@@ -533,6 +551,7 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
EB97A0162E51DF4F008B8C5C /* Info.plist */,
|
||||
EB7654C32E534E89006B4AA3 /* InfoPlist.strings */,
|
||||
EB979F8D2E50CA23008B8C5C /* Configuration.swift */,
|
||||
EB979F8E2E50CA23008B8C5C /* ContentView.swift */,
|
||||
EB979F8F2E50CA23008B8C5C /* FilePicker.swift */,
|
||||
@@ -813,6 +832,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
EB5C383B2E38C1F60052EFD7 /* justMaybe.mp3 in Resources */,
|
||||
EB7654C42E534E89006B4AA3 /* InfoPlist.strings in Resources */,
|
||||
EB97A0142E51DD00008B8C5C /* License.txt in Resources */,
|
||||
EB97A0152E51DD00008B8C5C /* timeIsNow.mp3 in Resources */,
|
||||
EB886E552E4E50F40052B7D9 /* Localizable.xcstrings in Resources */,
|
||||
@@ -825,6 +845,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
EB950B5B2E52065A002D68FA /* timeIsNow.mp3 in Resources */,
|
||||
EB7654C62E534E89006B4AA3 /* InfoPlist.strings in Resources */,
|
||||
EB950B702E520734002D68FA /* Localizable.xcstrings in Resources */,
|
||||
EB950B5C2E52065A002D68FA /* justMaybe.mp3 in Resources */,
|
||||
EB950B5D2E52065A002D68FA /* License.txt in Resources */,
|
||||
@@ -1026,6 +1047,29 @@
|
||||
name = ShareViewController.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
EB7654C32E534E89006B4AA3 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
EB7654C22E534E89006B4AA3 /* InfoPlist.strings */,
|
||||
EB7654C82E534F2C006B4AA3 /* ar */,
|
||||
EB7654C92E534F2D006B4AA3 /* zh-Hans */,
|
||||
EB7654CA2E534F31006B4AA3 /* nl */,
|
||||
EB7654CB2E534F32006B4AA3 /* fr */,
|
||||
EB7654CC2E534F33006B4AA3 /* hu */,
|
||||
EB7654CD2E534F33006B4AA3 /* it */,
|
||||
EB7654CE2E534F34006B4AA3 /* ja */,
|
||||
EB7654CF2E534F35006B4AA3 /* ko */,
|
||||
EB7654D02E534F35006B4AA3 /* pt-BR */,
|
||||
EB7654D12E534F41006B4AA3 /* pt-PT */,
|
||||
EB7654D22E534F42006B4AA3 /* ro */,
|
||||
EB7654D32E534F43006B4AA3 /* ru */,
|
||||
EB7654D42E534F43006B4AA3 /* es */,
|
||||
EB7654D52E534F44006B4AA3 /* th */,
|
||||
EB7654D62E534F45006B4AA3 /* uk */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@@ -1325,8 +1369,7 @@
|
||||
INFOPLIST_KEY_CFBundleDisplayName = QuickDrop;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES;
|
||||
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is required to scan and connect to devices.";
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is needed to detect devices and transfer files over your Wi-Fi network.";
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
@@ -1367,8 +1410,7 @@
|
||||
INFOPLIST_KEY_CFBundleDisplayName = QuickDrop;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES;
|
||||
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is required to scan and connect to devices.";
|
||||
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
||||
INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is needed to detect devices and transfer files over your Wi-Fi network.";
|
||||
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
|
||||
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
"location" : "https://github.com/leonboe1/LUI.git",
|
||||
"state" : {
|
||||
"branch" : "main",
|
||||
"revision" : "dc041b1fee0be5a8546044b219ac03d7580da6ad"
|
||||
"revision" : "cf9384022c09a2c4a7dda6057bf2e6c2414e7aa3"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -5560,6 +5560,220 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"NoLocalNetworkAccessDescription" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"ar" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "لقد رفضت وصول الشبكة المحلية لتطبيق QuickDrop. لا يمكن لتطبيق QuickDrop العمل بدون هذا الإذن. انقر هنا لمنح الوصول إلى الشبكة المحلية."
|
||||
}
|
||||
},
|
||||
"de" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Du hast den lokalen Netzwerkzugriff für QuickDrop verweigert. QuickDrop kann ohne diese Berechtigung nicht funktionieren. Klicke hier, um den lokalen Netzwerkzugriff zu gewähren."
|
||||
}
|
||||
},
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Click here to grant local network access."
|
||||
}
|
||||
},
|
||||
"es" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Negaste el acceso a la red local para QuickDrop. QuickDrop no puede funcionar sin este permiso. Haz clic aquí para otorgar acceso a la red local."
|
||||
}
|
||||
},
|
||||
"fr" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Vous avez refusé l'accès au réseau local pour QuickDrop. QuickDrop ne peut pas fonctionner sans cette autorisation. Cliquez ici pour accorder l'accès au réseau local."
|
||||
}
|
||||
},
|
||||
"hu" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Ön megtagadta a helyi hálózathoz való hozzáférést a QuickDrop számára. A QuickDrop nem működik ezen engedély nélkül. Kattintson ide a helyi hálózathoz való hozzáférés engedélyezéséhez."
|
||||
}
|
||||
},
|
||||
"it" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Hai negato l'accesso alla rete locale per QuickDrop. QuickDrop non può funzionare senza questa autorizzazione. Clicca qui per concedere l'accesso alla rete locale."
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "QuickDropのローカルネットワークアクセスが拒否されました。この権限がないとQuickDropは動作しません。ローカルネットワークアクセスを許可するにはここをクリックしてください。"
|
||||
}
|
||||
},
|
||||
"ko" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "QuickDrop에 대한 로컬 네트워크 액세스를 거부했습니다. 이 권한 없이는 QuickDrop이 작동할 수 없습니다. 로컬 네트워크 액세스를 허용하려면 여기를 클릭하세요."
|
||||
}
|
||||
},
|
||||
"nl" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Je hebt toegang tot het lokale netwerk voor QuickDrop geweigerd. QuickDrop kan niet werken zonder deze toestemming. Klik hier om toegang tot het lokale netwerk te verlenen."
|
||||
}
|
||||
},
|
||||
"pt-BR" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Você negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem essa permissão. Clique aqui para conceder acesso à rede local."
|
||||
}
|
||||
},
|
||||
"pt-PT" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem esta permissão. Clique aqui para conceder acesso à rede local."
|
||||
}
|
||||
},
|
||||
"ro" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Ați refuzat accesul la rețeaua locală pentru QuickDrop. QuickDrop nu poate funcționa fără această permisiune. Apăsați aici pentru a oferi acces la rețeaua locală."
|
||||
}
|
||||
},
|
||||
"ru" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Вы отклонили доступ QuickDrop к локальной сети. QuickDrop не может работать без этого разрешения. Нажмите здесь, чтобы предоставить доступ к локальной сети."
|
||||
}
|
||||
},
|
||||
"th" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "คุณปฏิเสธการเข้าถึงเครือข่ายท้องถิ่นสำหรับ QuickDrop. QuickDrop ไม่สามารถทำงานได้โดยปราศจากสิทธิ์นี้. คลิกที่นี่เพื่ออนุญาตการเข้าถึงเครือข่ายท้องถิ่น."
|
||||
}
|
||||
},
|
||||
"uk" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Ви відхилили доступ до локальної мережі для QuickDrop. QuickDrop не може працювати без цього дозволу. Натисніть тут, щоб надати доступ до локальної мережі."
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "您已拒绝QuickDrop的本地网络访问权限。QuickDrop无法在没有该权限的情况下工作。点击此处授予本地网络访问权限。"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"NoNetworkAccess" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"ar" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "لا يوجد وصول للشبكة"
|
||||
}
|
||||
},
|
||||
"de" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Kein Netzwerkzugriff"
|
||||
}
|
||||
},
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "No Network Access"
|
||||
}
|
||||
},
|
||||
"es" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Sin acceso a red"
|
||||
}
|
||||
},
|
||||
"fr" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Pas d'accès au réseau"
|
||||
}
|
||||
},
|
||||
"hu" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Nincs hálózati hozzáférés"
|
||||
}
|
||||
},
|
||||
"it" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Nessun accesso alla rete"
|
||||
}
|
||||
},
|
||||
"ja" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "ネットワーク接続なし"
|
||||
}
|
||||
},
|
||||
"ko" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "네트워크 액세스 없음"
|
||||
}
|
||||
},
|
||||
"nl" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Geen netwerktoegang"
|
||||
}
|
||||
},
|
||||
"pt-BR" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Sem acesso à rede"
|
||||
}
|
||||
},
|
||||
"pt-PT" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Sem acesso à rede"
|
||||
}
|
||||
},
|
||||
"ro" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Fără acces la rețea"
|
||||
}
|
||||
},
|
||||
"ru" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Нет доступа к сети"
|
||||
}
|
||||
},
|
||||
"th" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "ไม่มีการเข้าถึงเครือข่าย"
|
||||
}
|
||||
},
|
||||
"uk" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Немає мережевого доступу"
|
||||
}
|
||||
},
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "无网络访问权限"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"NoNetworkConnection" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Доступ до локальної мережі потрібен для виявлення пристроїв та передавання файлів через вашу мережу Wi-Fi.";
|
||||
@@ -27,16 +27,16 @@ struct ContentView: View {
|
||||
})
|
||||
.onChange(of: scenePhase) { newValue in
|
||||
if newValue == .active {
|
||||
#if !EXTENSION
|
||||
#if !EXTENSION
|
||||
NearbyConnectionManager.shared.becomeVisible()
|
||||
#endif
|
||||
#endif
|
||||
NearbyConnectionManager.shared.startDeviceDiscovery()
|
||||
}
|
||||
|
||||
if newValue == .background {
|
||||
#if !EXTENSION
|
||||
#if !EXTENSION
|
||||
NearbyConnectionManager.shared.becomeInvisible()
|
||||
#endif
|
||||
#endif
|
||||
NearbyConnectionManager.shared.stopDeviceDiscovery()
|
||||
}
|
||||
}
|
||||
@@ -47,9 +47,9 @@ struct DeviceListView: View {
|
||||
|
||||
@StateObject var sendModel = SendModel()
|
||||
|
||||
#if !EXTENSION
|
||||
#if !EXTENSION
|
||||
@StateObject var receiveModel = ReceiveModel()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ObservedObject var nearbyConnectionManager = NearbyConnectionManager.shared
|
||||
|
||||
@@ -57,6 +57,7 @@ struct DeviceListView: View {
|
||||
|
||||
NavigationSubView(header: "QuickDrop ", navigationBarLayout: isShareExtension() ? .SmallOnlyAlways : .Default) {
|
||||
|
||||
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
|
||||
let attachments = nearbyConnectionManager.attachments
|
||||
@@ -84,6 +85,18 @@ struct DeviceListView: View {
|
||||
.padding(.top, 8)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
if !nearbyConnectionManager.hasLocalNetworkAccess {
|
||||
CardView(backgroundColor: .red, title: "NoNetworkAccess", titleSymbol: "network.slash") {
|
||||
HStack {
|
||||
CardSubView(symbol: "exclamationmark.triangle.fill", text: "NoLocalNetworkAccessDescription")
|
||||
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 10)
|
||||
.onTapGesture {
|
||||
openAppSettings()
|
||||
}
|
||||
}
|
||||
|
||||
if sendModel.foundDevices.isEmpty {
|
||||
|
||||
@@ -93,11 +106,13 @@ struct DeviceListView: View {
|
||||
Image(systemName: "square.and.arrow.down")
|
||||
.font(.system(size: 30))
|
||||
.foregroundColor(.gray)
|
||||
.padding(.leading, -10)
|
||||
|
||||
Text("DownloadQuickDropOnPlayStore")
|
||||
}
|
||||
.padding(.vertical)
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
CustomSection(header: "AvailableDevices") {
|
||||
@@ -126,16 +141,20 @@ struct DeviceListView: View {
|
||||
}
|
||||
}
|
||||
|
||||
HStack(spacing: 8) {
|
||||
Text("SearchingForDevices")
|
||||
.font(.system(size: 14))
|
||||
.foregroundColor(Color.primary.opacity(0.6))
|
||||
|
||||
ProgressView()
|
||||
.frame(width: 12, height: 12)
|
||||
|
||||
if nearbyConnectionManager.hasLocalNetworkAccess {
|
||||
HStack(spacing: 8) {
|
||||
Text("SearchingForDevices")
|
||||
.font(.system(size: 14))
|
||||
.foregroundColor(Color.primary.opacity(0.6))
|
||||
|
||||
ProgressView()
|
||||
.frame(width: 12, height: 12)
|
||||
}
|
||||
.padding(.vertical, 16)
|
||||
}
|
||||
.padding(.vertical, 16)
|
||||
}
|
||||
.animation(.smooth, value: nearbyConnectionManager.hasLocalNetworkAccess)
|
||||
.navigationBarItems(trailing: ZStack {
|
||||
if isShareExtension() {
|
||||
XButton(action: { NearbyConnectionManager.shared.attachments?.closeView?() })
|
||||
@@ -228,11 +247,11 @@ struct DeviceButtonLabel: View {
|
||||
|
||||
|
||||
func isShareExtension() -> Bool {
|
||||
#if EXTENSION
|
||||
#if EXTENSION
|
||||
return true
|
||||
#else
|
||||
#else
|
||||
return false
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -244,13 +263,13 @@ func isShareExtension() -> Bool {
|
||||
// RemoteDeviceInfo(name: "iPhone 14", type: .phone, id: "iphone-14-id"),
|
||||
// RemoteDeviceInfo(name: "Samsung Galaxy S21", type: .phone, id: "samsung-galaxy-s21-id")
|
||||
// ]
|
||||
//
|
||||
//
|
||||
// return DeviceListView(sendModel: model, receiveModel: ReceiveModel())
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//#Preview {
|
||||
// NavigationView {
|
||||
// DeviceListView.preview
|
||||
// }
|
||||
//}
|
||||
#Preview {
|
||||
NavigationView {
|
||||
DeviceListView()
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,13 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
<false/>
|
||||
<key>UISceneConfigurations</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "الوصول إلى الشبكة المحلية مطلوب لاكتشاف الأجهزة ونقل الملفات عبر شبكة Wi-Fi الخاصة بك.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Der Zugriff auf das lokale Netzwerk ist erforderlich, um Geräte zu erkennen und Dateien über Ihr Wi-Fi-Netzwerk zu übertragen.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Se necesita acceso a la red local para detectar dispositivos y transferir archivos a través de su red Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "L’accès au réseau local est nécessaire pour détecter les appareils et transférer des fichiers via votre réseau Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Helyi hálózati hozzáférés szükséges az eszközök felismeréséhez és a fájlok átviteléhez a Wi-Fi hálózatán keresztül.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "È necessario l’accesso alla rete locale per rilevare i dispositivi e trasferire file tramite la tua rete Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "ローカルネットワークへのアクセスは、デバイスを検出し、Wi-Fi ネットワーク経由でファイルを転送するために必要です。";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "장치를 감지하고 Wi-Fi 네트워크를 통해 파일을 전송하려면 로컬 네트워크 접근이 필요합니다.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Lokale netwerktoegang is nodig om apparaten te detecteren en bestanden over uw Wi-Fi-netwerk te verzenden.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "O acesso à rede local é necessário para detectar dispositivos e transferir arquivos pela sua rede Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "O acesso à rede local é necessário para detetar dispositivos e transferir ficheiros através da sua rede Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Accesul la rețeaua locală este necesar pentru a detecta dispozitivele și a transfera fișiere prin rețeaua Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Доступ к локальной сети необходим для обнаружения устройств и передачи файлов через вашу сеть Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "การเข้าถึงเครือข่ายภายในเครื่องจำเป็นสำหรับการตรวจหาดีไวซ์และการถ่ายโอนไฟล์ผ่านเครือข่าย Wi-Fi ของคุณ";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "Доступ до локальної мережі потрібен для виявлення пристроїв та передавання файлів через вашу мережу Wi-Fi.";
|
||||
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
AirGuard
|
||||
|
||||
Created by Leon Böttger on 23.08.22.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
NSLocalNetworkUsageDescription = "需要本地网络访问以检测设备并通过您的 Wi-Fi 网络传输文件。";
|
||||
Reference in new issue
Block a user