Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
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 @@ -54,7 +54,6 @@
#import "SettingsSelectionViewController.h"
#import "SettingsMultiTextViewController.h"
#import "SettingsTextViewController.h"
#import "SettingsViewController.h"
#import "SourcePostAttribution.h"
#import "SuggestionsTableView.h"
#import "SupportViewController.h"
Expand Down
121 changes: 121 additions & 0 deletions WordPress/Classes/ViewRelated/AccountSettingsViewController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
import Foundation
import UIKit
import RxSwift
import WordPressComAnalytics

func AccountSettingsViewController(account account: WPAccount) -> ImmuTableViewController {
let service = AccountSettingsService(userID: account.userID.integerValue, api: account.restApi)
return AccountSettingsViewController(service: service)
}

func AccountSettingsViewController(service service: AccountSettingsService) -> ImmuTableViewController {
let controller = AccountSettingsController(service: service)
let viewController = ImmuTableViewController(controller: controller)
assert(viewController.controller?.presenter != nil, "ImmuTableViewController should have set the presenter for AccountSettingsController")
return viewController
}

private struct AccountSettingsController: SettingsController {
weak var presenter: ImmuTablePresenter? = nil

let title = NSLocalizedString("Account Settings", comment: "Account Settings Title");

var immuTableRows: [ImmuTableRow.Type] {
return [
TextRow.self,
EditableTextRow.self,
MediaSizeRow.self,
SwitchRow.self]
}

// MARK: - Initialization

let service: AccountSettingsService

init(service: AccountSettingsService) {
self.service = service
}

// MARK: - Model mapping

func mapViewModel(settings: AccountSettings?) -> ImmuTable {
precondition(presenter != nil, "presenter must be set before using")
guard let presenter = presenter else {
// This shouldn't happen. If there's no presenter we can't push the
// editText controllers.
return ImmuTable.Empty
}
let username = TextRow(
title: NSLocalizedString("Username", comment: "Account Settings Username label"),
value: settings?.username ?? "")

let email = TextRow(
title: NSLocalizedString("Email", comment: "Account Settings Email label"),
value: settings?.email ?? "")

let webAddress = EditableTextRow(
title: NSLocalizedString("Web Address", comment: "Account Settings Web Address label"),
value: settings?.webAddress ?? "",
action: presenter.push(editWebAddress())
)

let uploadSize = MediaSizeRow(
title: NSLocalizedString("Max Image Upload Size", comment: "Title for the image size settings option."),
value: Int(MediaService.maxImageSizeSetting().width),
onChange: mediaSizeChanged())

let visualEditor = SwitchRow(
title: NSLocalizedString("Visual Editor", comment: "Option to enable the visual editor"),
value: WPPostViewController.isNewEditorEnabled(),
onChange: visualEditorChanged()
)

return ImmuTable(sections: [
ImmuTableSection(
rows: [
username,
email,
webAddress
]),
ImmuTableSection(
headerText: NSLocalizedString("Media", comment: "Title label for the media settings section in the app settings"),
rows: [
uploadSize
],
footerText: nil),
ImmuTableSection(
headerText: NSLocalizedString("Editor", comment: "Title label for the editor settings section in the app settings"),
rows: [
visualEditor
],
footerText: nil)
])
}

// MARK: - Actions

func editWebAddress() -> ImmuTableRowControllerGenerator {
return editText(AccountSettingsChange.WebAddress, hint: NSLocalizedString("Shown publicly when you comment on blogs.", comment: "Help text when editing web address"))
}

func mediaSizeChanged() -> Int -> Void {
return {
value in
let size = CGSize(width: value, height: value)
MediaService.setMaxImageSizeSetting(size)
}
}

func visualEditorChanged() -> Bool -> Void {
return {
enabled in
if enabled {
WPAnalytics.track(.EditorToggledOn)
} else {
WPAnalytics.track(.EditorToggledOff)
}
WPPostViewController.setNewEditorEnabled(enabled)
}
}
}

52 changes: 1 addition & 51 deletions WordPress/Classes/ViewRelated/Me/MyProfileViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func MyProfileViewController(service service: AccountSettingsService) -> ImmuTab
/// MyProfileController requires the `presenter` to be set before using.
/// To avoid problems, it's marked private and should only be initialized using the
/// `MyProfileViewController` factory functions.
private struct MyProfileController: ImmuTableController {
private struct MyProfileController: SettingsController {
// MARK: - ImmuTableController

weak var presenter: ImmuTablePresenter? = nil
Expand All @@ -28,26 +28,6 @@ private struct MyProfileController: ImmuTableController {
return [EditableTextRow.self]
}

var immuTable: Observable<ImmuTable> {
precondition(presenter != nil, "presenter must be set before using")
return service.settings.map(mapViewModel)
}

var errorMessage: Observable<String?> {
precondition(presenter != nil, "presenter must be set before using")
guard let presenter = presenter else {
// This shouldn't happen, but if it does, disabling the error feels
// safer than having it running when the VC is not visible.
return Observable.just(nil)
}
return service.refresh
.pausable(presenter.visible)
// replace errors with .Failed status
.catchErrorJustReturn(.Failed)
// convert status to string
.map({ $0.errorMessage })
}

// MARK: - Initialization

let service: AccountSettingsService
Expand Down Expand Up @@ -95,34 +75,4 @@ private struct MyProfileController: ImmuTableController {
])
}

// MARK: - Actions

func editText(changeType: (AccountSettingsChangeWithString), hint: String? = nil) -> ImmuTableRowControllerGenerator {
return { row in
let row = row as! EditableTextRow
return self.controllerForEditableText(row, changeType: changeType, hint: hint)
}
}

func controllerForEditableText(row: EditableTextRow, changeType: (AccountSettingsChangeWithString), hint: String? = nil, isPassword: Bool = false) -> SettingsTextViewController {
let title = row.title
let value = row.value

let controller = SettingsTextViewController(
text: value,
placeholder: "\(title)...",
hint: hint,
isPassword: isPassword)

controller.title = title
controller.onValueChanged = {
value in

let change = changeType(value)
self.service.saveChange(change)
DDLogSwift.logDebug("\(title) changed: \(value)")
}

return controller
}
}
8 changes: 7 additions & 1 deletion WordPress/Classes/ViewRelated/MeViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,14 @@ class MeViewController: UITableViewController, UIViewControllerRestoration {

func pushAccountSettings() -> ImmuTableAction {
return { [unowned self] row in
guard let account = self.defaultAccount() else {
let error = "Tried to push Account Settings without a default account. This shouldn't happen"
assertionFailure(error)
DDLogSwift.logError(error)
return
}
WPAppAnalytics.track(.OpenedAccountSettings)
let controller = SettingsViewController()
let controller = AccountSettingsViewController(account: account)
self.navigationController?.pushViewController(controller, animated: true)
}
}
Expand Down

This file was deleted.

Loading