aboutsummaryrefslogtreecommitdiffstats
path: root/Sources/WireGuardApp/UI/iOS/QuickActionItem.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sources/WireGuardApp/UI/iOS/QuickActionItem.swift')
-rw-r--r--Sources/WireGuardApp/UI/iOS/QuickActionItem.swift25
1 files changed, 25 insertions, 0 deletions
diff --git a/Sources/WireGuardApp/UI/iOS/QuickActionItem.swift b/Sources/WireGuardApp/UI/iOS/QuickActionItem.swift
new file mode 100644
index 0000000..587e31f
--- /dev/null
+++ b/Sources/WireGuardApp/UI/iOS/QuickActionItem.swift
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: MIT
+// Copyright © 2018-2023 WireGuard LLC. All Rights Reserved.
+
+import UIKit
+
+class QuickActionItem: UIApplicationShortcutItem {
+ static let type = "WireGuardTunnelActivateAndShow"
+
+ init(tunnelName: String) {
+ super.init(type: QuickActionItem.type, localizedTitle: tunnelName, localizedSubtitle: nil, icon: nil, userInfo: nil)
+ }
+
+ static func createItems(allTunnelNames: [String]) -> [QuickActionItem] {
+ let numberOfItems = 10
+ // Currently, only 4 items shown by iOS, but that can increase in the future.
+ // iOS will discard additional items we give it.
+ var tunnelNames = RecentTunnelsTracker.recentlyActivatedTunnelNames(limit: numberOfItems)
+ let numberOfSlotsRemaining = numberOfItems - tunnelNames.count
+ if numberOfSlotsRemaining > 0 {
+ let moreTunnels = allTunnelNames.filter { !tunnelNames.contains($0) }.prefix(numberOfSlotsRemaining)
+ tunnelNames.append(contentsOf: moreTunnels)
+ }
+ return tunnelNames.map { QuickActionItem(tunnelName: $0) }
+ }
+}