From 6501b6523b4ef7f393833765cd8c8b23a0abd7cd Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 16:35:38 -0700 Subject: [PATCH 1/7] Presents UIDocumentBrowserViewController full screen Workaround for iOS 13 interactive dismissal bug --- Delta/Importing/ImportController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Delta/Importing/ImportController.swift b/Delta/Importing/ImportController.swift index c57ac3a..0c7d878 100644 --- a/Delta/Importing/ImportController.swift +++ b/Delta/Importing/ImportController.swift @@ -120,6 +120,7 @@ class ImportController: NSObject let documentBrowserViewController = UIDocumentBrowserViewController(forOpeningFilesWithContentTypes: Array(self.documentTypes)) documentBrowserViewController.delegate = self + documentBrowserViewController.modalPresentationStyle = .fullScreen documentBrowserViewController.browserUserInterfaceStyle = .dark documentBrowserViewController.allowsPickingMultipleItems = true documentBrowserViewController.allowsDocumentCreation = false From da00488a550c4b927859612fd063817898286cf7 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 16:54:23 -0700 Subject: [PATCH 2/7] Fixes cheats not wrapping in CheatTextView on iOS 13 --- Delta/Pause Menu/Cheats/CheatTextView.swift | 3 --- 1 file changed, 3 deletions(-) diff --git a/Delta/Pause Menu/Cheats/CheatTextView.swift b/Delta/Pause Menu/Cheats/CheatTextView.swift index d545c9c..b3cb25b 100644 --- a/Delta/Pause Menu/Cheats/CheatTextView.swift +++ b/Delta/Pause Menu/Cheats/CheatTextView.swift @@ -33,9 +33,6 @@ class CheatTextView: UITextView super.init(coder: aDecoder) self.layoutManager.delegate = self - - self.textContainer.widthTracksTextView = false - self.textContainer.heightTracksTextView = false } } From f47f515f90e8cb6c964a50037cfd0eeccc000486 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 17:04:39 -0700 Subject: [PATCH 3/7] Fixes incorrect SaveStatesCollectionHeaderView text color on iOS 13 --- .../Save States/SaveStatesCollectionHeaderView.swift | 2 +- .../Save States/SaveStatesViewController.swift | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift b/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift index b4f8ec7..26ec89a 100644 --- a/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift +++ b/Delta/Pause Menu/Save States/SaveStatesCollectionHeaderView.swift @@ -55,7 +55,7 @@ class SaveStatesCollectionHeaderView: UICollectionReusableView self.textLabel.font = UIFont(descriptor: fontDescriptor, size: 0.0) self.textLabel.textAlignment = .center - self.vibrancyView.contentView.addSubview(self.textLabel) + self.addSubview(self.textLabel) // Auto Layout self.textLabel.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 20).isActive = true diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 6d84722..29e2d57 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -267,12 +267,16 @@ private extension SaveStatesViewController } headerView.textLabel.text = title - headerView.textLabel.textColor = UIColor.white switch self.theme { - case .opaque: headerView.isTextLabelVibrancyEnabled = false - case .translucent: headerView.isTextLabelVibrancyEnabled = true + case .opaque: + headerView.textLabel.textColor = UIColor.lightGray + headerView.isTextLabelVibrancyEnabled = false + + case .translucent: + headerView.textLabel.textColor = UIColor.white + headerView.isTextLabelVibrancyEnabled = true } } From 963ab6a586171ed0d9482bb19566d168bdbaa5d7 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 17:24:18 -0700 Subject: [PATCH 4/7] Fixes app freezing when opening deep links --- Cores/DeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 5fd73cc..bcedcc2 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 5fd73cc46963b506ec077dfd9f66d7e5d997acfb +Subproject commit bcedcc293badfc9e4f07f3c66f496bf828450874 From bcfbb7d7a05985d1cf2cf2134f090a2c7c55f37b Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 17:24:46 -0700 Subject: [PATCH 5/7] Presents UIImagePickerController full screen Workaround for iOS 13 interactive dismissal bug --- Delta/Importing/Import Options/PhotoLibraryImportOption.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Delta/Importing/Import Options/PhotoLibraryImportOption.swift b/Delta/Importing/Import Options/PhotoLibraryImportOption.swift index 918d084..4639c01 100644 --- a/Delta/Importing/Import Options/PhotoLibraryImportOption.swift +++ b/Delta/Importing/Import Options/PhotoLibraryImportOption.swift @@ -30,6 +30,7 @@ class PhotoLibraryImportOption: NSObject, ImportOption let imagePickerController = UIImagePickerController() imagePickerController.delegate = self + imagePickerController.modalPresentationStyle = .fullScreen imagePickerController.sourceType = .photoLibrary imagePickerController.mediaTypes = [kUTTypeImage as String] imagePickerController.view.backgroundColor = .white From 63a8dfd5b9c1477ba41f9560bc7d7294c5509329 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 18:55:47 -0700 Subject: [PATCH 6/7] Adds button to change save states sort order --- Delta/Base.lproj/PauseMenu.storyboard | 29 ++++++++++++---- .../Segues/SaveStatesStoryboardSegue.swift | 2 +- .../SaveStatesViewController.swift | 33 ++++++++++++++++--- Delta/Settings/Settings.swift | 13 +++++++- 4 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Delta/Base.lproj/PauseMenu.storyboard b/Delta/Base.lproj/PauseMenu.storyboard index 3f5661f..d91da9a 100644 --- a/Delta/Base.lproj/PauseMenu.storyboard +++ b/Delta/Base.lproj/PauseMenu.storyboard @@ -1,9 +1,9 @@ - + - + @@ -160,13 +160,28 @@ - - - - - + + + + + + + + + + + + + diff --git a/Delta/Game Selection/Segues/SaveStatesStoryboardSegue.swift b/Delta/Game Selection/Segues/SaveStatesStoryboardSegue.swift index 517ee61..c4862dd 100644 --- a/Delta/Game Selection/Segues/SaveStatesStoryboardSegue.swift +++ b/Delta/Game Selection/Segues/SaveStatesStoryboardSegue.swift @@ -24,7 +24,7 @@ class SaveStatesStoryboardSegue: UIStoryboardSegue saveStatesViewController.loadViewIfNeeded() let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(SaveStatesStoryboardSegue.handleDoneButton)) - saveStatesViewController.navigationItem.rightBarButtonItem = doneButton + saveStatesViewController.navigationItem.leftBarButtonItem = doneButton guard saveStatesViewController.theme == .translucent else { return } diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 29e2d57..85bd353 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -54,7 +54,7 @@ class SaveStatesViewController: UICollectionViewController didSet { if self.isViewLoaded { - self.updateTheme() + self.update() } } } @@ -70,6 +70,8 @@ class SaveStatesViewController: UICollectionViewController private var emulatorCoreSaveState: SaveStateProtocol? + @IBOutlet private var sortButton: UIButton! + required init?(coder aDecoder: NSCoder) { self.dataSource = RSTFetchedResultsCollectionViewPrefetchingDataSource(fetchedResultsController: NSFetchedResultsController()) @@ -106,7 +108,7 @@ extension SaveStatesViewController case .loading: self.title = NSLocalizedString("Load State", comment: "") self.placeholderView.detailTextLabel.text = NSLocalizedString("You can create a new save state by pressing the Save State option in the pause menu.", comment: "") - self.navigationItem.rightBarButtonItem = nil + self.navigationItem.rightBarButtonItems?.removeFirst() } // Manually update prototype cell properties @@ -123,7 +125,7 @@ extension SaveStatesViewController self.navigationController?.navigationBar.barStyle = .blackTranslucent self.navigationController?.toolbar.barStyle = .blackTranslucent - self.updateTheme() + self.update() } override func viewWillDisappear(_ animated: Bool) @@ -195,12 +197,12 @@ private extension SaveStatesViewController let fetchRequest: NSFetchRequest = SaveState.fetchRequest() fetchRequest.returnsObjectsAsFaults = false fetchRequest.predicate = NSPredicate(format: "%K == %@", #keyPath(SaveState.game), self.game) - fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(SaveState.type), ascending: true), NSSortDescriptor(key: #keyPath(SaveState.creationDate), ascending: true)] + fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(SaveState.type), ascending: true), NSSortDescriptor(key: #keyPath(SaveState.creationDate), ascending: Settings.sortSaveStatesByOldestFirst)] self.dataSource.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext, sectionNameKeyPath: #keyPath(SaveState.type), cacheName: nil) } - func updateTheme() + func update() { switch self.theme { @@ -220,6 +222,8 @@ private extension SaveStatesViewController self.placeholderView.textLabel.textColor = UIColor.white self.placeholderView.detailTextLabel.textColor = UIColor.white } + + self.sortButton.transform = CGAffineTransform.identity.rotated(by: Settings.sortSaveStatesByOldestFirst ? 0 : .pi) } //MARK: - Configure Views - @@ -433,6 +437,25 @@ private extension SaveStatesViewController } } + @IBAction func changeSortOrder(_ sender: UIButton) + { + Settings.sortSaveStatesByOldestFirst.toggle() + + UIView.transition(with: self.collectionView, duration: 0.4, options: .transitionCrossDissolve, animations: { + self.updateDataSource() + }, completion: nil) + + UIView.animate(withDuration: 0.4) { + self.update() + } + + let toastView = RSTToastView() + toastView.textLabel.text = Settings.sortSaveStatesByOldestFirst ? NSLocalizedString("Oldest First", comment: "") : NSLocalizedString("Newest First", comment: "") + toastView.presentationEdge = .top + toastView.tintColor = UIColor.deltaPurple + toastView.show(in: self.view, duration: 2.0) + } + //MARK: - Convenience Methods - func correctedSectionForSectionIndex(_ section: Int) -> Section diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index bbfd789..63c4b5b 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -54,7 +54,8 @@ struct Settings let defaults = [#keyPath(UserDefaults.translucentControllerSkinOpacity): 0.7, #keyPath(UserDefaults.gameShortcutsMode): GameShortcutsMode.recent.rawValue, #keyPath(UserDefaults.isButtonHapticFeedbackEnabled): true, - #keyPath(UserDefaults.isThumbstickHapticFeedbackEnabled): true] as [String : Any] + #keyPath(UserDefaults.isThumbstickHapticFeedbackEnabled): true, + #keyPath(UserDefaults.sortSaveStatesByOldestFirst): true] as [String : Any] UserDefaults.standard.register(defaults: defaults) } } @@ -168,6 +169,14 @@ extension Settings } } + static var sortSaveStatesByOldestFirst: Bool { + set { UserDefaults.standard.sortSaveStatesByOldestFirst = newValue } + get { + let sortByOldestFirst = UserDefaults.standard.sortSaveStatesByOldestFirst + return sortByOldestFirst + } + } + static func preferredControllerSkin(for system: System, traits: DeltaCore.ControllerSkin.Traits) -> ControllerSkin? { guard let userDefaultsKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return nil } @@ -270,4 +279,6 @@ private extension UserDefaults @NSManaged var isButtonHapticFeedbackEnabled: Bool @NSManaged var isThumbstickHapticFeedbackEnabled: Bool + + @NSManaged var sortSaveStatesByOldestFirst: Bool } From 346c7942445a6cd61c1f1cf848787ab99e37cf10 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 14 Oct 2019 18:59:51 -0700 Subject: [PATCH 7/7] Updates bundle version to 15 --- Delta.xcodeproj/project.pbxproj | 4 ++++ Delta/Supporting Files/Info.plist | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 411f8f3..f4984b9 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1320,9 +1320,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 15; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.1; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1343,9 +1345,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 15; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.1; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; diff --git a/Delta/Supporting Files/Info.plist b/Delta/Supporting Files/Info.plist index 44b0217..c5c64f4 100644 --- a/Delta/Supporting Files/Info.plist +++ b/Delta/Supporting Files/Info.plist @@ -128,7 +128,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.1 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleURLTypes @@ -161,7 +161,7 @@ CFBundleVersion - 14 + $(CURRENT_PROJECT_VERSION) Fabric APIKey @@ -222,6 +222,8 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UIUserInterfaceStyle + Light UTExportedTypeDeclarations @@ -369,7 +371,5 @@ - UIUserInterfaceStyle - Light