Commit ba553919 by Dmitry Stepanets

IOS-273: Added close button to the header

- Added human readable description for restore purchases
parent cfd25127
......@@ -204,20 +204,26 @@ public class StoreManager {
}
}
public func restoreInApp() {
public func restoreInApp(completion:@escaping (_ error: String?) -> Void) {
SwiftyStoreKit.restorePurchases(atomically: true) {[weak self] results in
if results.restoreFailedPurchases.count > 0 {
self?.log.error("Restore Failed: \(results.restoreFailedPurchases)")
completion("subscription.restore.failed".localized())
}
else if results.restoredPurchases.count > 0 {
let ids = results.restoredPurchases.compactMap{ $0.productId }
if (ids.contains{ $0 == kInAppOneWeatherProId }) {
self?.log.info("Restore Success: \(results.restoredPurchases)")
self?.removeAdsPurchased = true
completion(nil)
}
else {
completion("subscription.restore.nothing".localized())
}
}
else {
self?.log.info("Nothing to Restore")
completion("subscription.restore.nothing".localized())
}
}
}
......
{
"images" : [
{
"filename" : "subscription_header_close.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}
......@@ -218,6 +218,9 @@
"menu.help.unableToSendEmail.text" = "Device is unable to send email.";
//Subscriptions
"subscription.restore.failed" = " Failed to restore purchases";
"subscription.restore.success" = "All purchases restored";
"subscription.restore.nothing" = "Nothing to restore";
"subscription.header.oneWeather" = "1Weather";
"subscription.header.premium" = "PREMIUM";
"subscription.proMember.already.top" = "You are a Pro member currently";
......
......@@ -20,6 +20,7 @@ class MenuHeaderView: UIView {
init() {
super.init(frame: .zero)
translatesAutoresizingMaskIntoConstraints = false
prepareView()
preparePremium()
updateUI()
......
......@@ -40,6 +40,7 @@ class SubscriptionOverviewViewController: UIViewController {
//MARK: - UI Setup
extension SubscriptionOverviewViewController {
private func prepareViewController() {
topHeaderView.delegate = self
view.backgroundColor = ThemeManager.currentTheme.baseBackgroundColor
}
......@@ -81,3 +82,9 @@ extension SubscriptionOverviewViewController {
footerView.text = "subscription.description.cancellation".localized()
}
}
extension SubscriptionOverviewViewController: SubscriptionTopViewDelegate {
func handleCloseButton() {
self.dismiss(animated: true)
}
}
......@@ -47,6 +47,7 @@ public class SubscriptionStoreViewController: UIViewController {
extension SubscriptionStoreViewController {
private func prepareViewController() {
view.backgroundColor = ThemeManager.currentTheme.baseBackgroundColor
topHeaderView.delegate = self
localizationObserver = LocalizationChangeObserver { [weak self] in
self?.rebuildUI()
}
......@@ -126,6 +127,12 @@ extension SubscriptionStoreViewController {
}
}
extension SubscriptionStoreViewController: SubscriptionTopViewDelegate {
func handleCloseButton() {
self.dismiss(animated: true)
}
}
extension SubscriptionStoreViewController: SubscriptionPurchaseButtonDelegate {
func button(_ button: SubscriptionPurchaseButton, triggeredPurchaseOf product: SKProduct) {
viewModel.purchase(subscription: product)
......
......@@ -8,11 +8,17 @@
import UIKit
import SnapKit
protocol SubscriptionTopViewDelegate: AnyObject {
func handleCloseButton()
}
class SubscriptionTopView: UIView {
private let oneWeatherLabel = UILabel()
private let premiumLabel = UILabel()
private let logoView = UIImageView()
private let closeButton = UIButton()
private var localizationObserver: LocalizationChangeObserver!
weak var delegate: SubscriptionTopViewDelegate?
public init() {
super.init(frame: .zero)
......@@ -31,10 +37,15 @@ class SubscriptionTopView: UIView {
logoView.image = UIImage(named: "subscription_logo")
logoView.contentMode = .scaleAspectFit
closeButton.addTarget(self, action: #selector(handleCloseButton), for: .touchUpInside)
closeButton.setImage(UIImage(named: "subscription_header_close"), for: .normal)
addSubview(logoView)
addSubview(oneWeatherLabel)
addSubview(premiumLabel)
addSubview(closeButton)
//Constraints
oneWeatherLabel.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(28)
make.top.equalToSuperview().offset(81)
......@@ -54,6 +65,12 @@ class SubscriptionTopView: UIView {
make.width.equalTo(190)
make.height.equalTo(160)
}
closeButton.snp.makeConstraints { make in
make.width.height.equalTo(20)
make.top.equalToSuperview().inset(18)
make.right.equalToSuperview().inset(20)
}
}
private func updateButtonTexts() {
......@@ -61,6 +78,10 @@ class SubscriptionTopView: UIView {
premiumLabel.text = "subscription.header.premium".localized()
}
@objc private func handleCloseButton() {
delegate?.handleCloseButton()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
......
......@@ -70,7 +70,27 @@ class MenuViewModel: NSObject, ViewModelProtocol {
}
public func restorePurchases() {
storeManager.restoreInApp()
PKHUD.sharedHUD.contentView = PKHUDProgressView()
PKHUD.sharedHUD.show()
storeManager.restoreInApp { error in
let alertMessage: String
if let errorMessage = error {
alertMessage = errorMessage
}
else {
alertMessage = "subscription.restore.success".localized()
}
onMain {
PKHUD.sharedHUD.hide(animated: false)
let alert = UIAlertController(title: "menu.restorePurchases".localized(),
message: alertMessage,
preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "general.cancel".localized(), style: .cancel))
self.delegate?.viewControllerForPresentation().present(alert, animated: true)
}
}
}
public func viewAboutUs() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment