passepartout-apple/Passepartout-iOS/Global/Theme+Cells.swift

167 lines
5.5 KiB
Swift
Raw Normal View History

2018-10-11 07:13:19 +00:00
//
// Theme+Cells.swift
// Passepartout-iOS
//
// Created by Davide De Rosa on 6/25/18.
2019-03-09 10:44:44 +00:00
// Copyright (c) 2019 Davide De Rosa. All rights reserved.
2018-10-11 07:13:19 +00:00
//
2018-11-03 21:33:30 +00:00
// https://github.com/passepartoutvpn
2018-10-11 07:13:19 +00:00
//
// This file is part of Passepartout.
//
// Passepartout is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Passepartout is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Passepartout. If not, see <http://www.gnu.org/licenses/>.
//
import UIKit
import TunnelKit
import PassepartoutCore
import Convenience
2018-10-11 07:13:19 +00:00
extension UITableViewCell {
func applyChecked(_ checked: Bool, _ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
accessoryType = checked ? .checkmark : .none
tintColor = theme.palette.accessory
}
}
extension SingleOptionViewController {
func applyTint(_ theme: Theme) {
configurationBlock = { (cell, _) in
cell.tintColor = theme.palette.accessory
}
}
}
2018-10-11 07:13:19 +00:00
extension DestructiveTableViewCell {
func apply(_ theme: Theme) {
labelCaption?.font = .preferredFont(forTextStyle: .body)
captionColor = theme.palette.destructive
2018-10-11 07:13:19 +00:00
accessoryType = .none
selectionStyle = .default
}
}
extension FieldTableViewCell {
func apply(_ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
field.font = .preferredFont(forTextStyle: .body)
captionColor = theme.palette.primaryText
2018-10-11 07:13:19 +00:00
}
}
extension SettingTableViewCell {
func apply(_ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
detailTextLabel?.font = .preferredFont(forTextStyle: .body)
leftTextColor = theme.palette.primaryText
rightTextColor = theme.palette.secondaryText
2018-10-11 07:13:19 +00:00
}
}
extension ToggleTableViewCell {
func apply(_ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
captionColor = theme.palette.primaryText
2018-10-11 07:13:19 +00:00
}
}
2019-04-08 19:10:28 +00:00
extension ActivityTableViewCell {
func apply(_ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
2019-04-08 19:10:28 +00:00
textLabel?.text = nil
detailTextLabel?.text = nil
}
}
2018-10-11 07:13:19 +00:00
extension SettingTableViewCell {
func applyAction(_ theme: Theme) {
textLabel?.font = .preferredFont(forTextStyle: .body)
detailTextLabel?.font = .preferredFont(forTextStyle: .body)
leftTextColor = theme.palette.action
2018-10-11 07:13:19 +00:00
rightTextColor = nil
accessoryType = .none
}
func applyVPN(_ theme: Theme, with vpnStatus: VPNStatus?, error: OpenVPNTunnelProvider.ProviderError?) {
textLabel?.font = .preferredFont(forTextStyle: .body)
detailTextLabel?.font = .preferredFont(forTextStyle: .body)
leftTextColor = theme.palette.primaryText
2018-10-11 07:13:19 +00:00
guard let vpnStatus = vpnStatus else {
rightText = L10n.Core.Vpn.disabled
rightTextColor = theme.palette.secondaryText
2018-10-11 07:13:19 +00:00
return
}
switch vpnStatus {
case .connecting:
rightText = L10n.Core.Vpn.connecting
rightTextColor = theme.palette.indeterminate
2018-10-11 07:13:19 +00:00
case .connected:
rightText = L10n.Core.Vpn.active
rightTextColor = theme.palette.on
2018-10-11 07:13:19 +00:00
case .disconnecting, .disconnected:
var disconnectionReason: String?
if let error = error {
switch error {
case .socketActivity, .timeout:
disconnectionReason = L10n.Core.Vpn.Errors.timeout
case .dnsFailure:
disconnectionReason = L10n.Core.Vpn.Errors.dns
case .tlsInitialization, .tlsServerVerification, .tlsHandshake:
disconnectionReason = L10n.Core.Vpn.Errors.tls
case .authentication:
disconnectionReason = L10n.Core.Vpn.Errors.auth
case .encryptionInitialization, .encryptionData:
disconnectionReason = L10n.Core.Vpn.Errors.encryption
2019-06-28 08:23:52 +00:00
case .serverCompression, .lzo:
disconnectionReason = L10n.Core.Vpn.Errors.compression
case .networkChanged:
disconnectionReason = L10n.Core.Vpn.Errors.network
2019-04-19 07:48:24 +00:00
case .routing:
disconnectionReason = L10n.Core.Vpn.Errors.routing
2019-04-19 07:48:24 +00:00
2019-05-11 15:43:30 +00:00
case .gatewayUnattainable:
disconnectionReason = L10n.Core.Vpn.Errors.gateway
2019-05-11 15:43:30 +00:00
default:
break
}
}
switch vpnStatus {
case .disconnecting:
rightText = disconnectionReason ?? L10n.Core.Vpn.disconnecting
rightTextColor = theme.palette.indeterminate
case .disconnected:
rightText = disconnectionReason ?? L10n.Core.Vpn.inactive
rightTextColor = theme.palette.off
default:
break
}
2018-10-11 07:13:19 +00:00
}
}
}