mobile-ios/CovidSafe/InfoViewController.swift

145 lines
5.9 KiB
Swift
Raw Normal View History

2020-05-08 07:49:14 +00:00
import UIKit
import CoreData
import KeychainSwift
final class InfoViewController: UIViewController {
@IBOutlet weak var identifierLabel: UILabel!
@IBOutlet weak var devicesEncounteredLabel: UILabel!
@IBOutlet weak var clearLogsButton: UIButton!
@IBOutlet weak var advertisementSwitch: UISwitch!
@IBOutlet weak var scanningSwitch: UISwitch!
@IBOutlet weak var centralStateLabel: UILabel!
@IBOutlet weak var obtainBluetoothStateButton: UIButton!
@IBOutlet weak var peripheralStateLabel: UILabel!
@IBOutlet weak var discoveredPeripheralsCountLabel: UILabel!
2020-07-21 05:42:48 +00:00
@IBOutlet weak var silentNotificationsCountLabel: UILabel!
@IBOutlet weak var apnTokenLabel: UILabel!
2020-05-08 07:49:14 +00:00
private var devicesEncounteredCount: Int?
@IBOutlet weak var versionNumLabel: UILabel!
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
fetchDevicesEncounteredCount()
self.identifierLabel.text = DeviceIdentifier.getID()
self.versionNumLabel.text = "\(PlistHelper.getvalueFromInfoPlist(withKey: kCFBundleVersionKey as String) ?? "no commit hash")"
}
override func viewDidLoad() {
super.viewDidLoad()
advertisementSwitch.addTarget(self, action: #selector(self.advertisementSwitchChanged), for: UIControl.Event.valueChanged)
scanningSwitch.addTarget(self, action: #selector(self.scanningSwitchChanged), for: UIControl.Event.valueChanged)
clearLogsButton.addTarget(self, action:#selector(self.clearLogsButtonClicked), for: .touchUpInside)
2020-07-21 05:42:48 +00:00
silentNotificationsCountLabel.text = "\(UserDefaults.standard.integer(forKey: "debugSilentNotificationCount"))"
apnTokenLabel.text = UserDefaults.standard.string(forKey: "deviceTokenForAPN")
2020-05-08 07:49:14 +00:00
}
@IBAction func logoutBtn(_ sender: UIButton) {
do {
// do a logout if we still leave this button in
performSegue(withIdentifier: "logoutToInitialVCSegue", sender: nil)
} catch {
print("Unable to log out")
}
}
@IBAction func requestUploadOTP(_ sender: UIButton) {
let keychain = KeychainSwift()
guard let jwt = keychain.get("JWT_TOKEN") else {
DLog("Error trying to upload when not logged in")
return
}
InitiateUploadAPI.requestUploadOTP(session: jwt) { (success, error) in
DLog("success? \(success) error \(String(describing: error))")
}
}
func fetchDevicesEncounteredCount() {
2020-05-26 07:13:26 +00:00
guard let persistentContainer =
EncounterDB.shared.persistentContainer else {
return
2020-05-08 07:49:14 +00:00
}
2020-05-26 07:13:26 +00:00
let managedContext = persistentContainer.viewContext
2020-05-08 07:49:14 +00:00
let fetchRequest = Encounter.fetchRequestForRecords()
do {
let devicesEncountered = try managedContext.fetch(fetchRequest)
2020-05-26 07:13:26 +00:00
let uniqueIDs = Set(devicesEncountered.map { $0.timestamp })
2020-05-08 07:49:14 +00:00
self.devicesEncounteredLabel.text = String(uniqueIDs.count)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
@objc
func advertisementSwitchChanged(mySwitch: UISwitch) {
BluetraceManager.shared.toggleAdvertisement(mySwitch.isOn)
}
@objc
func scanningSwitchChanged(mySwitch: UISwitch) {
BluetraceManager.shared.toggleScanning(mySwitch.isOn)
}
2020-05-26 07:13:26 +00:00
@IBAction func dumpDBpressed(_ sender: UIButton) {
var activityItems: [Any] = []
let localStoreUrl = CovidPersistentContainer.defaultDirectoryURL().appendingPathComponent("tracer", isDirectory: false).appendingPathExtension("sqlite")
activityItems.append(localStoreUrl)
let localStoreUrlshm = CovidPersistentContainer.defaultDirectoryURL().appendingPathComponent("tracer", isDirectory: false).appendingPathExtension("sqlite-shm")
if FileManager.default.fileExists(atPath: localStoreUrlshm.path) {
activityItems.append(localStoreUrlshm)
}
let localStoreUrlwal = CovidPersistentContainer.defaultDirectoryURL().appendingPathComponent("tracer", isDirectory: false).appendingPathExtension("sqlite-wal")
if FileManager.default.fileExists(atPath: localStoreUrlwal.path) {
activityItems.append(localStoreUrlwal)
}
let activity = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
present(activity, animated: true, completion: nil)
}
2020-05-08 07:49:14 +00:00
@objc
func clearLogsButtonClicked() {
2020-08-18 00:52:17 +00:00
guard let persistentContainer =
2020-05-26 07:13:26 +00:00
EncounterDB.shared.persistentContainer else {
return
2020-05-08 07:49:14 +00:00
}
2020-05-26 07:13:26 +00:00
let managedContext = persistentContainer.viewContext
2020-05-08 07:49:14 +00:00
let fetchRequest = NSFetchRequest<Encounter>(entityName: "Encounter")
fetchRequest.includesPropertyValues = false
do {
let encounters = try managedContext.fetch(fetchRequest)
for encounter in encounters {
managedContext.delete(encounter)
}
try managedContext.save()
} catch {
print("Could not perform delete. \(error)")
}
2020-07-21 05:42:48 +00:00
2020-08-18 00:52:17 +00:00
guard let logPersistentContainer =
BLELogDB.shared.persistentContainer else {
return
}
let logManagedContext = logPersistentContainer.viewContext
2020-07-21 05:42:48 +00:00
let logFetchRequest = NSFetchRequest<BLELog>(entityName: "BLELog")
logFetchRequest.includesPropertyValues = false
do {
2020-08-18 00:52:17 +00:00
let logs = try logManagedContext.fetch(logFetchRequest)
2020-07-21 05:42:48 +00:00
for bleLog in logs {
2020-08-18 00:52:17 +00:00
logManagedContext.delete(bleLog)
2020-07-21 05:42:48 +00:00
}
2020-08-18 00:52:17 +00:00
try logManagedContext.save()
2020-07-21 05:42:48 +00:00
} catch {
print("Could not perform delete. \(error)")
}
}
@IBAction func resetSilentNotificationsCounter(_ sender: Any) {
UserDefaults.standard.set(0, forKey: "debugSilentNotificationCount")
silentNotificationsCountLabel.text = "0"
2020-05-08 07:49:14 +00:00
}
}