Skip to content

Commit e79725b

Browse files
committed
TRAN-95. The Save to Photos action should be temporarily disabled for media node multiselection in Timeline, Albums, and Media Discovery
1 parent d8dbe03 commit e79725b

File tree

5 files changed

+61
-6
lines changed

5 files changed

+61
-6
lines changed

MEGAUnitTests/NodeActions/NodeActionBuilderTests.swift

+41
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,47 @@ class NodeActionBuilderTests: XCTestCase {
10281028
XCTAssertTrue(isEqual(nodeActionTypes: [.download, .shareLink, .exportFile, .sendToChat, .saveToPhotos, .move, .copy, .moveToRubbishBin]))
10291029
}
10301030

1031+
func testMultiselectMediaFiles_albumSelectionToolbar() {
1032+
actions = NodeActionBuilder()
1033+
.setNodeSelectionType(.files, selectedNodeCount: 4)
1034+
.setDisplayMode(.albumSelectionToolBar)
1035+
.setAreMediaFiles(true)
1036+
.multiSelectNormalAlbumBuild()
1037+
1038+
XCTAssertTrue(isEqual(nodeActionTypes: [.download, .shareLink, .exportFile, .sendToChat, .move, .copy]))
1039+
}
1040+
1041+
func testMultiselectMediaFiles_favouriteAlbumSelectionToolbar() {
1042+
actions = NodeActionBuilder()
1043+
.setNodeSelectionType(.files, selectedNodeCount: 4)
1044+
.setDisplayMode(.favouriteAlbumSelectionToolBar)
1045+
.setIsFavourite(true)
1046+
.setAreMediaFiles(true)
1047+
.multiSelectFavouriteAlbumBuild()
1048+
1049+
XCTAssertTrue(isEqual(nodeActionTypes: [.download, .shareLink, .exportFile, .sendToChat, .favourite, .copy, .moveToRubbishBin]))
1050+
}
1051+
1052+
func testMultiselectMediaFiles_PhotosTimeline() {
1053+
actions = NodeActionBuilder()
1054+
.setNodeSelectionType(.files, selectedNodeCount: 4)
1055+
.setAreMediaFiles(true)
1056+
.setIsPhotosTimeline(true)
1057+
.multiselectBuild()
1058+
1059+
XCTAssertTrue(isEqual(nodeActionTypes: [.download, .shareLink, .exportFile, .sendToChat, .move, .copy, .moveToRubbishBin]))
1060+
}
1061+
1062+
func testMultiselectMediaFiles_MediaDiscovery() {
1063+
actions = NodeActionBuilder()
1064+
.setNodeSelectionType(.files, selectedNodeCount: 4)
1065+
.setAreMediaFiles(true)
1066+
.setIsMediaDiscovery(true)
1067+
.multiselectBuild()
1068+
1069+
XCTAssertTrue(isEqual(nodeActionTypes: [.download, .shareLink, .exportFile, .sendToChat, .move, .copy, .moveToRubbishBin]))
1070+
}
1071+
10311072
func testExportedNodeActions_nodeExported() {
10321073
actions = NodeActionBuilder()
10331074
.setDisplayMode(.cloudDrive)

iMEGA/Camera uploads/Extension/PhotosViewController+Additions.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
extension PhotosViewController {
22
@IBAction func moreAction(_ sender: UIBarButtonItem) {
3-
let nodeActionsViewController = NodeActionViewController(nodes: selection.nodes, delegate: self, displayMode: .selectionToolBar, sender: sender)
3+
let nodeActionsViewController = NodeActionViewController(nodes: selection.nodes, delegate: self, displayMode: .selectionToolBar, isPhotosTimeline: true, sender: sender)
44
present(nodeActionsViewController, animated: true, completion: nil)
55
}
66

iMEGA/Home/Scenes/HomeExplore/View/ExplorerBaseViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class ExplorerBaseViewController: UIViewController {
176176

177177
let myBackupsUC = MyBackupsUseCase(myBackupsRepository: MyBackupsRepository.newRepo, nodeRepository: NodeRepository.newRepo)
178178
let containsABackupNode = myBackupsUC.hasBackupNode(in: selectedNodes.toNodeEntities())
179-
let nodeActionsViewController = NodeActionViewController(nodes: selectedNodes, delegate: self, displayMode: .selectionToolBar, containsABackupNode: containsABackupNode, sender: button)
179+
let nodeActionsViewController = NodeActionViewController(nodes: selectedNodes, delegate: self, displayMode: .selectionToolBar, containsABackupNode: containsABackupNode, isMediaDiscovery: isKind(of: MediaDiscoveryViewController.self), sender: button)
180180
present(nodeActionsViewController, animated: true, completion: nil)
181181
}
182182

iMEGA/Utils/Shared Views/ViewControllers/CustomActionViewController/NodeActionBuilder.swift

+14-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ final class NodeActionBuilder {
2525
private var isTakedown = false
2626
private var isVerifyContact = false
2727
private var areMediaFiles = false
28+
private var isMediaDiscovery = false
29+
private var isPhotosTimeline = false
2830
private var sharedFolderContact: MEGAUser = MEGAUser()
2931

3032
func setDisplayMode(_ displayMode: DisplayMode) -> NodeActionBuilder {
@@ -155,6 +157,16 @@ final class NodeActionBuilder {
155157
return self
156158
}
157159

160+
func setIsMediaDiscovery(_ isMediaDiscovery: Bool) -> NodeActionBuilder {
161+
self.isMediaDiscovery = isMediaDiscovery
162+
return self
163+
}
164+
165+
func setIsPhotosTimeline(_ isPhotosTimeline: Bool) -> NodeActionBuilder {
166+
self.isPhotosTimeline = isPhotosTimeline
167+
return self
168+
}
169+
158170
func build() -> [NodeAction] {
159171
var nodeActions = [NodeAction]()
160172

@@ -188,7 +200,7 @@ final class NodeActionBuilder {
188200
favouriteAlbumActions()
189201
}
190202

191-
func mutiSelectNormalAlbumBuild() -> [NodeAction] {
203+
func multiSelectNormalAlbumBuild() -> [NodeAction] {
192204
normalAlbumActions()
193205
}
194206

@@ -697,7 +709,7 @@ final class NodeActionBuilder {
697709
.exportFileAction(nodeCount: selectedNodeCount),
698710
.sendToChatAction()]
699711

700-
if areMediaFiles {
712+
if areMediaFiles && !(displayMode == .favouriteAlbumSelectionToolBar || displayMode == .albumSelectionToolBar || isMediaDiscovery || isPhotosTimeline) {
701713
actions.append(.saveToPhotosAction())
702714
}
703715

iMEGA/Utils/Shared Views/ViewControllers/CustomActionViewController/NodeActionViewController.swift

+4-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class NodeActionViewController: ActionSheetViewController {
9797
shouldShowVerifyContact: shouldShowVerifyContact)
9898
}
9999

100-
init(nodes: [MEGANode], delegate: NodeActionViewControllerDelegate, displayMode: DisplayMode, isIncoming: Bool = false, containsABackupNode: Bool = false, sender: Any) {
100+
init(nodes: [MEGANode], delegate: NodeActionViewControllerDelegate, displayMode: DisplayMode, isIncoming: Bool = false, containsABackupNode: Bool = false, isMediaDiscovery: Bool = false, isPhotosTimeline: Bool = false, sender: Any) {
101101
self.nodes = nodes
102102
self.displayMode = displayMode
103103
self.delegate = delegate
@@ -131,7 +131,7 @@ class NodeActionViewController: ActionSheetViewController {
131131
.setNodeSelectionType(selectionType, selectedNodeCount: nodesCount)
132132
.setIsBackupNode(containsABackupNode)
133133
.setAreMediaFiles(areMediaFiles)
134-
.mutiSelectNormalAlbumBuild()
134+
.multiSelectNormalAlbumBuild()
135135
} else {
136136
let linkedNodeCount = nodes.publicLinkedNodes().count
137137
actions = NodeActionBuilder()
@@ -140,6 +140,8 @@ class NodeActionViewController: ActionSheetViewController {
140140
.setIsAllLinkedNode(linkedNodeCount == nodesCount)
141141
.setIsBackupNode(containsABackupNode)
142142
.setAreMediaFiles(areMediaFiles)
143+
.setIsMediaDiscovery(isMediaDiscovery)
144+
.setIsPhotosTimeline(isPhotosTimeline)
143145
.multiselectBuild()
144146
}
145147
}

0 commit comments

Comments
 (0)