BlueWallet/ios/BlueWalletWatch Extension/ReceiveInterfaceController.swift

105 lines
3.5 KiB
Swift
Raw Normal View History

2019-05-02 16:33:03 -04:00
//
// ReceiveInterfaceController.swift
// BlueWalletWatch Extension
//
// Created by Marcos Rodriguez on 3/12/19.
2024-01-25 00:39:01 -04:00
2024-01-25 09:51:40 -04:00
import WatchKit
import WatchConnectivity
import Foundation
import EFQRCode
2019-05-02 16:33:03 -04:00
class ReceiveInterfaceController: WKInterfaceController {
2024-01-25 09:51:40 -04:00
static let identifier = "ReceiveInterfaceController"
private var wallet: Wallet?
2024-06-15 13:05:54 -04:00
private var receiveMethod: ReceiveMethod = .Onchain
private var interfaceMode: ReceiveInterfaceMode = .Address
var receiveType: ReceiveType = .Address
2024-01-25 09:51:40 -04:00
@IBOutlet weak var addressLabel: WKInterfaceLabel!
@IBOutlet weak var loadingIndicator: WKInterfaceGroup!
@IBOutlet weak var imageInterface: WKInterfaceImage!
private let userActivity: NSUserActivity = NSUserActivity(activityType: HandoffIdentifier.ReceiveOnchain.rawValue)
override func willActivate() {
super.willActivate()
userActivity.title = HandOffTitle.ReceiveOnchain.rawValue
userActivity.requiredUserInfoKeys = [HandOffUserInfoKey.ReceiveOnchain.rawValue]
userActivity.isEligibleForHandoff = true
update(userActivity)
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00
override func awake(withContext context: Any?) {
super.awake(withContext: context)
2024-06-15 13:05:54 -04:00
guard let passedContext = context as? (Int, ReceiveMethod, ReceiveType) else {
2024-01-25 09:51:40 -04:00
pop()
return
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00
let wallet = WatchDataSource.shared.wallets[passedContext.0]
self.wallet = wallet
receiveMethod = passedContext.1
2024-06-15 13:05:54 -04:00
receiveType = passedContext.2
2024-01-25 09:51:40 -04:00
setupView()
}
private func setupView() {
if receiveMethod == .CreateInvoice && (wallet?.type == .lightningCustodianWallet) {
presentController(withName: SpecifyInterfaceController.identifier, context: wallet?.id)
2024-01-25 09:51:40 -04:00
} else {
setupQRCode()
setupMenuItems()
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00
}
private func setupQRCode() {
2024-06-15 13:05:54 -04:00
guard let address = receiveType == .Address ? wallet?.receiveAddress : wallet?.paymentCode else { return }
2024-01-25 09:51:40 -04:00
addressLabel.setText(address)
generateQRCode(from: address)
}
private func generateQRCode(from content: String) {
DispatchQueue.global(qos: .userInteractive).async {
guard let cgImage = EFQRCode.generate(for: content) else { return }
DispatchQueue.main.async {
let image = UIImage(cgImage: cgImage)
self.imageInterface.setImage(image)
self.loadingIndicator.setHidden(true)
self.imageInterface.setHidden(false)
}
2019-05-02 16:33:03 -04:00
}
}
2024-01-25 09:51:40 -04:00
private func setupMenuItems() {
clearAllMenuItems()
addMenuItem(with: .shuffle, title: "Toggle View", action: #selector(toggleViewButtonPressed))
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00
@IBAction @objc func toggleViewButtonPressed() {
interfaceMode = interfaceMode == .QRCode ? .Address : .QRCode
updateView()
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00
private func updateView() {
addressLabel.setHidden(interfaceMode != .Address)
imageInterface.setHidden(interfaceMode != .QRCode)
}
override func didAppear() {
super.didAppear()
if isCreatingInvoice() {
presentController(withName: SpecifyInterfaceController.identifier, context: wallet?.id)
2020-08-18 22:25:59 -04:00
}
}
2024-01-25 09:51:40 -04:00
private func isCreatingInvoice() -> Bool {
return receiveMethod == .CreateInvoice && (wallet?.type == .lightningCustodianWallet)
2024-01-25 09:51:40 -04:00
}
override func didDeactivate() {
super.didDeactivate()
NotificationCenter.default.removeObserver(self)
userActivity.invalidate()
}
2019-05-02 16:33:03 -04:00
}
2024-01-25 09:51:40 -04:00