From 728385ff9506a30fa0675a23a6af5a4be112336f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leon=20B=C3=B6ttger?= Date: Fri, 26 Dec 2025 13:18:54 +0100 Subject: [PATCH] Add button to enable share extension --- NearbyShare/Util/Localized.swift | 15 - QuickDrop.xcodeproj/project.pbxproj | 20 +- QuickDrop/Localizable.xcstrings | 1150 +++++++++++++++-- QuickDrop/View/TutorialView.swift | 104 +- QuickDrop/View/WelcomeScreen.swift | 74 +- QuickDropiOS/View/ContentView.swift | 9 +- QuickDropiOS/View/FilePicker.swift | 1 - .../View/NoLocalNetworkAccessAlertView.swift | 24 + 8 files changed, 1214 insertions(+), 183 deletions(-) delete mode 100644 NearbyShare/Util/Localized.swift create mode 100644 QuickDropiOS/View/NoLocalNetworkAccessAlertView.swift diff --git a/NearbyShare/Util/Localized.swift b/NearbyShare/Util/Localized.swift deleted file mode 100644 index 99d6091..0000000 --- a/NearbyShare/Util/Localized.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Localized.swift -// QuickDrop -// -// Created by Leon Böttger on 10.03.25. -// - -import Foundation - -public extension String { - func localized() -> String { - let localizedString = NSLocalizedString(self, comment: "") - return localizedString - } -} diff --git a/QuickDrop.xcodeproj/project.pbxproj b/QuickDrop.xcodeproj/project.pbxproj index 801b37e..502e1e2 100644 --- a/QuickDrop.xcodeproj/project.pbxproj +++ b/QuickDrop.xcodeproj/project.pbxproj @@ -82,7 +82,6 @@ EB3B9F222EF7150400D6704E /* TutorialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7F54112D78E95C00989564 /* TutorialView.swift */; }; EB3B9F232EF7150400D6704E /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; EB3B9F242EF7150400D6704E /* PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBBEE1452EC9D92F00AA7831 /* PhotoManager.swift */; }; - EB3B9F252EF7150400D6704E /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB3B9F262EF7150400D6704E /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB16B7762E59BA9F007D9792 /* AppGroup.swift */; }; EB3B9F272EF7150400D6704E /* ApIsolationIssueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C7D2E33B58300EECC18 /* ApIsolationIssueView.swift */; }; EB3B9F282EF7150400D6704E /* FirewallIssueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C7E2E33B58300EECC18 /* FirewallIssueView.swift */; }; @@ -109,7 +108,6 @@ EB3B9F3F2EF7150400D6704E /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = EB6E6B202ECBA95000E71D57 /* InfoPlist.xcstrings */; }; EB3B9F402EF7150400D6704E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB7654772E525ACC006B4AA3 /* MainMenu.xib */; }; EB3B9F4C2EF7151900D6704E /* License.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E662E4F2F7C0052B7D9 /* License.swift */; }; - EB3B9F4D2EF7151900D6704E /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB3B9F4E2EF7151900D6704E /* SendToExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1325F72E70287C00FD749C /* SendToExtension.swift */; }; EB3B9F4F2EF7151900D6704E /* TrustStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB16B6162E58B4C8007D9792 /* TrustStore.swift */; }; EB3B9F502EF7151900D6704E /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E512E4E19390052B7D9 /* HKDF.swift */; }; @@ -224,7 +222,6 @@ EB5C37FE2E377CE70052EFD7 /* offline_wire_formats.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2B29E18CB500A442DA /* offline_wire_formats.pb.swift */; }; EB5C37FF2E377CE70052EFD7 /* wire_format.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2929E18CB500A442DA /* wire_format.pb.swift */; }; EB5C38002E377CE70052EFD7 /* DataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5C36E82E3546100052EFD7 /* DataModel.swift */; }; - EB5C38012E377DE60052EFD7 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB5C38392E38C1F60052EFD7 /* justMaybe.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EB5C38382E38C1F60052EFD7 /* justMaybe.mp3 */; }; EB5C383A2E38C1F60052EFD7 /* justMaybe.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EB5C38382E38C1F60052EFD7 /* justMaybe.mp3 */; }; EB5C383B2E38C1F60052EFD7 /* justMaybe.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EB5C38382E38C1F60052EFD7 /* justMaybe.mp3 */; }; @@ -237,6 +234,8 @@ EB6E6B212ECBA95000E71D57 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = EB6E6B202ECBA95000E71D57 /* InfoPlist.xcstrings */; }; EB6E6B222ECBA95000E71D57 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = EB6E6B202ECBA95000E71D57 /* InfoPlist.xcstrings */; }; EB6F62D72D91F4AF00534EC2 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */; }; + EB6FE7CF2EFEB42800FF2BCF /* NoLocalNetworkAccessAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB6FE7CC2EFEAFF000FF2BCF /* NoLocalNetworkAccessAlertView.swift */; }; + EB6FE7D02EFEB43000FF2BCF /* NoLocalNetworkAccessAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB6FE7CC2EFEAFF000FF2BCF /* NoLocalNetworkAccessAlertView.swift */; }; EB721F242E75AFA900F2099F /* QuickDropIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = EB721F232E75AFA900F2099F /* QuickDropIcon.icon */; }; EB721F252E75AFA900F2099F /* QuickDropIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = EB721F232E75AFA900F2099F /* QuickDropIcon.icon */; }; EB7654782E525ACC006B4AA3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB7654772E525ACC006B4AA3 /* MainMenu.xib */; }; @@ -269,7 +268,6 @@ EB950B452E520436002D68FA /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2F9BFA2DA04B67004010A2 /* Helpers.swift */; }; EB950B462E520436002D68FA /* OutboundNearbyConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 691F53BD2ABF03820089FD92 /* OutboundNearbyConnection.swift */; }; EB950B472E520436002D68FA /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; - EB950B482E520436002D68FA /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB950B492E520436002D68FA /* device_to_device_messages.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2A29E18CB500A442DA /* device_to_device_messages.pb.swift */; }; EB950B4A2E520436002D68FA /* securegcm.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2C29E18CB500A442DA /* securegcm.pb.swift */; }; EB950B4B2E520436002D68FA /* offline_wire_formats.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2B29E18CB500A442DA /* offline_wire_formats.pb.swift */; }; @@ -302,8 +300,6 @@ EB96ED8B2D7F7CF7004B3FF1 /* SmallSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */; }; EB96ED8C2D7F7E7B004B3FF1 /* SmallSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */; }; EB96ED8D2D7F7EA3004B3FF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; }; - EB96ED8F2D7F8105004B3FF1 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; - EB96ED902D7F8114004B3FF1 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB979F942E50CA23008B8C5C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8D2E50CA23008B8C5C /* Configuration.swift */; }; EB979F952E50CA23008B8C5C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8E2E50CA23008B8C5C /* ContentView.swift */; }; EB979F962E50CA23008B8C5C /* FilePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8F2E50CA23008B8C5C /* FilePicker.swift */; }; @@ -531,6 +527,7 @@ EB5C383E2E38C49D0052EFD7 /* LaunchAtLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchAtLogin.swift; sourceTree = ""; }; EB6E6B202ECBA95000E71D57 /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = ""; }; EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + EB6FE7CC2EFEAFF000FF2BCF /* NoLocalNetworkAccessAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoLocalNetworkAccessAlertView.swift; sourceTree = ""; }; EB721F232E75AFA900F2099F /* QuickDropIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = QuickDropIcon.icon; sourceTree = ""; }; EB7654772E525ACC006B4AA3 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; EB7A95F22EF6E1BE0021111B /* IntroductionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroductionView.swift; sourceTree = ""; }; @@ -546,7 +543,6 @@ EB950B732E520954002D68FA /* Attachments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Attachments.swift; sourceTree = ""; }; EB950B762E521712002D68FA /* AttachmentDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentDetails.swift; sourceTree = ""; }; EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallSheetView.swift; sourceTree = ""; }; - EB96ED8E2D7F8103004B3FF1 /* Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Localized.swift; sourceTree = ""; }; EB979F8D2E50CA23008B8C5C /* Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; EB979F8E2E50CA23008B8C5C /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; EB979F8F2E50CA23008B8C5C /* FilePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePicker.swift; sourceTree = ""; }; @@ -762,7 +758,6 @@ EB5C371C2E3669010052EFD7 /* Util */ = { isa = PBXGroup; children = ( - EB96ED8E2D7F8103004B3FF1 /* Localized.swift */, EB16B6112E58B4B9007D9792 /* IdentityManager.swift */, EB2B41E32DC63AC80070FC39 /* SleepManager.swift */, EB16B6162E58B4C8007D9792 /* TrustStore.swift */, @@ -820,6 +815,7 @@ isa = PBXGroup; children = ( EB979F8E2E50CA23008B8C5C /* ContentView.swift */, + EB6FE7CC2EFEAFF000FF2BCF /* NoLocalNetworkAccessAlertView.swift */, EB979F8F2E50CA23008B8C5C /* FilePicker.swift */, EB97A0192E51EA9C008B8C5C /* UIAlert.swift */, EBBEE1452EC9D92F00AA7831 /* PhotoManager.swift */, @@ -1241,7 +1237,6 @@ buildActionMask = 2147483647; files = ( EBE5FF442EDB877C0019B380 /* License.swift in Sources */, - EB96ED902D7F8114004B3FF1 /* Localized.swift in Sources */, EB1325F82E70288300FD749C /* SendToExtension.swift in Sources */, EB16B6172E58B4C8007D9792 /* TrustStore.swift in Sources */, EB886E542E4E19390052B7D9 /* HKDF.swift in Sources */, @@ -1324,7 +1319,6 @@ EB7F54122D78E96000989564 /* TutorialView.swift in Sources */, EB9925812E45D53E00357055 /* sharing_enums.pb.swift in Sources */, EB6E6AB42ECBA46D00E71D57 /* PhotoManager.swift in Sources */, - EB96ED8F2D7F8105004B3FF1 /* Localized.swift in Sources */, EB16B77A2E59BAA1007D9792 /* AppGroup.swift in Sources */, EBC05C822E33B58300EECC18 /* ApIsolationIssueView.swift in Sources */, EBC05C832E33B58300EECC18 /* FirewallIssueView.swift in Sources */, @@ -1379,7 +1373,6 @@ EB3B9F222EF7150400D6704E /* TutorialView.swift in Sources */, EB3B9F232EF7150400D6704E /* sharing_enums.pb.swift in Sources */, EB3B9F242EF7150400D6704E /* PhotoManager.swift in Sources */, - EB3B9F252EF7150400D6704E /* Localized.swift in Sources */, EB3B9F262EF7150400D6704E /* AppGroup.swift in Sources */, EB3B9F272EF7150400D6704E /* ApIsolationIssueView.swift in Sources */, EB3B9F282EF7150400D6704E /* FirewallIssueView.swift in Sources */, @@ -1398,7 +1391,6 @@ buildActionMask = 2147483647; files = ( EB3B9F4C2EF7151900D6704E /* License.swift in Sources */, - EB3B9F4D2EF7151900D6704E /* Localized.swift in Sources */, EB3B9F4E2EF7151900D6704E /* SendToExtension.swift in Sources */, EB3B9F4F2EF7151900D6704E /* TrustStore.swift in Sources */, EB3B9F502EF7151900D6704E /* HKDF.swift in Sources */, @@ -1456,7 +1448,6 @@ EB5C37F62E377CE70052EFD7 /* device_to_device_messages.pb.swift in Sources */, EB886E532E4E19390052B7D9 /* HKDF.swift in Sources */, EB5C37F82E377CE70052EFD7 /* SleepManager.swift in Sources */, - EB5C38012E377DE60052EFD7 /* Localized.swift in Sources */, EB5C37F92E377CE70052EFD7 /* securegcm.pb.swift in Sources */, EB5C37FA2E377CE70052EFD7 /* Helpers.swift in Sources */, EB5C37FB2E377CE70052EFD7 /* InboundNearbyConnection.swift in Sources */, @@ -1472,6 +1463,7 @@ EB5C383D2E38C2D90052EFD7 /* AudioManager.swift in Sources */, EB979F942E50CA23008B8C5C /* Configuration.swift in Sources */, EB979F952E50CA23008B8C5C /* ContentView.swift in Sources */, + EB6FE7CF2EFEB42800FF2BCF /* NoLocalNetworkAccessAlertView.swift in Sources */, EBBEE1462EC9D93400AA7831 /* PhotoManager.swift in Sources */, EB97A01A2E51EAA2008B8C5C /* UIAlert.swift in Sources */, EB979F962E50CA23008B8C5C /* FilePicker.swift in Sources */, @@ -1496,7 +1488,6 @@ EB950B572E520591002D68FA /* ErrorAlertHandler.swift in Sources */, EB950B462E520436002D68FA /* OutboundNearbyConnection.swift in Sources */, EB950B472E520436002D68FA /* sharing_enums.pb.swift in Sources */, - EB950B482E520436002D68FA /* Localized.swift in Sources */, EB950B492E520436002D68FA /* device_to_device_messages.pb.swift in Sources */, EB950B4A2E520436002D68FA /* securegcm.pb.swift in Sources */, EB950B4B2E520436002D68FA /* offline_wire_formats.pb.swift in Sources */, @@ -1528,6 +1519,7 @@ EB950B752E52111C002D68FA /* Attachments.swift in Sources */, EB950B6F2E5206E2002D68FA /* ShareViewController.swift in Sources */, EB950B432E52038A002D68FA /* ContentView.swift in Sources */, + EB6FE7D02EFEB43000FF2BCF /* NoLocalNetworkAccessAlertView.swift in Sources */, EB950B442E520414002D68FA /* License.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/QuickDrop/Localizable.xcstrings b/QuickDrop/Localizable.xcstrings index 50a492f..0b1fbf9 100644 --- a/QuickDrop/Localizable.xcstrings +++ b/QuickDrop/Localizable.xcstrings @@ -10481,6 +10481,472 @@ } } }, + "EnableQuickDropExtension" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فعّل إضافة QuickDrop" + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activa l'extensió QuickDrop" + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Povolit rozšíření QuickDrop" + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivér QuickDrop-udvidelse" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop-Erweiterung aktivieren" + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ενεργοποίηση της επέκτασης QuickDrop" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable QuickDrop Extension" + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable QuickDrop Extension" + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable QuickDrop Extension" + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Enable QuickDrop Extension" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activar extensión QuickDrop" + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Habilitar extensión QuickDrop" + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ota QuickDrop-laajennus käyttöön" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer l’extension QuickDrop" + } + }, + "fr-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activer l’extension QuickDrop" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "הפעל את ההרחבה של QuickDrop" + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "क्विकड्रॉप एक्सटेंशन सक्षम करें" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Omogući QuickDrop ekstenziju" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop-bővítmény engedélyezése" + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktifkan Ekstensi QuickDrop" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Abilita estensione QuickDrop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop拡張機能を有効にする" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop 확장 기능 활성화" + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktifkan Sambungan QuickDrop" + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktiver QuickDrop-utvidelse" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop-extensie inschakelen" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Włącz rozszerzenie QuickDrop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar Extensão do QuickDrop" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ativar Extensão QuickDrop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Activează extensia QuickDrop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Включить расширение QuickDrop" + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aktivera QuickDrop-tillägget" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เปิดใช้งาน QuickDrop ส่วนขยาย" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop Uzantısını Etkinleştir" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Увімкнути розширення QuickDrop" + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bật tiện ích QuickDrop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "启用 QuickDrop 扩展" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "啟用 QuickDrop 擴充功能" + } + } + } + }, + "EnableQuickDropExtensionDescription" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "انقر على \"تعديل الإضافات\" في الأسفل لتفعيل QuickDrop للمشاركة." + } + }, + "ca" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fes clic a 'Edita extensions' a la part inferior per activar QuickDrop per compartir." + } + }, + "cs" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klikněte dole na „Upravit rozšíření“ a povolte QuickDrop pro sdílení." + } + }, + "da" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klik på 'Rediger udvidelser' nederst for at aktivere QuickDrop til deling." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klicke unten auf „Erweiterungen bearbeiten“, um QuickDrop fürs Teilen zu aktivieren." + } + }, + "el" : { + "stringUnit" : { + "state" : "translated", + "value" : "Κάντε κλικ στο 'Επεξεργασία Επεκτάσεων' στο κάτω μέρος για να ενεργοποιήσετε το QuickDrop για διαμοιρασμό." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Click on 'Edit Extensions' on the bottom to enable QuickDrop for sharing." + } + }, + "en-AU" : { + "stringUnit" : { + "state" : "translated", + "value" : "Click on 'Edit Extensions' at the bottom to enable QuickDrop for sharing." + } + }, + "en-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Click on 'Edit Extensions' at the bottom to enable QuickDrop for sharing." + } + }, + "en-GB" : { + "stringUnit" : { + "state" : "translated", + "value" : "Click on 'Edit Extensions' at the bottom to enable QuickDrop for sharing." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haz clic en 'Editar extensiones' abajo para activar QuickDrop para compartir." + } + }, + "es-419" : { + "stringUnit" : { + "state" : "translated", + "value" : "Haz clic en 'Editar extensiones' en la parte inferior para habilitar QuickDrop para compartir." + } + }, + "fi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Napsauta alareunassa 'Muokkaa laajennuksia' ottaaksesi QuickDropin käyttöön jakamista varten." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cliquez sur « Modifier les extensions » en bas pour activer QuickDrop pour le partage." + } + }, + "fr-CA" : { + "stringUnit" : { + "state" : "translated", + "value" : "Cliquez sur « Modifier les extensions » en bas pour activer QuickDrop pour le partage." + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "לחץ על 'ערוך הרחבות' בתחתית כדי להפעיל את QuickDrop לשיתוף." + } + }, + "hi" : { + "stringUnit" : { + "state" : "translated", + "value" : "शेयरिंग के लिए क्विकड्रॉप सक्षम करने हेतु नीचे 'एक्सटेंशन संपादित करें' पर क्लिक करें।" + } + }, + "hr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kliknite na 'Uredi ekstenzije' pri dnu za omogućavanje QuickDrop dijeljenja." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kattintson alul a „Bővítmények szerkesztése” gombra a QuickDrop megosztásához." + } + }, + "id" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klik 'Edit Ekstensi' di bawah untuk mengaktifkan QuickDrop agar dapat berbagi." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Fai clic su 'Modifica estensioni' in basso per abilitare QuickDrop per la condivisione." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "下部の「拡張機能を編集」をクリックして、QuickDropでの共有を有効にしてください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "하단의 '확장 프로그램 편집'을 클릭하여 공유용 QuickDrop을 활성화하세요." + } + }, + "ms" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klik pada 'Edit Sambungan' di bawah untuk mengaktifkan QuickDrop untuk perkongsian." + } + }, + "nb" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klikk på «Rediger utvidelser» nederst for å aktivere QuickDrop for deling." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klik onderaan op 'Extensies bewerken' om QuickDrop voor delen in te schakelen." + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kliknij „Edytuj rozszerzenia” na dole, aby włączyć QuickDrop do udostępniania." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clique em 'Editar Extensões' na parte inferior para ativar o QuickDrop para compartilhamento." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clique em 'Editar Extensões' em baixo para ativar o QuickDrop para partilhas." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apasă pe „Editează extensiile” jos pentru a activa QuickDrop la partajare." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нажмите «Изменить расширения» внизу, чтобы включить QuickDrop для обмена файлами." + } + }, + "sv" : { + "stringUnit" : { + "state" : "translated", + "value" : "Klicka på 'Redigera tillägg' längst ner för att aktivera QuickDrop för delning." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คลิกที่ 'แก้ไขส่วนขยาย' ด้านล่างเพื่อเปิดใช้งาน QuickDrop สำหรับการแชร์" + } + }, + "tr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Paylaşım için QuickDrop'u etkinleştirmek adına alttaki 'Uzantıları Düzenle'ye tıklayın." + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Натисніть «Редагувати розширення» внизу, щоб увімкнути QuickDrop для обміну файлами." + } + }, + "vi" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nhấn 'Chỉnh sửa Tiện ích' ở dưới để bật QuickDrop chia sẻ." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "点击底部的“编辑扩展”以启用 QuickDrop 共享。" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "點擊下方的「編輯擴充功能」以啟用 QuickDrop 分享。" + } + } + } + }, "Error.ClosedByPeer" : { "extractionState" : "manual", "localizations" : { @@ -15611,231 +16077,687 @@ "extractionState" : "manual", "localizations" : { "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لقد رفضت وصول الشبكة المحلية لتطبيق QuickDrop. لا يمكن لتطبيق QuickDrop العمل بدون هذا الإذن. انقر هنا لمنح الوصول إلى الشبكة المحلية." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد منعت وصول QuickDrop إلى الشبكة المحلية. لا يمكن لـ QuickDrop العمل بدون هذا الإذن. افتح إعدادات النظام، ثم انتقل إلى \"الخصوصية والأمان\" > \"الشبكة المحلية\". تأكد من تفعيل QuickDrop." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "لقد منعت وصول QuickDrop إلى الشبكة المحلية. لا يمكن لـ QuickDrop العمل بدون هذا الإذن. اضغط هنا لمنح إذن الوصول للشبكة المحلية." + } + } + } } }, "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Has denegat l'accés a la xarxa local per QuickDrop. QuickDrop no pot funcionar sense aquest permís. Fes clic aquí per concedir l'accés a la xarxa local." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has denegat l'accés a la xarxa local per a QuickDrop. QuickDrop no pot funcionar sense aquest permís. Obre la Configuració del sistema i ves a \"Privadesa i seguretat\" > \"Xarxa local\". Assegura't que QuickDrop estigui activat." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Has denegat l'accés a la xarxa local per a QuickDrop. QuickDrop no pot funcionar sense aquest permís. Fes clic aquí per concedir l'accés a la xarxa local." + } + } + } } }, "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odvolali jste přístup QuickDropu k místní síti. QuickDrop nemůže fungovat bez tohoto oprávnění. Klikněte sem pro udělení přístupu k místní síti." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odepřeli jste QuickDropu přístup k místní síti. Bez tohoto oprávnění nebude QuickDrop fungovat. Otevřete Systémová nastavení a přejděte na „Soukromí a zabezpečení“ > „Místní síť“. Ujistěte se, že je QuickDrop povolen." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odepřeli jste QuickDropu přístup k místní síti. Bez tohoto oprávnění nebude QuickDrop fungovat. Klikněte zde pro povolení přístupu k místní síti." + } + } + } } }, "da" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du har nægtet lokal netværksadgang til QuickDrop. QuickDrop kan ikke fungere uden denne tilladelse. Klik her for at give adgang til det lokale netværk." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nægtet QuickDrop adgang til det lokale netværk. QuickDrop kan ikke fungere uden denne tilladelse. Åbn Systemindstillinger og gå til \"Privatliv & Sikkerhed\" > \"Lokalt netværk\". Sørg for, at QuickDrop er aktiveret." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nægtet QuickDrop adgang til det lokale netværk. QuickDrop kan ikke fungere uden denne tilladelse. Klik her for at give adgang til det lokale netværk." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast QuickDrop den Zugriff auf das lokale Netzwerk verweigert. Ohne diese Berechtigung funktioniert QuickDrop nicht. Öffne die Systemeinstellungen und gehe zu „Datenschutz & Sicherheit“ > „Lokales Netzwerk“. Stelle sicher, dass QuickDrop aktiviert ist." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du hast QuickDrop den Zugriff auf das lokale Netzwerk verweigert. Ohne diese Berechtigung funktioniert QuickDrop nicht. Klicke hier, um den Zugriff zu erlauben." + } + } + } } }, "el" : { - "stringUnit" : { - "state" : "translated", - "value" : "Απορρίψατε την πρόσβαση στο τοπικό δίκτυο για το QuickDrop. Το QuickDrop δεν μπορεί να λειτουργήσει χωρίς αυτή την άδεια. Πατήστε εδώ για να χορηγήσετε πρόσβαση στο τοπικό δίκτυο." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Απορρίψατε την πρόσβαση στο τοπικό δίκτυο για το QuickDrop. Το QuickDrop δεν μπορεί να λειτουργήσει χωρίς αυτήν την άδεια. Ανοίξτε τις Ρυθμίσεις συστήματος και πηγαίνετε στο «Απόρρητο & Ασφάλεια» > «Τοπικό Δίκτυο». Βεβαιωθείτε ότι το QuickDrop είναι ενεργοποιημένο." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Απορρίψατε την πρόσβαση στο τοπικό δίκτυο για το QuickDrop. Το QuickDrop δεν μπορεί να λειτουργήσει χωρίς αυτήν την άδεια. Κάντε κλικ εδώ για να δώσετε πρόσβαση στο τοπικό δίκτυο." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Open System Settings, and go to \"Privacy & Security\" > \"Local Network\". Make sure that QuickDrop is enabled." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Click here to grant local network access." + } + } + } } }, "en-AU" : { - "stringUnit" : { - "state" : "translated", - "value" : "Local network access denied for QuickDrop. Grant it to function. Tap here to allow access." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Open System Settings, and go to \"Privacy & Security\" > \"Local Network\". Make sure that QuickDrop is enabled." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Click here to grant local network access." + } + } + } } }, "en-CA" : { - "stringUnit" : { - "state" : "translated", - "value" : "Access for QuickDrop to the local network is denied. Grant access to allow functionality." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Open System Settings, and go to \"Privacy & Security\" > \"Local Network\". Make sure that QuickDrop is enabled." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Click here to grant local network access." + } + } + } } }, "en-GB" : { - "stringUnit" : { - "state" : "translated", - "value" : "You denied local network access for QuickDrop. It cannot operate without this permission. Click here to grant local network access." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Open System Settings, and go to \"Privacy & Security\" > \"Local Network\". Make sure that QuickDrop is enabled." + } + }, + "other" : { + "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denegaste el acceso a la red local para QuickDrop. QuickDrop no puede funcionar sin este permiso. Abre Configuración del sistema y ve a \"Privacidad y seguridad\" > \"Red local\". Asegúrate de que QuickDrop esté activado." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denegaste 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." + } + } + } } }, "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "Denegaste 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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denegaste el acceso a la red local para QuickDrop. QuickDrop no puede funcionar sin este permiso. Abre Configuración del sistema y ve a \"Privacidad y seguridad\" > \"Red local\". Asegúrate de que QuickDrop esté activado." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Denegaste el acceso a la red local para QuickDrop. QuickDrop no puede funcionar sin este permiso. Haz clic aquí para conceder acceso a la red local." + } + } + } } }, "fi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Estit QuickDrop-sovelluksen paikallisverkon käytön. QuickDrop ei voi toimia ilman tätä lupaa. Napsauta tästä myöntääksesi pääsyn paikallisverkkoon." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estät paikallisverkon käytön QuickDropille. QuickDrop ei toimi ilman tätä lupaa. Avaa Järjestelmäasetukset ja siirry \"Yksityisyys ja turvallisuus\" > \"Paikallisverkko\". Varmista, että QuickDrop on käytössä." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Estät paikallisverkon käytön QuickDropille. QuickDrop ei toimi ilman tätä lupaa. Napsauta tästä myöntääksesi paikallisverkon käyttöoikeus." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez refusé l'accès au réseau local pour QuickDrop. QuickDrop ne peut pas fonctionner sans cette autorisation. Ouvrez les Réglages Système, puis allez dans « Confidentialité et sécurité » > « Réseau local ». Assurez-vous que QuickDrop est activé." + } + }, + "other" : { + "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 autoriser l'accès au réseau local." + } + } + } } }, "fr-CA" : { - "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez refusé l'accès au réseau local à QuickDrop. QuickDrop ne peut pas fonctionner sans cette permission. Ouvrez les Réglages du système, puis allez à « Confidentialité et sécurité » > « Réseau local ». Assurez-vous que QuickDrop est activé." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous avez refusé l'accès au réseau local à QuickDrop. QuickDrop ne peut pas fonctionner sans cette permission. Cliquez ici pour autoriser l'accès au réseau local." + } + } + } } }, "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "סירבת לגישה לרשת המקומית עבור QuickDrop. QuickDrop אינו יכול לעבוד ללא אישור זה. לחץ כאן כדי להעניק גישה לרשת המקומית." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "סירבת לגישה לרשת המקומית עבור QuickDrop. האפליקציה לא תעבוד בלי הרשאה זו. פתח את העדפות המערכת, עבור ל\"פרטיות ואבטחה\" > \"רשת מקומית\" וודא ש-QuickDrop מאופשר." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "סירבת לגישה לרשת המקומית עבור QuickDrop. האפליקציה לא תעבוד בלי הרשאה זו. לחץ כאן כדי לאשר גישה לרשת המקומית." + } + } + } } }, "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "आपने QuickDrop के लिए स्थानीय नेटवर्क एक्सेस से इनकार कर दिया है। इस अनुमति के बिना QuickDrop कार्य नहीं कर सकता। स्थानीय नेटवर्क एक्सेस देने के लिए यहां क्लिक करें।" + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने QuickDrop के लिए स्थानीय नेटवर्क एक्सेस अस्वीकार कर दिया। QuickDrop इस अनुमति के बिना काम नहीं कर सकता। सिस्टम सेटिंग्स खोलें, \"प्राइवेसी और सुरक्षा\" > \"स्थानीय नेटवर्क\" पर जाएँ। सुनिश्चित करें कि QuickDrop सक्षम है।" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "आपने QuickDrop के लिए स्थानीय नेटवर्क एक्सेस अस्वीकार कर दिया। QuickDrop इस अनुमति के बिना काम नहीं कर सकता। स्थानीय नेटवर्क एक्सेस देने के लिए यहाँ क्लिक करें।" + } + } + } } }, "hr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odbili ste lokalni pristup mreži za QuickDrop. QuickDrop ne može raditi bez ovog dopuštenja. Kliknite ovdje za dodjelu lokalnog mrežnog pristupa." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odbili ste pristup lokalnoj mreži za QuickDrop. QuickDrop ne može raditi bez ove dozvole. Otvorite Postavke sustava i idite na \"Privatnost i sigurnost\" > \"Lokalna mreža\". Provjerite je li QuickDrop omogućen." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odbili ste pristup lokalnoj mreži za QuickDrop. QuickDrop ne može raditi bez ove dozvole. Kliknite ovdje za omogućavanje pristupa lokalnoj mreži." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "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. Nyissa meg a Rendszerbeállításokat, majd menjen a „Adatvédelem és biztonság” > „Helyi hálózat” menüponthoz. Győződjön meg arról, hogy a QuickDrop engedélyezve van." + } + }, + "other" : { + "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ózat elérésének engedélyezéséhez." + } + } + } } }, "id" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda menolak akses jaringan lokal untuk QuickDrop. QuickDrop tidak dapat bekerja tanpa izin ini. Klik di sini untuk memberikan akses jaringan lokal." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda menolak akses jaringan lokal untuk QuickDrop. QuickDrop tidak dapat berfungsi tanpa izin ini. Buka Pengaturan Sistem, lalu ke \"Privasi & Keamanan\" > \"Jaringan Lokal\". Pastikan QuickDrop diaktifkan." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda menolak akses jaringan lokal untuk QuickDrop. QuickDrop tidak dapat berfungsi tanpa izin ini. Klik di sini untuk memberikan akses jaringan lokal." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai negato l'accesso alla rete locale a QuickDrop. QuickDrop non può funzionare senza questa autorizzazione. Apri le Impostazioni di Sistema e vai su \"Privacy e Sicurezza\" > \"Rete Locale\". Assicurati che QuickDrop sia abilitato." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hai negato l'accesso alla rete locale a QuickDrop. QuickDrop non può funzionare senza questa autorizzazione. Clicca qui per concedere l'accesso alla rete locale." + } + } + } } }, "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropのローカルネットワークアクセスが拒否されました。この権限がないとQuickDropは動作しません。ローカルネットワークアクセスを許可するにはここをクリックしてください。" + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDropへのローカルネットワークアクセスが拒否されました。この権限がないとQuickDropは動作しません。システム設定を開き、「プライバシーとセキュリティ」>「ローカルネットワーク」に進み、QuickDropが有効になっていることを確認してください。" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDropへのローカルネットワークアクセスが拒否されました。この権限がないとQuickDropは動作しません。アクセスを許可するにはここをクリックしてください。" + } + } + } } }, "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop에 대한 로컬 네트워크 액세스를 거부했습니다. 이 권한 없이는 QuickDrop이 작동할 수 없습니다. 로컬 네트워크 액세스를 허용하려면 여기를 클릭하세요." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop의 로컬 네트워크 접근 권한이 거부되었습니다. 이 권한 없이는 QuickDrop을 사용할 수 없습니다. 시스템 설정에서 '개인정보 보호 및 보안' > '로컬 네트워크'로 이동해 QuickDrop이 활성화되어 있는지 확인하세요." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop의 로컬 네트워크 접근 권한이 거부되었습니다. 이 권한 없이는 QuickDrop을 사용할 수 없습니다. 로컬 네트워크 접근을 허용하려면 여기를 클릭하세요." + } + } + } } }, "ms" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anda menolak akses rangkaian setempat untuk QuickDrop. QuickDrop tidak dapat berfungsi tanpa kebenaran ini. Klik di sini untuk memberikan akses rangkaian setempat." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menolak akses rangkaian setempat untuk QuickDrop. QuickDrop tidak dapat berfungsi tanpa kebenaran ini. Buka Tetapan Sistem dan pergi ke \"Privasi & Keselamatan\" > \"Rangkaian Setempat\". Pastikan QuickDrop diaktifkan." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Anda telah menolak akses rangkaian setempat untuk QuickDrop. QuickDrop tidak dapat berfungsi tanpa kebenaran ini. Klik di sini untuk benarkan akses rangkaian setempat." + } + } + } } }, "nb" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du nektet tilgang til lokalt nettverk for QuickDrop. QuickDrop kan ikke fungere uten denne tillatelsen. Klikk her for å gi tilgang til lokalt nettverk." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nektet QuickDrop tilgang til lokalt nettverk. QuickDrop kan ikke fungere uten denne tillatelsen. Åpne Systeminnstillinger og gå til «Personvern og sikkerhet» > «Lokalt nettverk». Sørg for at QuickDrop er aktivert." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nektet QuickDrop tilgang til lokalt nettverk. QuickDrop kan ikke fungere uten denne tillatelsen. Klikk her for å gi tilgang til lokalt nettverk." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt lokale netwerktoegang voor QuickDrop geweigerd. QuickDrop werkt niet zonder deze toestemming. Open Systeeminstellingen en ga naar \"Privacy & Beveiliging\" > \"Lokaal netwerk\". Zorg ervoor dat QuickDrop is ingeschakeld." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je hebt lokale netwerktoegang voor QuickDrop geweigerd. QuickDrop werkt niet zonder deze toestemming. Klik hier om toegang tot het lokale netwerk toe te staan." + } + } + } } }, "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odmówiłeś dostępu do lokalnej sieci dla QuickDrop. QuickDrop nie może działać bez tego uprawnienia. Kliknij tutaj, aby udzielić dostępu." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odmówiłeś dostępu QuickDrop do sieci lokalnej. QuickDrop nie może działać bez tego uprawnienia. Otwórz Ustawienia systemowe i przejdź do „Prywatność i bezpieczeństwo” > „Sieć lokalna”. Upewnij się, że QuickDrop jest włączony." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Odmówiłeś dostępu QuickDrop do sieci lokalnej. QuickDrop nie może działać bez tego uprawnienia. Kliknij tutaj, aby przyznać dostęp do sieci lokalnej." + } + } + } } }, "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Você negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem essa permissão. Abra as Configurações do Sistema e vá para \"Privacidade e Segurança\" > \"Rede Local\". Certifique-se de que o QuickDrop está ativado." + } + }, + "other" : { + "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." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem esta permissão. Abra as Definições do Sistema e vá a \"Privacidade e Segurança\" > \"Rede Local\". Certifique-se de que o QuickDrop está ativado." + } + }, + "other" : { + "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ă." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ai refuzat accesul la rețeaua locală pentru QuickDrop. QuickDrop nu poate funcționa fără această permisiune. Deschide Setările de sistem și mergi la \"Confidențialitate și securitate\" > \"Rețea locală\". Asigură-te că QuickDrop este activat." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ai refuzat accesul la rețeaua locală pentru QuickDrop. QuickDrop nu poate funcționa fără această permisiune. Apasă aici pentru a acorda acces la rețeaua locală." + } + } + } } }, "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы отклонили доступ QuickDrop к локальной сети. QuickDrop не может работать без этого разрешения. Нажмите здесь, чтобы предоставить доступ к локальной сети." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы отклонили доступ QuickDrop к локальной сети. Без этого разрешения QuickDrop не сможет работать. Откройте настройки системы и перейдите в «Конфиденциальность и безопасность» > «Локальная сеть». Убедитесь, что QuickDrop включён." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вы отклонили доступ QuickDrop к локальной сети. Без этого разрешения QuickDrop не сможет работать. Нажмите здесь, чтобы предоставить доступ к локальной сети." + } + } + } } }, "sv" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du nekade lokalen nätverksåtkomst för QuickDrop. QuickDrop kan inte fungera utan denna behörighet. Klicka här för att ge lokalen nätverksåtkomst." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nekat QuickDrop åtkomst till lokalt nätverk. QuickDrop fungerar inte utan denna behörighet. Öppna Systeminställningar och gå till \"Integritet & säkerhet\" > \"Lokalt nätverk\". Kontrollera att QuickDrop är aktiverat." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du har nekat QuickDrop åtkomst till lokalt nätverk. QuickDrop fungerar inte utan denna behörighet. Klicka här för att ge åtkomst till lokalt nätverk." + } + } + } } }, "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณปฏิเสธการเข้าถึงเครือข่ายท้องถิ่นสำหรับ QuickDrop. QuickDrop ไม่สามารถทำงานได้โดยปราศจากสิทธิ์นี้. คลิกที่นี่เพื่ออนุญาตการเข้าถึงเครือข่ายท้องถิ่น." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณได้ปฏิเสธการเข้าถึงเครือข่ายภายในสำหรับ QuickDrop ซึ่ง QuickDrop จำเป็นต้องใช้สิทธิ์นี้จึงจะทำงานได้ โปรดเปิดการตั้งค่าระบบ ไปที่ \"ความเป็นส่วนตัวและความปลอดภัย\" > \"เครือข่ายภายใน\" และตรวจสอบให้แน่ใจว่าเปิดใช้งาน QuickDrop แล้ว" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณได้ปฏิเสธการเข้าถึงเครือข่ายภายในสำหรับ QuickDrop ซึ่ง QuickDrop จำเป็นต้องใช้สิทธิ์นี้จึงจะทำงานได้ คลิกที่นี่เพื่อให้สิทธิ์เข้าถึงเครือข่ายภายใน" + } + } + } } }, "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop için yerel ağ erişimine izin vermediniz. QuickDrop bu izin olmadan çalışmaz. Yerel ağ erişimine izin vermek için buraya tıklayın." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop için yerel ağa erişimi reddettiniz. Bu izin olmadan QuickDrop çalışamaz. Sistem Ayarlarını açın, ardından \"Gizlilik ve Güvenlik\" > \"Yerel Ağ\" bölümüne gidin. QuickDrop'un etkin olduğundan emin olun." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop için yerel ağa erişimi reddettiniz. Bu izin olmadan QuickDrop çalışamaz. Yerel ağa erişim izni vermek için buraya tıklayın." + } + } + } } }, "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви відхилили доступ до локальної мережі для QuickDrop. QuickDrop не може працювати без цього дозволу. Натисніть тут, щоб надати доступ до локальної мережі." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви відмовили у доступі до локальної мережі для QuickDrop. QuickDrop не може працювати без цього дозволу. Відкрийте «Системні налаштування» та перейдіть у «Конфіденційність і безпека» > «Локальна мережа». Переконайтеся, що QuickDrop увімкнено." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ви відмовили у доступі до локальної мережі для QuickDrop. QuickDrop не може працювати без цього дозволу. Натисніть тут, щоб надати доступ до локальної мережі." + } + } + } } }, "vi" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bạn đã từ chối quyền truy cập mạng cục bộ cho QuickDrop. QuickDrop không thể hoạt động nếu không có quyền này. Nhấp vào đây để cấp quyền." + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã từ chối quyền truy cập mạng cục bộ cho QuickDrop. QuickDrop không thể hoạt động nếu không có quyền này. Mở Cài đặt Hệ thống, vào \"Quyền riêng tư & Bảo mật\" > \"Mạng cục bộ\". Đảm bảo rằng QuickDrop đã được bật." + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bạn đã từ chối quyền truy cập mạng cục bộ cho QuickDrop. QuickDrop không thể hoạt động nếu không có quyền này. Nhấn vào đây để cho phép truy cập mạng cục bộ." + } + } + } } }, "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已拒绝QuickDrop的本地网络访问权限。QuickDrop无法在没有该权限的情况下工作。点击此处授予本地网络访问权限。" + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已拒绝QuickDrop的本地网络访问权限。没有此权限,QuickDrop无法运行。请打开系统设置,进入“隐私与安全”>“本地网络”,确保QuickDrop已启用。" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已拒绝QuickDrop的本地网络访问权限。没有此权限,QuickDrop无法运行。点击此处授予本地网络访问权限。" + } + } + } } }, "zh-Hant" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已拒絕為 QuickDrop 授予本地網路訪問權限。QuickDrop 無法在沒有此許可的情況下運作。點擊這裡授予本地網路訪問權限。" + "variations" : { + "device" : { + "mac" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已拒絕 QuickDrop 的本地網路存取權限。沒有此權限,QuickDrop 將無法運作。請開啟「系統設定」,前往「隱私權與安全性」>「本地網路」,確認已啟用 QuickDrop。" + } + }, + "other" : { + "stringUnit" : { + "state" : "translated", + "value" : "您已拒絕 QuickDrop 的本地網路存取權限。沒有此權限,QuickDrop 將無法運作。點擊此處以授予本地網路存取權限。" + } + } + } } } } diff --git a/QuickDrop/View/TutorialView.swift b/QuickDrop/View/TutorialView.swift index 06eca2b..057b92e 100644 --- a/QuickDrop/View/TutorialView.swift +++ b/QuickDrop/View/TutorialView.swift @@ -5,14 +5,13 @@ // Created by Leon Böttger on 05.03.25. // -import SwiftUI +import AppKit import LUI +import SwiftUI struct TutorialView: View { - let title: String - let text: String - let showsLicense: Bool + let tab: Tab let openPlus: () -> Void @State private var licenseWindow: NSWindow? @@ -20,15 +19,16 @@ struct TutorialView: View { var body: some View { - LargeAppIconView(title: title) { + LargeAppIconView(title: tab.title) { VStack { - Text(text.localized()) + + Text(tab.text.localized()) .multilineTextAlignment(.leading) .fixedSize(horizontal: false, vertical: true) .padding() .frame(width: 550) - if showsLicense { + if tab == .receive { HStack(spacing: 30) { Button { @@ -67,12 +67,102 @@ struct TutorialView: View { } .padding() } + else if tab == .send { + EnableExtensionView() + } } } } } +struct EnableExtensionView: View { + @State private var showSharePicker = false + @State private var shareItems: [Any] = [] + + @State private var isExtensionEnabled = false + @State private var showSuccessCheckmark = false + @State private var animateCheckmark = false + + private let timer = Timer.publish(every: 1.0, on: .main, in: .common).autoconnect() + + init() { + _isExtensionEnabled = State(initialValue: Self.isEnabled()) + } + + var body: some View { + if !isExtensionEnabled { + Button("EnableQuickDropExtension".localized()) { + shareItems = [ + "EnableQuickDropExtensionDescription".localized() + ] + showSharePicker = true + } + .background( + SharingPickerPresenter( + isPresented: $showSharePicker, + sharingItems: shareItems + ) + ) + .padding() + .onReceive(timer) { _ in + updateEnabledState() + } + } + else if showSuccessCheckmark { + Image(systemName: "checkmark.circle.fill") + .font(.system(size: 20)) + .foregroundColor(.green) + .background(Circle().foregroundColor(.white).frame(width: 18, height: 18)) + .scaleEffect(animateCheckmark ? 1.0 : 0.5) + .animation(.easeOut(duration: 0.4), value: animateCheckmark) + .onAppear { + animateCheckmark = true + } + .padding() + } + } + + private func updateEnabledState() { + let enabled = Self.isEnabled() + if enabled != isExtensionEnabled { + withAnimation(.smooth) { + isExtensionEnabled = enabled + + if enabled { + showSuccessCheckmark = true + } + } + } + } + + private static func isEnabled() -> Bool { + NSSharingService( + named: NSSharingService.Name("com.leonboettger.neardrop.ShareExtension") + ) != nil + } +} + + +private struct SharingPickerPresenter: NSViewRepresentable { + @Binding var isPresented: Bool + let sharingItems: [Any] + + func makeNSView(context: Context) -> NSView { NSView() } + + func updateNSView(_ nsView: NSView, context: Context) { + guard isPresented else { return } + + let picker = NSSharingServicePicker(items: sharingItems) + + DispatchQueue.main.async { + picker.show(relativeTo: nsView.bounds, of: nsView, preferredEdge: .minY) + isPresented = false + } + } +} + + struct LargeAppIconView: View { let title: String diff --git a/QuickDrop/View/WelcomeScreen.swift b/QuickDrop/View/WelcomeScreen.swift index ee2b390..d7b1c3e 100644 --- a/QuickDrop/View/WelcomeScreen.swift +++ b/QuickDrop/View/WelcomeScreen.swift @@ -21,14 +21,22 @@ struct WelcomeScreen: View { let openCableTransmissionView: () -> Void let checkForNetworkIssues: () -> Void - @State private var selection: Tabs? = Tabs.receive + @State private var selection: Tab = Tab.receive var body: some View { HStack(spacing: 0) { - List(selection: $selection) { - ForEach(Tabs.allCases.filter({$0 != .settings }), id: \.self) { tab in - Label(tab.title, systemImage: tab.systemImage) + + let listBinding = Binding( + get: { selection }, + set: { newValue in + selection = newValue ?? .receive + } + ) + + List(selection: listBinding) { + ForEach(Tab.allCases.filter({$0 != .settings }), id: \.self) { tab in + Label(tab.sidebarTitle, systemImage: tab.systemImage) .tag(tab) .frame(height: 30) } @@ -53,8 +61,8 @@ struct WelcomeScreen: View { Divider() - Label(Tabs.settings.title, systemImage: Tabs.settings.systemImage) - .tag(Tabs.settings) + Label(Tab.settings.sidebarTitle, systemImage: Tab.settings.systemImage) + .tag(Tab.settings) .frame(height: 30) } .minimumScaleFactor(0.5) @@ -67,22 +75,18 @@ struct WelcomeScreen: View { ZStack { Color.defaultBackground.edgesIgnoringSafeArea(.vertical) - - switch selection { - case .receive: - TutorialView(title: "ReceiveFiles", text: "UserManualDescription", showsLicense: true, openPlus: openPlusScreen) - - case .send: - TutorialView(title: "SendFiles", text: "SendFilesDescription", showsLicense: false, openPlus: openPlusScreen) - - case .troubleshooting: - TutorialView(title: "Troubleshooting", text: "TroubleshootingDescription", showsLicense: false, openPlus: openPlusScreen) - .onAppear { - checkForNetworkIssues() - } - default: - SettingsView() - } + + if selection == .settings { + SettingsView() + } + else { + TutorialView(tab: selection, openPlus: openPlusScreen) + .onAppear { + if selection == .troubleshooting { + checkForNetworkIssues() + } + } + } } } .onDrop(of: [.fileURL], isTargeted: nil) { providers in @@ -171,13 +175,13 @@ struct ExternalLinkLabel: View { } -enum Tabs: CaseIterable { +enum Tab: CaseIterable { case receive case send case troubleshooting case settings - var title: String { + var sidebarTitle: String { switch self { case .receive: return "ReceiveFiles".localized() @@ -190,6 +194,28 @@ enum Tabs: CaseIterable { } } + var title: String { + switch self { + case .troubleshooting: + return "Troubleshooting" + default: + return sidebarTitle + } + } + + var text: String { + switch self { + case .receive: + "UserManualDescription" + case .send: + "SendFilesDescription" + case .troubleshooting: + "TroubleshootingDescription" + case .settings: + "" + } + } + var systemImage: String { switch self { case .receive: diff --git a/QuickDropiOS/View/ContentView.swift b/QuickDropiOS/View/ContentView.swift index a842cc5..c8a8038 100644 --- a/QuickDropiOS/View/ContentView.swift +++ b/QuickDropiOS/View/ContentView.swift @@ -95,14 +95,7 @@ struct DeviceListView: View { } if !nearbyConnectionManager.hasLocalNetworkPermission { - CardView(backgroundColor: .red, title: "NoNetworkAccess", titleSymbol: "network.slash") { - LUIText("NoLocalNetworkAccessDescription", color: .white) - .frame(maxWidth: .infinity, alignment: .leading) - } - .padding(.bottom, 10) - .onTapGesture { - openAppSettings() - } + NoLocalNetworkAccessAlertView() } var availableDevices: [RemoteDeviceInfo] { diff --git a/QuickDropiOS/View/FilePicker.swift b/QuickDropiOS/View/FilePicker.swift index 03b2230..77fac62 100644 --- a/QuickDropiOS/View/FilePicker.swift +++ b/QuickDropiOS/View/FilePicker.swift @@ -49,7 +49,6 @@ struct SendPickerButton: View { onPrepare?() updatedPhotoSelection(content: newItems) } - // File picker .fileImporter(isPresented: $showFilePicker, allowedContentTypes: [.item, .folder], // any file allowsMultipleSelection: true) { result in diff --git a/QuickDropiOS/View/NoLocalNetworkAccessAlertView.swift b/QuickDropiOS/View/NoLocalNetworkAccessAlertView.swift new file mode 100644 index 0000000..79de3e0 --- /dev/null +++ b/QuickDropiOS/View/NoLocalNetworkAccessAlertView.swift @@ -0,0 +1,24 @@ +// +// NoLocalNetworkAccessAlertView.swift +// QuickDrop +// +// Created by Leon Böttger on 26.12.25. +// + +import LUI +import SwiftUI + +struct NoLocalNetworkAccessAlertView: View { + var body: some View { + CardView(backgroundColor: .red, title: "NoNetworkAccess", titleSymbol: "network.slash") { + LUIText("NoLocalNetworkAccessDescription", color: .white) + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding(.bottom, 10) + .onTapGesture { + #if os(iOS) + openAppSettings() + #endif + } + } +}