- ReleaseTracks: Added in-app ReleaseTracks switching support

This commit is contained in:
Magesh K
2025-02-09 17:28:24 +05:30
parent a8fd1a3e83
commit eb0e1326b9
14 changed files with 791 additions and 276 deletions

View File

@@ -75,6 +75,8 @@ extension SettingsViewController
case refreshSideJITServer
case resetPairingFile
case anisetteServers
case betaUpdates
case betaTrack
// case hiddenSettings
}
@@ -86,7 +88,7 @@ extension SettingsViewController
case exportDatabase
case deleteDatabase
case operationsLoggingControl
case recreateDatabase
case recreateDatabase
case minimuxerConsoleLogging
}
}
@@ -97,6 +99,10 @@ final class SettingsViewController: UITableViewController
private var prototypeHeaderFooterView: SettingsHeaderFooterView!
// Add outlet
@IBOutlet private var betaTrackLabel: UILabel!
@IBOutlet private var betaTrackPopupButton: UIButton!
private var debugGestureCounter = 0
private weak var debugGestureTimer: Timer?
@@ -107,6 +113,7 @@ final class SettingsViewController: UITableViewController
@IBOutlet private var backgroundRefreshSwitch: UISwitch!
@IBOutlet private var noIdleTimeoutSwitch: UISwitch!
@IBOutlet private var disableAppLimitSwitch: UISwitch!
@IBOutlet private var betaUpdatesSwitch: UISwitch!
@IBOutlet private var exportResignedAppsSwitch: UISwitch!
@IBOutlet private var verboseOperationsLoggingSwitch: UISwitch!
@IBOutlet private var minimuxerConsoleLoggingSwitch: UISwitch!
@@ -120,7 +127,7 @@ final class SettingsViewController: UITableViewController
@IBOutlet private var githubButton: UIButton!
@IBOutlet private var versionLabel: UILabel!
@IBOutlet private var recreateDatabaseSwitch: UISwitch!
override var preferredStatusBarStyle: UIStatusBarStyle {
@@ -128,7 +135,7 @@ final class SettingsViewController: UITableViewController
}
private static var exportDBInProgress = false
private static var deleteDBInProgress = false
private static var deleteDBInProgress = false
required init?(coder aDecoder: NSCoder)
{
@@ -138,6 +145,48 @@ private static var deleteDBInProgress = false
NotificationCenter.default.addObserver(self, selector: #selector(SettingsViewController.openErrorLog(_:)), name: ToastView.openErrorLogNotification, object: nil)
}
private func handleReleaseChannelSelection(_ channel: String) {
// Update your model/preferences
UserDefaults.standard.betaUdpatesTrack = channel
updateReleaseChannelButtonTitle()
}
private func updateReleaseChannelButtonTitle() {
let channel = UserDefaults.standard.betaUdpatesTrack ?? UserDefaults.defaultBetaUpdatesTrack
betaTrackPopupButton.setTitle(channel, for: .normal)
}
private func configureReleaseChannelButton() {
let currentTrack = UserDefaults.standard.betaUdpatesTrack
// get all tracks as string available except .stable and .unknown
var trackOptions: [String] = ReleaseTracks.betaTracks.map {$0.rawValue}
if let currentTrack{
// prepend currently selected beta track from the user defaults
trackOptions = [currentTrack] + trackOptions.filter { $0 != currentTrack }
}
// Create menu items with proper styling
let items = trackOptions.map{ channel in
UIAction(title: channel, handler: { [weak self] _ in
self?.handleReleaseChannelSelection(channel)
})
}
// Create menu with proper styling
let menu = UIMenu(title: "",
options: [.singleSelection, .displayInline], // Add displayInline
children: items
)
betaTrackPopupButton.menu = menu
// Set initial state
updateReleaseChannelButtonTitle()
}
override func viewDidLoad()
{
super.viewDidLoad()
@@ -185,6 +234,8 @@ private static var deleteDBInProgress = false
button.imageView?.contentMode = .scaleAspectFit
}
}
configureReleaseChannelButton()
}
override func viewWillAppear(_ animated: Bool)
@@ -286,7 +337,7 @@ private extension SettingsViewController
localizedVersion += buildInfo.project_version.map{ version in
version.isEmpty ? "" : " (\(version))"
} ?? installedApp.localizedVersion
versionLabel = NSLocalizedString(String(format: "Version %@", localizedVersion), comment: "SideStore Version")
}
else if let version = buildInfo.marketing_version
@@ -306,7 +357,7 @@ private extension SettingsViewController
{
versionLabel += "\n\(getXcodeVersion())"
}
return versionLabel
}
@@ -332,6 +383,9 @@ private extension SettingsViewController
self.disableAppLimitSwitch.isOn = UserDefaults.standard.isAppLimitDisabled
// AdvancedSettingsRow
self.betaUpdatesSwitch.isOn = UserDefaults.standard.isBetaUpdatesEnabled
self.betaTrackLabel.isEnabled = UserDefaults.standard.isBetaUpdatesEnabled
self.betaTrackPopupButton.isEnabled = UserDefaults.standard.isBetaUpdatesEnabled
// DiagnosticsRow
self.disableResponseCachingSwitch.isOn = UserDefaults.standard.responseCachingDisabled
@@ -573,6 +627,13 @@ private extension SettingsViewController
}
@IBAction func toggleEnableBetaUpdates(_ sender: UISwitch) {
betaTrackLabel.isEnabled = sender.isOn
betaTrackPopupButton.isEnabled = sender.isOn
// update it in database
UserDefaults.standard.isBetaUpdatesEnabled = sender.isOn
}
@IBAction func toggleIsBackgroundRefreshEnabled(_ sender: UISwitch)
{
UserDefaults.standard.isBackgroundRefreshEnabled = sender.isOn
@@ -1134,7 +1195,7 @@ extension SettingsViewController
// } else {
// ELOG("UIApplication.openSettingsURLString invalid")
// }
case .refreshAttempts : break
case .refreshAttempts, .betaUpdates, .betaTrack: break
}