Old: create a ContextMenuButton (which is an UIButton) and put it into a UIBarButtonItem (as customView).
New: Create UIBarButtonItem with ••• icon and a set of UIActions to show in a popup menu.
• now inset from bubble's edges
• updated background color
• updated description text color and size
Also includes quite a bunch of cleanup in LinkPreviewView.
All views underwent similar changes:
• use dynamic colors instead of Theme. colors; as a result themeDidChange() is not longer needed.
• use system-provided layout margins for things like titles, subtitles and buttons.
• use standard "large primary", "large secondary" etc button styles instead of OWSButton and OWSFlatButton.
• use capsule shape for donation amount fields on iOS 26.
• make currency selection dropdown button a bit larger so that it looks better.
• other various layout code improvements.
method to put provided views into a vertical stack view.
• method to put provided buttons into a vertical stack view.
All these would allow me to update reg flow screens to look the same without specifying layout metrics multiple times.
• adopt dynamic colors
• use system-provided layout margins
• tweak font sizes to better match other screens
• improve layout code and stop using PureLayout
• add "large primary", "large secondary", "medium secondary" SwiftUI button styles and use them.
• tweak subtitle font to match specs.
• use liquid glass button on iOS 26.
Creating a UIImageView outside a view hierarchy now crashes on iOS 18. We can
avoid this offscreen rendering technique by removing UIImage.asTintedImage(),
configuring the tint colour and template rendering on the UIImage directly, and
rendering with UIGraphicsImageRenderer instead of lower-level Core Graphics
APIs.
Splits `dequeueReusableCell(_:for:isRegistered:)` into two different methods,
overloaded on the presence of the `indexPath` parameter, allowing the `indexPath`
variant to return a non-optional value.
Also removes the `isRegistered` parameter, which was never passed by callers
and thus always defaulted to `true`.
The old UIButton API is still functional as long as we don't use
UIButton.Configuration, so we can safely ignore these warnings until we're
ready to adopt the configuration API across the codebase.