diff --git a/ios/ReviewSession.swift b/ios/ReviewSession.swift index 038be33b..1cbe5ab0 100644 --- a/ios/ReviewSession.swift +++ b/ios/ReviewSession.swift @@ -39,7 +39,8 @@ class ReviewSession { self.services = services reviewQueue = items - if Settings.groupMeaningReading { + if Settings.groupMeaningReading || (Settings.ankiMode && + Settings.ankiModeCombineReadingMeaning) { activeQueueSize = 1 } else { activeQueueSize = Int(Settings.reviewBatchSize) @@ -85,7 +86,8 @@ class ReviewSession { activeTaskType = .reading } else if activeTask.answeredReading || activeSubject.readings.isEmpty { activeTaskType = .meaning - } else if Settings.groupMeaningReading { + } else if Settings.groupMeaningReading || (Settings.ankiMode && + Settings.ankiModeCombineReadingMeaning) { activeTaskType = Settings.meaningFirst ? .meaning : .reading } else { activeTaskType = TaskType.random() diff --git a/ios/ReviewSettingsViewController.swift b/ios/ReviewSettingsViewController.swift index b94e83d3..640f7419 100644 --- a/ios/ReviewSettingsViewController.swift +++ b/ios/ReviewSettingsViewController.swift @@ -19,6 +19,7 @@ class ReviewSettingsViewController: UITableViewController, TKMViewController { private var services: TKMServices! private var model: TableModel? private var groupMeaningReadingIndexPath: IndexPath? + private var ankiModeCombineReadingMeaningIndexPath: IndexPath? func setup(services: TKMServices) { self.services = services @@ -151,6 +152,17 @@ class ReviewSettingsViewController: UITableViewController, TKMViewController { target: self, action: #selector(ankiModeSwitchChanged(_:)))) + let ankiModeCombineReadingMeaning = SwitchModelItem(style: .subtitle, + title: "Combine Reading + Meaning", + subtitle: "Only one review for reading and meaning with Anki mode enabled", + on: Settings.ankiModeCombineReadingMeaning, + target: self, + action: #selector(ankiModeCombineReadingMeaningSwitchChanged(_:))) + + ankiModeCombineReadingMeaning.numberOfSubtitleLines = 0 + ankiModeCombineReadingMeaningIndexPath = model.add(ankiModeCombineReadingMeaning, + hidden:!Settings.ankiMode) + model.add(section: "Audio") model.add(SwitchModelItem(style: .subtitle, title: "Play audio automatically", @@ -292,6 +304,14 @@ class ReviewSettingsViewController: UITableViewController, TKMViewController { @objc private func ankiModeSwitchChanged(_ switchView: UISwitch) { Settings.ankiMode = switchView.isOn + Settings.ankiModeCombineReadingMeaning = false + if let indexPath = ankiModeCombineReadingMeaningIndexPath { + model?.setIndexPath(indexPath, hidden: !switchView.isOn) + } + } + + @objc private func ankiModeCombineReadingMeaningSwitchChanged(_ switchView: UISwitch) { + Settings.ankiModeCombineReadingMeaning = switchView.isOn } @objc private func playAudioAutomaticallySwitchChanged(_ switchView: UISwitch) { diff --git a/ios/ReviewViewController.swift b/ios/ReviewViewController.swift index 80321ddd..e8c5ccc8 100644 --- a/ios/ReviewViewController.swift +++ b/ios/ReviewViewController.swift @@ -503,6 +503,12 @@ class ReviewViewController: UIViewController, UITextFieldDelegate, SubjectDelega } } + if session.activeAssignment.subjectType != .radical, + Settings.ankiMode, + Settings.ankiModeCombineReadingMeaning { + taskTypePrompt = Settings.meaningFirst ? "Meaning + Reading" : "Reading + Meaning" + } + // Choose a random font. currentFontName = randomFont(thatCanRenderText: session.activeSubject.japanese) @@ -1019,10 +1025,17 @@ class ReviewViewController: UIViewController, UITextFieldDelegate, SubjectDelega } // Mark the task. - let marked = session.markAnswer(result) + var marked = session.markAnswer(result) // Show a new task if it was correct. if result != .Incorrect { + if session.activeAssignment.subjectType != .radical, // or kana mode? + Settings.ankiMode, + Settings.ankiModeCombineReadingMeaning { + session.nextTask() + marked = session.markAnswer(.Correct) + } + if Settings.playAudioAutomatically, session.activeTaskType == .reading, let subject = session.activeSubject, subject.hasVocabulary, !subject.vocabulary.audio.isEmpty { diff --git a/ios/Settings.swift b/ios/Settings.swift index 69a28215..6d9bac92 100644 --- a/ios/Settings.swift +++ b/ios/Settings.swift @@ -197,6 +197,7 @@ protocol SettingProtocol { @Setting(false, #keyPath(allowSkippingReviews)) static var allowSkippingReviews: Bool @Setting(true, #keyPath(minimizeReviewPenalty)) static var minimizeReviewPenalty: Bool @Setting(false, #keyPath(ankiMode)) static var ankiMode: Bool + @Setting(false, #keyPath(ankiModeCombineReadingMeaning)) static var ankiModeCombineReadingMeaning: Bool @Setting(true, #keyPath(showPreviousLevelGraph)) static var showPreviousLevelGraph: Bool @Setting(true, #keyPath(showKanaOnlyVocab)) static var showKanaOnlyVocab: Bool