Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/CruGlobal/godtools-swift
Browse files Browse the repository at this point in the history
…into GT-2219-Languages-Available-Offline

# Conflicts:
#	godtools.xcodeproj/project.pbxproj
  • Loading branch information
rachaelblue committed Feb 1, 2024
2 parents 6ab7386 + 6f3e76b commit 2ff81f8
Show file tree
Hide file tree
Showing 47 changed files with 557 additions and 362 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
run: bundle exec fastlane cru_shared_lane_run_tests output_directory:fastlane_scan_output_directory result_bundle:true

- name: Upload Xcode Code Coverage Report to CodeCov
uses: codecov/codecov-action@v3
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/download_onesky_translations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
run: bundle exec fastlane cru_shared_lane_download_and_commit_latest_one_sky_localizations

- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v6
with:
branch: 'latest-onesky-translations'
token: ${{ secrets.CREATE_PULL_REQUEST_ACCESS_TOKEN }}
Expand Down
56 changes: 36 additions & 20 deletions godtools.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

32 changes: 27 additions & 5 deletions godtools/App/AppBackgroundState.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,50 @@
//

import Foundation
import Combine

class AppBackgroundState {

static let shared: AppBackgroundState = AppBackgroundState()

private var getAllFavoritedToolsLatestTranslationFilesUseCase: GetAllFavoritedToolsLatestTranslationFilesUseCase?

private var storeInitialFavoritedToolsUseCase: StoreInitialFavoritedToolsUseCase?
private var cancellables: Set<AnyCancellable> = Set()
private var isStarted: Bool = false

@Published private var appLanguage: AppLanguageDomainModel = ""

private init() {

}

func start(getAllFavoritedToolsLatestTranslationFilesUseCase: GetAllFavoritedToolsLatestTranslationFilesUseCase, storeInitialFavoritedToolsUseCase: StoreInitialFavoritedToolsUseCase) {
func start(appDiContainer: AppDiContainer) {

guard !isStarted else {
return
}

isStarted = true

self.getAllFavoritedToolsLatestTranslationFilesUseCase = getAllFavoritedToolsLatestTranslationFilesUseCase
self.storeInitialFavoritedToolsUseCase = storeInitialFavoritedToolsUseCase
let downloadLatestToolsForFavoritedToolsUseCase: DownloadLatestToolsForFavoritedToolsUseCase = appDiContainer.feature.dashboard.domainLayer.getDownloadLatestToolsForFavoritedToolsUseCase()

appDiContainer.feature.appLanguage.domainLayer
.getCurrentAppLanguageUseCase()
.getLanguagePublisher()
.assign(to: &$appLanguage)

$appLanguage
.eraseToAnyPublisher()
.flatMap({ (appLanguage: AppLanguageDomainModel) -> AnyPublisher<Void, Never> in

return downloadLatestToolsForFavoritedToolsUseCase
.downloadPublisher(appLanguage: appLanguage)
.eraseToAnyPublisher()
})
.sink { _ in

}
.store(in: &cancellables)

self.storeInitialFavoritedToolsUseCase = appDiContainer.domainLayer.getStoreInitialFavoritedToolsUseCase()
}
}
10 changes: 0 additions & 10 deletions godtools/App/DependencyContainer/AppDomainLayerDependencies.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,6 @@ class AppDomainLayerDependencies {
)
}

func getAllFavoritedToolsLatestTranslationFilesUseCase() -> GetAllFavoritedToolsLatestTranslationFilesUseCase {
return GetAllFavoritedToolsLatestTranslationFilesUseCase(
getLanguageUseCase: getLanguageUseCase(),
getSettingsPrimaryLanguageUseCase: getSettingsPrimaryLanguageUseCase(),
favoritedResourcesRepository: dataLayer.getFavoritedResourcesRepository(),
resourcesRepository: dataLayer.getResourcesRepository(),
translationsRepository: dataLayer.getTranslationsRepository()
)
}

func getAllFavoritedToolsUseCase() -> GetAllFavoritedToolsUseCase {
return GetAllFavoritedToolsUseCase(
getSettingsPrimaryLanguageUseCase: getSettingsPrimaryLanguageUseCase(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
//
// GetConfirmAppLanguageInterfaceStringsRepository.swift
// godtools
//
// Created by Rachael Skeath on 1/27/24.
// Copyright © 2024 Cru. All rights reserved.
//

import Foundation
import Combine

class GetConfirmAppLanguageInterfaceStringsRepository: GetConfirmAppLanguageInterfaceStringsRepositoryInterface {

private let localizationServices: LocalizationServices
private let localeLanguageName: LocaleLanguageName

init(localizationServices: LocalizationServices, localeLanguageName: LocaleLanguageName) {

self.localizationServices = localizationServices
self.localeLanguageName = localeLanguageName
}

func getStringsPublisher(translateInAppLanguage: AppLanguageDomainModel, selectedLanguage: AppLanguageDomainModel) -> AnyPublisher<ConfirmAppLanguageInterfaceStringsDomainModel, Never> {

let appLanguageLocaleId: String = translateInAppLanguage

let interfaceStrings = ConfirmAppLanguageInterfaceStringsDomainModel(
messageInNewlySelectedLanguage: getAttributedMessageStringPublisher(selectedLanguage: selectedLanguage, localeId: selectedLanguage),
messageInCurrentLanguage: getAttributedMessageStringPublisher(selectedLanguage: selectedLanguage, localeId: appLanguageLocaleId),
changeLanguageButtonText: localizationServices.stringForLocaleElseEnglish(localeIdentifier: appLanguageLocaleId, key: "languageSettings.confirmAppLanguage.changeLanguageButton.title"),
nevermindButtonText: localizationServices.stringForLocaleElseEnglish(localeIdentifier: appLanguageLocaleId, key: "languageSettings.confirmAppLanguage.nevermindButton.title")
)

return Just(interfaceStrings)
.eraseToAnyPublisher()
}

private func getAttributedMessageStringPublisher(selectedLanguage: AppLanguageDomainModel, localeId: String) -> NSAttributedString {

let formatString = localizationServices.stringForLocaleElseEnglish(localeIdentifier: localeId, key: "languageSettings.confirmAppLanguage.message")

let languageName = self.localeLanguageName.getLanguageName(forLanguageCode: selectedLanguage, translatedInLanguageId: localeId) ?? ""
let languageNameAttributed = NSAttributedString(
string: languageName,
attributes: [NSAttributedString.Key.foregroundColor: ColorPalette.gtBlue.uiColor]
)

let attributedString = NSAttributedString(format: NSAttributedString(string: formatString), args: languageNameAttributed)

return attributedString
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ class AppLanguageFeatureDataLayerDependencies {
)
}

func getConfirmAppLanguageInterfaceStringsRepositoryInterface() -> GetConfirmAppLanguageInterfaceStringsRepositoryInterface {
return GetConfirmAppLanguageInterfaceStringsRepository(
localizationServices: coreDataLayer.getLocalizationServices(),
localeLanguageName: coreDataLayer.getLocaleLanguageName()
)
}

func getDeviceAppLanguageRepositoryInterface() -> GetDeviceAppLanguageRepositoryInterface {
return GetDeviceAppLanguageRepository(
deviceSystemLanguage: coreDataLayer.getDeviceSystemLanguage()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,6 @@ class AppLanguageFeatureDomainLayerDependencies {
)
}

func getConfirmAppLanguageInterfaceStringsUseCase() -> GetConfirmAppLanguageInterfaceStringsUseCase {
return GetConfirmAppLanguageInterfaceStringsUseCase(
getCurrentAppLanguageUseCase: getCurrentAppLanguageUseCase(),
getInterfaceStringInAppLanguageUseCase: getInterfaceStringInAppLanguageUseCase(),
getInterfaceStringRepositoryInterface: coreDataLayer.getInterfaceStringForLanguageRepositoryInterface(),
localeLanguageName: coreDataLayer.getLocaleLanguageName()
)
}

func getDownloadToolLanguageUseCase() -> DownloadToolLanguageUseCase {
return DownloadToolLanguageUseCase(
downloadToolLanguageRepository: dataLayer.getDownloadToolLanguageRepositoryInterface()
Expand Down Expand Up @@ -81,6 +72,12 @@ class AppLanguageFeatureDomainLayerDependencies {
)
}

func getViewConfirmAppLanguageUseCase() -> ViewConfirmAppLanguageUseCase {
return ViewConfirmAppLanguageUseCase(
getConfirmAppLanguageInterfaceStringsRepository: dataLayer.getConfirmAppLanguageInterfaceStringsRepositoryInterface()
)
}

func getViewDownloadableLanguagesUseCase() -> ViewDownloadableLanguagesUseCase {
return ViewDownloadableLanguagesUseCase(
getDownloadableLanguagesListRepository: dataLayer.getDownloadableLanguagesListRepositoryInterface(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//
// ViewConfirmAppLanguageDomainModel.swift
// godtools
//
// Created by Rachael Skeath on 1/26/24.
// Copyright © 2024 Cru. All rights reserved.
//

import Foundation

struct ViewConfirmAppLanguageDomainModel {

let interfaceStrings: ConfirmAppLanguageInterfaceStringsDomainModel
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// GetConfirmAppLanguageInterfaceStringsRepositoryInterface.swift
// godtools
//
// Created by Rachael Skeath on 1/27/24.
// Copyright © 2024 Cru. All rights reserved.
//

import Foundation
import Combine

protocol GetConfirmAppLanguageInterfaceStringsRepositoryInterface {

func getStringsPublisher(translateInAppLanguage: AppLanguageDomainModel, selectedLanguage: AppLanguageDomainModel) -> AnyPublisher<ConfirmAppLanguageInterfaceStringsDomainModel, Never>
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// ViewConfirmAppLanguageUseCase.swift
// godtools
//
// Created by Rachael Skeath on 10/23/23.
// Copyright © 2023 Cru. All rights reserved.
//

import Foundation
import Combine

class ViewConfirmAppLanguageUseCase {

private let getConfirmAppLanguageInterfaceStringsRepository: GetConfirmAppLanguageInterfaceStringsRepositoryInterface

init(getConfirmAppLanguageInterfaceStringsRepository: GetConfirmAppLanguageInterfaceStringsRepositoryInterface) {

self.getConfirmAppLanguageInterfaceStringsRepository = getConfirmAppLanguageInterfaceStringsRepository
}

func viewPublisher(appLanguage: AppLanguageDomainModel, selectedLanguage: AppLanguageDomainModel) -> AnyPublisher<ViewConfirmAppLanguageDomainModel, Never> {

return getConfirmAppLanguageInterfaceStringsRepository.getStringsPublisher(translateInAppLanguage: appLanguage, selectedLanguage: selectedLanguage)
.map { interfaceStrings in

return ViewConfirmAppLanguageDomainModel(interfaceStrings: interfaceStrings)
}
.eraseToAnyPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ struct ConfirmAppLanguageView: View {
Group {
attributedMessageView(attributedString: viewModel.messageInCurrentLanguage, fontSize: 18)

attributedMessageView(attributedString: viewModel.messageInNewlySelectedLanguage, fontSize: 14)
attributedMessageView(attributedString: viewModel.messageInNewlySelectedLanguage, fontSize: 18)
}
.padding(.horizontal, 10)

Expand All @@ -64,14 +64,14 @@ struct ConfirmAppLanguageView: View {

let buttonWidth = (geometry.size.width - buttonSpacing - 2*horizontalPadding) / 2

GTBlueButton(title: viewModel.changeLanguageButtonTitle, fontSize: 15, width: buttonWidth, height: 48) {
GTWhiteButton(title: viewModel.nevermindButtonTitle, fontSize: 15, width: buttonWidth, height: 48) {

viewModel.confirmLanguageButtonTapped()
viewModel.nevermindButtonTapped()
}

GTWhiteButton(title: viewModel.nevermindButtonTitle, fontSize: 15, width: buttonWidth, height: 48) {
GTBlueButton(title: viewModel.changeLanguageButtonTitle, fontSize: 15, width: buttonWidth, height: 48) {

viewModel.nevermindButtonTapped()
viewModel.confirmLanguageButtonTapped()
}
}

Expand Down
Loading

0 comments on commit 2ff81f8

Please sign in to comment.