From 899a33a3704fbc675ebe237b6d0bb810fecc466a Mon Sep 17 00:00:00 2001
From: Mustafa Merza <mustafa.merza95@gmail.com>
Date: Thu, 18 Jul 2024 10:09:10 +0300
Subject: [PATCH] - Added use case to handle app language when the app
 launches.

---
 MiniScanner.xcodeproj/project.pbxproj         |  4 ++++
 .../Common/DI/DependencyManager.swift         |  2 ++
 .../Data/DataSources/SettingsDataSource.swift |  5 +++++
 .../Repositories/SettingsRepository.swift     | 10 +++++++++
 .../SettingsRepositoryProtocol.swift          |  1 +
 .../Language/HandleAppLanguageUseCase.swift   | 22 +++++++++++++++++++
 .../Supporting Files/AppDelegate.swift        |  3 +++
 7 files changed, 47 insertions(+)
 create mode 100644 MiniScanner/Features/Common/Domain/UseCases/Language/HandleAppLanguageUseCase.swift

diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj
index cbf5299..2066f5c 100644
--- a/MiniScanner.xcodeproj/project.pbxproj
+++ b/MiniScanner.xcodeproj/project.pbxproj
@@ -193,6 +193,7 @@
 		672C46D72C48006200497EF0 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 672C46D62C48006200497EF0 /* Colors.xcassets */; };
 		672C46DA2C48018400497EF0 /* Color+Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46D92C48018400497EF0 /* Color+Colors.swift */; };
 		672C46DC2C48018D00497EF0 /* UIColors+Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46DB2C48018D00497EF0 /* UIColors+Colors.swift */; };
+		67807F8C2C48F49B00D1F168 /* HandleAppLanguageUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67807F8B2C48F49B00D1F168 /* HandleAppLanguageUseCase.swift */; };
 		B827E5196CC419E773B843E1 /* Pods_MiniScanner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */; };
 		EC0CF1FE254D8BBF00888722 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FD254D8BBF00888722 /* AppDelegate.swift */; };
 		EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0CF1FF254D8BBF00888722 /* SceneDelegate.swift */; };
@@ -436,6 +437,7 @@
 		672C46D62C48006200497EF0 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = "<group>"; };
 		672C46D92C48018400497EF0 /* Color+Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Colors.swift"; sourceTree = "<group>"; };
 		672C46DB2C48018D00497EF0 /* UIColors+Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColors+Colors.swift"; sourceTree = "<group>"; };
+		67807F8B2C48F49B00D1F168 /* HandleAppLanguageUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HandleAppLanguageUseCase.swift; sourceTree = "<group>"; };
 		E8AF4FB39674DF589D719DCF /* Pods-MiniScanner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MiniScanner.release.xcconfig"; path = "Target Support Files/Pods-MiniScanner/Pods-MiniScanner.release.xcconfig"; sourceTree = "<group>"; };
 		E9A37DC9F9A8E3AF632DFB98 /* Pods_MiniScanner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MiniScanner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		EC0CF1FA254D8BBF00888722 /* MiniScanner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MiniScanner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1024,6 +1026,7 @@
 				672C46B92C47E98900497EF0 /* ChangeLanguageUseCase.swift */,
 				672C46BA2C47E98900497EF0 /* GetLanguagesUseCase.swift */,
 				672C46CB2C47E9AB00497EF0 /* GetLanguageUseCase.swift */,
+				67807F8B2C48F49B00D1F168 /* HandleAppLanguageUseCase.swift */,
 			);
 			path = Language;
 			sourceTree = "<group>";
@@ -1570,6 +1573,7 @@
 				53014FA22C11A8E80071CE39 /* ScannedPageViewController.swift in Sources */,
 				5399969D2C27130000671340 /* Constraint.swift in Sources */,
 				EC8A9B1D254DCEC600F9AF99 /* File.swift in Sources */,
+				67807F8C2C48F49B00D1F168 /* HandleAppLanguageUseCase.swift in Sources */,
 				53E7D33A2C1B00880025A1D3 /* FSPageControl.swift in Sources */,
 				EC8A9B24254DE72F00F9AF99 /* UIView+Extensions.swift in Sources */,
 				EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */,
diff --git a/MiniScanner/Features/Common/DI/DependencyManager.swift b/MiniScanner/Features/Common/DI/DependencyManager.swift
index ef3895f..795688c 100644
--- a/MiniScanner/Features/Common/DI/DependencyManager.swift
+++ b/MiniScanner/Features/Common/DI/DependencyManager.swift
@@ -34,5 +34,7 @@ final class DependencyManager {
         @Provide var changeColorSchemeUseCase = ChangeColorSchemeUseCase(repository: repository)
         
         @Provide var handleAppStartUseCase = HandleAppStartUseCase(repository: repository)
+        
+        @Provide var handleAppLanguageUseCase = HandleAppLanguageUseCase(repository: repository)
     }
 }
diff --git a/MiniScanner/Features/Common/Data/DataSources/SettingsDataSource.swift b/MiniScanner/Features/Common/Data/DataSources/SettingsDataSource.swift
index 469ed75..a539686 100644
--- a/MiniScanner/Features/Common/Data/DataSources/SettingsDataSource.swift
+++ b/MiniScanner/Features/Common/Data/DataSources/SettingsDataSource.swift
@@ -13,6 +13,7 @@ protocol SettingsDataSourceProtocol {
     func getLanguages() -> [SupportedLanguage]
     func getLanguage() -> SupportedLanguage
     func changeLanguage(to language: SupportedLanguage)
+    func changeManagerLanguage(to language: SupportedLanguage)
     
     func getColorScheme() -> SupportedColorScheme
     func changeColorScheme(to colorScheme: SupportedColorScheme)
@@ -57,6 +58,10 @@ class SettingsDataSource: SettingsDataSourceProtocol {
     func changeLanguage(to language: SupportedLanguage) {
         self.language = language
         
+        changeManagerLanguage(to: language)
+    }
+    
+    func changeManagerLanguage(to language: SupportedLanguage) {
         languageManager.setLanguage(language: language.language)
         languageManager.defaultLanguage = language.language
     }
diff --git a/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift b/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
index 21dec49..908de5a 100644
--- a/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
+++ b/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
@@ -46,6 +46,10 @@ class SettingsRepository: SettingsRepositoryProtocol {
         }
     }
     
+    func handleAppLanguage() {
+        handleLanguage()
+    }
+    
     func handleAppStart() {
         handleColorScheme()
         handleUISettings()
@@ -85,6 +89,12 @@ extension SettingsRepository {
 
 extension SettingsRepository {
     
+    private func handleLanguage() {
+        let langauge = getLanguage()
+        
+        dataSource.changeManagerLanguage(to: langauge)
+    }
+    
     private func handleColorScheme() {
         let colorScheme = getColorScheme()
         changeAppColorScheme(to: colorScheme)
diff --git a/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift b/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
index 42094b8..9c98fcf 100644
--- a/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
+++ b/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
@@ -17,5 +17,6 @@ protocol SettingsRepositoryProtocol {
     func getColorScheme() -> SupportedColorScheme
     func changeColorScheme(to colorScheme: SupportedColorScheme)
     
+    func handleAppLanguage()
     func handleAppStart()
 }
diff --git a/MiniScanner/Features/Common/Domain/UseCases/Language/HandleAppLanguageUseCase.swift b/MiniScanner/Features/Common/Domain/UseCases/Language/HandleAppLanguageUseCase.swift
new file mode 100644
index 0000000..1af982a
--- /dev/null
+++ b/MiniScanner/Features/Common/Domain/UseCases/Language/HandleAppLanguageUseCase.swift
@@ -0,0 +1,22 @@
+//
+//  HandleAppLanguageUseCase.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/18/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+class HandleAppLanguageUseCase {
+    
+    private let repository: SettingsRepositoryProtocol
+    
+    init(repository: SettingsRepositoryProtocol) {
+        self.repository = repository
+    }
+    
+    func execute() {
+        repository.handleAppLanguage()
+    }
+}
diff --git a/MiniScanner/Supporting Files/AppDelegate.swift b/MiniScanner/Supporting Files/AppDelegate.swift
index 70aded3..6ad27a9 100644
--- a/MiniScanner/Supporting Files/AppDelegate.swift	
+++ b/MiniScanner/Supporting Files/AppDelegate.swift	
@@ -11,6 +11,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
       
       initializeDependencies()
       
+      @Inject var handleAppLanguageUseCase: HandleAppLanguageUseCase
+      handleAppLanguageUseCase.execute()
+      
       if let savedFolders = UserDefaults.standard.object(forKey: "folders") as? Data {
           print("nooo!!")
       } else {
-- 
GitLab