Skip to content

Commit

Permalink
Merge branch 'main' into NorwegianAdjustments
Browse files Browse the repository at this point in the history
  • Loading branch information
dempseyatgithub committed Apr 7, 2021
2 parents 6beab05 + 9da096c commit de19547
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 108 deletions.
2 changes: 1 addition & 1 deletion Wikipedia.xcodeproj/project.pbxproj
Expand Up @@ -3926,7 +3926,7 @@
7AFEB3F41FE8511700D7BC57 /* SavedArticlesCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SavedArticlesCollectionViewCell.swift; sourceTree = "<group>"; };
830177F91FBF3E490005681C /* ReadingListsAPIController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ReadingListsAPIController.swift; path = "WMF Framework/ReadingListsAPIController.swift"; sourceTree = SOURCE_ROOT; };
830177FB1FBF3EF70005681C /* NSManagedObjectContext+WMFUtilities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+WMFUtilities.swift"; sourceTree = "<group>"; };
83023C0420E51DDF00EC7592 /* SearchLanguagesBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchLanguagesBarViewController.swift; sourceTree = "<group>"; };
83023C0420E51DDF00EC7592 /* SearchLanguagesBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchLanguagesBarViewController.swift; sourceTree = "<group>"; usesTabs = 0; };
83023C0520E51DDF00EC7592 /* SearchLanguagesBarViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchLanguagesBarViewController.xib; sourceTree = "<group>"; };
83023C1020E6561900EC7592 /* ViewControllerTransitionsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewControllerTransitionsController.swift; sourceTree = "<group>"; };
83023C1E20E6584F00EC7592 /* SearchTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTransition.swift; sourceTree = "<group>"; };
Expand Down
120 changes: 71 additions & 49 deletions Wikipedia/Code/SearchLanguagesBarViewController.swift
@@ -1,10 +1,12 @@
import Foundation
import UIKit

@objc protocol SearchLanguagesBarViewControllerDelegate: class {
func searchLanguagesBarViewController(_ controller: SearchLanguagesBarViewController, didChangeCurrentlySelectedSearchLanguage language: MWKLanguageLink)
}

class SearchLanguageButton: UnderlineButton {
var contentLanguageCode: String?

override func setup() {
super.setup()
titleLabel?.numberOfLines = 1
Expand All @@ -22,13 +24,22 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
}

@objc weak var delegate: SearchLanguagesBarViewControllerDelegate?

@IBOutlet fileprivate var languageButtons: [SearchLanguageButton] = []

@IBOutlet fileprivate var otherLanguagesButton: UIButton?
@IBOutlet weak var otherLanguagesButtonBackgroundView: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var gradientView: WMFGradientView!


lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.distribution = .fill
stackView.alignment = .fill
stackView.spacing = 8
return stackView
}()

@objc var theme: Theme = Theme.standard

@objc fileprivate(set) var currentlySelectedSearchLanguage: MWKLanguageLink? {
Expand All @@ -49,27 +60,43 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
set {
UserDefaults.standard.wmf_setCurrentSearchContentLanguageCode(newValue?.contentLanguageCode)
delegate?.searchLanguagesBarViewController(self, didChangeCurrentlySelectedSearchLanguage: newValue!)
updateLanguageBarLanguageButtons()
updateSearchLanguageButtons()
}
}

override func viewDidLoad() {
super.viewDidLoad()
otherLanguagesButton?.setTitle(WMFLocalizedString("main-menu-title", value:"More", comment:"Title for menu of secondary items. {{Identical|More}}"), for: .normal)
otherLanguagesButton?.titleLabel?.font = UIFont.wmf_font(.subheadline)
otherLanguagesButton?.titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 5, right: 0)

NotificationCenter.default.addObserver(self, selector: #selector(appLanguageDidChange(_:)), name: NSNotification.Name.WMFAppLanguageDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(preferredLanguagesDidChange(_:)), name: NSNotification.Name.WMFPreferredLanguagesDidChange, object: nil)


addSearchLanguageButtonStackView()

apply(theme: theme)
view.wmf_configureSubviewsForDynamicType()

gradientView.translatesAutoresizingMaskIntoConstraints = false

let isRTL = view.effectiveUserInterfaceLayoutDirection == .rightToLeft
gradientView.startPoint = isRTL ? CGPoint(x: 1, y: 0) : .zero
gradientView.endPoint = isRTL ? .zero : CGPoint(x: 1, y: 0)

scrollView.clipsToBounds = false

gradientView.translatesAutoresizingMaskIntoConstraints = false
gradientView.startPoint = isRTL ? CGPoint(x: 0.7, y: 0) : .zero
gradientView.endPoint = isRTL ? .zero : CGPoint(x: 0.7, y: 0)
gradientView.isUserInteractionEnabled = false

scrollView.clipsToBounds = true
}

fileprivate func addSearchLanguageButtonStackView() {
scrollView.addSubview(stackView)

stackView.leadingAnchor.constraint(lessThanOrEqualToSystemSpacingAfter: scrollView.leadingAnchor, multiplier: 2).isActive = true

stackView.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
stackView.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true
}

override func viewDidLayoutSubviews() {
Expand All @@ -84,15 +111,7 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
updateLanguageBarLanguageButtons()

var selectedButtonCount = 0
for button in languageButtons{
if button.isSelected {
selectedButtonCount += 1
}
}
assert(selectedButtonCount == 1, "One button should be selected by now")
updateSearchLanguageButtons()
}

override func viewDidAppear(_ animated: Bool) {
Expand All @@ -106,32 +125,33 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
}

fileprivate func languageBarLanguages() -> [MWKLanguageLink] {
return Array(MWKDataStore.shared().languageLinkController.preferredLanguages.prefix(3))
return MWKDataStore.shared().languageLinkController.preferredLanguages
}

fileprivate func searchLanguageButtons() -> [SearchLanguageButton] {
return stackView.arrangedSubviews.compactMap { $0 as? SearchLanguageButton }
}

fileprivate func updateLanguageBarLanguageButtons(){
for (index, language) in languageBarLanguages().enumerated() {
if index >= languageButtons.count {
break
}
let button = languageButtons[index]
button.setTitle(language.localizedName, for: .normal)
if let selectedLanguage = currentlySelectedSearchLanguage {
button.isSelected = language.contentLanguageCode == selectedLanguage.contentLanguageCode
}else{
assertionFailure("selectedLanguage should have been set at this point")
button.isSelected = false
}
fileprivate func updateSearchLanguageButtons() {
guard let currentlySelectedLanguage = currentlySelectedSearchLanguage else {
assertionFailure("No current app language")
return
}
for(index, button) in languageButtons.enumerated(){
if index >= languageBarLanguages().count {
button.isEnabled = false
button.isHidden = true
}else{
button.isEnabled = true
button.isHidden = false
}

stackView.subviews.forEach { $0.removeFromSuperview() }

for language in languageBarLanguages() {
let button = SearchLanguageButton()

button.contentLanguageCode = language.contentLanguageCode
button.isSelected = language.contentLanguageCode == currentlySelectedLanguage.contentLanguageCode
button.addTarget(self, action: #selector(setCurrentlySelectedLanguageToButtonLanguage(withSender:)), for: .primaryActionTriggered)
button.setTitle((language.name as NSString).wmf_stringByCapitalizingFirstCharacter(usingWikipediaLanguage: nil), for: .normal)

stackView.addArrangedSubview(button)
}

apply(theme: theme)
}

fileprivate func showMoreLanguagesTooltipIfNecessary() {
Expand All @@ -149,12 +169,13 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
UserDefaults.standard.wmf_setDidShowMoreLanguagesTooltip(true)
}

@IBAction fileprivate func setCurrentlySelectedLanguageToButtonLanguage(withSender sender: SearchLanguageButton) {
guard let buttonIndex = languageButtons.firstIndex(of: sender), languageBarLanguages().indices.contains(buttonIndex) else {
assertionFailure("Language button not found for language")
@objc fileprivate func setCurrentlySelectedLanguageToButtonLanguage(withSender sender: SearchLanguageButton) {
guard let senderLanguage = languageBarLanguages().first(where: { $0.contentLanguageCode == sender.contentLanguageCode }) else {
assertionFailure("Language for button not found")
return
}
currentlySelectedSearchLanguage = languageBarLanguages()[buttonIndex]

currentlySelectedSearchLanguage = senderLanguage
}

@IBAction fileprivate func openLanguagePicker() {
Expand Down Expand Up @@ -193,7 +214,7 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
// Reminder: cannot use "reorderPreferredLanguage" for this (in "didUpdatePreferredLanguages:") because
// that would undo the dragging the user just did and would also not work for changes made from settings.
} else {
updateLanguageBarLanguageButtons()
updateSearchLanguageButtons()
}
}
}
Expand All @@ -205,11 +226,12 @@ class SearchLanguagesBarViewController: UIViewController, WMFPreferredLanguagesV
}
let bgColor = theme.colors.paperBackground
view.backgroundColor = bgColor
for languageButton in languageButtons {
for languageButton in searchLanguageButtons() {
languageButton.setTitleColor(theme.colors.primaryText, for: .normal)
languageButton.tintColor = theme.colors.link
}
gradientView.setStart(bgColor.withAlphaComponent(0), end: bgColor)
otherLanguagesButtonBackgroundView?.backgroundColor = bgColor
otherLanguagesButton?.setTitleColor(theme.colors.link, for: .normal)
}
}

0 comments on commit de19547

Please sign in to comment.