Skip to content

Commit

Permalink
Merge branch '250-add-redacted-rotor' into 'release/22.5'
Browse files Browse the repository at this point in the history
Resolve "Add "redacted" rotor"

Closes #250

See merge request highlighter/app!222
  • Loading branch information
Arclite committed Jul 2, 2022
2 parents f894f78 + 3a8158e commit 66abc75
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 2 deletions.
6 changes: 5 additions & 1 deletion Editing/Editing View/PhotoEditingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,20 @@ public class PhotoEditingView: UIView, UIScrollViewDelegate {
// MARK: Accessibility

private func updateAccessibilityElements() {
workspaceView.accessibilityElements = wordObservations?.map { observation in
let accessibilityElements = wordObservations?.map { observation in
WordObservationAccessibilityElement(observation, in: workspaceView) { [weak self] observation, isRedacted -> Bool in
if isRedacted {
self?.unredact(observation)
} else {
self?.redact([observation], joinSiblings: true)
}

return true
}
}

workspaceView.accessibilityElements = accessibilityElements
workspaceView.accessibilityCustomRotors = [RedactedWordObservationRotor(accessibilityElements: accessibilityElements)]
}

// MARK: Boilerplate
Expand Down
48 changes: 48 additions & 0 deletions Editing/Text Detection/RedactedWordObservationRotor.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Created by Geoff Pado on 7/1/22.
// Copyright © 2022 Cocoatype, LLC. All rights reserved.

import UIKit

class RedactedWordObservationRotor: UIAccessibilityCustomRotor {
init(accessibilityElements: [WordObservationAccessibilityElement]?) {
super.init(name: Self.name) { predicate in
guard let accessibilityElements = accessibilityElements,
let currentItem = Result(result: predicate.currentItem),
let currentItemIndex = accessibilityElements.firstIndex(of: currentItem.element)
else { return nil }

switch predicate.searchDirection {
case .previous:
return accessibilityElements[0..<currentItemIndex]
.reversed()
.first(where: \.isRedacted)
.map(Result.init(element:))
case .next where currentItemIndex == accessibilityElements.endIndex - 1:
return nil
case .next:
return accessibilityElements[(currentItemIndex + 1)..<accessibilityElements.endIndex]
.first(where: \.isRedacted)
.map(Result.init(element:))
@unknown default:
return nil
}
}
}

class Result: UIAccessibilityCustomRotorItemResult {
let element: WordObservationAccessibilityElement
init(element: WordObservationAccessibilityElement) {
self.element = element
super.init(targetElement: element, targetRange: nil)
}

convenience init?(result: UIAccessibilityCustomRotorItemResult) {
guard let element = result.targetElement as? WordObservationAccessibilityElement
else { return nil }

self.init(element: element)
}
}

private static let name = NSLocalizedString("RedactedWordObservationRotor.name", comment: "Name for the redacted words custom accessibility rotor")
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class WordObservationAccessibilityElement: UIAccessibilityElement {

private static let redactedValue = NSLocalizedString("WordObservationAccessibilityElement.redactedValue", comment: "Redacted accessibility value")

private var isRedacted: Bool {
var isRedacted: Bool {
guard let workspaceView = workspaceView
else { return false }

Expand All @@ -34,4 +34,8 @@ class WordObservationAccessibilityElement: UIAccessibilityElement {
return existingRedaction == sampleRedaction
})
}

static func == (lhs: WordObservationAccessibilityElement, rhs: WordObservationAccessibilityElement) -> Bool {
lhs.wordObservation.textObservationUUID == rhs.wordObservation.textObservationUUID
}
}
4 changes: 4 additions & 0 deletions Highlighter.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,7 @@
04F3C82C2309F3F500445A8D /* PurchaseReceiptAttributeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04F3C82B2309F3F500445A8D /* PurchaseReceiptAttributeType.swift */; };
04F3C856230BC1F000445A8D /* PhotoEditingWorkspaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 047072922268134500FF20B6 /* PhotoEditingWorkspaceView.swift */; };
04F3C864230BCBCF00445A8D /* PhotoEditingBrushStrokeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F3C863230BCBCF00445A8D /* PhotoEditingBrushStrokeView.h */; settings = {ATTRIBUTES = (Public, ); }; };
04FB0963286FE6C600B600A0 /* RedactedWordObservationRotor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FB0962286FE6C600B600A0 /* RedactedWordObservationRotor.swift */; };
04FB5F2325C7AC8400A5B48D /* Editing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 049F92D722CDA3DB0090C9BC /* Editing.framework */; };
04FB5F2425C7AC8400A5B48D /* Editing.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 049F92D722CDA3DB0090C9BC /* Editing.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
04FC597027C736580072481B /* PurchaseMarketingHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FC596F27C736580072481B /* PurchaseMarketingHostingController.swift */; };
Expand Down Expand Up @@ -806,6 +807,7 @@
04F3C859230BC20E00445A8D /* PencilKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PencilKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/PencilKit.framework; sourceTree = DEVELOPER_DIR; };
04F3C863230BCBCF00445A8D /* PhotoEditingBrushStrokeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotoEditingBrushStrokeView.h; sourceTree = "<group>"; };
04F7AAB42537E5AA0024D3B4 /* Configuration.storekit */ = {isa = PBXFileReference; lastKnownFileType = text; path = Configuration.storekit; sourceTree = "<group>"; };
04FB0962286FE6C600B600A0 /* RedactedWordObservationRotor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedactedWordObservationRotor.swift; sourceTree = "<group>"; };
04FC596F27C736580072481B /* PurchaseMarketingHostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseMarketingHostingController.swift; sourceTree = "<group>"; };
04FC597127C9DDCB0072481B /* DesktopSeekButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DesktopSeekButton.swift; sourceTree = "<group>"; };
04FC597527C9E6990072481B /* InputAccessoryHostingViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InputAccessoryHostingViewController.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1212,6 +1214,7 @@
04CEA1CF28343DC30080E510 /* TextRectangleObservation.swift */,
04CEA1CC28343D680080E510 /* WordObservation.swift */,
04FF8DE022F6D698008CF0E9 /* WordObservationAccessibilityElement.swift */,
04FB0962286FE6C600B600A0 /* RedactedWordObservationRotor.swift */,
);
path = "Text Detection";
sourceTree = "<group>";
Expand Down Expand Up @@ -2558,6 +2561,7 @@
04431E5E2358117B009FA1F6 /* RedactionSerializer.swift in Sources */,
04975D8926106F8B00AA2771 /* HighlighterToolBarButtonItem.swift in Sources */,
04FDEA5625257B1900F94CA9 /* SplitViewController.swift in Sources */,
04FB0963286FE6C600B600A0 /* RedactedWordObservationRotor.swift in Sources */,
04409443275F1A28003155CC /* SeekBarButtonItem.swift in Sources */,
04FF8DB422F57570008CF0E9 /* Defaults.swift in Sources */,
04FF8DAF22EFB996008CF0E9 /* TextObservationRedaction.swift in Sources */,
Expand Down
2 changes: 2 additions & 0 deletions Highlighter/Localizable.strings
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@
"RecentsMenuDataSource.clearMenuItemTitle" = "Clear Menu";
"RecentsMenuDataSource.menuTitle" = "Open Recent";

"RedactedWordObservationRotor.name" = "Redacted Words";

"SettingsContentProvider.Item.about" = "About Black Highlighter";
"SettingsContentProvider.Item.acknowledgements" = "Acknowledgements";
"SettingsContentProvider.Item.autoRedactions" = "Auto-Hidden Words";
Expand Down

0 comments on commit 66abc75

Please sign in to comment.