Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a85fbe56be | |||
| cf97c3cb61 | |||
| 7611e3eb15 | |||
| 4369284fb7 | |||
| 0e4fadd666 | |||
| 6622256339 |
@@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## Versione 4.2
|
||||
### Build (84)
|
||||
- Corretti errori in nuovi sviluppi
|
||||
|
||||
### Build (83)
|
||||
- Aggiunto supporto per abbonamenti a vita
|
||||
- Allineata UI in sezione abbonamenti e versione pro
|
||||
|
||||
## Versione 4.1.1
|
||||
### Build (82)
|
||||
- Corretti placeholder in stringhe
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
650B23AB2632CCD3007AE752 /* UIView+EQNExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650B23AA2632CCD3007AE752 /* UIView+EQNExtensions.swift */; };
|
||||
651901B925F5358700CAFF20 /* EQNMapAnnotationSeismic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651901B825F5358700CAFF20 /* EQNMapAnnotationSeismic.swift */; };
|
||||
6525A82625E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */; };
|
||||
652C37BD26092B3C0068EC3B /* FiltersViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652C37BC26092B3C0068EC3B /* FiltersViewModel.swift */; };
|
||||
@@ -225,7 +226,6 @@
|
||||
DCB528212560161C005288E5 /* AlertSimulatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB528202560161C005288E5 /* AlertSimulatorViewController.swift */; };
|
||||
DCB6FBEC24D0B40600ED23B8 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DCB6FBEB24D0B40600ED23B8 /* Colors.xcassets */; };
|
||||
DCBB267A24D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267924D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift */; };
|
||||
DCBB267C24D1E98300F04559 /* EQNInsetTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */; };
|
||||
DCBB267E24D1EA2000F04559 /* SubscriptionProductTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267D24D1EA2000F04559 /* SubscriptionProductTableViewCell.swift */; };
|
||||
DCBB268024D1ECE200F04559 /* SubscriptionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267F24D1ECE200F04559 /* SubscriptionDetailViewController.swift */; };
|
||||
DCBB84F0252CFC4600F12633 /* AlertsNoLocationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB84EF252CFC4600F12633 /* AlertsNoLocationTableViewCell.swift */; };
|
||||
@@ -284,6 +284,7 @@
|
||||
/* Begin PBXFileReference section */
|
||||
25A8BFFE29D46740E8A8A7A3 /* Pods_Earthquake_Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Earthquake_Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
40CD2E5581CF2FA3D52F392D /* Pods-Earthquake Network.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Earthquake Network.release.xcconfig"; path = "Pods/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network.release.xcconfig"; sourceTree = "<group>"; };
|
||||
650B23AA2632CCD3007AE752 /* UIView+EQNExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+EQNExtensions.swift"; sourceTree = "<group>"; };
|
||||
651901B825F5358700CAFF20 /* EQNMapAnnotationSeismic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNMapAnnotationSeismic.swift; sourceTree = "<group>"; };
|
||||
6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworkAdvertiseTableViewCell.swift; sourceTree = "<group>"; };
|
||||
652C37BC26092B3C0068EC3B /* FiltersViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiltersViewModel.swift; sourceTree = "<group>"; };
|
||||
@@ -547,7 +548,6 @@
|
||||
DCB528202560161C005288E5 /* AlertSimulatorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertSimulatorViewController.swift; sourceTree = "<group>"; };
|
||||
DCB6FBEB24D0B40600ED23B8 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = "<group>"; };
|
||||
DCBB267924D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionsHeaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNInsetTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DCBB267D24D1EA2000F04559 /* SubscriptionProductTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionProductTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DCBB267F24D1ECE200F04559 /* SubscriptionDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionDetailViewController.swift; sourceTree = "<group>"; };
|
||||
DCBB84EF252CFC4600F12633 /* AlertsNoLocationTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertsNoLocationTableViewCell.swift; sourceTree = "<group>"; };
|
||||
@@ -752,6 +752,7 @@
|
||||
8C7A3B64225A5EA30045B266 /* NSDictionary+EQNExtensions.m */,
|
||||
65E1B19A260F980600A0ACBA /* Dictionary+EQNExtensions.swift */,
|
||||
65583A04261B83BE00ECA9F9 /* UIKit+Extensions.swift */,
|
||||
650B23AA2632CCD3007AE752 /* UIView+EQNExtensions.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@@ -1097,7 +1098,6 @@
|
||||
DC03BEAA250BC0A60084769B /* EQNRoundedButton.swift */,
|
||||
DC52B8A424FCCD6900ABEBA6 /* AppTheme.swift */,
|
||||
DCA5B6E6252E4BD8002AEC96 /* EQNBaseTableViewCell.swift */,
|
||||
DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */,
|
||||
653C67E125F3CC2E00FE52AC /* EQNCustomAnnotationView.swift */,
|
||||
6586971025F44C26009C0182 /* EQNBlurredCloseButton.swift */,
|
||||
);
|
||||
@@ -1580,7 +1580,6 @@
|
||||
8CF66059214C566B009F4314 /* Reachability.m in Sources */,
|
||||
DC886A5D24E92D5500F7A5D3 /* EQNBaseViewController.m in Sources */,
|
||||
8C593E8A217BA2470008B260 /* EQNSegnalazione.m in Sources */,
|
||||
DCBB267C24D1E98300F04559 /* EQNInsetTableViewCell.swift in Sources */,
|
||||
8CBD3DCA2149B9AD0070C963 /* AllerteViewController.m in Sources */,
|
||||
DC646F32252B698B000AA5FD /* AlertsSeismicNotificationCompactTableViewCell.swift in Sources */,
|
||||
DCF10DCD24D2C935009F34C3 /* EQNPurchaseAvailability.swift in Sources */,
|
||||
@@ -1631,6 +1630,7 @@
|
||||
DCB28CEE24FB8400001F557E /* SettingsViewController.swift in Sources */,
|
||||
DCB528212560161C005288E5 /* AlertSimulatorViewController.swift in Sources */,
|
||||
DCC76BD8251F56050005C4DC /* SeismicCardSettingsViewController.swift in Sources */,
|
||||
650B23AB2632CCD3007AE752 /* UIView+EQNExtensions.swift in Sources */,
|
||||
653C67FC25F3D63500FE52AC /* EQNMapAnnotationUserReport.swift in Sources */,
|
||||
DC3CE50A250EB7A8005A7DD5 /* EQNGenericPickerViewController.swift in Sources */,
|
||||
DCEFF21A24F587E3009D3FE1 /* SettingItem.swift in Sources */,
|
||||
@@ -1738,12 +1738,12 @@
|
||||
CODE_SIGN_ENTITLEMENTS = EQNNotificationService/EQNNotificationService.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationService/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.notificationservice;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "EQNetwork Extension Service - Development";
|
||||
@@ -1762,12 +1762,12 @@
|
||||
CODE_SIGN_ENTITLEMENTS = EQNNotificationService/EQNNotificationService.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationService/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.notificationservice;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "EQNetwork Extension Service - AppStore";
|
||||
@@ -1901,14 +1901,14 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Earthquake Network/Earthquake Network.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Development";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
GCC_PREFIX_HEADER = "Earthquake Network/Earthquake Network-Prefix.pch";
|
||||
INFOPLIST_FILE = "Earthquake Network/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@@ -2013,13 +2013,13 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Earthquake Network/Earthquake Network.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "Apple Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
GCC_PREFIX_HEADER = "Earthquake Network/Earthquake Network-Prefix.pch";
|
||||
INFOPLIST_FILE = "Earthquake Network/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
@@ -2120,12 +2120,12 @@
|
||||
CODE_SIGN_ENTITLEMENTS = EQNNotificationContent/EQNNotificationContent.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationContent/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.notificationcontent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "EQNetwork Extension Content - Development";
|
||||
@@ -2144,12 +2144,12 @@
|
||||
CODE_SIGN_ENTITLEMENTS = EQNNotificationContent/EQNNotificationContent.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 82;
|
||||
CURRENT_PROJECT_VERSION = 84;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationContent/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 4.1.1;
|
||||
MARKETING_VERSION = 4.2.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.notificationcontent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "EQNetwork Extension Content - AppStore";
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
@import GoogleMobileAds;
|
||||
|
||||
@interface AllerteViewController () <UITableViewDelegate, UITableViewDataSource>
|
||||
@property (weak, nonatomic) IBOutlet UIBarButtonItem *expandeCollapseButton;
|
||||
@property (weak, nonatomic) IBOutlet UITableView *tableView;
|
||||
@property (strong, nonatomic) NSMutableArray *tableItems;
|
||||
@property (nonatomic) BOOL isNotificaAttiva;
|
||||
@@ -112,6 +113,10 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
{
|
||||
[super refreshUI];
|
||||
|
||||
// `AllerteTableRowReteSmartphone` and `AllerteTableRowDatiPosizione` are hidden bu default, user can show them
|
||||
BOOL showAllCards = [[NSUserDefaults standardUserDefaults] boolForKey:EQNUserDefaultKeyAlertsShowAllCards];
|
||||
self.expandeCollapseButton.image = showAllCards ? [UIImage imageNamed:@"navbar-icon-arrow-collapse"] : [UIImage imageNamed:@"navbar-icon-arrow-expand"];
|
||||
|
||||
NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:NOTIFICHE_RETE_SMARTPHONE_DATA_NOTIFICA];
|
||||
if (date) {
|
||||
if ([EQNUtility getDifferenceMinute:date] < TEMPO_VISUALIZZAZIONE_NOTIFICA)
|
||||
@@ -125,21 +130,29 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
|
||||
[self.tableItems removeAllObjects];
|
||||
|
||||
// rows always visible
|
||||
[self.tableItems addObjectsFromArray:@[ @(AllerteTableRowSismiRilevati), @(AllerteTableRowAllertePassate), @(AllerteTableRowServizioPriorita)]];
|
||||
|
||||
if (showAllCards) {
|
||||
[self.tableItems addObject:@(AllerteTableRowReteSmartphone)];
|
||||
}
|
||||
// check if locations is enabled
|
||||
if (CLLocationManager.authorizationStatus != kCLAuthorizationStatusAuthorizedAlways) {
|
||||
[self.tableItems addObject:@(AllerteTableRowLocationPermission)];
|
||||
}
|
||||
// always visible rows
|
||||
[self.tableItems addObjectsFromArray:@[ @(AllerteTableRowSismiRilevati), @(AllerteTableRowAllertePassate), @(AllerteTableRowReteSmartphone), @(AllerteTableRowServizioPriorita)]];
|
||||
// pro cell visible only if user hasn't already bought the app
|
||||
// pro cell is visible only if user hasn't already bought the app
|
||||
if ([EQNPurchaseUtility isProVersionEnabled] == NO) {
|
||||
[self.tableItems addObject:@(AllerteTableRowVersionePro)];
|
||||
}
|
||||
// location data visible only if last position is known
|
||||
if ([EQNUser defaultUser].lastPosition != nil) {
|
||||
if ([EQNUser defaultUser].lastPosition != nil && showAllCards) {
|
||||
[self.tableItems addObject:@(AllerteTableRowDatiPosizione)];
|
||||
}
|
||||
|
||||
// sort items based on enum position
|
||||
NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
|
||||
[self.tableItems sortUsingDescriptors:@[sorter]];
|
||||
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
@@ -150,6 +163,16 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
[[EQNManager defaultManager] sincronizza];
|
||||
}
|
||||
|
||||
- (IBAction)collapseExpandTapped:(id)sender
|
||||
{
|
||||
// toggle saved value
|
||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||
BOOL showAll = [defaults boolForKey:EQNUserDefaultKeyAlertsShowAllCards];
|
||||
[defaults setBool:!showAll forKey:EQNUserDefaultKeyAlertsShowAllCards];
|
||||
|
||||
[self refreshUI];
|
||||
}
|
||||
|
||||
- (void)actionCloseNotification
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:NOTIFICHE_RETE_SMARTPHONE_DATA_NOTIFICA];
|
||||
|
||||
@@ -13,6 +13,7 @@ import StoreKit
|
||||
|
||||
class PurchaseProVersionViewController: UIViewController {
|
||||
|
||||
@IBOutlet private weak var containerView: UIView!
|
||||
@IBOutlet private weak var titleLabel: UILabel!
|
||||
@IBOutlet private weak var subtitleLabel: UILabel!
|
||||
@IBOutlet private weak var discountTextLabel: UILabel!
|
||||
@@ -65,6 +66,7 @@ class PurchaseProVersionViewController: UIViewController {
|
||||
openTermsButton.setTitle(NSLocalizedString("network_pro_terms_conditions", comment: ""), for: .normal)
|
||||
payingLabel.text = NSLocalizedString("network_pro_paying", comment: "")
|
||||
purchaseButton.setTitle(NSLocalizedString("network_pro_convert", comment: "").uppercased(), for: .normal)
|
||||
containerView.eqn_applyShadowAndRoundedCorners()
|
||||
}
|
||||
|
||||
private func updateUI() {
|
||||
|
||||
+21
-18
@@ -22,6 +22,7 @@ class SubscriptionDetailViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
@IBOutlet private weak var containerView: UIView!
|
||||
@IBOutlet private weak var productTitleLabel: UILabel!
|
||||
@IBOutlet private weak var productImageView: UIImageView!
|
||||
@IBOutlet private weak var productDescriptionLabel: UILabel!
|
||||
@@ -43,42 +44,44 @@ class SubscriptionDetailViewController: UIViewController {
|
||||
object: nil)
|
||||
|
||||
updateUI()
|
||||
setupUI()
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func setupUI() {
|
||||
containerView.eqn_applyShadowAndRoundedCorners()
|
||||
}
|
||||
|
||||
private func updateUI() {
|
||||
guard let product = product, isViewLoaded else { return }
|
||||
|
||||
productImageView.image = VersioneProProducts.image(for: product.productIdentifier)
|
||||
productTitleLabel.text = product.localizedTitle
|
||||
productDescriptionLabel.text = product.localizedDescription
|
||||
|
||||
var purchaseRecapString = ""
|
||||
var subscriptionDetailsString = ""
|
||||
switch product.productIdentifier {
|
||||
|
||||
case VersioneProProducts.Identifier.Subscription10kMonthly:
|
||||
productImageView.image = UIImage.init(named: "top_10k")
|
||||
case VersioneProProducts.Identifier.Subscription10kMonthly,
|
||||
VersioneProProducts.Identifier.Subscription100kMonthly:
|
||||
purchaseRecapString = "inapp_monthly_payment"
|
||||
|
||||
case VersioneProProducts.Identifier.Subscription100kMonthly:
|
||||
productImageView.image = UIImage.init(named: "top_100k")
|
||||
purchaseRecapString = "inapp_monthly_payment"
|
||||
|
||||
|
||||
case VersioneProProducts.Identifier.Subscription100kYearly, VersioneProProducts.Identifier.Subscription100kYearlyDiscounted:
|
||||
productImageView.image = UIImage.init(named: "top_100k")
|
||||
subscriptionDetailsString = "inapp_detail_description"
|
||||
case VersioneProProducts.Identifier.Subscription100kYearly,
|
||||
VersioneProProducts.Identifier.Subscription100kYearlyDiscounted,
|
||||
VersioneProProducts.Identifier.Subscription10kYearly,
|
||||
VersioneProProducts.Identifier.Subscription10kYearlyDiscounted:
|
||||
purchaseRecapString = "inapp_yearly_payment"
|
||||
|
||||
case VersioneProProducts.Identifier.Subscription10kYearly, VersioneProProducts.Identifier.Subscription10kYearlyDiscounted:
|
||||
productImageView.image = UIImage.init(named: "top_10k")
|
||||
purchaseRecapString = "inapp_yearly_payment"
|
||||
|
||||
subscriptionDetailsString = "inapp_detail_description"
|
||||
case VersioneProProducts.Identifier.Subscription10kPerpetual,
|
||||
VersioneProProducts.Identifier.Subscription100kPerpetual:
|
||||
purchaseRecapString = "inapp_lifetime_payment"
|
||||
subscriptionDetailsString = "inapp_lifetime_detail_description"
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
subscriptionDetailsLabel.text = NSLocalizedString("", comment: "")
|
||||
subscriptionDetailsLabel.text = NSLocalizedString(subscriptionDetailsString, comment: "")
|
||||
openPrivacyButton.setTitle(NSLocalizedString("network_pro_privacy_disclaimer", comment: ""), for: .normal)
|
||||
openTermsButton.setTitle(NSLocalizedString("network_pro_terms_conditions", comment: ""), for: .normal)
|
||||
|
||||
|
||||
+20
-4
@@ -9,7 +9,7 @@
|
||||
import UIKit
|
||||
import StoreKit
|
||||
|
||||
class SubscriptionProductTableViewCell: EQNInsetTableViewCell {
|
||||
class SubscriptionProductTableViewCell: UITableViewCell {
|
||||
|
||||
var product: SKProduct? {
|
||||
didSet {
|
||||
@@ -28,22 +28,38 @@ class SubscriptionProductTableViewCell: EQNInsetTableViewCell {
|
||||
@IBOutlet private weak var productInfoLabel: UILabel!
|
||||
|
||||
|
||||
// MARK: - View Lifecycle
|
||||
|
||||
// force an inset to have the same style of EQNBaseTableViewCell
|
||||
override var frame: CGRect {
|
||||
get {
|
||||
return super.frame
|
||||
}
|
||||
set (newFrame) {
|
||||
let inset: CGFloat = 8
|
||||
var frame = newFrame
|
||||
frame.origin.x += inset
|
||||
frame.size.width -= 2 * inset
|
||||
super.frame = frame
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func updateUI() {
|
||||
guard let product = product else { return }
|
||||
|
||||
productImageView.image = imageForProductIdentifier(product.productIdentifier)
|
||||
productImageView.image = VersioneProProducts.image(for: product.productIdentifier)
|
||||
productTitleLabel.text = product.localizedTitle
|
||||
productDescriptionLabel?.text = product.localizedDescription
|
||||
|
||||
let infoKey = is100kSubscriptionForProductIdentifier(product.productIdentifier) ? "inapp_available_100k" : "inapp_available_10k"
|
||||
let infoKey = VersioneProProducts.is100kSubscription(for: product.productIdentifier) ? "inapp_available_100k" : "inapp_available_10k"
|
||||
let counter = availability(for: product.productIdentifier)
|
||||
productInfoLabel.text = String(format: NSLocalizedString(infoKey, comment: ""), counter)
|
||||
}
|
||||
|
||||
private func availability(for productIdentifier: String) -> Int {
|
||||
if is100kSubscriptionForProductIdentifier(productIdentifier) {
|
||||
if VersioneProProducts.is100kSubscription(for: productIdentifier) {
|
||||
return availability?.top100kAvailable ?? 0
|
||||
}
|
||||
return availability?.top10kAvailable ?? 0
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
import UIKit
|
||||
import StoreKit
|
||||
|
||||
class SubscriptionsActiveTableViewCell: EQNInsetTableViewCell {
|
||||
class SubscriptionsActiveTableViewCell: EQNBaseTableViewCell {
|
||||
|
||||
var product: SKProduct? {
|
||||
didSet {
|
||||
@@ -40,7 +40,7 @@ class SubscriptionsActiveTableViewCell: EQNInsetTableViewCell {
|
||||
if let productIdentifier = product?.productIdentifier {
|
||||
noSubscriptionsLabel.isHidden = true
|
||||
activeSubscriptionImageView.isHidden = false
|
||||
activeSubscriptionImageView.image = imageForProductIdentifier(productIdentifier)
|
||||
activeSubscriptionImageView.image = VersioneProProducts.image(for: productIdentifier)
|
||||
} else {
|
||||
noSubscriptionsLabel.isHidden = false
|
||||
activeSubscriptionImageView.isHidden = true
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
class SubscriptionsDescriptionTableViewCell: EQNInsetTableViewCell {
|
||||
class SubscriptionsDescriptionTableViewCell: EQNBaseTableViewCell {
|
||||
|
||||
@IBOutlet private weak var headerLabel: UILabel!
|
||||
@IBOutlet private weak var descriptionLabel: UILabel!
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
class SubscriptionsHeaderTableViewCell: EQNInsetTableViewCell {
|
||||
class SubscriptionsHeaderTableViewCell: UITableViewCell {
|
||||
|
||||
var isLoading = false {
|
||||
didSet {
|
||||
@@ -25,13 +25,6 @@ class SubscriptionsHeaderTableViewCell: EQNInsetTableViewCell {
|
||||
@IBOutlet private weak var headerTitleLabel: UILabel!
|
||||
@IBOutlet private weak var loadingActivityIndicator: UIActivityIndicatorView!
|
||||
|
||||
// MARK: - View Lifecycle
|
||||
|
||||
override func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
// Initialization code
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func updateUI() {
|
||||
|
||||
@@ -21,11 +21,13 @@ class SubscriptionsViewController: UITableViewController {
|
||||
case description
|
||||
case monthly
|
||||
case yearly
|
||||
case perpetual
|
||||
|
||||
var sectionTitle: String? {
|
||||
switch self {
|
||||
case .monthly: return NSLocalizedString("inapp_monthly_subscriptions", comment: "")
|
||||
case .yearly: return NSLocalizedString("inapp_yearly_subscriptions", comment: "")
|
||||
case .perpetual: return NSLocalizedString("inapp_lifetime_subscriptions", comment: "")
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
@@ -36,6 +38,7 @@ class SubscriptionsViewController: UITableViewController {
|
||||
private var allProducts = [SKProduct]()
|
||||
private var monthlyProducts = [SKProduct]()
|
||||
private var yearlyProducts = [SKProduct]()
|
||||
private var perpetualProducts = [SKProduct]()
|
||||
/// Product already bought by the user
|
||||
private var subscribedProduct: SKProduct?
|
||||
/// Availability for subscriptions
|
||||
@@ -105,6 +108,7 @@ class SubscriptionsViewController: UITableViewController {
|
||||
private func updateUI() {
|
||||
monthlyProducts.removeAll()
|
||||
yearlyProducts.removeAll()
|
||||
perpetualProducts.removeAll()
|
||||
|
||||
// creates list to show
|
||||
let isDiscountAvailable = checkDiscountPrice()
|
||||
@@ -127,6 +131,11 @@ class SubscriptionsViewController: UITableViewController {
|
||||
yearlyProducts.append(product)
|
||||
}
|
||||
}
|
||||
// perpetual scribuscriptions doesn't have discounted version
|
||||
if product.productIdentifier == VersioneProProducts.Identifier.Subscription10kPerpetual ||
|
||||
product.productIdentifier == VersioneProProducts.Identifier.Subscription100kPerpetual {
|
||||
perpetualProducts.append(product)
|
||||
}
|
||||
}
|
||||
|
||||
tableView.reloadData()
|
||||
@@ -142,7 +151,7 @@ class SubscriptionsViewController: UITableViewController {
|
||||
|
||||
let purchased = products.filter { (product) -> Bool in
|
||||
let isPurchased = VersioneProProducts.store.isProductPurchased(product.productIdentifier)
|
||||
let isSubscription = VersioneProProducts.Identifier.isSubscription(for: product.productIdentifier)
|
||||
let isSubscription = VersioneProProducts.isSubscription(for: product.productIdentifier)
|
||||
return isPurchased && isSubscription
|
||||
}
|
||||
self.subscribedProduct = purchased.first
|
||||
@@ -231,7 +240,7 @@ class SubscriptionsViewController: UITableViewController {
|
||||
if tableSection.sectionTitle != nil {
|
||||
return 50
|
||||
}
|
||||
return 10
|
||||
return 0
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
@@ -239,8 +248,10 @@ class SubscriptionsViewController: UITableViewController {
|
||||
switch tableSection {
|
||||
case .active: return 1
|
||||
case .description: return 1
|
||||
case .monthly: return monthlyProducts.count
|
||||
case .yearly: return yearlyProducts.count
|
||||
case .monthly,
|
||||
.yearly,
|
||||
.perpetual:
|
||||
return availableProducts(for: tableSection).count
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,6 +263,33 @@ class SubscriptionsViewController: UITableViewController {
|
||||
}
|
||||
return UITableView.automaticDimension
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
|
||||
let tableSection = sections[indexPath.section]
|
||||
if tableSection == .active || tableSection == .description {
|
||||
return
|
||||
}
|
||||
|
||||
// add round borders to first and last row in products cells
|
||||
let cornerRadius = AppTheme.shared.cardCornerRadius
|
||||
var corners: UIRectCorner = []
|
||||
|
||||
if indexPath.row == 0 {
|
||||
corners.update(with: .topLeft)
|
||||
corners.update(with: .topRight)
|
||||
}
|
||||
|
||||
if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
|
||||
corners.update(with: .bottomLeft)
|
||||
corners.update(with: .bottomRight)
|
||||
}
|
||||
|
||||
let maskLayer = CAShapeLayer()
|
||||
maskLayer.path = UIBezierPath(roundedRect: cell.bounds,
|
||||
byRoundingCorners: corners,
|
||||
cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
|
||||
cell.layer.mask = maskLayer
|
||||
}
|
||||
|
||||
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let tableSection = sections[indexPath.section]
|
||||
@@ -265,7 +303,7 @@ class SubscriptionsViewController: UITableViewController {
|
||||
return cell
|
||||
}
|
||||
|
||||
let products = tableSection == .monthly ? monthlyProducts : yearlyProducts
|
||||
let products = availableProducts(for: tableSection)
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "SubscriptionCell", for: indexPath) as! SubscriptionProductTableViewCell
|
||||
cell.product = products[indexPath.row]
|
||||
cell.availability = availability
|
||||
@@ -276,11 +314,22 @@ class SubscriptionsViewController: UITableViewController {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
|
||||
let tableSection = sections[indexPath.section]
|
||||
if tableSection == .monthly || tableSection == .yearly {
|
||||
let products = tableSection == .monthly ? monthlyProducts : yearlyProducts
|
||||
let products = availableProducts(for: tableSection)
|
||||
if !products.isEmpty {
|
||||
performSegue(withIdentifier: Self.SegueIdentifierSubscriptionDetail, sender: products[indexPath.row])
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Helpers
|
||||
|
||||
private func availableProducts(for section: TableSection) -> [SKProduct] {
|
||||
switch section {
|
||||
case .monthly: return monthlyProducts
|
||||
case .yearly: return yearlyProducts
|
||||
case .perpetual: return perpetualProducts
|
||||
default: return []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension SubscriptionsViewController: StoryboardInitializable {
|
||||
|
||||
@@ -66,6 +66,7 @@ static NSString * const EQNServerUrlAlertSimulator = @"https://srv.earthquakenet
|
||||
|
||||
static NSString * const EQNUserDefaultAppGroupSuite = @"group.com.finazzi.distquake";
|
||||
|
||||
static NSString * const EQNUserDefaultKeyAlertsShowAllCards = @"EQNetwork.AlertsShowAllCards";
|
||||
static NSString * const EQNUserDefaultKeySesmicInformations = @"EQNetwork.SeismicInformations";
|
||||
static NSString * const EQNUserDefaultKeyOneShotShowCountry = @"EQNetwork.OneShot.CountrySelection";
|
||||
static NSString * const EQNUserDefaultLastLocation = @"EQNLast_Location";
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// UIView+EQNExtensions.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Andrea Busi on 23/04/21.
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
|
||||
extension UIView {
|
||||
|
||||
func eqn_applyShadowAndRoundedCorners() {
|
||||
// rounded corners
|
||||
layer.cornerRadius = AppTheme.shared.cardCornerRadius
|
||||
layer.masksToBounds = false
|
||||
|
||||
// apply a shadow to the current view
|
||||
layer.shadowColor = UIColor.black.cgColor
|
||||
layer.shadowOpacity = 0.5
|
||||
layer.shadowOffset = CGSize(width: 0, height: 2)
|
||||
layer.shadowRadius = 2
|
||||
}
|
||||
}
|
||||
@@ -37,40 +37,66 @@ public struct VersioneProProducts {
|
||||
static let Subscription10kMonthly = "com.finazzi.distquake.Abbonamento10k.mensileAutomatico"
|
||||
static let Subscription10kYearly = "com.finazzi.distquake.Abbonamento10k.annualeAutomatico"
|
||||
static let Subscription10kYearlyDiscounted = "com.finazzi.distquake.Abbonamento10k.annualeAutomaticoScontato"
|
||||
static let Subscription10kPerpetual = "com.finazzi.distquake.Abbonamento10k.perpetuo"
|
||||
|
||||
static let Subscription100kMonthly = "com.finazzi.distquake.Abbonamento100k.mensileAutomatico"
|
||||
static let Subscription100kYearly = "com.finazzi.distquake.Abbonamento100k.annualeAutomatico"
|
||||
static let Subscription100kYearlyDiscounted = "com.finazzi.distquake.Abbonamento100k.annualeAutomaticoscontato"
|
||||
static let Subscription100kPerpetual = "com.finazzi.distquake.Abbonamento100k.perpetuo"
|
||||
|
||||
|
||||
static let identifiers: Set<ProductIdentifier> = [
|
||||
ProVersionFullPrice, ProVersionDiscounted,
|
||||
Subscription10kMonthly, Subscription10kYearly, Subscription10kYearlyDiscounted,
|
||||
Subscription100kMonthly, Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
Subscription100kMonthly, Subscription100kYearly, Subscription100kYearlyDiscounted,
|
||||
Subscription10kPerpetual, Subscription100kPerpetual
|
||||
]
|
||||
|
||||
static let identifierForProVersion: Set<ProductIdentifier> = [
|
||||
ProVersionFullPrice, ProVersionDiscounted,
|
||||
Subscription10kYearly, Subscription10kYearlyDiscounted,
|
||||
Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
Subscription100kYearly, Subscription100kYearlyDiscounted,
|
||||
Subscription10kPerpetual, Subscription100kPerpetual
|
||||
]
|
||||
|
||||
static let identifiersForTop10k: Set<ProductIdentifier> = [
|
||||
Subscription10kMonthly, Subscription10kYearly, Subscription10kYearlyDiscounted
|
||||
Subscription10kMonthly, Subscription10kYearly, Subscription10kYearlyDiscounted, Subscription10kPerpetual
|
||||
]
|
||||
|
||||
static let identifiersForTop100k: Set<ProductIdentifier> = [
|
||||
Subscription100kMonthly, Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
Subscription100kMonthly, Subscription100kYearly, Subscription100kYearlyDiscounted, Subscription100kPerpetual
|
||||
]
|
||||
|
||||
static let identifierForSubscriptions: Set<ProductIdentifier> = [
|
||||
Subscription10kMonthly, Subscription100kMonthly,
|
||||
Subscription10kYearly, Subscription10kYearlyDiscounted,
|
||||
Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
Subscription100kYearly, Subscription100kYearlyDiscounted,
|
||||
Subscription10kPerpetual, Subscription100kPerpetual
|
||||
]
|
||||
|
||||
static func isSubscription(for identifier: String) -> Bool {
|
||||
Self.identifierForSubscriptions.contains(identifier)
|
||||
}
|
||||
|
||||
static func isSubscription(for identifier: String) -> Bool {
|
||||
Identifier.identifierForSubscriptions.contains(identifier)
|
||||
}
|
||||
|
||||
static func is10kSubscription(for identifier: String) -> Bool {
|
||||
Identifier.identifiersForTop10k.contains(identifier)
|
||||
}
|
||||
|
||||
static func is100kSubscription(for identifier: String) -> Bool {
|
||||
Identifier.identifiersForTop100k.contains(identifier)
|
||||
}
|
||||
|
||||
static func image(for productIdentifier: String) -> UIImage? {
|
||||
if is100kSubscription(for: productIdentifier){
|
||||
return UIImage(named: "top_100k")
|
||||
}
|
||||
|
||||
if is10kSubscription(for: productIdentifier) {
|
||||
return UIImage(named: "top_10k")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
public static let store = IAPHelper(productIds: VersioneProProducts.Identifier.identifiers)
|
||||
@@ -80,27 +106,4 @@ func resourceNameForProductIdentifier(_ productIdentifier: String) -> String? {
|
||||
return productIdentifier.components(separatedBy: ".").last
|
||||
}
|
||||
|
||||
func imageForProductIdentifier(_ productIdentifier: String) -> UIImage? {
|
||||
let products100k = [VersioneProProducts.Identifier.Subscription100kMonthly,
|
||||
VersioneProProducts.Identifier.Subscription100kYearly,
|
||||
VersioneProProducts.Identifier.Subscription100kYearlyDiscounted]
|
||||
if products100k.contains(productIdentifier) {
|
||||
return UIImage(named: "top_100k")
|
||||
}
|
||||
|
||||
let products10k = [VersioneProProducts.Identifier.Subscription10kMonthly,
|
||||
VersioneProProducts.Identifier.Subscription10kYearly,
|
||||
VersioneProProducts.Identifier.Subscription10kYearlyDiscounted]
|
||||
if products10k.contains(productIdentifier) {
|
||||
return UIImage(named: "top_10k")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func is100kSubscriptionForProductIdentifier(_ productIdentifier: String) -> Bool {
|
||||
let products100k = [VersioneProProducts.Identifier.Subscription100kMonthly,
|
||||
VersioneProProducts.Identifier.Subscription100kYearly,
|
||||
VersioneProProducts.Identifier.Subscription100kYearlyDiscounted]
|
||||
return products100k.contains(productIdentifier)
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="22" translatesAutoresizingMaskIntoConstraints="NO" id="WHR-BN-hfJ">
|
||||
<rect key="frame" x="8" y="34" width="377.5" height="654"/>
|
||||
<rect key="frame" x="8" y="34" width="377.5" height="703.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="You are buying the PRO version, advertisement will be removed" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6z8-bz-exh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="377.5" height="41"/>
|
||||
@@ -60,17 +60,17 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" distribution="fillEqually" translatesAutoresizingMaskIntoConstraints="NO" id="exx-jC-Bsi">
|
||||
<rect key="frame" x="0.0" y="377" width="377.5" height="123.5"/>
|
||||
<rect key="frame" x="0.0" y="377" width="377.5" height="173"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Xkb-Nt-Fiw">
|
||||
<rect key="frame" x="0.0" y="0.0" width="377.5" height="62"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="377.5" height="86.5"/>
|
||||
<state key="normal" title="Privacy disclaimer"/>
|
||||
<connections>
|
||||
<action selector="openExternalLinkTapped:" destination="rRh-R0-bas" eventType="touchUpInside" id="7I2-2c-6U4"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dnA-Yy-Ado">
|
||||
<rect key="frame" x="0.0" y="62" width="377.5" height="61.5"/>
|
||||
<rect key="frame" x="0.0" y="86.5" width="377.5" height="86.5"/>
|
||||
<state key="normal" title="Terms and conditions"/>
|
||||
<connections>
|
||||
<action selector="openExternalLinkTapped:" destination="rRh-R0-bas" eventType="touchUpInside" id="eaH-Et-bch"/>
|
||||
@@ -79,7 +79,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="5e5-N9-PcO">
|
||||
<rect key="frame" x="0.0" y="522.5" width="377.5" height="131.5"/>
|
||||
<rect key="frame" x="0.0" y="572" width="377.5" height="131.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="You are paying:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gGN-X8-wUL">
|
||||
<rect key="frame" x="0.0" y="0.0" width="377.5" height="20.5"/>
|
||||
@@ -143,8 +143,9 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<constraint firstItem="aTr-Vm-6rY" firstAttribute="bottom" secondItem="LIA-2s-RvE" secondAttribute="bottom" id="yW8-WZ-Ncl"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="DOH-gv-btw"/>
|
||||
<navigationItem key="navigationItem" largeTitleDisplayMode="never" id="DOH-gv-btw"/>
|
||||
<connections>
|
||||
<outlet property="containerView" destination="aeL-82-LFr" id="q7p-FM-mfN"/>
|
||||
<outlet property="descriptionTextLabel" destination="1Wb-RN-Qxg" id="yaP-xh-l6b"/>
|
||||
<outlet property="discountTextLabel" destination="Ywi-cF-AR3" id="SoR-jd-nic"/>
|
||||
<outlet property="openPrivacyButton" destination="Xkb-Nt-Fiw" id="WkY-zF-a7Q"/>
|
||||
@@ -169,7 +170,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pxx-Kc-Db6">
|
||||
<rect key="frame" x="0.0" y="140" width="414" height="756"/>
|
||||
<rect key="frame" x="0.0" y="88" width="414" height="808"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="X53-xC-GHZ">
|
||||
<rect key="frame" x="8" y="8" width="393.5" height="805"/>
|
||||
@@ -283,7 +284,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</scrollView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="pPN-XV-Rfn"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="pxx-Kc-Db6" firstAttribute="top" secondItem="pPN-XV-Rfn" secondAttribute="top" id="07C-Tl-ZdQ"/>
|
||||
<constraint firstItem="pxx-Kc-Db6" firstAttribute="trailing" secondItem="pPN-XV-Rfn" secondAttribute="trailing" id="A9c-wR-QKt"/>
|
||||
@@ -293,6 +294,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="yp6-rq-6l9"/>
|
||||
<connections>
|
||||
<outlet property="containerView" destination="X53-xC-GHZ" id="03M-s1-vhe"/>
|
||||
<outlet property="openPrivacyButton" destination="ZqJ-8B-jWz" id="7PD-At-UD8"/>
|
||||
<outlet property="openTermsButton" destination="Lur-Tu-wib" id="x34-JZ-2NQ"/>
|
||||
<outlet property="productDescriptionLabel" destination="qZL-r3-lXS" id="nA2-Sm-FSh"/>
|
||||
@@ -1031,10 +1033,10 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<scene sceneID="9hc-If-3Tb">
|
||||
<objects>
|
||||
<tableViewController storyboardIdentifier="subscriptionsController" modalPresentationStyle="fullScreen" id="cXN-cY-DjM" customClass="SubscriptionsViewController" customModule="Earthquake_Network" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="q2Q-SQ-bFH">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="q2Q-SQ-bFH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<prototypes>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="ActiveSubscriptionsCell" rowHeight="140" id="MQJ-yM-iDt" customClass="SubscriptionsActiveTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="28" width="414" height="140"/>
|
||||
@@ -1043,48 +1045,62 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="140"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Active subscriptions" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c9L-RP-VQh" customClass="EQNEdgeInsetLabel" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="158.5" height="26"/>
|
||||
<color key="backgroundColor" name="Light blue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="26" id="ErK-An-J5r"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="g2D-09-dmu">
|
||||
<rect key="frame" x="20" y="34" width="374" height="87"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qua-Xe-GWL">
|
||||
<rect key="frame" x="8" y="8" width="398" height="124"/>
|
||||
<subviews>
|
||||
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="top_10k" translatesAutoresizingMaskIntoConstraints="NO" id="ZQI-Db-Pb4">
|
||||
<rect key="frame" x="122" y="0.0" width="130" height="50"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Active subscriptions" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c9L-RP-VQh" customClass="EQNEdgeInsetLabel" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="158.5" height="26"/>
|
||||
<color key="backgroundColor" name="Light blue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="fZ7-02-Ezz"/>
|
||||
<constraint firstAttribute="height" constant="50" id="qsx-s4-NiD"/>
|
||||
<constraint firstAttribute="height" constant="26" id="ErK-An-J5r"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No active subscriptions" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="axa-WN-rP3">
|
||||
<rect key="frame" x="98" y="0.0" width="178.5" height="87"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="center" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="g2D-09-dmu">
|
||||
<rect key="frame" x="48" y="34" width="322" height="62"/>
|
||||
<subviews>
|
||||
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="top_10k" translatesAutoresizingMaskIntoConstraints="NO" id="ZQI-Db-Pb4">
|
||||
<rect key="frame" x="96" y="0.0" width="130" height="50"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="130" id="fZ7-02-Ezz"/>
|
||||
<constraint firstAttribute="height" constant="50" id="qsx-s4-NiD"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No active subscriptions" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="axa-WN-rP3">
|
||||
<rect key="frame" x="72" y="0.0" width="178.5" height="62"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</stackView>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="c9L-RP-VQh" secondAttribute="trailing" priority="250" constant="255.5" id="14i-ZH-FKD"/>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="centerX" secondItem="Qua-Xe-GWL" secondAttribute="centerX" constant="10" id="AN3-jv-Jda"/>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="top" secondItem="c9L-RP-VQh" secondAttribute="bottom" constant="8" id="IwZ-uA-q9y"/>
|
||||
<constraint firstAttribute="bottomMargin" secondItem="g2D-09-dmu" secondAttribute="bottom" constant="20" id="asX-RQ-r3l"/>
|
||||
<constraint firstItem="c9L-RP-VQh" firstAttribute="leading" secondItem="Qua-Xe-GWL" secondAttribute="leading" id="fHZ-h9-ypi"/>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="leading" secondItem="Qua-Xe-GWL" secondAttribute="leadingMargin" constant="40" id="hJl-t8-8gM"/>
|
||||
<constraint firstItem="c9L-RP-VQh" firstAttribute="top" secondItem="Qua-Xe-GWL" secondAttribute="top" id="qMw-jv-AFa"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="g2D-09-dmu" secondAttribute="trailing" constant="20" id="xp5-qM-pn7"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="leading" secondItem="POW-zi-4UN" secondAttribute="leadingMargin" id="USb-WR-wNm"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="g2D-09-dmu" secondAttribute="trailing" id="YaO-Qz-yaz"/>
|
||||
<constraint firstItem="c9L-RP-VQh" firstAttribute="top" secondItem="POW-zi-4UN" secondAttribute="top" id="aXn-Ts-fbh"/>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="top" secondItem="c9L-RP-VQh" secondAttribute="bottom" constant="8" id="ctZ-zz-se8"/>
|
||||
<constraint firstAttribute="trailing" secondItem="c9L-RP-VQh" secondAttribute="trailing" priority="250" id="esW-pI-87E"/>
|
||||
<constraint firstItem="g2D-09-dmu" firstAttribute="centerX" secondItem="POW-zi-4UN" secondAttribute="centerX" id="fSa-Qb-eVd"/>
|
||||
<constraint firstAttribute="bottomMargin" secondItem="g2D-09-dmu" secondAttribute="bottom" constant="8" id="rbk-tR-lYK"/>
|
||||
<constraint firstItem="c9L-RP-VQh" firstAttribute="leading" secondItem="POW-zi-4UN" secondAttribute="leading" id="vBT-Qt-a6G"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Qua-Xe-GWL" secondAttribute="bottom" constant="8" id="2dd-ZU-S09"/>
|
||||
<constraint firstItem="Qua-Xe-GWL" firstAttribute="leading" secondItem="POW-zi-4UN" secondAttribute="leading" constant="8" id="IPJ-On-GUz"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Qua-Xe-GWL" secondAttribute="trailing" constant="8" id="pIw-hF-VaG"/>
|
||||
<constraint firstItem="Qua-Xe-GWL" firstAttribute="top" secondItem="POW-zi-4UN" secondAttribute="top" constant="8" id="yNm-sR-xl1"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<connections>
|
||||
<outlet property="activeSubscriptionImageView" destination="ZQI-Db-Pb4" id="bf8-ua-1AW"/>
|
||||
<outlet property="containerView" destination="Qua-Xe-GWL" id="0KS-N4-2AR"/>
|
||||
<outlet property="headerLabel" destination="c9L-RP-VQh" id="ZLx-CA-yeJ"/>
|
||||
<outlet property="noSubscriptionsLabel" destination="axa-WN-rP3" id="4yQ-qa-GLH"/>
|
||||
</connections>
|
||||
@@ -1096,57 +1112,71 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="400"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Priority service" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZXY-1S-WBT" customClass="EQNEdgeInsetLabel" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="117" height="26"/>
|
||||
<color key="backgroundColor" name="Light blue"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kCf-AE-JEH">
|
||||
<rect key="frame" x="8" y="8" width="398" height="384"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Priority service" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZXY-1S-WBT" customClass="EQNEdgeInsetLabel" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="117" height="26"/>
|
||||
<color key="backgroundColor" name="Light blue"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="26" id="3bq-w5-2GF"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="justified" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BNz-EW-lXI">
|
||||
<rect key="frame" x="16" y="34" width="366" height="342"/>
|
||||
<string key="text">Un'allerta è inviata agli utenti dell'app ogni volta che un sisma è rilevato in tempo reale. Allertare tutti può richiedere fino a 30 secondi in quanto non è tecnicamente fattibile farlo istantaneamente. Ora puoi entrare a far parte delle liste di priorità delle prime 10'000 o 100'000 persone allertate. L'ordine di allerta è il seguente: prima tutti gli utenti con servizio TOP 10K, successivamente tutti gli utenti con servizio TOP 100K ed infine tutti gli altri utenti. A parità di servizio, l'ordine di allerta si basa sulla distanza dall'epicentro.</string>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleCallout"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="26" id="3bq-w5-2GF"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ZXY-1S-WBT" secondAttribute="trailing" priority="250" constant="297" id="7tO-mq-Pwc"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="BNz-EW-lXI" secondAttribute="trailing" constant="8" id="CFv-s3-cyE"/>
|
||||
<constraint firstItem="BNz-EW-lXI" firstAttribute="top" secondItem="ZXY-1S-WBT" secondAttribute="bottom" constant="8" id="Coo-ku-J4a"/>
|
||||
<constraint firstItem="BNz-EW-lXI" firstAttribute="leading" secondItem="kCf-AE-JEH" secondAttribute="leadingMargin" constant="8" id="PIQ-wu-11u"/>
|
||||
<constraint firstItem="ZXY-1S-WBT" firstAttribute="top" secondItem="kCf-AE-JEH" secondAttribute="top" id="cG1-7Y-qjf"/>
|
||||
<constraint firstAttribute="bottom" secondItem="BNz-EW-lXI" secondAttribute="bottom" constant="8" id="okG-4A-tj3"/>
|
||||
<constraint firstItem="ZXY-1S-WBT" firstAttribute="leading" secondItem="kCf-AE-JEH" secondAttribute="leading" id="z3e-uS-566"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="justified" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BNz-EW-lXI">
|
||||
<rect key="frame" x="20" y="34" width="374" height="358"/>
|
||||
<string key="text">Un'allerta è inviata agli utenti dell'app ogni volta che un sisma è rilevato in tempo reale. Allertare tutti può richiedere fino a 30 secondi in quanto non è tecnicamente fattibile farlo istantaneamente. Ora puoi entrare a far parte delle liste di priorità delle prime 10'000 o 100'000 persone allertate. L'ordine di allerta è il seguente: prima tutti gli utenti con servizio TOP 10K, successivamente tutti gli utenti con servizio TOP 100K ed infine tutti gli altri utenti. A parità di servizio, l'ordine di allerta si basa sulla distanza dall'epicentro.</string>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleCallout"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="ZXY-1S-WBT" secondAttribute="trailing" priority="250" id="C7H-uB-CjO"/>
|
||||
<constraint firstItem="BNz-EW-lXI" firstAttribute="top" secondItem="ZXY-1S-WBT" secondAttribute="bottom" constant="8" id="Dlj-OV-KyY"/>
|
||||
<constraint firstItem="BNz-EW-lXI" firstAttribute="leading" secondItem="gqq-Lx-ead" secondAttribute="leadingMargin" id="O3M-Eo-y7m"/>
|
||||
<constraint firstAttribute="bottom" secondItem="BNz-EW-lXI" secondAttribute="bottom" constant="8" id="PqP-v9-Jyg"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="BNz-EW-lXI" secondAttribute="trailing" id="Wm9-kw-Wal"/>
|
||||
<constraint firstItem="ZXY-1S-WBT" firstAttribute="leading" secondItem="gqq-Lx-ead" secondAttribute="leading" id="vIC-j2-Aqo"/>
|
||||
<constraint firstItem="ZXY-1S-WBT" firstAttribute="top" secondItem="gqq-Lx-ead" secondAttribute="top" id="yjI-LD-Gzo"/>
|
||||
<constraint firstAttribute="bottom" secondItem="kCf-AE-JEH" secondAttribute="bottom" constant="8" id="GzR-SY-AP4"/>
|
||||
<constraint firstItem="kCf-AE-JEH" firstAttribute="leading" secondItem="gqq-Lx-ead" secondAttribute="leading" constant="8" id="Ik0-zJ-lf3"/>
|
||||
<constraint firstAttribute="trailing" secondItem="kCf-AE-JEH" secondAttribute="trailing" constant="8" id="fQU-k1-G2e"/>
|
||||
<constraint firstItem="kCf-AE-JEH" firstAttribute="top" secondItem="gqq-Lx-ead" secondAttribute="top" constant="8" id="q22-Yy-szu"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<connections>
|
||||
<outlet property="containerView" destination="kCf-AE-JEH" id="2fg-BQ-t5L"/>
|
||||
<outlet property="descriptionLabel" destination="BNz-EW-lXI" id="bjA-4M-6Ej"/>
|
||||
<outlet property="headerLabel" destination="ZXY-1S-WBT" id="0g5-nu-fz8"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SectionHeaderCell" id="urG-ON-XcB" customClass="SubscriptionsHeaderTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="568" width="414" height="43.5"/>
|
||||
<rect key="frame" x="0.0" y="568" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="urG-ON-XcB" id="SrE-iI-Nig">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillProportionally" translatesAutoresizingMaskIntoConstraints="NO" id="e1H-JK-cpd">
|
||||
<rect key="frame" x="0.0" y="12" width="414" height="20"/>
|
||||
<rect key="frame" x="8" y="12" width="398" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="1" contentMode="left" horizontalHuggingPriority="249" verticalHuggingPriority="251" horizontalCompressionResistancePriority="749" text="Monthly subscriptions" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0xS-ly-xZg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="386" height="20"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="370" height="20"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="20"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="751" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" hidesWhenStopped="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="4kc-T4-2fq">
|
||||
<rect key="frame" x="386" y="0.0" width="28" height="20"/>
|
||||
<rect key="frame" x="370" y="0.0" width="28" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="28" id="3si-0h-9NB"/>
|
||||
<constraint firstAttribute="height" constant="20" id="vXr-mZ-d4H"/>
|
||||
@@ -1156,18 +1186,19 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</stackView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="e1H-JK-cpd" firstAttribute="leading" secondItem="SrE-iI-Nig" secondAttribute="leading" id="59O-Jd-Fai"/>
|
||||
<constraint firstAttribute="trailing" secondItem="e1H-JK-cpd" secondAttribute="trailing" id="HUb-bF-7ch"/>
|
||||
<constraint firstItem="e1H-JK-cpd" firstAttribute="leading" secondItem="SrE-iI-Nig" secondAttribute="leading" constant="8" id="59O-Jd-Fai"/>
|
||||
<constraint firstAttribute="trailing" secondItem="e1H-JK-cpd" secondAttribute="trailing" constant="8" id="HUb-bF-7ch"/>
|
||||
<constraint firstItem="e1H-JK-cpd" firstAttribute="centerY" secondItem="SrE-iI-Nig" secondAttribute="centerY" id="XIm-jA-fkD"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/>
|
||||
<connections>
|
||||
<outlet property="headerTitleLabel" destination="0xS-ly-xZg" id="9HL-cx-MaB"/>
|
||||
<outlet property="loadingActivityIndicator" destination="4kc-T4-2fq" id="VqP-5w-IuD"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="SubscriptionCell" rowHeight="140" id="ltf-er-wHX" customClass="SubscriptionProductTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="611.5" width="414" height="140"/>
|
||||
<rect key="frame" x="0.0" y="612" width="414" height="140"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="ltf-er-wHX" id="ohD-ot-UaH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="383" height="140"/>
|
||||
@@ -1218,7 +1249,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<outlet property="delegate" destination="cXN-cY-DjM" id="y7A-F9-Alv"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<navigationItem key="navigationItem" id="rLC-QL-XEw"/>
|
||||
<navigationItem key="navigationItem" largeTitleDisplayMode="never" id="rLC-QL-XEw"/>
|
||||
<connections>
|
||||
<segue destination="tdo-m9-oeL" kind="show" identifier="ShowSubscriptionDetail" id="tjH-rC-dEM"/>
|
||||
</connections>
|
||||
@@ -2337,16 +2368,24 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="UFX-6G-Mx1">
|
||||
<nil key="title"/>
|
||||
<barButtonItem key="rightBarButtonItem" image="navbar-icon-refresh" id="K26-D2-e2V">
|
||||
<inset key="imageInsets" minX="-12" minY="0.0" maxX="-4" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="refreshDataTapped:" destination="syj-UE-OWc" id="KPd-FV-q3k"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
<rightBarButtonItems>
|
||||
<barButtonItem image="navbar-icon-refresh" id="K26-D2-e2V">
|
||||
<inset key="imageInsets" minX="-12" minY="0.0" maxX="-4" maxY="0.0"/>
|
||||
<connections>
|
||||
<action selector="refreshDataTapped:" destination="syj-UE-OWc" id="KPd-FV-q3k"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
<barButtonItem image="navbar-icon-arrow-collapse" id="pbW-2s-ktg">
|
||||
<connections>
|
||||
<action selector="collapseExpandTapped:" destination="syj-UE-OWc" id="P42-dV-Dk9"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</rightBarButtonItems>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="bannerContainerHeightConstraint" destination="kmt-E8-s2w" id="ZM7-bg-NHB"/>
|
||||
<outlet property="bannerContainerView" destination="PyX-yA-DXv" id="KjR-S3-WEU"/>
|
||||
<outlet property="expandeCollapseButton" destination="pbW-2s-ktg" id="QmE-Nl-SmO"/>
|
||||
<outlet property="tableView" destination="a35-sg-TCr" id="OhR-Ty-elu"/>
|
||||
<segue destination="rRh-R0-bas" kind="show" identifier="ShowProVersion" id="phk-Ww-RSV"/>
|
||||
<segue destination="cXN-cY-DjM" kind="show" identifier="ShowPrioritySubscriptions" id="yhm-9X-yNM"/>
|
||||
@@ -2397,5 +2436,8 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemGroupedBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -20,14 +20,7 @@ class EQNBaseTableViewCell: UITableViewCell {
|
||||
|
||||
clipsToBounds = true
|
||||
|
||||
// rounded corners
|
||||
containerView.layer.cornerRadius = AppTheme.shared.cardCornerRadius
|
||||
containerView.layer.masksToBounds = false
|
||||
|
||||
// apply a shadow to the container view
|
||||
containerView.layer.shadowColor = UIColor.black.cgColor
|
||||
containerView.layer.shadowOpacity = 0.5
|
||||
containerView.layer.shadowOffset = CGSize(width: 0, height: 2)
|
||||
containerView.layer.shadowRadius = 2
|
||||
// rounded corners and shadow
|
||||
containerView.eqn_applyShadowAndRoundedCorners()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// EQNInsetTableViewCell.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 29/07/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
class EQNInsetTableViewCell: UITableViewCell {
|
||||
override var frame: CGRect {
|
||||
get {
|
||||
return super.frame
|
||||
}
|
||||
set (newFrame) {
|
||||
let inset: CGFloat = 15
|
||||
var frame = newFrame
|
||||
frame.origin.x += inset
|
||||
frame.size.width -= 2 * inset
|
||||
super.frame = frame
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Όροι και συνθήκες";
|
||||
"network_pro_paying" = "Πληρώνετε:";
|
||||
"inapp_detail_description" = "• Η πληρωμή σας θα χρεωθεί στο λογαριασμό σας στο iTunes κατά την επιβεβαίωση της αγοράς\n• η συνδρομή ανανεώνεται αυτόματα εκτός εάν η αυτόματη ανανέωση απενεργοποιείται τουλάχιστον 24 ώρες πριν από το τέλος της τρέχουσας περιόδου\n• η συνδρομή θα χρεωθεί για ανανέωση εντός 24 Ώρες πριν από το τέλος της τρέχουσας περιόδου και το κόστος ανανέωσης που εντοπίστηκαν\n• Οι συνδρομές μπορούν να διαχειριστούν από τον χρήστη και η αυτόματη ανανέωση μπορεί να απενεργοποιηθεί με την πρόσβαση στις ρυθμίσεις του λογαριασμού του χρήστη μετά την αγορά.";
|
||||
"inapp_lifetime_detail_description" = "• Η πληρωμή σας θα χρεωθεί στο λογαριασμό σας στο iTunes κατά την επιβεβαίωση της αγοράς";
|
||||
"inapp_purchase" = "ΕΓΓΡΑΦΕΊΤΕ ΣΤΗΝ ΥΠΗΡΕΣΊΑ";
|
||||
"official_select_country_placeholder" = "Επιλέξτε τη χώρα";
|
||||
"inapp_lifetime_subscriptions" = "Συνδρομές διάρκειας ζωής";
|
||||
"inapp_yearly_subscriptions" = "Ετήσιες συνδρομές";
|
||||
"inapp_monthly_subscriptions" = "Μηνιαίες συνδρομές";
|
||||
"inapp_monthly_payment" = "θα πληρώσετε ανά μήνα:";
|
||||
"inapp_yearly_payment" = "θα πληρώσετε ετησίως:";
|
||||
"inapp_lifetime_payment" = "θα πληρώσετε:";
|
||||
"ok" = "Εντάξει";
|
||||
"critical_alerts_setting" = "Κρίσιμες ειδοποιήσεις. Κάντε έναν ήχο επίσης, δεν διαταράσσετε τη λειτουργία";
|
||||
"attention" = "Προσοχή";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Terms and conditions";
|
||||
"network_pro_paying" = "You are paying:";
|
||||
"inapp_detail_description" = "• Your payment will be charged to your iTunes account upon confirmation of purchase\n• The subscription is automatically renewed unless the automatic renewal is deactivated at least 24 hours before the end of the current period\n• Subscription will be charged for renewal within 24 hours before the end of the current period and the renewal cost identified\n• Subscriptions can be managed by the user and automatic renewal can be deactivated by accessing the user's account settings after the purchase.";
|
||||
"inapp_lifetime_detail_description" = "• Your payment will be charged to your iTunes account upon confirmation of purchase";
|
||||
"inapp_purchase" = "SUBSCRIBE TO SERVICE";
|
||||
"official_select_country_placeholder" = "Select the country";
|
||||
"inapp_lifetime_subscriptions" = "Lifetime subscriptions";
|
||||
"inapp_yearly_subscriptions" = "Annual subscriptions";
|
||||
"inapp_monthly_subscriptions" = "Monthly subscriptions";
|
||||
"inapp_monthly_payment" = "you will pay per month:";
|
||||
"inapp_yearly_payment" = "you will pay per year:";
|
||||
"inapp_lifetime_payment" = "you will pay:";
|
||||
"ok" = "Ok";
|
||||
"critical_alerts_setting" = "Critical alerts. Make a sound also in do not disturb mode";
|
||||
"attention" = "Attention";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Términos y condiciones";
|
||||
"network_pro_paying" = "Estas pagando:";
|
||||
"inapp_detail_description" = "• Su pago se cargará a su cuenta de iTunes tras la confirmación de la compra\n• La suscripción se renueva automáticamente a menos que la renovación automática se desactive al menos 24 horas antes del final del período actual\n• La suscripción se cobrará por la renovación dentro de las 24 horas antes del final del período actual y el costo de renovación identificado\n• Las suscripciones pueden ser administradas por el usuario y la renovación automática se puede desactivar accediendo a la configuración de la cuenta del usuario después de la compra.";
|
||||
"inapp_lifetime_detail_description" = "• Su pago se cargará a su cuenta de iTunes tras la confirmación de la compra";
|
||||
"inapp_purchase" = "SUSCRÍBETE AL SERVICIO";
|
||||
"official_select_country_placeholder" = "Seleccione el pais";
|
||||
"inapp_lifetime_subscriptions" = "Suscripciones de por vida";
|
||||
"inapp_yearly_subscriptions" = "Suscripciones anuales";
|
||||
"inapp_monthly_subscriptions" = "Suscripciones mensuales";
|
||||
"inapp_monthly_payment" = "pagarás por mes:";
|
||||
"inapp_yearly_payment" = "pagarás por año:";
|
||||
"inapp_lifetime_payment" = "pagarás:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Alertas críticas. Emite un sonido también en el modo no molestar";
|
||||
"attention" = "Atención";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Termes et conditions";
|
||||
"network_pro_paying" = "Vous payez:";
|
||||
"inapp_detail_description" = "• Votre paiement sera débité de votre compte iTunes lors de la confirmation de l'achat\n• L'abonnement est automatiquement renouvelé sauf si le renouvellement automatique est désactivé au moins 24 heures avant la fin de la période en cours\n• L'abonnement sera facturé pour le renouvellement dans les 24 heures avant la fin de la période en cours et le coût de renouvellement identifié\n• Les abonnements peuvent être gérés par l'utilisateur et le renouvellement automatique peut être désactivé en accédant aux paramètres du compte de l'utilisateur après l'achat.";
|
||||
"inapp_lifetime_detail_description" = "• Votre paiement sera débité de votre compte iTunes lors de la confirmation de l'achat";
|
||||
"inapp_purchase" = "ABONNEZ-VOUS AU SERVICE";
|
||||
"official_select_country_placeholder" = "Sélectionnez le pays";
|
||||
"inapp_lifetime_subscriptions" = "Abonnements à vie";
|
||||
"inapp_yearly_subscriptions" = "Abonnements annuels";
|
||||
"inapp_monthly_subscriptions" = "Abonnements mensuels";
|
||||
"inapp_monthly_payment" = "vous paierez par mois:";
|
||||
"inapp_yearly_payment" = "vous paierez par an:";
|
||||
"inapp_lifetime_payment" = "vous paierez:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Alertes critiques. Émettre un son également en mode Ne pas déranger";
|
||||
"attention" = "Attention";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Uvjeti i odredbe";
|
||||
"network_pro_paying" = "Plaćate:";
|
||||
"inapp_detail_description" = "• Vaša će uplata biti naplaćena na vaš iTunes račun nakon potvrde kupnje\n• Pretplata se automatski obnavlja, osim ako se automatska obnova ne deaktivira najmanje 24 sata prije kraja tekućeg razdoblja\n • Pretplata će se naplatiti za obnovu u roku od 24 sati prije kraja tekućeg razdoblja i utvrđenih troškova obnove\n • Korisnikom može upravljati pretplatama, a automatskim obnavljanjem može se deaktivirati pristupom postavkama korisničkog računa nakon kupnje.";
|
||||
"inapp_lifetime_detail_description" = "• Vaša će uplata biti naplaćena na vaš iTunes račun nakon potvrde kupnje";
|
||||
"inapp_purchase" = "PRETPLATITE SE NA SERVIS";
|
||||
"official_select_country_placeholder" = "Odaberite zemlju";
|
||||
"inapp_lifetime_subscriptions" = "Doživotne pretplate";
|
||||
"inapp_yearly_subscriptions" = "Godišnje pretplate";
|
||||
"inapp_monthly_subscriptions" = "Mjesečne pretplate";
|
||||
"inapp_monthly_payment" = "ćete platiti po mjesecu:";
|
||||
"inapp_yearly_payment" = "ćete platiti godišnje:";
|
||||
"inapp_lifetime_payment" = "ćete platiti:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Kritična upozorenja. Dajte zvuk i u načinu ne ometaj";
|
||||
"attention" = "Pažnja";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Syarat dan ketentuan";
|
||||
"network_pro_paying" = "Anda membayar:";
|
||||
"inapp_detail_description" = "• Pembayaran Anda akan dibebankan ke akun iTunes Anda setelah konfirmasi pembelian\n• Langganan diperpanjang secara otomatis kecuali pembaruan otomatis dinonaktifkan setidaknya 24 jam sebelum akhir periode saat ini\n• Langganan akan dikenakan biaya untuk pembaruan dalam waktu 24 jam sebelum akhir periode berjalan dan biaya pembaruan diidentifikasi\n• Langganan dapat dikelola oleh pengguna dan pembaruan otomatis dapat dinonaktifkan dengan mengakses pengaturan akun pengguna setelah pembelian.";
|
||||
"inapp_lifetime_detail_description" = "• Pembayaran Anda akan dibebankan ke akun iTunes Anda setelah konfirmasi pembelian";
|
||||
"inapp_purchase" = "BERLANGGANAN LAYANAN";
|
||||
"official_select_country_placeholder" = "Pilih negaranya";
|
||||
"inapp_lifetime_subscriptions" = "Langganan seumur hidup";
|
||||
"inapp_yearly_subscriptions" = "Langganan tahunan";
|
||||
"inapp_monthly_subscriptions" = "Langganan bulanan";
|
||||
"inapp_monthly_payment" = "Anda akan membayar per bulan:";
|
||||
"inapp_yearly_payment" = "Anda akan membayar per tahu:";
|
||||
"inapp_lifetime_payment" = "Anda akan membayar:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Peringatan kritis. Bersuara juga dalam mode jangan ganggu";
|
||||
"attention" = "Perhatian";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Termini e condizioni";
|
||||
"network_pro_paying" = "Stai pagando:";
|
||||
"inapp_detail_description" = "• Il pagamento verrà addebitato sul tuo account iTunes alla conferma dell'acquisto\n• L'abbonamento si rinnova automaticamente a meno che il rinnovo automatico non venga disattivato almeno 24 ore prima della fine del periodo corrente\n• L'abbonamento verrà addebitato per il rinnovo entro 24 ore prima della fine del periodo corrente e al costo di rinnovo indicato\n• Gli abbonamenti possono essere gestiti dall'utente e il rinnovo automatico può essere disattivato accedendo alle impostazioni dell'account dell'utente dopo l'acquisto.";
|
||||
"inapp_lifetime_detail_description" = "• Il pagamento verrà addebitato sul tuo account iTunes alla conferma dell'acquisto";
|
||||
"inapp_purchase" = "ISCRIVITI AL SERVIZIO";
|
||||
"official_select_country_placeholder" = "Scegli la nazione";
|
||||
"inapp_lifetime_subscriptions" = "Abbonamenti a vita";
|
||||
"inapp_yearly_subscriptions" = "Abbonamenti annuali";
|
||||
"inapp_monthly_subscriptions" = "Abbonamenti mensili";
|
||||
"inapp_monthly_payment" = "pagherai al mese:";
|
||||
"inapp_yearly_payment" = "pagherai all'anno:";
|
||||
"inapp_lifetime_payment" = "pagherai:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Allerte critiche. Produci un suono anche in modalità non disturbare";
|
||||
"attention" = "Attenzione";
|
||||
|
||||
@@ -209,12 +209,15 @@
|
||||
"network_pro_terms_conditions" = "Şartlar ve koşullar";
|
||||
"network_pro_paying" = "Ödüyorsunuz:";
|
||||
"inapp_detail_description" = "• Satın alma onayının ardından ödemeniz iTunes hesabınızdan tahsil edilecektir\n• Otomatik yenileme, cari dönemin bitiminden en az 24 saat önce devre dışı bırakılmadığı sürece abonelik otomatik olarak yenilenir\n• Abonelik, 24 saat içinde yenileme için ücretlendirilir cari dönemin bitiminden saatler önce ve belirlenen yenileme maliyeti\n• Satın alma işleminden sonra kullanıcının hesap ayarlarına girilerek abonelikler kullanıcı tarafından yönetilebilir ve otomatik yenileme devre dışı bırakılabilir.";
|
||||
"inapp_lifetime_detail_description" = "• Satın alma onayının ardından ödemeniz iTunes hesabınızdan tahsil edilecektir";
|
||||
"inapp_purchase" = "HİZMETE ABONE OL";
|
||||
"official_select_country_placeholder" = "Ülkeyi seçin";
|
||||
"inapp_lifetime_subscriptions" = "Ömür boyu abonelikler";
|
||||
"inapp_yearly_subscriptions" = "Yıllık abonelikler";
|
||||
"inapp_monthly_subscriptions" = "Aylık abonelikler";
|
||||
"inapp_monthly_payment" = "aylık ödeyeceksiniz:";
|
||||
"inapp_yearly_payment" = "senelik ödeyeceksin:";
|
||||
"inapp_lifetime_payment" = "ödeyeceksin:";
|
||||
"ok" = "OK";
|
||||
"critical_alerts_setting" = "Kritik uyarılar. Rahatsız etmeyin modunda da ses çıkar";
|
||||
"attention" = "Dikkat";
|
||||
|
||||
Reference in New Issue
Block a user