Signal-iOS/Signal/src/ViewControllers/ProxyLinkSheetViewController.swift
Jordan Rose b0de59f2e2 Remove required from every init that is not dynamically dispatched
This included:
- Removing unavailable inits wholesale if no longer `required`
- Marking a few classes `final` so they could continue using
  `Self(...)` rather than `OWSWhatever(...)`
2024-04-01 15:27:20 -07:00

119 lines
4.9 KiB
Swift

//
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalServiceKit
import SignalUI
class ProxyLinkSheetViewController: OWSTableSheetViewController {
let url: URL
init?(url: URL) {
guard SignalProxy.isValidProxyLink(url) else { return nil }
self.url = url
super.init()
}
override func updateTableContents(shouldReload: Bool = true) {
let contents = OWSTableContents()
defer { tableViewController.setContents(contents, shouldReload: shouldReload) }
let proxyHost = url.fragment!
let avatarSection = OWSTableSection()
avatarSection.hasBackground = false
contents.add(avatarSection)
avatarSection.add(.init(customCellBlock: {
let cell = OWSTableItem.newCell()
cell.selectionStyle = .none
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.image = UIImage(named: "proxy_avatar")
imageView.autoSetDimension(.height, toSize: 96)
let titleLabel = UILabel()
titleLabel.font = .dynamicTypeHeadline
titleLabel.text = "Proxy Server"
titleLabel.textColor = Theme.primaryTextColor
titleLabel.textAlignment = .center
let stackView = UIStackView(arrangedSubviews: [imageView, titleLabel])
stackView.axis = .vertical
stackView.spacing = 12
stackView.alignment = .center
cell.contentView.addSubview(stackView)
stackView.autoPinEdgesToSuperviewMargins()
return cell
}))
let addressSection = OWSTableSection()
addressSection.hasBackground = false
addressSection.headerTitle = OWSLocalizedString("PROXY_ADDRESS", comment: "The title for the address of the signal proxy")
contents.add(addressSection)
addressSection.add(.label(withText: proxyHost))
let actionsSection = OWSTableSection()
actionsSection.hasBackground = false
actionsSection.headerTitle = OWSLocalizedString("DO_YOU_WANT_TO_USE_PROXY", comment: "Title for the proxy confirmation")
contents.add(actionsSection)
actionsSection.add(.init(customCellBlock: { [weak self] in
let cell = OWSTableItem.newCell()
cell.selectionStyle = .none
guard let self = self else { return cell }
let stackView = UIStackView(arrangedSubviews: [
self.button(
title: CommonStrings.cancelButton,
titleColor: Theme.primaryTextColor,
touchHandler: { [weak self] in
self?.dismiss(animated: true)
}),
self.button(
title: OWSLocalizedString("USE_PROXY_BUTTON", comment: "Button to activate the signal proxy"),
titleColor: .ows_accentBlue,
touchHandler: { [weak self] in
Self.databaseStorage.write {
SignalProxy.setProxyHost(host: proxyHost, useProxy: true, transaction: $0)
}
let presentingVC = self?.presentingViewController
ProxyConnectionChecker.checkConnectionAndNotify { connected in
if connected {
presentingVC?.presentToast(text: OWSLocalizedString("PROXY_CONNECTED_SUCCESSFULLY", comment: "The provided proxy connected successfully"))
} else {
presentingVC?.presentToast(text: OWSLocalizedString("PROXY_FAILED_TO_CONNECT", comment: "The provided proxy couldn't connect"))
Self.databaseStorage.write { transaction in
SignalProxy.setProxyHost(host: proxyHost, useProxy: false, transaction: transaction)
}
}
}
self?.dismiss(animated: true)
})
])
stackView.axis = .horizontal
stackView.spacing = 12
stackView.distribution = .fillEqually
cell.contentView.addSubview(stackView)
stackView.autoPinEdgesToSuperviewMargins()
return cell
}))
}
private func button(title: String, titleColor: UIColor, touchHandler: @escaping () -> Void) -> OWSFlatButton {
let flatButton = OWSFlatButton()
flatButton.setTitle(title: title, font: UIFont.dynamicTypeBodyClamped.semibold(), titleColor: titleColor)
flatButton.setBackgroundColors(upColor: tableViewController.cellBackgroundColor)
flatButton.setPressedBlock(touchHandler)
flatButton.useDefaultCornerRadius()
flatButton.autoSetDimension(.height, toSize: 48)
return flatButton
}
}