From d030d6bd427aebc8833e6948231bcfcee40264d5 Mon Sep 17 00:00:00 2001 From: Alexander Romanov Date: Sat, 16 Mar 2024 01:11:23 +0300 Subject: [PATCH] Update components # Conflicts: # .swiftpm/xcode/package.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate # .swiftpm/xcode/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist --- .github/workflows/ci-pull-request.yml | 12 +- .github/workflows/ci-push.yml | 10 +- .gitignore | 4 +- .../UserInterfaceState.xcuserstate | Bin 0 -> 227789 bytes .../xcschemes/xcschememanagement.plist | 77 ++++ AppExample/Example.xcodeproj/project.pbxproj | 24 +- .../UserInterfaceState.xcuserstate | Bin 67048 -> 97667 bytes .../Example/Resources/Products.storekit | 2 + AppExample/Example/Router/Alerts.swift | 1 + .../Screens/AppSettings/AppSettingsView.swift | 1 - Package.swift | 22 +- .../Pickers/AlertPicker.swift | 2 +- .../AdsKit}/AdView.swift | 49 +-- .../AdsKit}/AdViewModel.swift | 4 +- .../LauncherKit/LauncherViewModel.swift | 38 +- .../LockscreenKit/LockscreenView.swift | 5 + .../Views/About/About/AboutView.swift | 10 +- .../Views/About/About/AboutViewModel.swift | 1 - .../Views/About/FeedbackView.swift | 8 +- .../Views/About/OurResorsesView.swift | 4 +- .../SettingsKit/Views/About/SupportView.swift | 6 +- .../Apperance/AppearanceSettingView.swift | 7 +- .../Views/Apperance/BorderSettongView.swift | 4 +- .../Views/Apperance/FontSettingView.swift | 1 - .../Views/Apperance/RadiusSettingView.swift | 2 +- .../NotificationsSettingsView.swift | 2 +- .../Views/Security/SecuritySettingsView.swift | 7 +- .../SettingsKit/Views/SettingsView.swift | 2 - .../SoundsAndVibrationsSettingsView.swift | 2 +- .../Views/iCloud/iCloudSettingsView.swift | 7 +- .../StoreScreen/StoreSpecialOfferView.swift | 338 ++++++++++++++---- .../ViewModel/StoreViewModel.swift | 2 +- .../ViewModifier/PremiumBlockOverlay.swift | 27 +- .../StoreKit/Views/BuyButtonStyle.swift | 4 +- .../Views/StorePaymentButtonBar.swift | 22 +- .../StoreKit/Views/StoreProductView.swift | 1 - .../OversizeNoticeKit/NoticeListView.swift | 130 +++---- .../NoticeListViewModel.swift | 107 ++++++ 38 files changed, 683 insertions(+), 262 deletions(-) create mode 100644 .swiftpm/xcode/package.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 .swiftpm/xcode/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist rename Sources/{OversizeAdsKit => OversizeKit/AdsKit}/AdView.swift (64%) rename Sources/{OversizeAdsKit => OversizeKit/AdsKit}/AdViewModel.swift (89%) create mode 100644 Sources/OversizeNoticeKit/NoticeListViewModel.swift diff --git a/.github/workflows/ci-pull-request.yml b/.github/workflows/ci-pull-request.yml index a1b5635..9230a1a 100644 --- a/.github/workflows/ci-pull-request.yml +++ b/.github/workflows/ci-pull-request.yml @@ -4,8 +4,8 @@ on: branches: - 'main' workflow_dispatch: + jobs: - build-swiftpm: name: Build SwiftPM uses: oversizedev/GithubWorkflows/.github/workflows/build-swiftpm.yml@main @@ -19,10 +19,14 @@ jobs: build-example: name: Build Example needs: build-swiftpm - uses: oversizedev/GithubWorkflows/.github/workflows/build-ios-app.yml@main + uses: oversizedev/GithubWorkflows/.github/workflows/build-app.yml@main + strategy: + matrix: + destination: ['platform=iOS Simulator,name=iPhone 15 Pro,OS=17.2', 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (6th generation),OS=17.2'] with: - folder: AppExample - app: Example + path: AppExample/Example + scheme: Example + destination: ${{ matrix.destination }} secrets: inherit # tests: diff --git a/.github/workflows/ci-push.yml b/.github/workflows/ci-push.yml index 58c3fd0..9803441 100644 --- a/.github/workflows/ci-push.yml +++ b/.github/workflows/ci-push.yml @@ -20,10 +20,14 @@ jobs: build-example: name: Build Example needs: build-swiftpm - uses: oversizedev/GithubWorkflows/.github/workflows/build-ios-app.yml@main + uses: oversizedev/GithubWorkflows/.github/workflows/build-app.yml@main + strategy: + matrix: + destination: ['platform=iOS Simulator,name=iPhone 15 Pro,OS=17.2', 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (6th generation),OS=17.2'] with: - folder: AppExample - app: Example + path: AppExample/Example + scheme: Example + destination: ${{ matrix.destination }} secrets: inherit # tests: diff --git a/.gitignore b/.gitignore index b0a3eb8..5c5c727 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ Package.resolved .swiftpm xcuserdata/ -DerivedData/ \ No newline at end of file +/.swiftpm +DerivedData/ +/AppExample/Example.xcodeproj/project.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/.swiftpm/xcode/package.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate b/.swiftpm/xcode/package.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..51ac161c4c2b05ddd9b0f524beaf084aaa4484f0 GIT binary patch literal 227789 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

Q++o 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 + + + + SchemeUserState + + OversizeAdsKit.xcscheme_^#shared#^_ + + orderHint + 0 + + OversizeKit-Package.xcscheme_^#shared#^_ + + orderHint + 5 + + OversizeKitTests.xcscheme_^#shared#^_ + + orderHint + 13 + + + SuppressBuildableAutocreation + + OversizeAdsKit + + primary + + + OversizeCalendarKit + + primary + + + OversizeContactsKit + + primary + + + OversizeKit + + primary + + + OversizeKitTests + + primary + + + OversizeLocationKit + + primary + + + OversizeNoticeKit + + primary + + + OversizeNotificationKit + + primary + + + OversizeOnboardingKit + + primary + + + OversizePhotoKit + + primary + + + + + diff --git a/AppExample/Example.xcodeproj/project.pbxproj b/AppExample/Example.xcodeproj/project.pbxproj index b4928e8..a8d543f 100644 --- a/AppExample/Example.xcodeproj/project.pbxproj +++ b/AppExample/Example.xcodeproj/project.pbxproj @@ -22,7 +22,6 @@ 840CD68E2AC0E39D00C6AAD0 /* ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840CD68D2AC0E39D00C6AAD0 /* ExampleApp.swift */; }; 840CD6902AC0E3A600C6AAD0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 840CD68F2AC0E3A600C6AAD0 /* Assets.xcassets */; }; 840CD6932AC0E3A600C6AAD0 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 840CD6922AC0E3A600C6AAD0 /* Preview Assets.xcassets */; }; - 840CD69C2AC0E43000C6AAD0 /* OversizeAdsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD69B2AC0E43000C6AAD0 /* OversizeAdsKit */; }; 840CD69E2AC0E43000C6AAD0 /* OversizeCalendarKit in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD69D2AC0E43000C6AAD0 /* OversizeCalendarKit */; }; 840CD6A02AC0E43000C6AAD0 /* OversizeContactsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD69F2AC0E43000C6AAD0 /* OversizeContactsKit */; }; 840CD6A22AC0E43000C6AAD0 /* OversizeKit in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD6A12AC0E43000C6AAD0 /* OversizeKit */; }; @@ -33,6 +32,7 @@ 840CD6AC2AC0E43000C6AAD0 /* OversizePhotoKit in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD6AB2AC0E43000C6AAD0 /* OversizePhotoKit */; }; 840CD6AF2AC0E44E00C6AAD0 /* Factory in Frameworks */ = {isa = PBXBuildFile; productRef = 840CD6AE2AC0E44E00C6AAD0 /* Factory */; }; 840CD6B12AC0E6E200C6AAD0 /* Products.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 840CD6B02AC0E6E200C6AAD0 /* Products.storekit */; }; + 845A59332BA4FD2B00988D52 /* OversizeModels in Frameworks */ = {isa = PBXBuildFile; productRef = 845A59322BA4FD2B00988D52 /* OversizeModels */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -69,10 +69,10 @@ 840CD6AF2AC0E44E00C6AAD0 /* Factory in Frameworks */, 840CD69E2AC0E43000C6AAD0 /* OversizeCalendarKit in Frameworks */, 840CD6A82AC0E43000C6AAD0 /* OversizeNotificationKit in Frameworks */, - 840CD69C2AC0E43000C6AAD0 /* OversizeAdsKit in Frameworks */, 840CD6A22AC0E43000C6AAD0 /* OversizeKit in Frameworks */, 840CD6A42AC0E43000C6AAD0 /* OversizeLocationKit in Frameworks */, 840CD6A62AC0E43000C6AAD0 /* OversizeNoticeKit in Frameworks */, + 845A59332BA4FD2B00988D52 /* OversizeModels in Frameworks */, 840CD6A02AC0E43000C6AAD0 /* OversizeContactsKit in Frameworks */, 840CD6AA2AC0E43000C6AAD0 /* OversizeOnboardingKit in Frameworks */, ); @@ -206,7 +206,6 @@ ); name = Example; packageProductDependencies = ( - 840CD69B2AC0E43000C6AAD0 /* OversizeAdsKit */, 840CD69D2AC0E43000C6AAD0 /* OversizeCalendarKit */, 840CD69F2AC0E43000C6AAD0 /* OversizeContactsKit */, 840CD6A12AC0E43000C6AAD0 /* OversizeKit */, @@ -216,6 +215,7 @@ 840CD6A92AC0E43000C6AAD0 /* OversizeOnboardingKit */, 840CD6AB2AC0E43000C6AAD0 /* OversizePhotoKit */, 840CD6AE2AC0E44E00C6AAD0 /* Factory */, + 845A59322BA4FD2B00988D52 /* OversizeModels */, ); productName = Example; productReference = 840CD6632AC0E39D00C6AAD0 /* Example.app */; @@ -248,6 +248,7 @@ packageReferences = ( 840CD69A2AC0E43000C6AAD0 /* XCLocalSwiftPackageReference ".." */, 840CD6AD2AC0E44E00C6AAD0 /* XCRemoteSwiftPackageReference "Factory" */, + 845A59312BA4FD2B00988D52 /* XCRemoteSwiftPackageReference "OversizeModels" */, ); productRefGroup = 840CD6642AC0E39D00C6AAD0 /* Products */; projectDirPath = ""; @@ -515,13 +516,17 @@ minimumVersion = 2.2.0; }; }; + 845A59312BA4FD2B00988D52 /* XCRemoteSwiftPackageReference "OversizeModels" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/oversizedev/OversizeModels.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.1.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - 840CD69B2AC0E43000C6AAD0 /* OversizeAdsKit */ = { - isa = XCSwiftPackageProductDependency; - productName = OversizeAdsKit; - }; 840CD69D2AC0E43000C6AAD0 /* OversizeCalendarKit */ = { isa = XCSwiftPackageProductDependency; productName = OversizeCalendarKit; @@ -559,6 +564,11 @@ package = 840CD6AD2AC0E44E00C6AAD0 /* XCRemoteSwiftPackageReference "Factory" */; productName = Factory; }; + 845A59322BA4FD2B00988D52 /* OversizeModels */ = { + isa = XCSwiftPackageProductDependency; + package = 845A59312BA4FD2B00988D52 /* XCRemoteSwiftPackageReference "OversizeModels" */; + productName = OversizeModels; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 840CD6592AC0E39D00C6AAD0 /* Project object */; diff --git a/AppExample/Example.xcodeproj/project.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate b/AppExample/Example.xcodeproj/project.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate index c5dd800664647955b9b79e6631651d219ccc2976..1cd4fb570860f7d0a6a2aa142d68bb1952af2462 100644 GIT binary patch literal 97667 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 P#P9yG`~UwFN`Lu3A@Anv literal 67048 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 diff --git a/AppExample/Example/Resources/Products.storekit b/AppExample/Example/Resources/Products.storekit index f9dfc04..98367b6 100644 --- a/AppExample/Example/Resources/Products.storekit +++ b/AppExample/Example/Resources/Products.storekit @@ -22,6 +22,8 @@ ], "settings" : { "_failTransactionsEnabled" : false, + "_locale" : "en_US", + "_storefront" : "USA", "_storeKitErrors" : [ { "current" : null, diff --git a/AppExample/Example/Router/Alerts.swift b/AppExample/Example/Router/Alerts.swift index b216f7c..153c230 100644 --- a/AppExample/Example/Router/Alerts.swift +++ b/AppExample/Example/Router/Alerts.swift @@ -6,6 +6,7 @@ import OversizeLocalizable import OversizeServices import SwiftUI +import OversizeModels enum RootAlert: Identifiable { case dismiss(_ action: () -> Void) diff --git a/AppExample/Example/Screens/AppSettings/AppSettingsView.swift b/AppExample/Example/Screens/AppSettings/AppSettingsView.swift index 625e930..9d6b36e 100644 --- a/AppExample/Example/Screens/AppSettings/AppSettingsView.swift +++ b/AppExample/Example/Screens/AppSettings/AppSettingsView.swift @@ -16,7 +16,6 @@ struct AppSettingsView: View { Image(systemName: "") } .rowArrow() - .multilineTextAlignment(.leading) } .buttonStyle(.row) diff --git a/Package.swift b/Package.swift index be0790f..c5b5396 100644 --- a/Package.swift +++ b/Package.swift @@ -1,6 +1,7 @@ -// swift-tools-version: 5.7 +// swift-tools-version: 5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. +import Foundation import PackageDescription let productionDependencies: [PackageDescription.Package.Dependency] = [ @@ -14,6 +15,7 @@ let productionDependencies: [PackageDescription.Package.Dependency] = [ .package(url: "https://github.com/oversizedev/OversizeModels.git", .upToNextMajor(from: "0.1.0")), .package(url: "https://github.com/hmlongco/Factory.git", .upToNextMajor(from: "2.1.3")), .package(url: "https://github.com/lorenzofiamingo/swiftui-cached-async-image.git", .upToNextMajor(from: "2.1.1")), + .package(url: "https://github.com/GetStream/effects-library.git", .upToNextMajor(from: "1.0.0")), ] let developmentDependencies: [PackageDescription.Package.Dependency] = [ @@ -27,8 +29,11 @@ let developmentDependencies: [PackageDescription.Package.Dependency] = [ .package(name: "OversizeModels", path: "../OversizeModels"), .package(url: "https://github.com/lorenzofiamingo/swiftui-cached-async-image.git", .upToNextMajor(from: "2.1.1")), .package(url: "https://github.com/hmlongco/Factory.git", .upToNextMajor(from: "2.1.3")), + .package(url: "https://github.com/GetStream/effects-library.git", .upToNextMajor(from: "1.0.0")), ] +let isProductionDependencies = ProcessInfo.processInfo.environment["RELEASE_DEPENDENCIES"] == "TRUE" + let package = Package( name: "OversizeKit", platforms: [ @@ -39,7 +44,6 @@ let package = Package( ], products: [ .library(name: "OversizeKit", targets: ["OversizeKit"]), - .library(name: "OversizeAdsKit", targets: ["OversizeAdsKit"]), .library(name: "OversizeOnboardingKit", targets: ["OversizeOnboardingKit"]), .library(name: "OversizeNoticeKit", targets: ["OversizeNoticeKit"]), .library(name: "OversizeCalendarKit", targets: ["OversizeCalendarKit"]), @@ -65,19 +69,7 @@ let package = Package( .product(name: "OversizeNetwork", package: "OversizeNetwork"), .product(name: "Factory", package: "Factory"), .product(name: "CachedAsyncImage", package: "swiftui-cached-async-image"), - ] - ), - .target( - name: "OversizeAdsKit", - dependencies: [ - "OversizeKit", - .product(name: "Factory", package: "Factory"), - .product(name: "OversizeUI", package: "OversizeUI"), - .product(name: "OversizeServices", package: "OversizeServices"), - .product(name: "CachedAsyncImage", package: "swiftui-cached-async-image"), - .product(name: "OversizeCore", package: "OversizeCore"), - .product(name: "OversizeNetwork", package: "OversizeNetwork"), - .product(name: "OversizeModels", package: "OversizeModels"), + .product(name: "EffectsLibrary", package: "effects-library"), ] ), .target( diff --git a/Sources/OversizeCalendarKit/Pickers/AlertPicker.swift b/Sources/OversizeCalendarKit/Pickers/AlertPicker.swift index bdd4492..68fbfb8 100644 --- a/Sources/OversizeCalendarKit/Pickers/AlertPicker.swift +++ b/Sources/OversizeCalendarKit/Pickers/AlertPicker.swift @@ -33,7 +33,7 @@ public struct AlarmPicker: View { } } } - .surfaceContentRowInsets() + .surfaceContentRowMargins() } .backgroundSecondary() .leadingBar { diff --git a/Sources/OversizeAdsKit/AdView.swift b/Sources/OversizeKit/AdsKit/AdView.swift similarity index 64% rename from Sources/OversizeAdsKit/AdView.swift rename to Sources/OversizeKit/AdsKit/AdView.swift index 8417c99..aeb1c44 100644 --- a/Sources/OversizeAdsKit/AdView.swift +++ b/Sources/OversizeKit/AdsKit/AdView.swift @@ -5,7 +5,6 @@ import CachedAsyncImage import OversizeCore -import OversizeKit import OversizeModels import OversizeNetwork import OversizeServices @@ -50,33 +49,35 @@ public struct AdView: View { } } - func premiumBanner(appAd: Components.Schemas.AppShort) -> some View { + func premiumBanner(appAd: Components.Schemas.Ad) -> some View { HStack(spacing: .zero) { - CachedAsyncImage(url: URL(string: "\(Info.links?.company.cdnString ?? "")/assets/apps/\(appAd.address)/icon.png"), urlCache: .imageCache, content: { - $0 - .resizable() - .frame(width: 64, height: 64) - .mask(RoundedRectangle(cornerRadius: .large, - style: .continuous)) - .overlay( - RoundedRectangle(cornerRadius: 16, - style: .continuous) - .stroke(lineWidth: 1) - .opacity(0.15) - ) - .onTapGesture { - isShowProduct.toggle() - } + if let iconUrl = appAd.iconURL, let url = URL(string: iconUrl) { + CachedAsyncImage(url: url, urlCache: .imageCache, content: { + $0 + .resizable() + .frame(width: 64, height: 64) + .mask(RoundedRectangle(cornerRadius: .large, + style: .continuous)) + .overlay( + RoundedRectangle(cornerRadius: 16, + style: .continuous) + .stroke(lineWidth: 1) + .opacity(0.15) + ) + .onTapGesture { + isShowProduct.toggle() + } - }, placeholder: { - RoundedRectangle(cornerRadius: .large, style: .continuous) - .fillSurfaceSecondary() - .frame(width: 64, height: 64) - }) + }, placeholder: { + RoundedRectangle(cornerRadius: .large, style: .continuous) + .fillSurfaceSecondary() + .frame(width: 64, height: 64) + }) + } VStack(alignment: .leading, spacing: .xxxSmall) { HStack { - Text(appAd.name) + Text(appAd.title) .subheadline(.bold) .onSurfaceHighEmphasisForegroundColor() @@ -86,7 +87,7 @@ public struct AdView: View { } } - Text(appAd.title) + Text(appAd.description) .subheadline() .onSurfaceMediumEmphasisForegroundColor() } diff --git a/Sources/OversizeAdsKit/AdViewModel.swift b/Sources/OversizeKit/AdsKit/AdViewModel.swift similarity index 89% rename from Sources/OversizeAdsKit/AdViewModel.swift rename to Sources/OversizeKit/AdsKit/AdViewModel.swift index a17cbf0..98f2869 100644 --- a/Sources/OversizeAdsKit/AdViewModel.swift +++ b/Sources/OversizeKit/AdsKit/AdViewModel.swift @@ -18,7 +18,7 @@ public class AdViewModel: ObservableObject { public init() {} public func fetchAd() async { - let result = await networkService.fetchApps() + let result = await networkService.fetchAds() switch result { case let .success(ads): guard let ad = ads.filter({ $0.appStoreId != Info.app.appStoreID }).randomElement() else { @@ -36,7 +36,7 @@ extension AdViewModel { enum State { case initial case loading - case result(Components.Schemas.AppShort) + case result(Components.Schemas.Ad) case error(AppError) } } diff --git a/Sources/OversizeKit/LauncherKit/LauncherViewModel.swift b/Sources/OversizeKit/LauncherKit/LauncherViewModel.swift index d32203a..a8e4e0c 100644 --- a/Sources/OversizeKit/LauncherKit/LauncherViewModel.swift +++ b/Sources/OversizeKit/LauncherKit/LauncherViewModel.swift @@ -4,6 +4,7 @@ // import OversizeCore +import OversizeNetwork import OversizeServices import OversizeStoreService import OversizeUI @@ -20,15 +21,18 @@ public final class LauncherViewModel: ObservableObject { @Injected(\.settingsService) var settingsService @Injected(\.appStoreReviewService) var reviewService: AppStoreReviewServiceProtocol @Injected(\.storeKitService) private var storeKitService: StoreKitService + @Injected(\.networkService) var networkService @AppStorage("AppState.PremiumState") var isPremium: Bool = false @AppStorage("AppState.SubscriptionsState") var subscriptionsState: RenewalState = .expired - @AppStorage("AppState.LastClosedSpecialOfferSheet") var lastClosedSpecialOffer: StoreSpecialOfferEventType = .oldUser + @AppStorage("AppState.LastClosedSpecialOfferSheet") var lastClosedSpecialOffer: String = "" @Published public var pinCodeField: String = "" @Published public var authState: LockscreenViewState = .locked @Published var activeFullScreenSheet: FullScreenSheet? @Published var isShowSplashScreen: Bool = true + let expectedFormat = Date.ISO8601FormatStyle() + var isShowLockscreen: Bool { if FeatureFlags.secure.lookscreen ?? false { if settingsService.pinCodeEnabend || settingsService.biometricEnabled, authState != .unlocked { @@ -49,7 +53,7 @@ extension LauncherViewModel { case onboarding case payWall case rate - case specialOffer(event: StoreSpecialOfferEventType) + case specialOffer(event: Components.Schemas.SpecialOffer) public var id: Int { switch self { case .onboarding: return 0 @@ -130,13 +134,33 @@ public extension LauncherViewModel { } } - func checkSpecialOffer() { - if !isPremium { - for event in StoreSpecialOfferEventType.allCases where event.isNow { - if activeFullScreenSheet == nil, lastClosedSpecialOffer != event { - activeFullScreenSheet = .specialOffer(event: event) + func fetchAndSetSpecialOffer() async { + let result = await networkService.fetchSpecialOffers() + switch result { + case let .success(offers): + if let offer = offers.first(where: { checkDateInSelectedPeriod(startDate: $0.startDate, endDate: $0.endDate) }) { + if offer.id != lastClosedSpecialOffer { + activeFullScreenSheet = .specialOffer(event: offer) } } + case .failure: + break + } + } + + func checkDateInSelectedPeriod(startDate: Date, endDate: Date) -> Bool { + if startDate < endDate { + return (startDate ... endDate).contains(Date()) + } else { + return false + } + } + + func checkSpecialOffer() { + if !isPremium, activeFullScreenSheet == nil { + Task { + await fetchAndSetSpecialOffer() + } } } } diff --git a/Sources/OversizeKit/LockscreenKit/LockscreenView.swift b/Sources/OversizeKit/LockscreenKit/LockscreenView.swift index b5d1968..0833b73 100644 --- a/Sources/OversizeKit/LockscreenKit/LockscreenView.swift +++ b/Sources/OversizeKit/LockscreenKit/LockscreenView.swift @@ -255,6 +255,11 @@ public struct LockscreenView: View { .font(.system(size: 26)) .foregroundColor(Color.onBackgroundHighEmphasis) .frame(width: 24, height: 24, alignment: .center) + case .opticID: + Image(systemName: "opticid") + .font(.system(size: 26)) + .foregroundColor(Color.onBackgroundHighEmphasis) + .frame(width: 24, height: 24, alignment: .center) } } diff --git a/Sources/OversizeKit/SettingsKit/Views/About/About/AboutView.swift b/Sources/OversizeKit/SettingsKit/Views/About/About/AboutView.swift index d506acc..eaf732b 100644 --- a/Sources/OversizeKit/SettingsKit/Views/About/About/AboutView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/About/About/AboutView.swift @@ -15,6 +15,7 @@ import SwiftUI // swiftlint:disable all #if os(iOS) import MessageUI + public struct AboutView: View { @Environment(\.verticalSizeClass) private var verticalSizeClass @Environment(\.isPortrait) var isPortrait @@ -208,7 +209,6 @@ import SwiftUI .foregroundColor(.onBackgroundHighEmphasis) .padding(.horizontal, isLargeScreen ? 72 : 52) .padding(.bottom, .large) - .multilineTextAlignment(.center) soclal @@ -219,7 +219,7 @@ import SwiftUI if let reviewUrl = Info.url.appStoreReview, let id = Info.app.appStoreID, !id.isEmpty, let appName = Info.app.name { Link(destination: reviewUrl) { Row("Rate \(appName) on App Store") { - rateSettingsIcon + rateSettingsIcon.icon() } } .buttonStyle(.row) @@ -239,7 +239,7 @@ import SwiftUI Row(L10n.About.suggestIdea) { isShowMail.toggle() } leading: { - ideaSettingsIcon + ideaSettingsIcon.icon() } .buttonStyle(.row) @@ -253,7 +253,7 @@ import SwiftUI Row(L10n.Settings.shareApplication) { isSharePresented.toggle() } leading: { - shareSettingsIcon + shareSettingsIcon.icon() } .sheet(isPresented: $isSharePresented) { ActivityViewController(activityItems: [shareUrl]) @@ -491,7 +491,7 @@ import SwiftUI let appName = Info.app.name, let appBuild = Info.app.build { - Text("© 2022 \(developerName). \(appName) \(appVersion) (\(appBuild))") + Text("© 2023 \(developerName). \(appName) \(appVersion) (\(appBuild))") .footnote() .foregroundColor(.onBackgroundDisabled) } else { diff --git a/Sources/OversizeKit/SettingsKit/Views/About/About/AboutViewModel.swift b/Sources/OversizeKit/SettingsKit/Views/About/About/AboutViewModel.swift index 00b9693..0379448 100644 --- a/Sources/OversizeKit/SettingsKit/Views/About/About/AboutViewModel.swift +++ b/Sources/OversizeKit/SettingsKit/Views/About/About/AboutViewModel.swift @@ -22,7 +22,6 @@ public class AboutViewModel: ObservableObject { async let resultInfo = networkService.fetchInfo() if case let .success(apps) = await resultApps, case let .success(info) = await resultInfo { state = .result(apps.filter { $0.appStoreId != Info.app.appStoreID }, info) - } else { state = .error(.network(type: .noResponse)) } diff --git a/Sources/OversizeKit/SettingsKit/Views/About/FeedbackView.swift b/Sources/OversizeKit/SettingsKit/Views/About/FeedbackView.swift index cf97d05..976faa1 100644 --- a/Sources/OversizeKit/SettingsKit/Views/About/FeedbackView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/About/FeedbackView.swift @@ -43,7 +43,7 @@ public struct FeedbackView: View { if let reviewUrl = Info.url.appStoreReview, let id = Info.app.appStoreID, !id.isEmpty { Link(destination: reviewUrl) { Row(L10n.Settings.feedbakAppStore) { - heartIcon + heartIcon.icon() } } .buttonStyle(.row) @@ -65,7 +65,7 @@ public struct FeedbackView: View { Row(L10n.Settings.feedbakAuthor) { isShowMail.toggle() } leading: { - mailIcon + mailIcon.icon() } .buttonStyle(.row) @@ -77,7 +77,7 @@ public struct FeedbackView: View { if let sendMailUrl = Info.url.developerSendMail { Link(destination: sendMailUrl) { Row(L10n.Settings.feedbakAuthor) { - mailIcon + mailIcon.icon() } } .buttonStyle(.row) @@ -89,7 +89,7 @@ public struct FeedbackView: View { if let telegramChatUrl = Info.url.appTelegramChat, let id = Info.app.telegramChatID, !id.isEmpty { Link(destination: telegramChatUrl) { Row(L10n.Settings.telegramChat) { - chatIcon + chatIcon.icon() } } .buttonStyle(.row) diff --git a/Sources/OversizeKit/SettingsKit/Views/About/OurResorsesView.swift b/Sources/OversizeKit/SettingsKit/Views/About/OurResorsesView.swift index cac6b70..745cb19 100644 --- a/Sources/OversizeKit/SettingsKit/Views/About/OurResorsesView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/About/OurResorsesView.swift @@ -35,7 +35,7 @@ public struct OurResorsesView: View { if let gitHubUrl = URL(string: "https://github.com/oversizedev") { Link(destination: gitHubUrl) { Row("GitHub Open Source") { - githubIcon + githubIcon.icon() } } .buttonStyle(.row) @@ -44,7 +44,7 @@ public struct OurResorsesView: View { if let figmaUrl = URL(string: "https://www.figma.com/@oversizedesign") { Link(destination: figmaUrl) { Row("Figma Community") { - figmaIcon + figmaIcon.icon() } } .buttonStyle(.row) diff --git a/Sources/OversizeKit/SettingsKit/Views/About/SupportView.swift b/Sources/OversizeKit/SettingsKit/Views/About/SupportView.swift index af969c6..cc4c5c4 100644 --- a/Sources/OversizeKit/SettingsKit/Views/About/SupportView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/About/SupportView.swift @@ -56,7 +56,7 @@ public struct SupportView: View { Row("Contact Us") { isShowMail.toggle() } leading: { - mailIcon + mailIcon.icon() } .buttonStyle(.row) @@ -68,7 +68,7 @@ public struct SupportView: View { if let sendMailUrl = Info.url.developerSendMail { Link(destination: sendMailUrl) { Row("Contact Us") { - mailIcon + mailIcon.icon() } } .buttonStyle(.row) @@ -80,7 +80,7 @@ public struct SupportView: View { if let telegramChatUrl = Info.url.appTelegramChat, let id = Info.app.telegramChatID, !id.isEmpty { Link(destination: telegramChatUrl) { Row(L10n.Settings.telegramChat) { - chatIcon + chatIcon.icon() } } .buttonStyle(.row) diff --git a/Sources/OversizeKit/SettingsKit/Views/Apperance/AppearanceSettingView.swift b/Sources/OversizeKit/SettingsKit/Views/Apperance/AppearanceSettingView.swift index 701b88d..2423055 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Apperance/AppearanceSettingView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Apperance/AppearanceSettingView.swift @@ -109,7 +109,6 @@ import SwiftUI // swiftlint:disable multiple_closures_with_trailing_closure superfluous_disable_command .navigationTitle("Appearance") - .preferredColorScheme(theme.appearance.colorScheme) } @@ -225,7 +224,7 @@ import SwiftUI Row("Fonts") { pageDestenation = .font } leading: { - textIcon + textIcon.icon() } .rowArrow() .premium() @@ -235,7 +234,7 @@ import SwiftUI Row("Borders") { pageDestenation = .border } leading: { - borderIcon + borderIcon.icon() } .premium() } @@ -256,7 +255,7 @@ import SwiftUI Row("Radius") { pageDestenation = .radius } leading: { - radiusIcon + radiusIcon.icon() } .rowArrow() .premium() diff --git a/Sources/OversizeKit/SettingsKit/Views/Apperance/BorderSettongView.swift b/Sources/OversizeKit/SettingsKit/Views/Apperance/BorderSettongView.swift index 9c7db57..5092940 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Apperance/BorderSettongView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Apperance/BorderSettongView.swift @@ -14,7 +14,7 @@ public struct BorderSettingView: View { public var body: some View { PageView("Borders in app") { settings - .surfaceContentRowInsets() + .surfaceContentRowMargins() } .leadingBar { // if !isPortrait, verticalSizeClass == .regular { @@ -63,7 +63,7 @@ public struct BorderSettingView: View { } } .surfaceStyle(.secondary) - .surfaceContentInsets(.small) + .surfaceContentMargins(.small) .padding(.horizontal, Space.medium) .padding(.bottom, Space.xxSmall) diff --git a/Sources/OversizeKit/SettingsKit/Views/Apperance/FontSettingView.swift b/Sources/OversizeKit/SettingsKit/Views/Apperance/FontSettingView.swift index b09fbf7..ed4fba7 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Apperance/FontSettingView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Apperance/FontSettingView.swift @@ -32,7 +32,6 @@ public struct FontSettingView: View { } .padding(.horizontal) .padding(.bottom) - .navigationBar("Fonts", style: .fixed($offset)) { BarButton(.back) } trailingBar: {} bottomBar: {} diff --git a/Sources/OversizeKit/SettingsKit/Views/Apperance/RadiusSettingView.swift b/Sources/OversizeKit/SettingsKit/Views/Apperance/RadiusSettingView.swift index 2b47884..c42d83a 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Apperance/RadiusSettingView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Apperance/RadiusSettingView.swift @@ -14,7 +14,7 @@ struct RadiusSettingView: View { public var body: some View { PageView("Radius") { settings - .surfaceContentRowInsets() + .surfaceContentRowMargins() } .leadingBar { BarButton(.back) diff --git a/Sources/OversizeKit/SettingsKit/Views/Notifications/NotificationsSettingsView.swift b/Sources/OversizeKit/SettingsKit/Views/Notifications/NotificationsSettingsView.swift index c72f575..6129783 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Notifications/NotificationsSettingsView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Notifications/NotificationsSettingsView.swift @@ -20,7 +20,7 @@ import SwiftUI public var body: some View { PageView(L10n.Settings.notifications) { soundsAndVibrations - .surfaceContentRowInsets() + .surfaceContentRowMargins() } .leadingBar { BarButton(.back) diff --git a/Sources/OversizeKit/SettingsKit/Views/Security/SecuritySettingsView.swift b/Sources/OversizeKit/SettingsKit/Views/Security/SecuritySettingsView.swift index d70f40e..bc89bab 100644 --- a/Sources/OversizeKit/SettingsKit/Views/Security/SecuritySettingsView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/Security/SecuritySettingsView.swift @@ -60,7 +60,6 @@ import SwiftUI Row(biometricService.biometricType.rawValue) { Image(systemName: biometricImageName) .foregroundColor(Color.onBackgroundHighEmphasis) - .font(.system(size: 20, weight: .semibold)) .frame(width: 24, height: 24, alignment: .center) } @@ -80,7 +79,7 @@ import SwiftUI }) ) { Row(L10n.Security.pinCode) { - Image.Security.lock + Image.Security.lock.icon() } }.sheet(item: $isSetPINCodeSheet) { sheet in SetPINCodeView(action: sheet) @@ -158,12 +157,12 @@ import SwiftUI switch biometricService.biometricType { case .none: return "" - case .touchID: return "touchid" - case .faceID: return "faceid" + case .opticID: + return "opticid" } } } diff --git a/Sources/OversizeKit/SettingsKit/Views/SettingsView.swift b/Sources/OversizeKit/SettingsKit/Views/SettingsView.swift index dbd5f10..0a8d144 100644 --- a/Sources/OversizeKit/SettingsKit/Views/SettingsView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/SettingsView.swift @@ -271,7 +271,6 @@ import SwiftUI helpIcon.icon() } .rowArrow(isShowArrow) - .buttonStyle(.row) .sheet(isPresented: $isShowSupport) { SupportView() @@ -287,7 +286,6 @@ import SwiftUI chatIcon.icon() } .rowArrow(isShowArrow) - .buttonStyle(.row) .sheet(isPresented: $isShowFeedback) { FeedbackView() diff --git a/Sources/OversizeKit/SettingsKit/Views/SoundAndVibration/SoundsAndVibrationsSettingsView.swift b/Sources/OversizeKit/SettingsKit/Views/SoundAndVibration/SoundsAndVibrationsSettingsView.swift index 031d1fb..ed0f81c 100644 --- a/Sources/OversizeKit/SettingsKit/Views/SoundAndVibration/SoundsAndVibrationsSettingsView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/SoundAndVibration/SoundsAndVibrationsSettingsView.swift @@ -70,7 +70,7 @@ import SwiftUI if FeatureFlags.app.vibration.valueOrFalse { Switch(isOn: $settingsService.vibrationEnabled) { Row(L10n.Settings.vibration) { - vibrationIcon + vibrationIcon.icon() } } } diff --git a/Sources/OversizeKit/SettingsKit/Views/iCloud/iCloudSettingsView.swift b/Sources/OversizeKit/SettingsKit/Views/iCloud/iCloudSettingsView.swift index d83cc16..59eab6b 100644 --- a/Sources/OversizeKit/SettingsKit/Views/iCloud/iCloudSettingsView.swift +++ b/Sources/OversizeKit/SettingsKit/Views/iCloud/iCloudSettingsView.swift @@ -20,7 +20,7 @@ import SwiftUI public var body: some View { PageView(L10n.Title.synchronization) { iOSSettings - .surfaceContentRowInsets() + .surfaceContentRowMargins() } .leadingBar { BarButton(.back) @@ -44,7 +44,7 @@ import SwiftUI if FeatureFlags.app.сloudKit.valueOrFalse { Switch(isOn: $settingsService.cloudKitEnabled) { Row(L10n.Settings.iCloudSync) { - Image.Weather.Cloud.square + Image.Weather.Cloud.square.icon() } .premium() } @@ -57,6 +57,7 @@ import SwiftUI subtitle: settingsService.cloudKitCVVEnabled ? L10n.Security.iCloudSyncCVVDescriptionCloudKit : L10n.Security.iCloudSyncCVVDescriptionLocal) { Image.Security.cloudLock + .icon() .frame(width: 24, height: 24) } .premium() @@ -67,7 +68,7 @@ import SwiftUI if FeatureFlags.app.healthKit.valueOrFalse { Switch(isOn: $settingsService.healthKitEnabled) { Row("HealthKit synchronization", subtitle: "After switching on, data from the Health app will be downloaded") { - Image.Romantic.heart + Image.Romantic.heart.icon() } } } diff --git a/Sources/OversizeKit/StoreKit/StoreScreen/StoreSpecialOfferView.swift b/Sources/OversizeKit/StoreKit/StoreScreen/StoreSpecialOfferView.swift index a1d0b70..292b1bc 100644 --- a/Sources/OversizeKit/StoreKit/StoreScreen/StoreSpecialOfferView.swift +++ b/Sources/OversizeKit/StoreKit/StoreScreen/StoreSpecialOfferView.swift @@ -3,8 +3,12 @@ // StoreSpecialOfferView.swift // +import CachedAsyncImage +import EffectsLibrary import OversizeComponents +import OversizeCore import OversizeLocalizable +import OversizeNetwork import OversizeResources import OversizeServices import OversizeStoreService @@ -16,22 +20,47 @@ public struct StoreSpecialOfferView: View { @Environment(\.dismiss) private var dismiss @Environment(\.isPremium) private var isPremium @StateObject private var viewModel: StoreViewModel - @AppStorage("AppState.LastClosedSpecialOfferSheet") private var lastClosedSpecialOffer: StoreSpecialOfferEventType = .oldUser + @AppStorage("AppState.LastClosedSpecialOfferSheet") private var lastClosedSpecialOffer: String = "0" @State private var isShowAllPlans = false @State private var offset: CGFloat = 0 - private let event: StoreSpecialOfferEventType + private let event: Components.Schemas.SpecialOffer @State var trialDaysPeriodText: String = "" + @State var salePercent: Decimal = 0 - public init(event: StoreSpecialOfferEventType = .newUser) { + public init(event: Components.Schemas.SpecialOffer) { self.event = event _viewModel = StateObject(wrappedValue: StoreViewModel(specialOfferMode: true)) } public var body: some View { #if os(iOS) - PageView { offset = $0 } content: { + Group { + if #available(iOS 16.0, *) { + newPage + } else { + oldPage + } + } + + .onChange(of: isPremium) { status in + if status { + dismiss() + } + } + .task { + await viewModel.fetchData() + } + #else + EmptyView() + #endif + } + + @available(iOS 16.0, *) + var newPage: some View { + NavigationStack { + Page(badgeText, onScroll: handleOffset) { Group { switch viewModel.state { case .initial: @@ -48,47 +77,109 @@ public struct StoreSpecialOfferView: View { ProgressView() case let .result(data): content(data: data) + .background { + effectsView + } case let .error(error): ErrorView(error) } } - .paddingContent(.horizontal) } .backgroundLinerGradient(LinearGradient(colors: [.backgroundPrimary, .backgroundSecondary], startPoint: .top, endPoint: .center)) - .titleLabel { - PremiumLabel(image: Resource.Store.zap, text: Info.store.subscriptionsName, size: .medium) - } - .trailingBar { - BarButton(.closeAction { - lastClosedSpecialOffer = event - dismiss() - }) - } - .bottomToolbar(style: .none) { - VStack(spacing: .zero) { - StorePaymentButtonBar() + .bottomToolbar(style: .gradient) { + VStack(spacing: .small) { + productsLust + .padding(.horizontal, .medium) + + StorePaymentButtonBar(showDescription: false) .environmentObject(viewModel) - .padding(.horizontal, 8) + .padding(.horizontal, .small) } } - .onChange(of: isPremium) { status in - if status { - dismiss() + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button { + lastClosedSpecialOffer = event.id + dismiss() + } label: { + Image.Base.close.icon() + } } } - .task { - await viewModel.fetchData() - } - #else + } + } + + @ViewBuilder + var effectsView: some View { + switch event.effect { + case .snow: + SnowView(config: .init( + intensity: .low, + lifetime: .long, + initialVelocity: .medium, + fadeOut: .slow, + spreadRadius: .high + )) + .offset(y: -150) + default: EmptyView() - #endif + } + } + + var oldPage: some View { + PageView { offset = $0 } content: { + Group { + switch viewModel.state { + case .initial: + VStack { + Spacer() + HStack { + Spacer() + ProgressView() + Spacer() + } + Spacer() + } + case .loading: + ProgressView() + case let .result(data): + content(data: data) + case let .error(error): + ErrorView(error) + } + } + .paddingContent(.horizontal) + } + .backgroundLinerGradient(LinearGradient(colors: [.backgroundPrimary, .backgroundSecondary], startPoint: .top, endPoint: .center)) + .titleLabel { + PremiumLabel(image: Resource.Store.zap, text: Info.store.subscriptionsName, size: .medium) + } + .trailingBar { + BarButton(.closeAction { + lastClosedSpecialOffer = event.id + dismiss() + }) + } + .bottomToolbar(style: .none) { + VStack(spacing: .zero) { + productsLust + StorePaymentButtonBar() + .environmentObject(viewModel) + .padding(.horizontal, 8) + } + } + } + + func handleOffset(_ scrollOffset: CGPoint, visibleHeaderRatio _: CGFloat) { + offset = -scrollOffset.y + // visibleRatio = visibleHeaderRatio } var imageSize: CGFloat { if screenSize.height > 830 { - return 144 - } else if screenSize.height > 800 { - return 98 + return 200 + } else if screenSize.height > 700 { + return 160 } else { return 64 } @@ -97,31 +188,29 @@ public struct StoreSpecialOfferView: View { @ViewBuilder private func content(data: StoreKitProducts) -> some View { ScrollViewReader { value in - VStack(spacing: .medium) { VStack(spacing: .zero) { - if screenSize.height > 810 { + PremiumLabel(image: Resource.Store.zap, text: Info.store.subscriptionsName, size: .medium) + .offset(y: -32) + + if screenSize.height > 850 { Spacer() } - AsyncIllustrationView(event.specialOfferImageURL) - .frame(width: imageSize, height: imageSize) - .padding(.bottom, screenSize.height > 810 ? 38 : 8) - - VStack(spacing: .xSmall) { - Text(event.specialOfferSubtitle.uppercased()) - .footnote(.semibold) - .onBackgroundMediumEmphasisForegroundColor() - - Text(event.isNeedTrialDescription ? event.specialOfferTitle + " " + trialDaysPeriodText : event.specialOfferTitle) - .title(.bold) - .foregroundColor(.onSurfaceHighEmphasis) - - Text(event.specialOfferDescription) - .foregroundColor(.onSurfaceMediumEmphasis) - .headline(.semibold) + if let imageURLString = event.imageURL, let imageURL = URL(string: imageURLString) { + CachedAsyncImage(url: imageURL, urlCache: .imageCache) { image in + image + .resizable() + .frame(width: imageSize, height: imageSize) + } placeholder: { + Circle() + .fill(Color.surfaceTertiary) + .frame(width: imageSize, height: imageSize) + } + .padding(.bottom, .small) + .zIndex(999_999_999) } - .multilineTextAlignment(.center) + titleTexts Button { DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { @@ -137,7 +226,6 @@ public struct StoreSpecialOfferView: View { .padding(.bottom, screenSize.height > 810 ? .small : .zero) Spacer() - productsLust(data: data) } .frame(height: screenSize.safeAreaHeight - 235) .overlay { @@ -145,7 +233,7 @@ public struct StoreSpecialOfferView: View { .stroke(style: StrokeStyle(lineWidth: 5, lineCap: .round)) .foregroundColor(.onSurfaceHighEmphasis.opacity(0.3)) .frame(width: 30) - .offset(y: screenSize.safeAreaHeight - 370) + .offset(y: screenSize.safeAreaHeight - 280) .opacity(1 - (offset * 0.01)) } @@ -154,6 +242,7 @@ public struct StoreSpecialOfferView: View { .title() .onBackgroundHighEmphasisForegroundColor() .multilineTextAlignment(.center) + .fixedSize() .padding(.top, .large) StoreFeaturesLargeView() @@ -164,46 +253,137 @@ public struct StoreSpecialOfferView: View { .id(10) SubscriptionPrivacyView(products: data) + .padding(.horizontal, .medium) + .padding(.bottom, .large) } .padding(.bottom, 180) - - .onAppear { - Task { - // When this view appears, get the latest subscription status. - await viewModel.updateSubscriptionStatus(products: data) - } + .task { + await viewModel.updateSubscriptionStatus(products: data) } .onChange(of: data.purchasedAutoRenewable) { _ in Task { - // When `purchasedSubscriptions` changes, get the latest subscription status. await viewModel.updateSubscriptionStatus(products: data) } } } } + var titleTexts: some View { + VStack(spacing: .zero) { + Text(badgeText.uppercased()) + .footnote(.semibold) + .onBackgroundMediumEmphasisForegroundColor() + .padding(.bottom, .xxxSmall) + + Text(headline) + .title(.bold) + .foregroundColor(.onSurfaceHighEmphasis) + .frame(maxWidth: .infinity, alignment: .center) + + Text(event.title) + .largeTitle(.heavy) + .foregroundColor(titleColor) + + Text(description) + .foregroundColor(.onSurfaceMediumEmphasis) + .headline(.regular) + .padding(.top, .xSmall) + } + .multilineTextAlignment(.center) + .background { + RoundedRectangle(cornerRadius: 28, style: .continuous) + .fill(LinearGradient( + stops: [ + .init(color: Color.surfaceSecondary, location: 0), + .init(color: Color.surfaceSecondary.opacity(0), location: 0.7), + ], + startPoint: .top, + endPoint: .bottom + )) + .overlay( + RoundedRectangle(cornerRadius: 28, style: .continuous) + .strokeBorder( + LinearGradient( + stops: [ + .init(color: Color.surfaceTertiary, location: 0), + .init(color: Color.surfaceSecondary.opacity(0), location: 0.7), + ], + startPoint: .top, + endPoint: .bottom + ), + lineWidth: 2 + ) + ) + .padding(.top, -54) + .padding(.bottom, -100) + } + .padding(.horizontal, .small) + } + + var badgeText: String { + if let badge = event.badge { + return textPrepere(badge) + } else { + return "" + } + } + + var headline: String { + if let headline = event.headline { + return textPrepere(headline) + } else { + return "" + } + } + + var titleColor: Color { + if let accentColor = event.accentColor { + return Color(hex: accentColor) + } else { + return Color.onBackgroundHighEmphasis + } + } + + var description: String { + if let description = event.description { + return textPrepere(description) + } else { + return "" + } + } + + func textPrepere(_ text: String) -> String { + text + .replacingOccurrences(of: "", with: salePercent.toString) + .replacingOccurrences(of: "", with: trialDaysPeriodText) + .replacingOccurrences(of: "", with: Info.store.subscriptionsName) + } + @ViewBuilder - func productsLust(data: StoreKitProducts) -> some View { - VStack(spacing: .small) { - ForEach(viewModel.availableSubscriptions) { product in - if product.isOffer { - StoreProductView(product: product, products: data, isSelected: .constant(false)) { - Task { - await viewModel.buy(product: product) + var productsLust: some View { + if case let .result(data) = viewModel.state { + VStack(spacing: .small) { + ForEach(viewModel.availableSubscriptions) { product in + if product.isOffer { + StoreProductView(product: product, products: data, isSelected: .constant(false)) { + Task { + await viewModel.buy(product: product) + } } - } - .onAppear { - if product.type == .autoRenewable, let offer = product.subscription?.introductoryOffer { - trialDaysPeriodText = viewModel.storeKitService.daysLabel(offer.period.value, unit: offer.period.unit) + .onAppear { + if product.type == .autoRenewable, let offer = product.subscription?.introductoryOffer { + trialDaysPeriodText = viewModel.storeKitService.daysLabel(offer.period.value, unit: offer.period.unit) + salePercent = viewModel.storeKitService.salePercent(product: product, products: data) + } } } } - } - ForEach(data.nonConsumable) { product in - if product.isOffer { - StoreProductView(product: product, products: data, isSelected: .constant(false)) { - Task { - await viewModel.buy(product: product) + ForEach(data.nonConsumable) { product in + if product.isOffer { + StoreProductView(product: product, products: data, isSelected: .constant(false)) { + Task { + await viewModel.buy(product: product) + } } } } @@ -212,8 +392,8 @@ public struct StoreSpecialOfferView: View { } } -struct StoreSpecialOfferView_Previews: PreviewProvider { - static var previews: some View { - StoreSpecialOfferView() - } -} +// struct StoreSpecialOfferView_Previews: PreviewProvider { +// static var previews: some View { +// StoreSpecialOfferView() +// } +// } diff --git a/Sources/OversizeKit/StoreKit/StoreScreen/ViewModel/StoreViewModel.swift b/Sources/OversizeKit/StoreKit/StoreScreen/ViewModel/StoreViewModel.swift index 00dddcb..708b461 100644 --- a/Sources/OversizeKit/StoreKit/StoreScreen/ViewModel/StoreViewModel.swift +++ b/Sources/OversizeKit/StoreKit/StoreScreen/ViewModel/StoreViewModel.swift @@ -14,7 +14,7 @@ import StoreKit import SwiftUI @MainActor -class StoreViewModel: ObservableObject { +public class StoreViewModel: ObservableObject { enum State { case initial case loading diff --git a/Sources/OversizeKit/StoreKit/ViewModifier/PremiumBlockOverlay.swift b/Sources/OversizeKit/StoreKit/ViewModifier/PremiumBlockOverlay.swift index fec8d7a..63e1aeb 100644 --- a/Sources/OversizeKit/StoreKit/ViewModifier/PremiumBlockOverlay.swift +++ b/Sources/OversizeKit/StoreKit/ViewModifier/PremiumBlockOverlay.swift @@ -10,23 +10,24 @@ import SwiftUI public struct PremiumBlockOverlay: ViewModifier { @Environment(\.colorScheme) var colorScheme @State var isShowPremium = false - @Environment(\.isPremium) var premiumStatus + @Environment(\.isPremium) var isPremium + @Binding var isShow: Bool let title: String let subtitle: String? private let closeAction: (() -> Void)? + - public init(title: String, subtitle: String?, closeAction: (() -> Void)? = nil) { + public init(isShow: Binding = .constant(true), title: String, subtitle: String?, closeAction: (() -> Void)? = nil) { + self._isShow = isShow self.title = title self.subtitle = subtitle self.closeAction = closeAction } public func body(content: Content) -> some View { - if premiumStatus { - content - } else { + if !isPremium && isShow { ZStack { content @@ -42,14 +43,14 @@ public struct PremiumBlockOverlay: ViewModifier { PremiumLabel(size: .medium) .padding(.bottom, .medium) - VStack(spacing: .medium) { + VStack(spacing: .small) { Text(title) .title() .foregroundColor(.onSurfaceHighEmphasis) if let subtitle { Text(subtitle) - .headline() + .headline(.medium) .foregroundColor(.onSurfaceMediumEmphasis) } } @@ -81,12 +82,24 @@ public struct PremiumBlockOverlay: ViewModifier { StoreView() .colorScheme(colorScheme) } + } else { + content } } } public extension View { + + func premiumContent(_ title: String, subtitle: String?, closeAction: (() -> Void)? = nil) -> some View { + modifier(PremiumBlockOverlay(title: title, subtitle: subtitle, closeAction: closeAction)) + } + + @available(*, deprecated, renamed: "premiumContent", message: "Renamed") func premiumContent(title: String, subtitle: String?, closeAction: (() -> Void)? = nil) -> some View { modifier(PremiumBlockOverlay(title: title, subtitle: subtitle, closeAction: closeAction)) } + + func premiumContent(isShow: Binding = .constant(true), title: String, subtitle: String?, closeAction: (() -> Void)? = nil) -> some View { + modifier(PremiumBlockOverlay(isShow: isShow, title: title, subtitle: subtitle, closeAction: closeAction)) + } } diff --git a/Sources/OversizeKit/StoreKit/Views/BuyButtonStyle.swift b/Sources/OversizeKit/StoreKit/Views/BuyButtonStyle.swift index 531bee8..3922ccd 100644 --- a/Sources/OversizeKit/StoreKit/Views/BuyButtonStyle.swift +++ b/Sources/OversizeKit/StoreKit/Views/BuyButtonStyle.swift @@ -88,7 +88,7 @@ public struct PaymentButtonStyle: ButtonStyle { return .small case .regular: return .small - case .large: + case .large, .extraLarge: return .medium @unknown default: return .zero @@ -103,7 +103,7 @@ public struct PaymentButtonStyle: ButtonStyle { return .xxSmall case .regular: return .small - case .large: + case .large, .extraLarge: return .medium @unknown default: return .zero diff --git a/Sources/OversizeKit/StoreKit/Views/StorePaymentButtonBar.swift b/Sources/OversizeKit/StoreKit/Views/StorePaymentButtonBar.swift index 4436eae..0399d3b 100644 --- a/Sources/OversizeKit/StoreKit/Views/StorePaymentButtonBar.swift +++ b/Sources/OversizeKit/StoreKit/Views/StorePaymentButtonBar.swift @@ -10,18 +10,22 @@ struct StorePaymentButtonBar: View { let action: (() -> Void)? let trialNotification: Bool + let showDescription: Bool - init(trialNotification: Bool = false, action: (() -> Void)? = nil) { + init(trialNotification: Bool = false, showDescription: Bool = true, action: (() -> Void)? = nil) { self.trialNotification = trialNotification self.action = action + self.showDescription = showDescription } var body: some View { VStack(spacing: .zero) { - Text(viewModel.selectedProductButtonDescription) - .subheadline(.semibold) - .foregroundColor(.onSurfaceMediumEmphasis) - .padding(.vertical, 20) + if showDescription { + Text(viewModel.selectedProductButtonDescription) + .subheadline(.semibold) + .foregroundColor(.onSurfaceMediumEmphasis) + .padding(.vertical, 20) + } Button { if let selectedProduct = viewModel.selectedProduct { @@ -50,10 +54,12 @@ struct StorePaymentButtonBar: View { } .padding(.bottom, .xxSmall) .background { - backgroundView + if showDescription { + backgroundView + } } - .padding(.bottom, .small) - .padding(.horizontal, .small) + .padding(.bottom, showDescription ? .small : .zero) + .padding(.horizontal, showDescription ? .small : .zero) } var backgroundView: some View { diff --git a/Sources/OversizeKit/StoreKit/Views/StoreProductView.swift b/Sources/OversizeKit/StoreKit/Views/StoreProductView.swift index 73ac63e..2fa0d08 100644 --- a/Sources/OversizeKit/StoreKit/Views/StoreProductView.swift +++ b/Sources/OversizeKit/StoreKit/Views/StoreProductView.swift @@ -47,7 +47,6 @@ public struct StoreProductView: View { } } - // Percentage of decrease = |239.88 - 59.99|/239.88 = 179.89/239.88 = 0.74991662497916 = 74.991662497916% var saleProcent: String { if let monthSubscriptionProduct { let yearPriceMonthly = monthSubscriptionProduct.price * 12 diff --git a/Sources/OversizeNoticeKit/NoticeListView.swift b/Sources/OversizeNoticeKit/NoticeListView.swift index 6c26da3..5916718 100644 --- a/Sources/OversizeNoticeKit/NoticeListView.swift +++ b/Sources/OversizeNoticeKit/NoticeListView.swift @@ -3,97 +3,97 @@ // NoticeListView.swift // -import Factory import OversizeKit +import OversizeNetwork import OversizeServices -import OversizeStoreService import OversizeUI import StoreKit import SwiftUI public struct NoticeListView: View { - @Injected(\.appStoreReviewService) var reviewService @Environment(\.isPremium) var isPremium: Bool + @StateObject private var viewModel = NoticeListViewModel() @State private var isBannerClosed = false - @State private var showRecommended = false - - private var specialOffer: StoreSpecialOfferEventType? { - var specialOffer: StoreSpecialOfferEventType? - for event in StoreSpecialOfferEventType.allCases where event.isNow { - if lastClosedSpecialOffer != event { - specialOffer = event - } - } - return specialOffer - } - @State private var isShowOfferSheet: Bool = false - @AppStorage("AppState.LastClosedSpecialOfferBanner") var lastClosedSpecialOffer: StoreSpecialOfferEventType = .oldUser - - private var isShowRate: Bool { - !isBannerClosed && reviewService.isShowReviewBanner - } - - private var isShowNoticeView: Bool { - isShowRate && (specialOffer != nil && isPremium == false) - } public init() {} public var body: some View { - if isShowNoticeView { + switch viewModel.state { + case let .result(offer: offer, isShowRate: isShowRate) where (offer != nil || isShowRate) && !isBannerClosed && !isPremium: VStack(spacing: .small) { - if isShowRate, let reviewUrl = Info.url.appStoreReview { - NoticeView("How do you like the application?") { - Link(destination: reviewUrl) { - Text("Good") - } - .buttonStyle(.primary(infinityWidth: true)) - .accent() - .simultaneousGesture(TapGesture().onEnded { - reviewService.estimate(goodRating: true) - isBannerClosed = true - }) + if isShowRate { + rateNoticeView + } + if let offer { + offerView(offer: offer) + } + } + case .initial, .loading, .error, .result, .empty: + EmptyView() + } + } - Button("Bad") { - reviewService.estimate(goodRating: false) - isBannerClosed = true - } - .buttonStyle(.tertiary(infinityWidth: true)) + @ViewBuilder + private var rateNoticeView: some View { + if let reviewUrl = Info.url.appStoreReview { + NoticeView("How do you like the \(Info.app.name ?? "app"))?") { + Link(destination: reviewUrl) { + Text("Good") + } + .buttonStyle(.primary(infinityWidth: true)) + .accent() + .simultaneousGesture(TapGesture().onEnded { + viewModel.reviewService.estimate(goodRating: true) + withAnimation { + isBannerClosed = true + } + }) - } closeAction: { - reviewService.rewiewBunnerClosed() + Button("Bad") { + viewModel.reviewService.estimate(goodRating: false) + withAnimation { isBannerClosed = true } - .animation(.default, value: isBannerClosed) } + .buttonStyle(.tertiary(infinityWidth: true)) - if let event = specialOffer { - let url = URL(string: "https://cdn.oversize.design/assets/illustrations/\(event.specialOfferImageURL)") + } closeAction: { + viewModel.reviewService.rewiewBunnerClosed() + withAnimation { + isBannerClosed = true + } + } + .animation(.default, value: isBannerClosed) + } + } - NoticeView(event.specialOfferBannerTitle, - subtitle: event.specialOfferDescription, - imageURL: url) - { - Button { - isShowOfferSheet.toggle() - } label: { - Text("Get Free Trial") - } - .accent() + @ViewBuilder + private func offerView(offer: Components.Schemas.SpecialOffer) -> some View { + if let imageUrl = offer.imageURL, let url = URL(string: imageUrl) { + NoticeView( + viewModel.textPrepere(offer.title), + subtitle: viewModel.textPrepere(offer.description ?? ""), + imageURL: url + ) { + Button { + isShowOfferSheet.toggle() + } label: { + Text("Accept Offer") + } + .accent() - } closeAction: { - lastClosedSpecialOffer = event - } - .sheet(isPresented: $isShowOfferSheet) { - StoreSpecialOfferView(event: event) - .systemServices() - } + } closeAction: { + viewModel.lastClosedSpecialOffer = offer.id + withAnimation { + isBannerClosed = true } } - } else { - EmptyView() + .sheet(isPresented: $isShowOfferSheet) { + StoreSpecialOfferView(event: offer) + .systemServices() + } } } } diff --git a/Sources/OversizeNoticeKit/NoticeListViewModel.swift b/Sources/OversizeNoticeKit/NoticeListViewModel.swift new file mode 100644 index 0000000..0862c48 --- /dev/null +++ b/Sources/OversizeNoticeKit/NoticeListViewModel.swift @@ -0,0 +1,107 @@ +// +// Copyright © 2023 Alexander Romanov +// NoticeListViewModel.swift, created on 25.12.2023 +// + +import Factory +import OversizeModels +import OversizeNetwork +import OversizeServices +import OversizeStoreService +import StoreKit +import SwiftUI + +@MainActor +public final class NoticeListViewModel: ObservableObject { + enum State { + case initial + case loading + case result(offer: Components.Schemas.SpecialOffer?, isShowRate: Bool) + case empty + case error(AppError) + } + + @Injected(\.appStoreReviewService) var reviewService + @Injected(\.networkService) var networkService + @Injected(\.storeKitService) var storeKitService: StoreKitService + + var isShowReviewBanner: Bool { + reviewService.isShowReviewBanner + } + + @AppStorage("AppState.LastClosedSpecialOfferBanner") var lastClosedSpecialOffer: String = "" + + private let expectedFormat = Date.ISO8601FormatStyle() + + @Published var state = State.initial + @Published public var trialDaysPeriodText: String = "" + @Published public var salePercent: Decimal = 0 + + public init() { + Task { + await fetchData() + } + } + + public func fetchData() async { + state = .loading + await fetchStoreKitProudcts() + await fetchAndSetSpecialOffer() + } + + public func fetchStoreKitProudcts() async { + let result = await storeKitService.requestProducts() + switch result { + case let .success(products): + if let product = products.autoRenewable.first(where: { $0.isOffer }), let offer = product.subscription?.introductoryOffer { + trialDaysPeriodText = storeKitService.daysLabel(offer.period.value, unit: offer.period.unit) + salePercent = storeKitService.salePercent(product: product, products: products) + } + case .failure: + break + } + } + + public func fetchAndSetSpecialOffer() async { + let result = await networkService.fetchSpecialOffers() + switch result { + case let .success(offers): + if let offer = offers.first(where: { checkDateInSelectedPeriod(startDate: $0.startDate, endDate: $0.endDate) }) { + if offer.id != lastClosedSpecialOffer { + withAnimation { + state = .result( + offer: offer, + isShowRate: isShowReviewBanner + ) + } + } else if isShowReviewBanner { + withAnimation { + state = .result( + offer: nil, + isShowRate: isShowReviewBanner + ) + } + } else { + state = .empty + } + } + case .failure: + break + } + } + + private func checkDateInSelectedPeriod(startDate: Date, endDate: Date) -> Bool { + if startDate < endDate { + return (startDate ... endDate).contains(Date()) + } else { + return false + } + } + + func textPrepere(_ text: String) -> String { + text + .replacingOccurrences(of: "", with: salePercent.toString) + .replacingOccurrences(of: "", with: trialDaysPeriodText) + .replacingOccurrences(of: "", with: Info.store.subscriptionsName) + } +}