From 29aedd499d06e87e0b76942da48ea27fdf4212d4 Mon Sep 17 00:00:00 2001 From: Shweta Waikar Date: Wed, 28 Jun 2023 12:11:45 +0530 Subject: [PATCH 01/10] NMC 2341 NCTrash Grid cell selection changes --- iOSClient/Trash/Cell/NCTrashGridCell.swift | 180 +++++++++++++++++++ iOSClient/Trash/Cell/NCTrashGridCell.xib | 140 +++++++++++++++ iOSClient/Trash/NCTrash+CollectionView.swift | 4 +- iOSClient/Trash/NCTrash.swift | 2 +- 4 files changed, 323 insertions(+), 3 deletions(-) create mode 100644 iOSClient/Trash/Cell/NCTrashGridCell.swift create mode 100644 iOSClient/Trash/Cell/NCTrashGridCell.xib diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.swift b/iOSClient/Trash/Cell/NCTrashGridCell.swift new file mode 100644 index 0000000000..3110e2fbe7 --- /dev/null +++ b/iOSClient/Trash/Cell/NCTrashGridCell.swift @@ -0,0 +1,180 @@ +// +// NCTrashGridCell.swift +// Nextcloud +// +// Created by A200073704 on 27/06/23. +// Copyright © 2023 Marino Faggiana. All rights reserved. +// + +import UIKit + +class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { + + + @IBOutlet weak var imageItem: UIImageView! + @IBOutlet weak var imageSelect: UIImageView! + @IBOutlet weak var imageStatus: UIImageView! + @IBOutlet weak var imageFavorite: UIImageView! + @IBOutlet weak var imageLocal: UIImageView! + @IBOutlet weak var labelTitle: UILabel! + @IBOutlet weak var labelInfo: UILabel! + @IBOutlet weak var buttonMore: UIButton! + @IBOutlet weak var imageVisualEffect: UIVisualEffectView! + @IBOutlet weak var progressView: UIProgressView! + + internal var objectId = "" + private var user = "" + + weak var delegate: NCGridCellDelegate? + var namedButtonMore = "" + + var fileObjectId: String? { + get { return objectId } + set { objectId = newValue ?? "" } + } + var filePreviewImageView: UIImageView? { + get { return imageItem } + set { imageItem = newValue } + } + var fileUser: String? { + get { return user } + set { user = newValue ?? "" } + } + var fileTitleLabel: UILabel? { + get { return labelTitle } + set { labelTitle = newValue } + } + var fileInfoLabel: UILabel? { + get { return labelInfo } + set { labelInfo = newValue } + } + var fileProgressView: UIProgressView? { + get { return progressView } + set { progressView = newValue } + } + var fileSelectImage: UIImageView? { + get { return imageSelect } + set { imageSelect = newValue } + } + var fileStatusImage: UIImageView? { + get { return imageStatus } + set { imageStatus = newValue } + } + var fileLocalImage: UIImageView? { + get { return imageLocal } + set { imageLocal = newValue } + } + var fileFavoriteImage: UIImageView? { + get { return imageFavorite } + set { imageFavorite = newValue } + } + + override func awakeFromNib() { + super.awakeFromNib() + + // use entire cell as accessibility element + accessibilityHint = nil + accessibilityLabel = nil + accessibilityValue = nil + isAccessibilityElement = true + + imageItem.layer.cornerRadius = 6 + imageItem.layer.masksToBounds = true + + imageVisualEffect.layer.cornerRadius = 6 + imageVisualEffect.clipsToBounds = true + imageVisualEffect.alpha = 0.5 + + progressView.tintColor = NCBrandColor.shared.brandElement + progressView.transform = CGAffineTransform(scaleX: 1.0, y: 0.5) + progressView.trackTintColor = .clear + + labelTitle.text = "" + labelInfo.text = "" + labelTitle.textColor = .label + labelInfo.textColor = .systemGray + } + + override func prepareForReuse() { + super.prepareForReuse() + imageItem.backgroundColor = nil + accessibilityHint = nil + accessibilityLabel = nil + accessibilityValue = nil + } + + override func snapshotView(afterScreenUpdates afterUpdates: Bool) -> UIView? { + return nil + } + + @IBAction func touchUpInsideMore(_ sender: Any) { + delegate?.tapMoreGridItem(with: objectId, namedButtonMore: namedButtonMore, image: imageItem.image, sender: sender) + } + + + fileprivate func setA11yActions() { + let moreName = namedButtonMore == NCGlobal.shared.buttonMoreStop ? "_cancel_" : "_more_" + + self.accessibilityCustomActions = [ + UIAccessibilityCustomAction( + name: NSLocalizedString(moreName, comment: ""), + target: self, + selector: #selector(touchUpInsideMore)) + ] + } + + func setButtonMore(named: String, image: UIImage) { + namedButtonMore = named + buttonMore.setImage(image, for: .normal) + setA11yActions() + } + + func hideButtonMore(_ status: Bool) { + buttonMore.isHidden = status + } + + func selectMode(_ status: Bool) { + if status { + imageSelect.isHidden = false + buttonMore.isHidden = true + accessibilityCustomActions = nil + } else { + imageSelect.isHidden = true + imageVisualEffect.isHidden = true + buttonMore.isHidden = false + setA11yActions() + } + } + + func selected(_ status: Bool) { + if status { + if traitCollection.userInterfaceStyle == .dark { + imageVisualEffect.effect = UIBlurEffect(style: .dark) + imageVisualEffect.backgroundColor = .black + } else { + imageVisualEffect.effect = UIBlurEffect(style: .extraLight) + imageVisualEffect.backgroundColor = .lightGray + } + imageSelect.image = NCBrandColor.cacheImages.checkedYes + imageVisualEffect.isHidden = false + } else { + imageSelect.isHidden = true + imageVisualEffect.isHidden = true + } + } + + func writeInfoDateSize(date: NSDate, size: Int64) { + + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .short + dateFormatter.timeStyle = .none + dateFormatter.locale = Locale.current + + labelInfo.text = dateFormatter.string(from: date as Date) + " · " + CCUtility.transformedSize(size) + } + + func setAccessibility(label: String, value: String) { + accessibilityLabel = label + accessibilityValue = value + } +} diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.xib b/iOSClient/Trash/Cell/NCTrashGridCell.xib new file mode 100644 index 0000000000..91bd5f805d --- /dev/null +++ b/iOSClient/Trash/Cell/NCTrashGridCell.xib @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSClient/Trash/NCTrash+CollectionView.swift b/iOSClient/Trash/NCTrash+CollectionView.swift index 45f39b20da..355391eb2d 100644 --- a/iOSClient/Trash/NCTrash+CollectionView.swift +++ b/iOSClient/Trash/NCTrash+CollectionView.swift @@ -84,8 +84,8 @@ extension NCTrash: UICollectionViewDataSource { cell = listCell } else { // GRID - guard let gridCell = collectionView.dequeueReusableCell(withReuseIdentifier: "gridCell", for: indexPath) as? NCGridCell else { return UICollectionViewCell() } - gridCell.setButtonMore(named: NCGlobal.shared.buttonMoreMore, image: NCImageCache.images.buttonMore) + guard let gridCell = collectionView.dequeueReusableCell(withReuseIdentifier: "gridCell", for: indexPath) as? NCTrashGridCell else { return UICollectionViewCell() } + gridCell.setButtonMore(named: NCGlobal.shared.buttonMoreMore, image: NCBrandColor.cacheImages.buttonMore) gridCell.delegate = self cell = gridCell } diff --git a/iOSClient/Trash/NCTrash.swift b/iOSClient/Trash/NCTrash.swift index 33d2b77dbc..56ea97b7fa 100644 --- a/iOSClient/Trash/NCTrash.swift +++ b/iOSClient/Trash/NCTrash.swift @@ -62,7 +62,7 @@ class NCTrash: UIViewController, NCSelectableNavigationView, NCTrashListCellDele // Cell collectionView.register(UINib(nibName: "NCTrashListCell", bundle: nil), forCellWithReuseIdentifier: "listCell") - collectionView.register(UINib(nibName: "NCGridCell", bundle: nil), forCellWithReuseIdentifier: "gridCell") + collectionView.register(UINib(nibName: "NCTrashGridCell", bundle: nil), forCellWithReuseIdentifier: "gridCell") // Header - Footer collectionView.register(UINib(nibName: "NCSectionHeaderMenu", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "sectionHeaderMenu") From 17efe40bd4d34e272043e1f5a053a28b4e3ddf9b Mon Sep 17 00:00:00 2001 From: Shweta Waikar Date: Fri, 30 Jun 2023 13:13:34 +0530 Subject: [PATCH 02/10] NMC 2341 - Issue ( NMC 3257) Fixed. --- iOSClient/Menu/NCTrash+Menu.swift | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/iOSClient/Menu/NCTrash+Menu.swift b/iOSClient/Menu/NCTrash+Menu.swift index faf37f86ea..9f61b5ee91 100644 --- a/iOSClient/Menu/NCTrash+Menu.swift +++ b/iOSClient/Menu/NCTrash+Menu.swift @@ -48,7 +48,7 @@ extension NCTrash { NCMenuAction.seperator(), NCMenuAction( title: NSLocalizedString("_trash_restore_selected_", comment: ""), - icon: utility.loadImage(named: "restore"), + icon: utility.loadImage(named: "restore").image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in self.selectOcId.forEach(self.restoreItem) self.tapSelect() @@ -56,7 +56,7 @@ extension NCTrash { ), NCMenuAction( title: NSLocalizedString("_trash_delete_selected_", comment: ""), - icon: utility.loadImage(named: "trash"), + icon: utility.loadImage(named: "trash").image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in let alert = UIAlertController(title: NSLocalizedString("_trash_delete_selected_", comment: ""), message: "", preferredStyle: .alert) alert.addAction(UIAlertAction(title: NSLocalizedString("_delete_", comment: ""), style: .destructive, handler: { _ in @@ -77,7 +77,7 @@ extension NCTrash { actions.append( NCMenuAction( title: NSLocalizedString("_trash_restore_all_", comment: ""), - icon: utility.loadImage(named: "restore"), + icon: utility.loadImage(named: "restore").image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in self.datasource.forEach({ self.restoreItem(with: $0.fileId) }) } @@ -87,7 +87,7 @@ extension NCTrash { actions.append( NCMenuAction( title: NSLocalizedString("_trash_delete_all_", comment: ""), - icon: utility.loadImage(named: "trash"), + icon: utility.loadImage(named: "trash").image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in let alert = UIAlertController(title: NSLocalizedString("_trash_delete_all_description_", comment: ""), message: "", preferredStyle: .alert) alert.addAction(UIAlertAction(title: NSLocalizedString("_trash_delete_all_", comment: ""), style: .destructive, handler: { _ in @@ -125,9 +125,9 @@ extension NCTrash { iconHeader = icon } else { if tableTrash.directory { - iconHeader = UIImage(named: "folder")!.image(color: UIColor.systemGray, size: 50) + iconHeader = UIImage(named: "folder")!.image(color: NCBrandColor.shared.iconColor, size: 50) } else { - iconHeader = UIImage(named: tableTrash.iconName) + iconHeader = UIImage(named: tableTrash.iconName)!.image(color: NCBrandColor.shared.iconColor, size: 50) } } @@ -142,7 +142,7 @@ extension NCTrash { actions.append( NCMenuAction( title: NSLocalizedString("_restore_", comment: ""), - icon: UIImage(named: "restore")!.image(color: UIColor.systemGray, size: 50), + icon: UIImage(named: "restore")!.image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in self.restoreItem(with: objectId) } @@ -152,7 +152,7 @@ extension NCTrash { actions.append( NCMenuAction( title: NSLocalizedString("_delete_", comment: ""), - icon: utility.loadImage(named: "trash"), + icon: utility.loadImage(named: "trash").image(color: NCBrandColor.shared.iconColor, size: 50), action: { _ in self.deleteItem(with: objectId) } From de70789f6bf428a8c1aeb2f954024747992d2364 Mon Sep 17 00:00:00 2001 From: Amrut Waghmare Date: Mon, 11 Sep 2023 11:59:26 +0530 Subject: [PATCH 03/10] NMC 2341 - NMC 2357 - icon color issue fixed --- iOSClient/Menu/NCTrash+Menu.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iOSClient/Menu/NCTrash+Menu.swift b/iOSClient/Menu/NCTrash+Menu.swift index 9f61b5ee91..e50e200f7d 100644 --- a/iOSClient/Menu/NCTrash+Menu.swift +++ b/iOSClient/Menu/NCTrash+Menu.swift @@ -125,9 +125,9 @@ extension NCTrash { iconHeader = icon } else { if tableTrash.directory { - iconHeader = UIImage(named: "folder")!.image(color: NCBrandColor.shared.iconColor, size: 50) + iconHeader = UIImage(named: "folder") } else { - iconHeader = UIImage(named: tableTrash.iconName)!.image(color: NCBrandColor.shared.iconColor, size: 50) + iconHeader = UIImage(named: tableTrash.iconName) } } From fc029f4ffebfb6d37068f1175242a0eb021eda1a Mon Sep 17 00:00:00 2001 From: Shweta Waikar Date: Fri, 30 Jun 2023 13:13:34 +0530 Subject: [PATCH 04/10] NMC 2341 - Issue ( NMC 3257) Fixed. --- iOSClient/Menu/NCTrash+Menu.swift | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/iOSClient/Menu/NCTrash+Menu.swift b/iOSClient/Menu/NCTrash+Menu.swift index e50e200f7d..d4a6fa95c3 100644 --- a/iOSClient/Menu/NCTrash+Menu.swift +++ b/iOSClient/Menu/NCTrash+Menu.swift @@ -30,22 +30,6 @@ import NextcloudKit extension NCTrash { var selectActions: [NCMenuAction] { [ - NCMenuAction( - title: NSLocalizedString("_cancel_", comment: ""), - icon: utility.loadImage(named: "xmark"), - action: { _ in - self.tapSelect() - } - ), - NCMenuAction( - title: NSLocalizedString("_select_all_", comment: ""), - icon: utility.loadImage(named: "checkmark.circle.fill"), - action: { _ in - self.selectOcId = self.datasource.map { $0.fileId } - self.collectionView.reloadData() - } - ), - NCMenuAction.seperator(), NCMenuAction( title: NSLocalizedString("_trash_restore_selected_", comment: ""), icon: utility.loadImage(named: "restore").image(color: NCBrandColor.shared.iconColor, size: 50), @@ -125,9 +109,9 @@ extension NCTrash { iconHeader = icon } else { if tableTrash.directory { - iconHeader = UIImage(named: "folder") + iconHeader = UIImage(named: "folder")!.image(color: NCBrandColor.shared.iconColor, size: 50) } else { - iconHeader = UIImage(named: tableTrash.iconName) + iconHeader = UIImage(named: tableTrash.iconName)!.image(color: NCBrandColor.shared.iconColor, size: 50) } } From 2db29b7da176ece6e17eb83a654b61003154e24f Mon Sep 17 00:00:00 2001 From: Amrut Waghmare Date: Mon, 11 Sep 2023 11:59:26 +0530 Subject: [PATCH 05/10] NMC 2341 - NMC 2357 - icon color issue fixed --- iOSClient/Menu/NCTrash+Menu.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iOSClient/Menu/NCTrash+Menu.swift b/iOSClient/Menu/NCTrash+Menu.swift index d4a6fa95c3..161900d5e2 100644 --- a/iOSClient/Menu/NCTrash+Menu.swift +++ b/iOSClient/Menu/NCTrash+Menu.swift @@ -109,9 +109,9 @@ extension NCTrash { iconHeader = icon } else { if tableTrash.directory { - iconHeader = UIImage(named: "folder")!.image(color: NCBrandColor.shared.iconColor, size: 50) + iconHeader = UIImage(named: "folder") } else { - iconHeader = UIImage(named: tableTrash.iconName)!.image(color: NCBrandColor.shared.iconColor, size: 50) + iconHeader = UIImage(named: tableTrash.iconName) } } From 0052649e8b208730e67203734ab3c124c77badea Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Wed, 18 Oct 2023 15:33:54 +0530 Subject: [PATCH 06/10] NMC 2341 - Merging changes after 4.9.1 indexPath added in NCTrashCellProtocol --- iOSClient/Trash/Cell/NCTrashGridCell.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.swift b/iOSClient/Trash/Cell/NCTrashGridCell.swift index 3110e2fbe7..f2794d90ca 100644 --- a/iOSClient/Trash/Cell/NCTrashGridCell.swift +++ b/iOSClient/Trash/Cell/NCTrashGridCell.swift @@ -23,6 +23,7 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { @IBOutlet weak var progressView: UIProgressView! internal var objectId = "" + var indexPath = IndexPath() private var user = "" weak var delegate: NCGridCellDelegate? @@ -108,7 +109,7 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { } @IBAction func touchUpInsideMore(_ sender: Any) { - delegate?.tapMoreGridItem(with: objectId, namedButtonMore: namedButtonMore, image: imageItem.image, sender: sender) + delegate?.tapMoreGridItem(with: objectId, namedButtonMore: namedButtonMore, image: imageItem.image, indexPath: indexPath, sender: sender) } From d9b4b288400f798e4cb292d56c30d6f73e0580bf Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Mon, 4 Dec 2023 13:37:58 +0530 Subject: [PATCH 07/10] NMC 2341 - Merging conflict resolve after NC release 4.9.2 --- iOSClient/Trash/Cell/NCTrashGridCell.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.swift b/iOSClient/Trash/Cell/NCTrashGridCell.swift index f2794d90ca..e45c99b78c 100644 --- a/iOSClient/Trash/Cell/NCTrashGridCell.swift +++ b/iOSClient/Trash/Cell/NCTrashGridCell.swift @@ -156,7 +156,7 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { imageVisualEffect.effect = UIBlurEffect(style: .extraLight) imageVisualEffect.backgroundColor = .lightGray } - imageSelect.image = NCBrandColor.cacheImages.checkedYes + imageSelect.image = NCImageCache.images.checkedYes imageVisualEffect.isHidden = false } else { imageSelect.isHidden = true @@ -171,7 +171,7 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { dateFormatter.timeStyle = .none dateFormatter.locale = Locale.current - labelInfo.text = dateFormatter.string(from: date as Date) + " · " + CCUtility.transformedSize(size) + labelInfo.text = dateFormatter.string(from: date as Date) + " · " + NCUtilityFileSystem().transformedSize(size) } func setAccessibility(label: String, value: String) { From 2df76203d35b20b7a6e7d0325e42053f6c5286bc Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:43:55 +0530 Subject: [PATCH 08/10] NMC 2341 - Merging conflicts resolve after Nextcloud 4.9.3 release --- iOSClient/Trash/NCTrash+CollectionView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iOSClient/Trash/NCTrash+CollectionView.swift b/iOSClient/Trash/NCTrash+CollectionView.swift index 355391eb2d..41634979b2 100644 --- a/iOSClient/Trash/NCTrash+CollectionView.swift +++ b/iOSClient/Trash/NCTrash+CollectionView.swift @@ -85,7 +85,7 @@ extension NCTrash: UICollectionViewDataSource { } else { // GRID guard let gridCell = collectionView.dequeueReusableCell(withReuseIdentifier: "gridCell", for: indexPath) as? NCTrashGridCell else { return UICollectionViewCell() } - gridCell.setButtonMore(named: NCGlobal.shared.buttonMoreMore, image: NCBrandColor.cacheImages.buttonMore) + gridCell.setButtonMore(named: NCGlobal.shared.buttonMoreMore, image: NCImageCache.images.buttonMore) gridCell.delegate = self cell = gridCell } From ed87d73fe7192b1dd5ce1e326b1b9e685ab9d94c Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Tue, 26 Dec 2023 13:52:10 +0530 Subject: [PATCH 09/10] NMC 2341 - Select all option added in menu --- iOSClient/Menu/NCTrash+Menu.swift | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/iOSClient/Menu/NCTrash+Menu.swift b/iOSClient/Menu/NCTrash+Menu.swift index 161900d5e2..eab0d422e3 100644 --- a/iOSClient/Menu/NCTrash+Menu.swift +++ b/iOSClient/Menu/NCTrash+Menu.swift @@ -29,7 +29,16 @@ import NextcloudKit extension NCTrash { var selectActions: [NCMenuAction] { - [ + var actions = [NCMenuAction]() + actions.append(.cancelAction { + self.tapSelect() + }) + if selectOcId.count != selectableDataSource.count { + actions.append(.selectAllAction(action: collectionViewSelectAll)) + } + + guard !selectOcId.isEmpty else { return actions } + actions.append(contentsOf: [ NCMenuAction( title: NSLocalizedString("_trash_restore_selected_", comment: ""), icon: utility.loadImage(named: "restore").image(color: NCBrandColor.shared.iconColor, size: 50), @@ -51,7 +60,8 @@ extension NCTrash { self.present(alert, animated: true, completion: nil) } ) - ] + ]) + return actions } func toggleMenuMoreHeader() { From ee8e039034c0a95f276226a60b0839279d1ae328 Mon Sep 17 00:00:00 2001 From: TSI-amrutwaghmare <96108296+TSI-amrutwaghmare@users.noreply.github.com> Date: Tue, 23 Jan 2024 14:02:27 +0530 Subject: [PATCH 10/10] NMC 2341 - Selection icon added for grid view --- iOSClient/Trash/Cell/NCTrashGridCell.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iOSClient/Trash/Cell/NCTrashGridCell.swift b/iOSClient/Trash/Cell/NCTrashGridCell.swift index e45c99b78c..77e798f02a 100644 --- a/iOSClient/Trash/Cell/NCTrashGridCell.swift +++ b/iOSClient/Trash/Cell/NCTrashGridCell.swift @@ -159,7 +159,7 @@ class NCTrashGridCell: UICollectionViewCell, NCTrashCellProtocol { imageSelect.image = NCImageCache.images.checkedYes imageVisualEffect.isHidden = false } else { - imageSelect.isHidden = true + imageSelect.image = NCImageCache.images.checkedNo imageVisualEffect.isHidden = true } }