Only show delete button on selected rail item

This commit is contained in:
Michael Kirk 2019-01-08 13:07:23 -07:00
parent 268d1c4b63
commit 0ab326da92
10 changed files with 73 additions and 38 deletions

View File

@ -2,17 +2,17 @@
"images" : [
{
"idiom" : "universal",
"filename" : "x-shadow-12@1x.png",
"filename" : "x-circle-shadow-24@1x.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "x-shadow-12@2x.png",
"filename" : "x-circle-shadow-24@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "x-shadow-12@3x.png",
"filename" : "x-circle-shadow-24@3x.png",
"scale" : "3x"
}
],

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 979 B

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
import UIKit
@ -331,7 +331,9 @@ class MediaPageViewController: UIPageViewController, UIPageViewControllerDataSou
return
}
galleryRailView.configureCellViews(itemProvider: currentItem.album, focusedItem: currentItem, cellViewDecoratorBlock: { _ in })
galleryRailView.configureCellViews(itemProvider: currentItem.album,
focusedItem: currentItem,
cellViewBuilder: { return GalleryRailCellView() })
}
// MARK: Actions

View File

@ -400,29 +400,6 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
})
}
func addDeleteIcon(cellView: GalleryRailCellView) {
guard let attachmentItem = cellView.item as? SignalAttachmentItem else {
owsFailDebug("attachmentItem was unexpectedly nil")
return
}
let button = OWSButton { [weak self] in
guard let strongSelf = self else { return }
strongSelf.remove(attachmentItem: attachmentItem)
}
button.setImage(#imageLiteral(resourceName: "ic_small_x"), for: .normal)
let kInsetDistance: CGFloat = 5
button.imageEdgeInsets = UIEdgeInsets(top: kInsetDistance, left: kInsetDistance, bottom: kInsetDistance, right: kInsetDistance)
cellView.addSubview(button)
let kButtonWidth: CGFloat = 9 + kInsetDistance * 2
button.autoSetDimensions(to: CGSize(width: kButtonWidth, height: kButtonWidth))
button.autoPinEdge(toSuperviewMargin: .top)
button.autoPinEdge(toSuperviewMargin: .trailing)
}
lazy var pagerScrollView: UIScrollView? = {
// This is kind of a hack. Since we don't have first class access to the superview's `scrollView`
// we traverse the view hierarchy until we find it.
@ -566,12 +543,15 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
return
}
let cellViewDecoratorBlock = { (cellView: GalleryRailCellView) in
self.addDeleteIcon(cellView: cellView)
let cellViewBuilder: () -> ApprovalRailCellView = { [weak self] in
let cell = ApprovalRailCellView()
cell.approvalRailCellDelegate = self
return cell
}
galleryRailView.configureCellViews(itemProvider: attachmentItemCollection,
focusedItem: currentItem,
cellViewDecoratorBlock: cellViewDecoratorBlock)
cellViewBuilder: cellViewBuilder)
galleryRailView.isHidden = attachmentItemCollection.attachmentItems.count < 2
}
@ -1934,3 +1914,54 @@ class MediaMessageTextToolbar: UIView, UITextViewDelegate {
return CGFloatClamp(contentSize.height, kMinTextViewHeight, maxTextViewHeight)
}
}
extension AttachmentApprovalViewController: ApprovalRailCellViewDelegate {
func approvalRailCellView(_ approvalRailCellView: ApprovalRailCellView, didRemoveItem attachmentItem: SignalAttachmentItem) {
remove(attachmentItem: attachmentItem)
}
}
protocol ApprovalRailCellViewDelegate: class {
func approvalRailCellView(_ approvalRailCellView: ApprovalRailCellView, didRemoveItem attachmentItem: SignalAttachmentItem)
}
public class ApprovalRailCellView: GalleryRailCellView {
weak var approvalRailCellDelegate: ApprovalRailCellViewDelegate?
lazy var deleteButton: UIButton = {
let button = OWSButton { [weak self] in
guard let strongSelf = self else { return }
guard let attachmentItem = strongSelf.item as? SignalAttachmentItem else {
owsFailDebug("attachmentItem was unexpectedly nil")
return
}
strongSelf.approvalRailCellDelegate?.approvalRailCellView(strongSelf, didRemoveItem: attachmentItem)
}
button.setImage(#imageLiteral(resourceName: "ic_circled_x"), for: .normal)
let kInsetDistance: CGFloat = 5
button.imageEdgeInsets = UIEdgeInsets(top: kInsetDistance, left: kInsetDistance, bottom: kInsetDistance, right: kInsetDistance)
let kButtonWidth: CGFloat = 24 + kInsetDistance * 2
button.autoSetDimensions(to: CGSize(width: kButtonWidth, height: kButtonWidth))
return button
}()
override func setIsSelected(_ isSelected: Bool) {
super.setIsSelected(isSelected)
if isSelected {
addSubview(deleteButton)
deleteButton.autoPinEdge(toSuperviewEdge: .top, withInset: -12)
deleteButton.autoPinEdge(toSuperviewEdge: .trailing, withInset: -8)
} else {
deleteButton.removeFromSuperview()
}
}
}

View File

@ -1,5 +1,5 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
//
import PromiseKit
@ -25,7 +25,7 @@ public class GalleryRailCellView: UIView {
super.init(frame: frame)
layoutMargins = .zero
self.clipsToBounds = true
clipsToBounds = false
addSubview(imageView)
imageView.autoPinEdgesToSuperviewMargins()
@ -107,7 +107,9 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
override init(frame: CGRect) {
super.init(frame: frame)
clipsToBounds = false
addSubview(scrollView)
scrollView.clipsToBounds = false
scrollView.layoutMargins = .zero
scrollView.autoPinEdgesToSuperviewMargins()
}
@ -118,7 +120,7 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
// MARK: Public
public func configureCellViews(itemProvider: GalleryRailItemProvider?, focusedItem: GalleryRailItem?, cellViewDecoratorBlock: (GalleryRailCellView) -> Void) {
public func configureCellViews(itemProvider: GalleryRailItemProvider?, focusedItem: GalleryRailItem?, cellViewBuilder: () -> GalleryRailCellView) {
let animationDuration: TimeInterval = 0.2
guard let itemProvider = itemProvider else {
@ -169,11 +171,12 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
self.isHidden = false
}
let cellViews = buildCellViews(items: itemProvider.railItems, cellViewDecoratorBlock: cellViewDecoratorBlock)
let cellViews = buildCellViews(items: itemProvider.railItems, cellViewBuilder: cellViewBuilder)
self.cellViews = cellViews
let stackView = UIStackView(arrangedSubviews: cellViews)
stackView.axis = .horizontal
stackView.spacing = 2
stackView.clipsToBounds = false
scrollView.addSubview(stackView)
stackView.autoPinEdgesToSuperviewEdges()
@ -203,11 +206,10 @@ public class GalleryRailView: UIView, GalleryRailCellViewDelegate {
return scrollView
}()
private func buildCellViews(items: [GalleryRailItem], cellViewDecoratorBlock: (GalleryRailCellView) -> Void) -> [GalleryRailCellView] {
private func buildCellViews(items: [GalleryRailItem], cellViewBuilder: () -> GalleryRailCellView) -> [GalleryRailCellView] {
return items.map { item in
let cellView = GalleryRailCellView()
let cellView = cellViewBuilder()
cellView.configure(item: item, delegate: self)
cellViewDecoratorBlock(cellView)
return cellView
}
}