Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge 24.1 editorialized release notes (plus other changes) #22489

Merged
merged 39 commits into from
Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
fc3bdb9
filter and sort tab bar subviews
Jan 22, 2024
081fe35
Tab bar animation: filter and sort tab bar subviews (#22430)
momo-ozawa Jan 22, 2024
6033a88
Update gutenberg-mobile ref to 1.110.1
derekblank Jan 23, 2024
b994f83
Update RELEASE-NOTES.txt
derekblank Jan 23, 2024
2e325da
Update Gutenberg ref to 1.110.1 tag
derekblank Jan 23, 2024
1b67c0e
Update Podfile.lock
derekblank Jan 23, 2024
a3f1966
Integrate gutenberg-mobile release v1.110.1 (#22437)
derekblank Jan 23, 2024
51b0262
Bump version number
spencertransier Jan 23, 2024
6d7e86d
Merge branch 'release/24.0.1' of https://github.com/wordpress-mobile/…
spencertransier Jan 23, 2024
5e1af7f
Add raw release notes for WordPress 24.1
mokagio Jan 23, 2024
401990b
Add raw release notes for Jetpack 24.1
mokagio Jan 23, 2024
200ca39
Update metadata strings
wpmobilebot Jan 23, 2024
1349fba
Update metadata strings
wpmobilebot Jan 23, 2024
3242461
Update Gutenberg Mobile reference
Jan 23, 2024
5b1c7aa
Update Gutenberg Mobile reference
Jan 23, 2024
09aa2db
Integrate gutenberg-mobile release v1.111.1 (#22446)
Jan 23, 2024
e1f2db5
Revert the Site Header action sheet change
kean Jan 23, 2024
63a052d
Merge branch 'release/24.1' into merge/24.0.1-into-release-24.1
spencertransier Jan 23, 2024
00844f0
Update: disable stories for all blogs
hassaanelgarem Jan 24, 2024
f7d86e4
Add: release note for disabling stories
hassaanelgarem Jan 24, 2024
9c15777
Merge 24.0.1 hotfix into `release/24.1` (#22438)
spencertransier Jan 24, 2024
efe43e1
fix ui test
Jan 24, 2024
0005110
Disable the ability of creating new Story posts (#22453)
hassaanelgarem Jan 24, 2024
fe558b8
Revert Site Header change and re-introducing quick site switching (#2…
kean Jan 24, 2024
043df6a
feat: Remove optimisation pop-up for upload
Jan 25, 2024
563ec2f
refactor: Remove redundant tests
Jan 25, 2024
7646c81
Remove image optimization pop-up (#22476)
Jan 26, 2024
a23a4c3
Disable Story block
fluiddot Jan 23, 2024
36edfaf
Remove initial prop to control Story block
fluiddot Jan 23, 2024
1fc41da
Update Gutenberg Mobile reference
fluiddot Jan 26, 2024
4326157
Update release notes
fluiddot Jan 26, 2024
b3d8808
Update Gutenberg Mobile reference with tag
fluiddot Jan 26, 2024
4faefdb
Integrate gutenberg-mobile release v1.111.2 (#22482)
fluiddot Jan 26, 2024
f30ce52
Update WordPress 24.1 release notes with feedback from @kean
mokagio Jan 29, 2024
d00c632
Update Jetpack 24.1 release notes with feedback from @kean
mokagio Jan 29, 2024
da157ee
Update metadata strings
mokagio Jan 29, 2024
7b6e348
Update metadata strings
mokagio Jan 29, 2024
b7f50e0
Merge editorialized release notes in 24.1 (#22441)
mokagio Jan 29, 2024
12d4aa4
Merge 'origin/trunk' into merge/24.1-release-notes-into-trunk
mokagio Jan 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading