Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit 28b76e6

Browse files
authored
Clean up reactions settings (#2084)
1 parent af4e0f8 commit 28b76e6

9 files changed

+141
-121
lines changed

Classes/Issues/Comments/IssueCommentBaseCell.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,15 +95,14 @@ class IssueCommentBaseCell: UICollectionViewCell, UIGestureRecognizerDelegate {
9595

9696
// MARK: Private API
9797

98-
private func setUpDoubleTapIfNeeded()
99-
{
100-
// If reaction is set to none, no need for the double-tap
101-
if ReactionContent.defaultReaction == .__unknown("Disabled") { return }
102-
103-
doubleTapGesture.addTarget(self, action: #selector(onDoubleTap))
104-
doubleTapGesture.numberOfTapsRequired = 2
105-
doubleTapGesture.delegate = self
106-
addGestureRecognizer(doubleTapGesture)
98+
private func setUpDoubleTapIfNeeded() {
99+
// If reaction is set to none, no need for the double-tap
100+
if !ReactionContent.reactionsEnabled { return }
101+
102+
doubleTapGesture.addTarget(self, action: #selector(onDoubleTap))
103+
doubleTapGesture.numberOfTapsRequired = 2
104+
doubleTapGesture.delegate = self
105+
addGestureRecognizer(doubleTapGesture)
107106
}
108107
@objc private func onDoubleTap() {
109108
doubleTapDelegate?.didDoubleTap(cell: self)
@@ -127,3 +126,4 @@ class IssueCommentBaseCell: UICollectionViewCell, UIGestureRecognizerDelegate {
127126
}
128127

129128
}
129+

Classes/Issues/Comments/IssueCommentSectionController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ final class IssueCommentSectionController:
442442
// MARK: IssueCommentDoubleTapDelegate
443443

444444
func didDoubleTap(cell: IssueCommentBaseCell) {
445-
let reaction = ReactionContent.defaultReaction
445+
guard let reaction = ReactionContent.defaultReaction else { return }
446446
guard let reactions = reactionMutation ?? self.object?.reactions,
447447
!reactions.viewerDidReact(reaction: reaction)
448448
else { return }

Classes/Issues/Comments/Reactions/Defaults+Reaction.swift

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,31 @@
66
// Copyright © 2018 Ryan Nystrom. All rights reserved.
77
//
88
extension UserDefaults {
9-
// Stores ReactionContent in string form but
10-
// accepts and returns in original form
11-
static func setDefault(reaction: ReactionContent)
12-
{
13-
standard.set(reaction.emoji, forKey: "default.reaction")
14-
}
15-
16-
static var getDefaultReaction: ReactionContent
17-
{
18-
guard let reactionAsString = standard.string(forKey: "default.reaction")
19-
else { return ReactionContent.thumbsUp }
20-
let reaction = reactionAsString.reaction
21-
return reaction
22-
}
23-
9+
10+
private static let defaultKey = "com.whoisryannystrom.freetime.default-reaction"
11+
private static let disabledValue = "disabled"
12+
13+
// Stores ReactionContent in string form but
14+
// accepts and returns in original form
15+
func setDefault(reaction: ReactionContent) {
16+
set(reaction.emoji, forKey: UserDefaults.defaultKey)
17+
}
18+
19+
func disableReaction() {
20+
set(UserDefaults.disabledValue, forKey: UserDefaults.defaultKey)
21+
}
22+
23+
var defaultReaction: ReactionContent? {
24+
// if value doesn't exist, first access, default to previous behavior of +1
25+
guard let value = string(forKey: UserDefaults.defaultKey)
26+
else { return ReactionContent.thumbsUp }
27+
if value == UserDefaults.disabledValue {
28+
return nil
29+
} else {
30+
let reaction = value.reaction
31+
return reaction
32+
}
33+
}
34+
2435
}
36+

Classes/Issues/Comments/Reactions/ReactionContent+ReactionType.swift

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,30 @@ extension ReactionContent {
1515
case .heart: return "❤️"
1616
case .hooray: return "🎉"
1717
case .laugh: return "😄"
18-
case .__unknown("Disabled"): return "Disabled"
1918
case .thumbsUp, .__unknown: return "👍"
2019
case .thumbsDown: return "👎"
2120
}
2221
}
23-
24-
static var defaultReaction: ReactionContent {
25-
return UserDefaults.getDefaultReaction
26-
}
22+
23+
static var reactionsEnabled: Bool {
24+
return UserDefaults.standard.defaultReaction != nil
25+
}
26+
27+
static var defaultReaction: ReactionContent? {
28+
return UserDefaults.standard.defaultReaction
29+
}
2730
}
2831
extension String {
29-
var reaction: ReactionContent {
30-
switch self {
31-
case "😕": return .confused
32-
case "❤️": return .heart
33-
case "🎉": return .hooray
34-
case "😄": return .laugh
35-
case "👍": return .thumbsUp
36-
case "👎": return .thumbsDown
37-
default: return .__unknown(self)
32+
var reaction: ReactionContent? {
33+
switch self {
34+
case "😕": return .confused
35+
case "❤️": return .heart
36+
case "🎉": return .hooray
37+
case "😄": return .laugh
38+
case "👍": return .thumbsUp
39+
case "👎": return .thumbsDown
40+
default: return nil
41+
}
3842
}
39-
}
4043
}
44+

Classes/Settings/DefaultReactionDetailController.swift

Lines changed: 71 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -17,102 +17,99 @@ class DefaultReactionDetailController: UITableViewController {
1717
@IBOutlet var confusedCell: UITableViewCell!
1818
@IBOutlet var heartCell: UITableViewCell!
1919
@IBOutlet var enabledSwitch: UISwitch!
20-
20+
2121
override func viewDidLoad() {
2222
super.viewDidLoad()
2323
checkCurrentDefault()
2424
tableView.reloadData()
2525
}
26-
26+
2727
override func numberOfSections(in tableView: UITableView) -> Int {
28-
return enabledSwitch.isOn ? 2 : 1
28+
return enabledSwitch.isOn ? 2 : 1
2929
}
30-
30+
3131
private func checkCurrentDefault() {
32-
switch (ReactionContent.defaultReaction)
33-
{
34-
case ReactionContent.thumbsUp:
35-
updateCells(cell: thumbsUpCell)
36-
case ReactionContent.thumbsDown:
37-
updateCells(cell: thumbsDownCell)
38-
case ReactionContent.laugh:
39-
updateCells(cell: laughCell)
40-
case ReactionContent.hooray:
41-
updateCells(cell: hoorayCell)
42-
case ReactionContent.confused:
43-
updateCells(cell: confusedCell)
44-
case ReactionContent.heart:
45-
updateCells(cell: heartCell)
46-
case ReactionContent.__unknown("Disabled"):
47-
enabledSwitch.isOn = false
48-
default:
49-
updateCells(cell: thumbsUpCell)
50-
}
51-
32+
guard let reaction = ReactionContent.defaultReaction else {
33+
enabledSwitch.isOn = false
34+
return
35+
}
36+
37+
let cell: UITableViewCell
38+
switch (reaction) {
39+
case .thumbsUp, .__unknown: cell = thumbsUpCell
40+
case .thumbsDown: cell = thumbsDownCell
41+
case .laugh: cell = laughCell
42+
case .hooray: cell = hoorayCell
43+
case .confused: cell = confusedCell
44+
case .heart: cell = heartCell
45+
}
46+
updateCells(cell: cell)
5247
}
53-
48+
5449
private func updateCells(cell: UITableViewCell) {
55-
56-
rz_smoothlyDeselectRows(tableView: self.tableView)
57-
58-
// Reset all to none
59-
thumbsUpCell.accessoryType = .none
60-
thumbsDownCell.accessoryType = .none
61-
laughCell.accessoryType = .none
62-
hoorayCell.accessoryType = .none
63-
confusedCell.accessoryType = .none
64-
heartCell.accessoryType = .none
65-
66-
// Set proper cell to check
67-
cell.accessoryType = .checkmark
50+
rz_smoothlyDeselectRows(tableView: self.tableView)
51+
52+
// Reset all to none
53+
thumbsUpCell.accessoryType = .none
54+
thumbsDownCell.accessoryType = .none
55+
laughCell.accessoryType = .none
56+
hoorayCell.accessoryType = .none
57+
confusedCell.accessoryType = .none
58+
heartCell.accessoryType = .none
6859

60+
// Set proper cell to check
61+
cell.accessoryType = .checkmark
6962
}
70-
63+
7164
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
72-
73-
tableView.deselectRow(at: indexPath, animated: trueUnlessReduceMotionEnabled)
74-
let cell = tableView.cellForRow(at: indexPath)
75-
76-
switch cell {
77-
case thumbsUpCell:
78-
updateDefaultReaction(.thumbsUp)
79-
case thumbsDownCell:
80-
updateDefaultReaction(.thumbsDown)
81-
case laughCell:
82-
updateDefaultReaction(.laugh)
83-
case hoorayCell:
84-
updateDefaultReaction(.hooray)
85-
case confusedCell:
86-
updateDefaultReaction(.confused)
87-
case heartCell:
88-
updateDefaultReaction(.heart)
89-
default:
90-
break
91-
}
65+
tableView.deselectRow(at: indexPath, animated: trueUnlessReduceMotionEnabled)
66+
let cell = tableView.cellForRow(at: indexPath)
67+
68+
switch cell {
69+
case thumbsUpCell:
70+
updateDefault(reaction: .thumbsUp)
71+
case thumbsDownCell:
72+
updateDefault(reaction: .thumbsDown)
73+
case laughCell:
74+
updateDefault(reaction: .laugh)
75+
case hoorayCell:
76+
updateDefault(reaction: .hooray)
77+
case confusedCell:
78+
updateDefault(reaction: .confused)
79+
case heartCell:
80+
updateDefault(reaction: .heart)
81+
default:
82+
break
83+
}
9284
}
93-
85+
9486
@IBAction func toggleDefaultReaction(_ sender: Any) {
9587
if(enabledSwitch.isOn) {
96-
updateDefaultReaction(.thumbsUp)
88+
updateDefault(reaction: .thumbsUp)
9789
} else {
98-
updateDefaultReaction(.__unknown("Disabled"))
90+
disableReaction()
9991
}
10092
updateSections()
10193
}
102-
103-
private func updateDefaultReaction(_ reaction: ReactionContent) {
104-
UserDefaults.setDefault(reaction: reaction)
105-
checkCurrentDefault()
94+
95+
private func updateDefault(reaction: ReactionContent) {
96+
UserDefaults.standard.setDefault(reaction: reaction)
97+
checkCurrentDefault()
98+
}
99+
100+
private func disableReaction() {
101+
UserDefaults.standard.disableReaction()
106102
}
107-
103+
108104
private func updateSections() {
109-
tableView.performBatchUpdates({
110-
if(enabledSwitch.isOn) {
111-
self.tableView.insertSections(IndexSet(integer: 1), with: .top)
112-
} else {
113-
self.tableView.deleteSections(IndexSet(integer: 1), with: .top)
114-
}
115-
}, completion: nil)
105+
tableView.performBatchUpdates({
106+
if(enabledSwitch.isOn) {
107+
self.tableView.insertSections(IndexSet(integer: 1), with: .top)
108+
} else {
109+
self.tableView.deleteSections(IndexSet(integer: 1), with: .top)
110+
}
111+
}, completion: nil)
116112
}
117113
}
118114

115+

Classes/Settings/Settings.storyboard

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@
382382
<sections>
383383
<tableViewSection id="um3-Ah-wWf">
384384
<cells>
385-
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="UJb-ob-yCk" customClass="StyledTableCell" customModule="Freetime" customModuleProvider="target">
385+
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="UJb-ob-yCk" customClass="StyledTableCell" customModule="Freetime" customModuleProvider="target">
386386
<rect key="frame" x="0.0" y="35" width="375" height="44"/>
387387
<autoresizingMask key="autoresizingMask"/>
388388
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="UJb-ob-yCk" id="xcP-b2-e1A">

Classes/Settings/SettingsViewController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ NewIssueTableViewControllerDelegate {
6161
override func viewWillAppear(_ animated: Bool) {
6262
super.viewWillAppear(animated)
6363

64-
defaultReactionLabel.text = ReactionContent.defaultReaction.emoji
64+
defaultReactionLabel.text = ReactionContent.defaultReaction?.emoji
65+
?? NSLocalizedString("Off", comment: "")
6566

6667
rz_smoothlyDeselectRows(tableView: tableView)
6768
accountsCell.detailTextLabel?.text = sessionManager.focusedUserSession?.username ?? Constants.Strings.unknown
@@ -186,7 +187,7 @@ NewIssueTableViewControllerDelegate {
186187
}
187188

188189
func onSetDefaultReaction() {
189-
//showDefaultReactionMenu()
190+
//showDefaultReactionMenu()
190191
}
191192

192193
func onSignOut() {

Classes/Views/StyledTableCell.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ class StyledTableCell: UITableViewCell {
2727
background.backgroundColor = Styles.Colors.Gray.alphaLighter
2828
selectedBackgroundView = background
2929
}
30-
31-
override var canBecomeFirstResponder: Bool {
32-
return true
33-
}
30+
3431
}
32+

Freetime.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@
114114
292FF8B51F303BD0009E63F7 /* IssuePreviewSectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292FF8B41F303BD0009E63F7 /* IssuePreviewSectionController.swift */; };
115115
292FF8B71F303BD9009E63F7 /* IssuePreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292FF8B61F303BD9009E63F7 /* IssuePreviewViewController.swift */; };
116116
292FF8B91F303DB0009E63F7 /* IssuePreviewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 292FF8B81F303DB0009E63F7 /* IssuePreviewModel.swift */; };
117+
2930988D211F327C00E1178B /* Defaults+Reaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2930988C211F327B00E1178B /* Defaults+Reaction.swift */; };
118+
2930988F211F32D100E1178B /* DefaultReactionDetailController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2930988E211F32D100E1178B /* DefaultReactionDetailController.swift */; };
117119
2930F2711F894AA10082BA26 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2930F2701F894AA10082BA26 /* Settings.bundle */; };
118120
2930F2731F8A27750082BA26 /* WidthCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2930F2721F8A27750082BA26 /* WidthCache.swift */; };
119121
29316DB51ECC7DEB007CAE3F /* ButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29316DB41ECC7DEB007CAE3F /* ButtonCell.swift */; };
@@ -626,6 +628,8 @@
626628
292FF8B41F303BD0009E63F7 /* IssuePreviewSectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuePreviewSectionController.swift; sourceTree = "<group>"; };
627629
292FF8B61F303BD9009E63F7 /* IssuePreviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuePreviewViewController.swift; sourceTree = "<group>"; };
628630
292FF8B81F303DB0009E63F7 /* IssuePreviewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IssuePreviewModel.swift; sourceTree = "<group>"; };
631+
2930988C211F327B00E1178B /* Defaults+Reaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Defaults+Reaction.swift"; sourceTree = "<group>"; };
632+
2930988E211F32D100E1178B /* DefaultReactionDetailController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultReactionDetailController.swift; sourceTree = "<group>"; };
629633
2930F2701F894AA10082BA26 /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = SOURCE_ROOT; };
630634
2930F2721F8A27750082BA26 /* WidthCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidthCache.swift; sourceTree = "<group>"; };
631635
29316DB41ECC7DEB007CAE3F /* ButtonCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ButtonCell.swift; sourceTree = "<group>"; };
@@ -1265,6 +1269,7 @@
12651269
292FCADE1EDFCC510026635E /* Reactions */ = {
12661270
isa = PBXGroup;
12671271
children = (
1272+
2930988C211F327B00E1178B /* Defaults+Reaction.swift */,
12681273
292FCADF1EDFCC510026635E /* IssueCommentReactionCell.swift */,
12691274
292FCB1E1EDFCD750026635E /* IssueCommentReactionViewModel.swift */,
12701275
2908C5881F6F3EB00071C39D /* IssueLocalReaction.swift */,
@@ -1836,6 +1841,7 @@
18361841
29C1677B1ECA1CED00439D62 /* Settings */ = {
18371842
isa = PBXGroup;
18381843
children = (
1844+
2930988E211F32D100E1178B /* DefaultReactionDetailController.swift */,
18391845
292FF8AB1F2FD3EC009E63F7 /* Settings.storyboard */,
18401846
297FB7771F51128A00F2E618 /* SettingsAccountsViewController.swift */,
18411847
29764C131FDC4DB60095FF95 /* SettingsLabel.swift */,
@@ -2790,6 +2796,7 @@
27902796
293A45A21F29954000DD1006 /* IssueCommitModel.swift in Sources */,
27912797
293A45A61F29987C00DD1006 /* IssueCommitSectionController.swift in Sources */,
27922798
291929471F3EAB250012067B /* IssueDetailsModel.swift in Sources */,
2799+
2930988F211F32D100E1178B /* DefaultReactionDetailController.swift in Sources */,
27932800
29C8F9AD208C02860075931C /* LoadMoreSectionController2.swift in Sources */,
27942801
292CD3BB1F0AF28F00D3D57B /* IssueDiffHunkModel.swift in Sources */,
27952802
292CD3BF1F0AF3C000D3D57B /* IssueDiffHunkPathCell.swift in Sources */,
@@ -2868,6 +2875,7 @@
28682875
294563EA1EE4EEF000DBCD35 /* IssueStatusCell.swift in Sources */,
28692876
3E79A2FF1F8A7DA700E1126B /* ShortcutHandler.swift in Sources */,
28702877
29A5AF411F92677D0065D529 /* RepositoryIssueSummaryModel+Filterable.swift in Sources */,
2878+
2930988D211F327C00E1178B /* Defaults+Reaction.swift in Sources */,
28712879
295C31D11F0AA72000521CED /* IssueStatusEvent+ButtonState.swift in Sources */,
28722880
DCA5ED101FAEDF290072F074 /* BookmarkStore.swift in Sources */,
28732881
295C31CD1F0AA55400521CED /* IssueStatusEvent.swift in Sources */,

0 commit comments

Comments
 (0)