aboutsummaryrefslogtreecommitdiffstats
path: root/Sources/WireGuardApp/UI/iOS/QuickActionItem.swift
blob: cddaf23670988b3eba2a5fb3f5e72ea798f7a0f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
// Copyright © 2018-2020 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) }
    }
}