Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
160eee7
Remove ReaderSiteStreamHeader
kean Oct 25, 2024
97a774e
Remove ReaderTabView
kean Oct 25, 2024
a6c4abe
Remove ReaderNavigationButton
kean Oct 25, 2024
5dffc52
Remove ReaderNavigationMenu
kean Oct 25, 2024
827eee6
Remove WPScrollableViewController (Objective-C)
kean Oct 25, 2024
6ab2061
Remove ReaderTabViewController
kean Oct 25, 2024
6767f45
Remove ReaderTabViewModel
kean Oct 25, 2024
52853c2
Remove ReaderTagCardCell
kean Oct 25, 2024
7171a5a
Remove ReaderTagCardEmptyCell
kean Oct 25, 2024
00e0cc5
Remove ReaderTagFooterView
kean Oct 25, 2024
18ff7f5
Remove ReaderTagCardCellViewModel
kean Oct 25, 2024
2d337ba
Remove ReaderTagCell
kean Oct 25, 2024
1200e8f
Remove ReaderTopicChangeObserver
kean Oct 25, 2024
582842b
Remove EmptyFilterView
kean Oct 25, 2024
4c1296d
Remove FilterSheetViewController
kean Oct 25, 2024
5b43785
Remove FilterProvider
kean Oct 25, 2024
a480923
Remove TabbedViewController
kean Oct 25, 2024
06e4a00
Remove ReaderManageScenePresenter
kean Oct 25, 2024
d19b53f
Fix build
kean Oct 25, 2024
b2e137e
Fix build
kean Oct 25, 2024
eb73861
Remove ReaderSpacerView
kean Oct 25, 2024
8b1d0ab
Remove ReaderTopicsCardCell
kean Oct 25, 2024
9dabf8c
Fix build
kean Oct 25, 2024
6067335
Simplify ReaderMenuStore
kean Oct 25, 2024
61e84a9
Remove ReaderTabItem
kean Oct 25, 2024
81b5cd6
Remove selfHostedFollowing contentType
kean Oct 25, 2024
0977a36
Remove ReaderContentViewController
kean Oct 25, 2024
be67c30
Remove ReaderContent
kean Oct 25, 2024
6b766d8
Fix build
kean Oct 25, 2024
5258d9f
Remove ReaderTracker
kean Oct 25, 2024
0bc7cf8
Integrate new menu in ReaderDetailsVC
kean Oct 25, 2024
b6433b7
Remove ReaderMenuAction
kean Oct 25, 2024
6ff6a63
Remove ReaderShowMenuAction
kean Oct 25, 2024
4fbe121
Remove ReaderPostCardCell
kean Oct 25, 2024
8e5733c
Remove ReaderPostCardCellViewModel
kean Oct 25, 2024
b72b791
Remove .serif FF
kean Oct 25, 2024
699555f
Remove .readerReset FF
kean Oct 25, 2024
895c121
Remove unused WPStyleGuide+Reader
kean Oct 25, 2024
3cb736f
Fix build
kean Oct 25, 2024
accd549
Fix build
kean Oct 25, 2024
1a44649
Remove NetworkStatusReceiver
kean Oct 25, 2024
f471b5b
Remove unused reportStreamLoadFailure
kean Oct 25, 2024
7beb654
Remove unused scrollViewTranslationPublisher
kean Oct 25, 2024
eb7b395
Remove shouldDisplayNoTopicController
kean Oct 25, 2024
c6ea4f6
Remove ReaderStreamError
kean Oct 25, 2024
9c75539
Remove isSidebarModeEnabled
kean Oct 25, 2024
107cbeb
Extract ReaderSelectInterestsConfiguration
kean Oct 25, 2024
a1a3225
Remove ReaderStreamViewController from Storyboard
kean Oct 25, 2024
ce86a69
Remove unused code from ReaderHelpers
kean Oct 26, 2024
08b5c7d
Remove unused code from ReaderPost+Display
kean Oct 26, 2024
8b813d8
Update UI tests
kean Oct 28, 2024
0335142
Remove duplicated actions from ReaderPostMenu
kean Oct 28, 2024
1dcdede
Reimplement actionButtonPressed
kean Oct 28, 2024
630721f
Load Reader lazily
kean Oct 28, 2024
e67611a
Fix tests
kean Oct 30, 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
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import XCTest
import UIKit

public protocol MainNavigationComponent {
func goToReaderScreen() throws -> ReaderScreen
func goToReaderScreen() throws
func goToNotificationsScreen() throws -> NotificationsScreen
func goToMeScreen() throws -> MeTabScreen
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class SidebarNavComponent: ScreenObject, MainNavigationComponent {
try openSidebar().openMeScreen()
}

public func goToReaderScreen() throws -> ReaderScreen {
public func goToReaderScreen() throws {
try openSidebar().openReaderScreen()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@ public class SidebarScreen: ScreenObject {
return try MeTabScreen()
}

public func openReaderScreen() throws -> ReaderScreen {
public func openReaderScreen() {
app.staticTexts["sidebar_reader"].firstMatch.tap()
app.swipeLeft() // Close the sidebar
return try ReaderScreen()
}

public func openNotificationsScreen() throws -> NotificationsScreen {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,8 @@ public class TabNavComponent: ScreenObject, MainNavigationComponent {
return try BlockEditorScreen()
}

@discardableResult
public func goToReaderScreen() throws -> ReaderScreen {
public func goToReaderScreen() throws {
readerTabButton.tap()
return try ReaderScreen()
}

public func goToNotificationsScreen() throws -> NotificationsScreen {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import ScreenObject
import XCTest

public final class ReaderMenuScreen: ScreenObject {
public init(app: XCUIApplication = XCUIApplication()) throws {
try super.init {
$0.collectionViews["reader_sidebar"].firstMatch
}
}

public enum ReaderStream: String {
case recent
case discover
case saved
case likes

func menuButton(_ app: XCUIApplication) -> XCUIElement {
app.staticTexts["reader_sidebar_\(rawValue)"].firstMatch
}
}

@discardableResult
public func open(_ stream: ReaderStream) throws -> ReaderScreen {
stream.menuButton(app).tap()
return try ReaderScreen()
}
}
49 changes: 13 additions & 36 deletions Modules/Sources/UITestsFoundation/Screens/ReaderScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import ScreenObject
import XCTest

public class ReaderScreen: ScreenObject {
var readerNavigationMenuButton: XCUIElement { app.buttons["reader-navigation-button"] }
var backButton: XCUIElement { app.buttons["Back"] }
var dismissButton: XCUIElement { app.buttons["Dismiss"] }
var firstPostLikeButton: XCUIElement { app.buttons["reader-like-button"].firstMatch }
Expand All @@ -13,8 +12,6 @@ public class ReaderScreen: ScreenObject {
var noResultsView: XCUIElement { app.staticTexts["no-results-label-stack-view"].firstMatch }
var readerButton: XCUIElement { app.buttons["Reader"] }
var readerTable: XCUIElement { app.tables["reader_table_view"] }
var moreButton: XCUIElement { app.buttons["More"] }
var savePostButton: XCUIElement { app.buttons["Save"] }
var savedButton: XCUIElement { app.buttons["Saved"] }
var tagCellButton: XCUIElement { app.cells["topics-card-cell-button"] }
var visitButton: XCUIElement { app.buttons["Visit"] }
Expand All @@ -32,13 +29,13 @@ public class ReaderScreen: ScreenObject {
}

public func openLastPostInSafari() throws -> ReaderScreen {
try getLastPost().buttons["More"].tap()
visitButton.tap()
try getLastPost().buttons["reader-more-button"].firstMatch.tap()
app.buttons["reader-view-post-in-safari"].firstMatch.tap()
return self
}

public func openLastPostComments() throws -> CommentsScreen {
let commentButton = try getLastPost().buttons["Comment"]
let commentButton = try getLastPost().buttons["reader-comment-button"]
guard commentButton.waitForIsHittable() else {
throw UIElementNotFoundError(message: "ReaderScreen.Post: Comments button not loaded")
}
Expand Down Expand Up @@ -109,24 +106,7 @@ public class ReaderScreen: ScreenObject {

// MARK: Stream switching actions

public enum ReaderStream: String {
case discover
case subscriptions
case saved
case liked

var buttonIdentifier: String {
"Reader Navigation Menu Item, \(rawValue.capitalized)"
}

func menuButton(_ app: XCUIApplication) -> XCUIElement {
if XCTestCase.isPad {
return app.staticTexts["reader_sidebar_\(rawValue)"].firstMatch
} else {
return app.buttons[buttonIdentifier].firstMatch
}
}
}
public typealias ReaderStream = ReaderMenuScreen.ReaderStream

private func openNavigationMenu() {
if XCTestCase.isPad {
Expand All @@ -135,7 +115,7 @@ public class ReaderScreen: ScreenObject {
app.buttons["ToggleSidebar"].tap()
}
} else {
readerNavigationMenuButton.tap()
app.navigationBars.firstMatch.buttons.element(boundBy: 0).tap()
}
}

Expand All @@ -147,7 +127,7 @@ public class ReaderScreen: ScreenObject {
}
}

public func switchToStream(_ stream: ReaderStream) -> Self {
public func switchToStream(_ stream: ReaderStream) throws -> Self {
openNavigationMenu()
stream.menuButton(app).tap()
closeNavigationMenu()
Expand All @@ -173,9 +153,9 @@ public class ReaderScreen: ScreenObject {

public func saveFirstPost() throws -> (ReaderScreen, String) {
XCTAssertTrue(readerTable.isHittable)
let postLabel = readerTable.cells.firstMatch.label
moreButton.firstMatch.tap()
savePostButton.firstMatch.tap()
let cell = readerTable.cells.firstMatch
let postLabel = cell.label
cell.buttons["reader-bookmark-button"].firstMatch.tap()

// An alert about saved post is displayed the first time a post is saved
if let alert = try? FancyAlertComponent() {
Expand All @@ -197,11 +177,9 @@ public class ReaderScreen: ScreenObject {
return self
}

public func verifyPostLikedOnFollowingTab(file: StaticString = #file, line: UInt = #line) -> Self {
XCTAssertTrue(readerTable.cells.firstMatch.waitForExistence(timeout: 3), file: file, line: line)
XCTAssertGreaterThan(readerTable.cells.count, 1, .postNotGreaterThanOneError, file: file, line: line)
XCTAssertTrue(firstPostLikeButton.label.hasPrefix(.postLiked), file: file, line: line)

public func verifyFirstPostLiked(file: StaticString = #file, line: UInt = #line) -> Self {
let cell = readerTable.cells.firstMatch
XCTAssertEqual(cell.buttons["reader-like-button"].staticTexts.firstMatch.label, "35")
return self
}

Expand All @@ -221,7 +199,7 @@ public class ReaderScreen: ScreenObject {
public func verifyLikedPosts(state: String, file: StaticString = #file, line: UInt = #line) -> Self {
if state == .withPosts {
verifyNotEmptyPostList()
XCTAssertTrue(firstPostLikeButton.label.hasPrefix(.postLiked), file: file, line: line)
_ = verifyFirstPostLiked()
} else if state == .withoutPosts {
verifyEmptyPostList()
}
Expand All @@ -242,7 +220,6 @@ public class ReaderScreen: ScreenObject {

private extension String {
static let emptyListLabel = "Empty list"
static let postLiked = "Liked"
static let postNotEqualOneError = "There should only be 1 post!"
static let postNotEqualSavedPostError = "Post displayed does not match saved post!"
static let postNotGreaterThanOneError = "There shouldn't only be 1 post!"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ extension UINavigationController {
@objc func scrollContentToTopAnimated(_ animated: Bool) {
guard viewControllers.count == 1 else { return }

if let topViewController = topViewController as? WPScrollableViewController {
if let topViewController = topViewController as? ScrollableViewController {
topViewController.scrollViewToTop()
} else if let scrollView = topViewController?.view as? UIScrollView {
// If the view controller's view is a scrollview
Expand Down Expand Up @@ -40,3 +40,7 @@ extension UINavigationController {
self.pushViewController(viewController, animated: animated)
}
}

protocol ScrollableViewController {
func scrollViewToTop()
}

This file was deleted.

9 changes: 6 additions & 3 deletions WordPress/Classes/System/ReaderPresenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ final class ReaderPresenter: NSObject, SplitViewDisplayable {
var secondary: UINavigationController

/// The navigation controller for the main content when shown using tabs.
private let mainNavigationController = UINavigationController()
private var mainNavigationController = UINavigationController()
private var latestContentVC: UIViewController?

private var viewContext: NSManagedObjectContext {
Expand All @@ -37,11 +37,14 @@ final class ReaderPresenter: NSObject, SplitViewDisplayable {

// TODO: (reader) update to allow seamless transitions between split view and tabs
@objc func prepareForTabBarPresentation() -> UINavigationController {
sidebar.onViewDidLoad = { [weak self] in
self?.showInitialSelection()
}
sidebarViewModel.isCompact = true
sidebarViewModel.restoreSelection(defaultValue: nil)
mainNavigationController.navigationBar.prefersLargeTitles = true
mainNavigationController.viewControllers = [sidebar]
mainNavigationController = UINavigationController(rootViewController: sidebar) // Loads sidebar lazily
sidebar.navigationItem.backButtonDisplayMode = .minimal
showInitialSelection()
return mainNavigationController
}

Expand Down
1 change: 0 additions & 1 deletion WordPress/Classes/System/WordPress-Bridging-Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@
#import "WPUploadStatusButton.h"
#import "WPError.h"
#import "WPImageViewController.h"
#import "WPScrollableViewController.h"
#import "WPStyleGuide+Pages.h"
#import "WPStyleGuide+WebView.h"
#import "WPTableViewHandler.h"
Expand Down
10 changes: 10 additions & 0 deletions WordPress/Classes/System/WordPressAppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,7 @@ extension WordPressAppDelegate {
removeNotificationExtensionConfiguration()
windowManager.showFullscreenSignIn()
stopObservingAppleIDCredentialRevoked()
clearReaderStuff()
}

toggleExtraDebuggingIfNeeded()
Expand All @@ -693,6 +694,15 @@ extension WordPressAppDelegate {
@objc fileprivate func handleLowMemoryWarningNotification(_ notification: NSNotification) {
WPAnalytics.track(.lowMemoryWarning)
}

private func clearReaderStuff() {
ReaderPostService(coreDataStack: ContextManager.shared).deletePostsWithNoTopic()
ReaderTopicService(coreDataStack: ContextManager.shared).deleteAllTopics()
ReaderPostService(coreDataStack: ContextManager.shared).clearInUseFlags()
ReaderTopicService(coreDataStack: ContextManager.shared).clearInUseFlags()
ReaderPostService(coreDataStack: ContextManager.shared).clearSavedPostFlags()
ReaderSearchSuggestionService(coreDataStack: ContextManager.sharedInstance()).deleteAllSuggestions()
}
}

// MARK: - Extensions
Expand Down
61 changes: 0 additions & 61 deletions WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -324,30 +324,6 @@ import Foundation
case readerDiscoverChannelSelected
case readerDiscoverEditInterestsTapped

// Reader: Filter Sheet
case readerFilterSheetDisplayed
case readerFilterSheetDismissed
case readerFilterSheetItemSelected
case readerFilterSheetCleared

// Reader: Manage
case readerManageViewDisplayed
case readerManageViewDismissed

// Reader: Navigation menu dropdown
case readerDropdownOpened
case readerDropdownItemTapped

// Reader: Tags Feed
case readerTagsFeedShown
case readerTagsFeedMoreFromTagTapped
case readerTagsFeedHeaderTapped

// Reader: Floating Button Experiment
case readerFloatingButtonShown
case readerCreateSheetAnswerPromptTapped
case readerCreateSheetPromptHelpTapped

// App Settings
case settingsDidChange

Expand Down Expand Up @@ -1208,43 +1184,6 @@ import Foundation
case .readerDiscoverEditInterestsTapped:
return "reader_discover_edit_interests_tapped"

// Reader: Filter Sheet
case .readerFilterSheetDisplayed:
return "reader_filter_sheet_displayed"
case .readerFilterSheetDismissed:
return "reader_filter_sheet_dismissed"
case .readerFilterSheetItemSelected:
return "reader_filter_sheet_item_selected"
case .readerFilterSheetCleared:
return "reader_filter_sheet_cleared"

// Reader: Manage View
case .readerManageViewDisplayed:
return "reader_manage_view_displayed"
case .readerManageViewDismissed:
return "reader_manage_view_dismissed"

// Reader: Navigation menu dropdown
case .readerDropdownOpened:
return "reader_dropdown_menu_opened"
case .readerDropdownItemTapped:
return "reader_dropdown_menu_item_tapped"

case .readerTagsFeedShown:
return "reader_tags_feed_shown"
case .readerTagsFeedMoreFromTagTapped:
return "reader_tags_feed_more_from_tag_tapped"
case .readerTagsFeedHeaderTapped:
return "reader_tags_feed_header_tapped"

// Reader: Floating Button Experiment
case .readerFloatingButtonShown:
return "reader_create_fab_shown"
case .readerCreateSheetAnswerPromptTapped:
return "my_site_create_sheet_answer_prompt_tapped"
case .readerCreateSheetPromptHelpTapped:
return "my_site_create_sheet_prompt_help_tapped"

// App Settings
case .settingsDidChange:
return "settings_did_change"
Expand Down
4 changes: 0 additions & 4 deletions WordPress/Classes/Utility/Analytics/WPAppAnalytics.m
Original file line number Diff line number Diff line change
Expand Up @@ -204,12 +204,8 @@ - (void)trackApplicationClosed
self.applicationOpenedTime = nil;
}

[[ReaderTracker shared] stopAll];
[analyticsProperties addEntriesFromDictionary: [[ReaderTracker shared] data]];

[WPAnalytics track:WPAnalyticsStatApplicationClosed withProperties:analyticsProperties];
[WPAnalytics endSession];
[[ReaderTracker shared] reset];
}

/**
Expand Down
Loading