Merge branch 'mkirk/multisend-delete-icon'

pull/1/head
Michael Kirk 6 years ago
commit fe59979705

@ -2,17 +2,17 @@
"images" : [ "images" : [
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "x-shadow-12@1x.png", "filename" : "x-circle-shadow-24@1x.png",
"scale" : "1x" "scale" : "1x"
}, },
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "x-shadow-12@2x.png", "filename" : "x-circle-shadow-24@2x.png",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"idiom" : "universal", "idiom" : "universal",
"filename" : "x-shadow-12@3x.png", "filename" : "x-circle-shadow-24@3x.png",
"scale" : "3x" "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

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

@ -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? = { lazy var pagerScrollView: UIScrollView? = {
// This is kind of a hack. Since we don't have first class access to the superview's `scrollView` // 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. // we traverse the view hierarchy until we find it.
@ -566,12 +543,15 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
return return
} }
let cellViewDecoratorBlock = { (cellView: GalleryRailCellView) in let cellViewBuilder: () -> ApprovalRailCellView = { [weak self] in
self.addDeleteIcon(cellView: cellView) let cell = ApprovalRailCellView()
cell.approvalRailCellDelegate = self
return cell
} }
galleryRailView.configureCellViews(itemProvider: attachmentItemCollection, galleryRailView.configureCellViews(itemProvider: attachmentItemCollection,
focusedItem: currentItem, focusedItem: currentItem,
cellViewDecoratorBlock: cellViewDecoratorBlock) cellViewBuilder: cellViewBuilder)
galleryRailView.isHidden = attachmentItemCollection.attachmentItems.count < 2 galleryRailView.isHidden = attachmentItemCollection.attachmentItems.count < 2
} }
@ -1934,3 +1914,54 @@ class MediaMessageTextToolbar: UIView, UITextViewDelegate {
return CGFloatClamp(contentSize.height, kMinTextViewHeight, maxTextViewHeight) 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()
}
}
}

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

Loading…
Cancel
Save