diff --git a/Classes/Issues/Comments/IssueCommentBaseCell.swift b/Classes/Issues/Comments/IssueCommentBaseCell.swift index 4d5d5affd..2643dab67 100644 --- a/Classes/Issues/Comments/IssueCommentBaseCell.swift +++ b/Classes/Issues/Comments/IssueCommentBaseCell.swift @@ -27,10 +27,7 @@ class IssueCommentBaseCell: UICollectionViewCell, UIGestureRecognizerDelegate { contentView.clipsToBounds = true - doubleTapGesture.addTarget(self, action: #selector(onDoubleTap)) - doubleTapGesture.numberOfTapsRequired = 2 - doubleTapGesture.delegate = self - addGestureRecognizer(doubleTapGesture) + setUpDoubleTapIfNeeded() collapseLayer.isHidden = true collapseLayer.colors = [ @@ -98,6 +95,16 @@ class IssueCommentBaseCell: UICollectionViewCell, UIGestureRecognizerDelegate { // MARK: Private API + private func setUpDoubleTapIfNeeded() + { + // If reaction is set to none, no need for the double-tap + if ReactionContent.defaultReaction == .__unknown("Disabled") { return } + + doubleTapGesture.addTarget(self, action: #selector(onDoubleTap)) + doubleTapGesture.numberOfTapsRequired = 2 + doubleTapGesture.delegate = self + addGestureRecognizer(doubleTapGesture) + } @objc private func onDoubleTap() { doubleTapDelegate?.didDoubleTap(cell: self) } diff --git a/Classes/Issues/Comments/IssueCommentSectionController.swift b/Classes/Issues/Comments/IssueCommentSectionController.swift index f802113b4..712bd74e9 100644 --- a/Classes/Issues/Comments/IssueCommentSectionController.swift +++ b/Classes/Issues/Comments/IssueCommentSectionController.swift @@ -437,7 +437,7 @@ final class IssueCommentSectionController: // MARK: IssueCommentDoubleTapDelegate func didDoubleTap(cell: IssueCommentBaseCell) { - let reaction = ReactionContent.thumbsUp + let reaction = ReactionContent.defaultReaction guard let reactions = reactionMutation ?? self.object?.reactions, !reactions.viewerDidReact(reaction: reaction) else { return } diff --git a/Classes/Issues/Comments/Reactions/Defaults+Reaction.swift b/Classes/Issues/Comments/Reactions/Defaults+Reaction.swift new file mode 100644 index 000000000..0e0b882fb --- /dev/null +++ b/Classes/Issues/Comments/Reactions/Defaults+Reaction.swift @@ -0,0 +1,24 @@ +// +// Defaults+Reaction.swift +// Freetime +// +// Created by Ehud Adler on 7/30/18. +// Copyright © 2018 Ryan Nystrom. All rights reserved. +// +extension UserDefaults { + // Stores ReactionContent in string form but + // accepts and returns in original form + static func setDefault(reaction: ReactionContent) + { + standard.set(reaction.emoji, forKey: "default.reaction") + } + + static var getDefaultReaction: ReactionContent + { + guard let reactionAsString = standard.string(forKey: "default.reaction") + else { return ReactionContent.thumbsUp } + let reaction = reactionAsString.reaction + return reaction + } + +} diff --git a/Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift b/Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift index 86b0854d8..81d25f4d9 100644 --- a/Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift +++ b/Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift @@ -15,8 +15,26 @@ extension ReactionContent { case .heart: return "❤️" case .hooray: return "🎉" case .laugh: return "😄" + case .__unknown("Disabled"): return "Disabled" case .thumbsUp, .__unknown: return "👍" case .thumbsDown: return "👎" } } + + static var defaultReaction: ReactionContent { + return UserDefaults.getDefaultReaction + } +} +extension String { + var reaction: ReactionContent { + switch self { + case "😕": return .confused + case "❤️": return .heart + case "🎉": return .hooray + case "😄": return .laugh + case "👍": return .thumbsUp + case "👎": return .thumbsDown + default: return .__unknown(self) + } + } } diff --git a/Classes/Settings/DefaultReactionDetailController.swift b/Classes/Settings/DefaultReactionDetailController.swift new file mode 100644 index 000000000..acba61aab --- /dev/null +++ b/Classes/Settings/DefaultReactionDetailController.swift @@ -0,0 +1,118 @@ +// +// DefaultReactionSubController.swift +// Freetime +// +// Created by Ehud Adler on 8/5/18. +// Copyright © 2018 Ryan Nystrom. All rights reserved. +// + +import UIKit + +class DefaultReactionDetailController: UITableViewController { + + @IBOutlet var thumbsUpCell: UITableViewCell! + @IBOutlet var thumbsDownCell: UITableViewCell! + @IBOutlet var laughCell: UITableViewCell! + @IBOutlet var hoorayCell: UITableViewCell! + @IBOutlet var confusedCell: UITableViewCell! + @IBOutlet var heartCell: UITableViewCell! + @IBOutlet var enabledSwitch: UISwitch! + + override func viewDidLoad() { + super.viewDidLoad() + checkCurrentDefault() + tableView.reloadData() + } + + override func numberOfSections(in tableView: UITableView) -> Int { + return enabledSwitch.isOn ? 2 : 1 + } + + private func checkCurrentDefault() { + switch (ReactionContent.defaultReaction) + { + case ReactionContent.thumbsUp: + updateCells(cell: thumbsUpCell) + case ReactionContent.thumbsDown: + updateCells(cell: thumbsDownCell) + case ReactionContent.laugh: + updateCells(cell: laughCell) + case ReactionContent.hooray: + updateCells(cell: hoorayCell) + case ReactionContent.confused: + updateCells(cell: confusedCell) + case ReactionContent.heart: + updateCells(cell: heartCell) + case ReactionContent.__unknown("Disabled"): + enabledSwitch.isOn = false + default: + updateCells(cell: thumbsUpCell) + } + + } + + private func updateCells(cell: UITableViewCell) { + + rz_smoothlyDeselectRows(tableView: self.tableView) + + // Reset all to none + thumbsUpCell.accessoryType = .none + thumbsDownCell.accessoryType = .none + laughCell.accessoryType = .none + hoorayCell.accessoryType = .none + confusedCell.accessoryType = .none + heartCell.accessoryType = .none + + // Set proper cell to check + cell.accessoryType = .checkmark + + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + tableView.deselectRow(at: indexPath, animated: trueUnlessReduceMotionEnabled) + let cell = tableView.cellForRow(at: indexPath) + + switch cell { + case thumbsUpCell: + updateDefaultReaction(.thumbsUp) + case thumbsDownCell: + updateDefaultReaction(.thumbsDown) + case laughCell: + updateDefaultReaction(.laugh) + case hoorayCell: + updateDefaultReaction(.hooray) + case confusedCell: + updateDefaultReaction(.confused) + case heartCell: + updateDefaultReaction(.heart) + default: + break + } + } + + @IBAction func toggleDefaultReaction(_ sender: Any) { + if(enabledSwitch.isOn) { + updateDefaultReaction(.thumbsUp) + } else { + updateDefaultReaction(.__unknown("Disabled")) + } + updateSections() + } + + private func updateDefaultReaction(_ reaction: ReactionContent) { + UserDefaults.setDefault(reaction: reaction) + checkCurrentDefault() + } + + private func updateSections() { + tableView.performBatchUpdates({ + if(enabledSwitch.isOn) { + self.tableView.insertSections(IndexSet(integer: 1), with: .top) + } else { + self.tableView.deleteSections(IndexSet(integer: 1), with: .top) + } + }, completion: nil) + } +} + diff --git a/Classes/Settings/Settings.storyboard b/Classes/Settings/Settings.storyboard index b8dfa4a90..f37226648 100644 --- a/Classes/Settings/Settings.storyboard +++ b/Classes/Settings/Settings.storyboard @@ -20,7 +20,7 @@ - +