Skip to content

Commit

Permalink
Merge 24.1 editorialized release notes (plus other changes) (#22489)
Browse files Browse the repository at this point in the history
  • Loading branch information
mokagio authored Jan 29, 2024
2 parents d80d73b + 12d4aa4 commit 4e58c91
Show file tree
Hide file tree
Showing 20 changed files with 99 additions and 233 deletions.
8 changes: 4 additions & 4 deletions Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ PODS:
- Sodium (0.9.1)
- Starscream (3.0.6)
- SVProgressHUD (2.2.5)
- SwiftLint (0.53.0)
- SwiftLint (0.54.0)
- UIDeviceIdentifier (2.3.0)
- WordPress-Aztec-iOS (1.19.9)
- WordPress-Editor-iOS (1.19.9):
Expand Down Expand Up @@ -130,6 +130,7 @@ SPEC REPOS:
https://github.com/wordpress-mobile/cocoapods-specs.git:
- WordPressAuthenticator
- WordPressKit
- WordPressShared
trunk:
- Alamofire
- AlamofireImage
Expand Down Expand Up @@ -158,7 +159,6 @@ SPEC REPOS:
- UIDeviceIdentifier
- WordPress-Aztec-iOS
- WordPress-Editor-iOS
- WordPressShared
- WordPressUI
- wpxmlrpc
- ZendeskCommonUISDK
Expand Down Expand Up @@ -208,13 +208,13 @@ SPEC CHECKSUMS:
Sodium: 23d11554ecd556196d313cf6130d406dfe7ac6da
Starscream: ef3ece99d765eeccb67de105bfa143f929026cf5
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
SwiftLint: 5ce4d6a8ff83f1b5fd5ad5dbf30965d35af65e44
SwiftLint: c1de071d9d08c8aba837545f6254315bc900e211
UIDeviceIdentifier: 442b65b4ff1832d4ca9c2a157815cb29ad981b17
WordPress-Aztec-iOS: fbebd569c61baa252b3f5058c0a2a9a6ada686bb
WordPress-Editor-iOS: bda9f7f942212589b890329a0cb22547311749ef
WordPressAuthenticator: e3c18f1b63222742a565fea3faf1a55a144ce8c4
WordPressKit: 57712035a44595cf49b0c9f0ad5b8b899a8cbe6a
WordPressShared: f99faa127509b666d2f8b931989a900e2fd9d10d
WordPressShared: cad7777b283d3ce2752f283df587342a581cd49b
WordPressUI: a491454affda3b0fb812812e637dc5e8f8f6bd06
wpxmlrpc: 68db063041e85d186db21f674adf08d9c70627fd
ZendeskCommonUISDK: 5f0a83f412e07ae23701f18c412fe783b3249ef5
Expand Down
5 changes: 5 additions & 0 deletions RELEASE-NOTES.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
24.2
-----

24.0.1
-----
* [**] Fix crash when RichText values are not defined [https://github.com/wordpress-mobile/gutenberg-mobile/pull/6563]

24.1
-----
Expand All @@ -19,6 +22,8 @@
* [*] [internal] Drop iOS 14 Support: Remove deprecated UIDocumentPickerViewController API [#22286]
* [***] [internal] Refactor WP.com sign in API requests [#22421]
* [*] Add In-App Feedback Prompt. [#22050]
* [**] Disabled the ability of creating new Story posts. [#22453]
* [**] Disabled Story block [#22449]

24.0
-----
Expand Down
4 changes: 1 addition & 3 deletions WordPress/Classes/Models/Blog.m
Original file line number Diff line number Diff line change
Expand Up @@ -707,9 +707,7 @@ - (BOOL)supportsPluginManagement

- (BOOL)supportsStories
{
BOOL hasRequiredJetpack = [self hasRequiredJetpackVersion:@"9.1"];
// Stories are disabled in iPad until this Kanvas issue is solved: https://github.com/tumblr/kanvas-ios/issues/104
return (hasRequiredJetpack || self.isHostedAtWPcom) && ![UIDevice isPad] && [JetpackFeaturesRemovalCoordinator jetpackFeaturesEnabled];
return NO;
}

- (BOOL)supportsContactInfo
Expand Down
32 changes: 0 additions & 32 deletions WordPress/Classes/Services/MediaHelper.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,38 +67,6 @@ class MediaHelper: NSObject {
}

}

static func advertiseImageOptimization(completion: @escaping (() -> Void)) {
guard MediaSettings().advertiseImageOptimization else {
completion()
return
}

let title = NSLocalizedString("appSettings.optimizeImagesPopup.title", value: "Keep optimizing images?",
comment: "Title of an alert informing users to enable image optimization in uploads.")
let message = NSLocalizedString("appSettings.optimizeImagesPopup.message", value: "Image optimization shrinks images for faster uploading.\n\nThis option is enabled by default, but you can change it in the app settings at any time.",
comment: "Message of an alert informing users to enable image optimization in uploads.")
let turnOffTitle = NSLocalizedString("appSettings.optimizeImagesPopup.turnOff", value: "No, turn off", comment: "Title of button for turning off image optimization, displayed in the alert informing users to enable image optimization in uploads.")
let leaveOnTitle = NSLocalizedString("appSettings.optimizeImagesPopup.turnOn", value: "Yes, leave on", comment: "Title of button for leaving on image optimization, displayed in the alert informing users to enable image optimization in uploads.")

let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
let turnOffAction = UIAlertAction(title: turnOffTitle, style: .default) { _ in
MediaSettings().imageOptimizationEnabled = false
WPAnalytics.track(.appSettingsOptimizeImagesPopupTapped, properties: ["option": "off"])
completion()
}
let leaveOnAction = UIAlertAction(title: leaveOnTitle, style: .default) { _ in
MediaSettings().imageOptimizationEnabled = true
WPAnalytics.track(.appSettingsOptimizeImagesPopupTapped, properties: ["option": "on"])
completion()
}
alert.addAction(turnOffAction)
alert.addAction(leaveOnAction)
alert.preferredAction = leaveOnAction
alert.presentFromRootViewController()

MediaSettings().advertiseImageOptimization = false
}
}

extension Media {
Expand Down
19 changes: 0 additions & 19 deletions WordPress/Classes/Services/MediaSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class MediaSettings: NSObject {
fileprivate let imageQualityKey = "SavedImageQualitySetting"
fileprivate let removeLocationKey = "SavedRemoveLocationSetting"
fileprivate let maxVideoSizeKey = "SavedMaxVideoSizeSetting"
fileprivate let advertiseImageOptimizationKey = "SavedAdvertiseImageOptimization"

fileprivate let defaultImageOptimization = true
fileprivate let defaultMaxImageDimension = 2000
Expand Down Expand Up @@ -209,11 +208,6 @@ class MediaSettings: NSObject {
}
set {
database.set(newValue, forKey: imageOptimizationKey)

// If the user changes this setting manually, we disable the image optimization popup.
if advertiseImageOptimization {
advertiseImageOptimization = false
}
}
}

Expand All @@ -229,17 +223,4 @@ class MediaSettings: NSObject {
database.set(newValue.rawValue, forKey: imageQualityKey)
}
}

var advertiseImageOptimization: Bool {
get {
if let savedAdvertiseImageOptimization = database.object(forKey: advertiseImageOptimizationKey) as? Bool {
return savedAdvertiseImageOptimization
} else {
return true
}
}
set {
database.set(newValue, forKey: advertiseImageOptimizationKey)
}
}
}
3 changes: 0 additions & 3 deletions WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,6 @@ import Foundation
case appSettingsClearSpotlightIndexTapped
case appSettingsClearSiriSuggestionsTapped
case appSettingsOpenDeviceSettingsTapped
case appSettingsOptimizeImagesPopupTapped

// Notifications
case notificationsPreviousTapped
Expand Down Expand Up @@ -1111,8 +1110,6 @@ import Foundation
return "app_settings_max_image_size_changed"
case .appSettingsImageQualityChanged:
return "app_settings_image_quality_changed"
case .appSettingsOptimizeImagesPopupTapped:
return "app_settings_optimize_images_popup_tapped"

// Account Close
case .accountCloseTapped:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,9 @@ class BlogDetailHeaderView: UIView {
assert(delegate != nil)

if let siteActionsMenu = delegate?.makeSiteActionsMenu() {
titleView.siteActionButton.showsMenuAsPrimaryAction = true
titleView.siteActionButton.menu = siteActionsMenu
titleView.siteActionButton.addAction(UIAction { _ in
titleView.siteSwitcherButton.menu = siteActionsMenu
titleView.siteSwitcherButton.addTarget(self, action: #selector(siteSwitcherTapped), for: .touchUpInside)
titleView.siteSwitcherButton.addAction(UIAction { _ in
WPAnalytics.trackEvent(.mySiteHeaderMoreTapped)
}, for: .menuActionTriggered)
}
Expand Down Expand Up @@ -214,7 +214,7 @@ extension BlogDetailHeaderView {
let stackView = UIStackView(arrangedSubviews: [
siteIconView,
titleStackView,
siteActionButton
siteSwitcherButton
])

stackView.alignment = .center
Expand Down Expand Up @@ -280,17 +280,17 @@ extension BlogDetailHeaderView {
return button
}()

let siteActionButton: UIButton = {
let siteSwitcherButton: UIButton = {
let button = UIButton(frame: .zero)
let image = UIImage(named: "more-horizontal-mobile")?.withRenderingMode(.alwaysTemplate)
let image = UIImage(named: "chevron-down-slim")?.withRenderingMode(.alwaysTemplate)

button.setImage(image, for: .normal)
button.contentMode = .center
button.translatesAutoresizingMaskIntoConstraints = false
button.tintColor = .secondaryLabel
button.accessibilityLabel = NSLocalizedString("mySite.siteActions.button", value: "Site Actions", comment: "Button that reveals more site actions")
button.accessibilityHint = NSLocalizedString("mySite.siteActions.hint", value: "Tap to show more site actions", comment: "Accessibility hint for button used to show more site actions")
button.accessibilityIdentifier = .siteActionAccessibilityId
button.accessibilityIdentifier = .switchSiteAccessibilityId

return button
}()
Expand Down Expand Up @@ -359,8 +359,8 @@ extension BlogDetailHeaderView {

private func setupConstraintsForSiteSwitcher() {
NSLayoutConstraint.activate([
siteActionButton.heightAnchor.constraint(equalToConstant: Dimensions.siteSwitcherHeight),
siteActionButton.widthAnchor.constraint(equalToConstant: Dimensions.siteSwitcherWidth)
siteSwitcherButton.heightAnchor.constraint(equalToConstant: Dimensions.siteSwitcherHeight),
siteSwitcherButton.widthAnchor.constraint(equalToConstant: Dimensions.siteSwitcherWidth)
])
}
}
Expand All @@ -370,7 +370,7 @@ private extension String {
// MARK: Accessibility Identifiers
static let siteTitleAccessibilityId = "site-title-button"
static let siteUrlAccessibilityId = "site-url-button"
static let siteActionAccessibilityId = "site-action-button"
static let switchSiteAccessibilityId = "switch-site-button"
}

private enum Strings {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ extension SitePickerViewController {
}
let viewController = UIActivityViewController(activityItems: [url], applicationActivities: nil)
if let popover = viewController.popoverPresentationController {
popover.sourceView = blogDetailHeaderView.titleView.siteActionButton
popover.sourceView = blogDetailHeaderView.titleView.siteSwitcherButton
}
present(viewController, animated: true, completion: nil)
WPAnalytics.trackEvent(.mySiteHeaderShareSiteTapped)
Expand All @@ -83,7 +83,7 @@ extension SitePickerViewController {
return
}

showAddSiteActionSheet(from: blogDetailHeaderView.titleView.siteActionButton,
showAddSiteActionSheet(from: blogDetailHeaderView.titleView.siteSwitcherButton,
canCreateWPComSite: canCreateWPComSite,
canAddSelfHostedSite: canAddSelfHostedSite)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,8 @@ extension GutenbergMediaPickerHelper: ImagePickerControllerDelegate {
switch mediaType {
case UTType.image.identifier:
if let image = info[.originalImage] as? UIImage {
MediaHelper.advertiseImageOptimization() { [self] in
self.didPickMediaCallback?([image])
self.didPickMediaCallback = nil
}
self.didPickMediaCallback?([image])
self.didPickMediaCallback = nil
}

case UTType.movie.identifier:
Expand Down Expand Up @@ -103,16 +101,7 @@ extension GutenbergMediaPickerHelper: PHPickerViewControllerDelegate {
return
}

let mediaFilter = picker.configuration.filter
if mediaFilter == PHPickerFilter(.all) || mediaFilter == PHPickerFilter(.image) {
MediaHelper.advertiseImageOptimization() { [self] in
didPickMediaCallback?(results.map(\.itemProvider))
didPickMediaCallback = nil
}
}
else {
didPickMediaCallback?(results.map(\.itemProvider))
didPickMediaCallback = nil
}
didPickMediaCallback?(results.map(\.itemProvider))
didPickMediaCallback = nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,9 @@ final class SiteMediaAddMediaMenuController: NSObject, PHPickerViewControllerDel
return
}

MediaHelper.advertiseImageOptimization() { [self] in
for result in results {
let info = MediaAnalyticsInfo(origin: .mediaLibrary(.deviceLibrary), selectionMethod: .fullScreenPicker)
coordinator.addMedia(from: result.itemProvider, to: blog, analyticsInfo: info)
}
for result in results {
let info = MediaAnalyticsInfo(origin: .mediaLibrary(.deviceLibrary), selectionMethod: .fullScreenPicker)
coordinator.addMedia(from: result.itemProvider, to: blog, analyticsInfo: info)
}
}

Expand All @@ -71,9 +69,7 @@ final class SiteMediaAddMediaMenuController: NSObject, PHPickerViewControllerDel
switch mediaType {
case UTType.image.identifier:
if let image = info[.originalImage] as? UIImage {
MediaHelper.advertiseImageOptimization() {
addAsset(from: image)
}
addAsset(from: image)
}
case UTType.movie.identifier:
if let videoURL = info[.mediaURL] as? URL {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,15 @@ extension PostSettingsViewController: PHPickerViewControllerDelegate, ImagePicke
public func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
self.dismiss(animated: true) {
if let result = results.first {
MediaHelper.advertiseImageOptimization() { [self] in
self.setFeaturedImage(with: result.itemProvider)
}
self.setFeaturedImage(with: result.itemProvider)
}
}
}

func imagePicker(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
self.dismiss(animated: true) {
if let image = info[.originalImage] as? UIImage {
MediaHelper.advertiseImageOptimization() { [self] in
self.setFeaturedImage(with: image)
}
self.setFeaturedImage(with: image)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,23 @@ extension WPTabBarController {

@objc func animateSelectedItem(_ item: UITabBarItem, for tabBar: UITabBar) {

guard let index = tabBar.items?.firstIndex(of: item), tabBar.subviews.count > index + 1 else {
// Order of subviews may not be guaranteed, so filter and sort them
let tabBarButtons = tabBar.subviews
.filter { $0 is UIControl }
.sorted { $0.frame.minX < $1.frame.minX }

// The number of buttons should be the same as the number of tab bar items
guard tabBarButtons.count == tabBar.items?.count else {
return
}

let button = tabBar.subviews[(index + 1)]
// Get the button that corresponds to the selected tab bar item
guard let index = tabBar.items?.firstIndex(of: item),
let button = tabBarButtons[safe: index] else {
return
}

// Get the button's image view
guard let imageView = button.subviews.lazy.compactMap({ $0 as? UIImageView }).first else {
return
}
Expand Down
17 changes: 11 additions & 6 deletions WordPress/Jetpack/Resources/AppStoreStrings.po
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,22 @@ msgctxt "app_store_keywords"
msgid "social,notes,jetpack,writing,geotagging,media,blog,website,blogging,journal"
msgstr ""

msgctxt "v24.0-whats-new"
msgctxt "v24.1-whats-new"
msgid ""
"You can now get a WordPress plan with a free domain in the domain dashboard. We also made some improvements to the Site Domains screen so it’s even easier to manage your domains.\n"
"You’ll now see a notification when you’re working offline. Media uploads to image blocks will also pause when your internet connection cuts out, then resume when you reconnect.\n"
"As an added bonus, when you manually retry a failed media upload, the app will retry all other failed media uploads in your post. Now that’s efficient.\n"
"\n"
"When you’re editing text blocks in the editor, your device’s keyboard will no longer disappear mid-edit. The editor will also scroll directly to a new block when you add it. Write away, friend.\n"
"When you select a custom gradient in the block editor, there’s now an indicator to show your chosen color.\n"
"\n"
"Miss logging in with your security keys? Not anymore—we’ve re-enabled security keys for two-factor authentication during login. The only one getting into your account is you.\n"
"Scrolling through your images on the Site Media details screen will make them load ahead of time for a faster experience. Or maybe they were there all along.\n"
"\n"
"We updated the colors of the login screen to match both WordPress and Jetpack. After all, teamwork makes the dream work.\n"
"We added support for higher-resolution thumbnails, GIF and video playback, documents, and other file previews. (homer-simpson-woohoo.gif)\n"
"\n"
"Finally, we made assorted code fixes and tackled several rare (and not-so-rare) problems that were causing app crashes. These issues were mostly related to editing tags and categories, using duplicate tags, deleting posts, and editing deleted posts. All in a day’s work.\n"
"We switched up the publishing flow to give you clearer instructions. Users with the “Contributor” role will see the “Submit for Review” action instead of “Publish.” You can also trash draft posts and deleted posts without having to confirm.\n"
"\n"
"There’s now a “Share” action in the site context menu so you can share your site with others.\n"
"\n"
"Finally, because we live for the applause, we improved the in-app rating prompt. You’ll be asked to leave a review if you’re happy with the app, or given a feedback form if you feel the app needs work. Feedback is how we get better, so feel free to share yours!\n"
msgstr ""

#. translators: This is a promo message that will be attached on top of the first screenshot in the App Store.
Expand Down
Loading

0 comments on commit 4e58c91

Please sign in to comment.