diff options
Diffstat (limited to 'Sources/WireGuardApp/UI/iOS/QuickActionItem.swift')
-rw-r--r-- | Sources/WireGuardApp/UI/iOS/QuickActionItem.swift | 25 |
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) } + } +} |