From f51e41efab301e036d17160b9cf9aed11d649b0a Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 19 Sep 2019 22:20:10 -0700 Subject: [PATCH] Hides Settings Debug section behind swipe gesture --- AltStore/AppDelegate.swift | 4 ++ .../Extensions/UserDefaults+AltStore.swift | 1 + .../Settings/SettingsViewController.swift | 49 +++++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/AltStore/AppDelegate.swift b/AltStore/AppDelegate.swift index 39142f9c..ba3d8944 100644 --- a/AltStore/AppDelegate.swift +++ b/AltStore/AppDelegate.swift @@ -78,6 +78,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate { UserDefaults.standard.preferredServerID = Bundle.main.object(forInfoDictionaryKey: Bundle.Info.serverID) as? String + #if DEBUG || BETA + UserDefaults.standard.isDebugModeEnabled = true + #endif + self.prepareForBackgroundFetch() return true diff --git a/AltStore/Extensions/UserDefaults+AltStore.swift b/AltStore/Extensions/UserDefaults+AltStore.swift index a17637f4..3f940679 100644 --- a/AltStore/Extensions/UserDefaults+AltStore.swift +++ b/AltStore/Extensions/UserDefaults+AltStore.swift @@ -17,6 +17,7 @@ extension UserDefaults @NSManaged var preferredServerID: String? @NSManaged var isBackgroundRefreshEnabled: Bool + @NSManaged var isDebugModeEnabled: Bool func registerDefaults() { diff --git a/AltStore/Settings/SettingsViewController.swift b/AltStore/Settings/SettingsViewController.swift index d4085012..b8e5c634 100644 --- a/AltStore/Settings/SettingsViewController.swift +++ b/AltStore/Settings/SettingsViewController.swift @@ -43,6 +43,9 @@ class SettingsViewController: UITableViewController private var prototypeHeaderFooterView: SettingsHeaderFooterView! + private var debugGestureCounter = 0 + private weak var debugGestureTimer: Timer? + @IBOutlet private var accountNameLabel: UILabel! @IBOutlet private var accountEmailLabel: UILabel! @IBOutlet private var accountTypeLabel: UILabel! @@ -65,6 +68,12 @@ class SettingsViewController: UITableViewController self.tableView.register(nib, forHeaderFooterViewReuseIdentifier: "HeaderFooterView") + let debugModeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(SettingsViewController.handleDebugModeGesture(_:))) + debugModeGestureRecognizer.delegate = self + debugModeGestureRecognizer.direction = .up + debugModeGestureRecognizer.numberOfTouchesRequired = 3 + self.tableView.addGestureRecognizer(debugModeGestureRecognizer) + self.update() } @@ -196,6 +205,26 @@ private extension SettingsViewController { UserDefaults.standard.isBackgroundRefreshEnabled = sender.isOn } + + @IBAction func handleDebugModeGesture(_ gestureRecognizer: UISwipeGestureRecognizer) + { + self.debugGestureCounter += 1 + self.debugGestureTimer?.invalidate() + + if self.debugGestureCounter >= 3 + { + self.debugGestureCounter = 0 + + UserDefaults.standard.isDebugModeEnabled.toggle() + self.tableView.reloadData() + } + else + { + self.debugGestureTimer = Timer.scheduledTimer(withTimeInterval: 0.4, repeats: false) { [weak self] (timer) in + self?.debugGestureCounter = 0 + } + } + } } private extension SettingsViewController @@ -213,6 +242,18 @@ private extension SettingsViewController extension SettingsViewController { + override func numberOfSections(in tableView: UITableView) -> Int + { + var numberOfSections = super.numberOfSections(in: tableView) + + if !UserDefaults.standard.isDebugModeEnabled + { + numberOfSections -= 1 + } + + return numberOfSections + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let section = Section.allCases[section] @@ -366,3 +407,11 @@ extension SettingsViewController: MFMailComposeViewControllerDelegate controller.dismiss(animated: true, completion: nil) } } + +extension SettingsViewController: UIGestureRecognizerDelegate +{ + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool + { + return true + } +}