From cd822054c68d8eff1915981415ec47c1a6328a72 Mon Sep 17 00:00:00 2001
From: Mustafa Merza <mustafa.merza95@gmail.com>
Date: Wed, 17 Jul 2024 17:08:56 +0300
Subject: [PATCH] - Added use case to handle app start and configure language
 and color scheme if needed.

---
 MiniScanner.xcodeproj/project.pbxproj         |  4 ++++
 .../Common/DI/DependencyManager.swift         |  2 ++
 .../Repositories/SettingsRepository.swift     | 17 ++++++++++++++
 .../SettingsRepositoryProtocol.swift          |  2 ++
 .../UseCases/HandleAppStartUseCase.swift      | 22 +++++++++++++++++++
 .../Supporting Files/SceneDelegate.swift      |  4 ++++
 6 files changed, 51 insertions(+)
 create mode 100644 MiniScanner/Features/Common/Domain/UseCases/HandleAppStartUseCase.swift

diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj
index 0f7ada4..df3087a 100644
--- a/MiniScanner.xcodeproj/project.pbxproj
+++ b/MiniScanner.xcodeproj/project.pbxproj
@@ -189,6 +189,7 @@
 		672C46CF2C47EA6D00497EF0 /* GetColorSchemeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46CE2C47EA6D00497EF0 /* GetColorSchemeUseCase.swift */; };
 		672C46D12C47EA7400497EF0 /* ChangeColorSchemeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46D02C47EA7400497EF0 /* ChangeColorSchemeUseCase.swift */; };
 		672C46D32C47EA8F00497EF0 /* SupportedColorScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46D22C47EA8F00497EF0 /* SupportedColorScheme.swift */; };
+		672C46D52C47F8D000497EF0 /* HandleAppStartUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 672C46D42C47F8D000497EF0 /* HandleAppStartUseCase.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 */; };
@@ -428,6 +429,7 @@
 		672C46CE2C47EA6D00497EF0 /* GetColorSchemeUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetColorSchemeUseCase.swift; sourceTree = "<group>"; };
 		672C46D02C47EA7400497EF0 /* ChangeColorSchemeUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeColorSchemeUseCase.swift; sourceTree = "<group>"; };
 		672C46D22C47EA8F00497EF0 /* SupportedColorScheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportedColorScheme.swift; sourceTree = "<group>"; };
+		672C46D42C47F8D000497EF0 /* HandleAppStartUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HandleAppStartUseCase.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; };
@@ -1025,6 +1027,7 @@
 			children = (
 				672C46CD2C47EA2A00497EF0 /* ColorScheme */,
 				672C46BB2C47E98900497EF0 /* Language */,
+				672C46D42C47F8D000497EF0 /* HandleAppStartUseCase.swift */,
 			);
 			path = UseCases;
 			sourceTree = "<group>";
@@ -1494,6 +1497,7 @@
 				539996822C27130000671340 /* ConstraintDescription.swift in Sources */,
 				EC702546254E1E9E00BE1958 /* WalkthroughModel.swift in Sources */,
 				53D9D1C22C1AF521004D1C1C /* StickerView.swift in Sources */,
+				672C46D52C47F8D000497EF0 /* HandleAppStartUseCase.swift in Sources */,
 				539996A22C27130000671340 /* ConstraintDirectionalInsets.swift in Sources */,
 				53E7D3352C1B00880025A1D3 /* FSPagerView.swift in Sources */,
 				672C46B32C47E8D700497EF0 /* DependencyManager.swift in Sources */,
diff --git a/MiniScanner/Features/Common/DI/DependencyManager.swift b/MiniScanner/Features/Common/DI/DependencyManager.swift
index 43a708a..ef3895f 100644
--- a/MiniScanner/Features/Common/DI/DependencyManager.swift
+++ b/MiniScanner/Features/Common/DI/DependencyManager.swift
@@ -32,5 +32,7 @@ final class DependencyManager {
         
         @Provide var getColorSchemeUseCase = GetColorSchemeUseCase(repository: repository)
         @Provide var changeColorSchemeUseCase = ChangeColorSchemeUseCase(repository: repository)
+        
+        @Provide var handleAppStartUseCase = HandleAppStartUseCase(repository: repository)
     }
 }
diff --git a/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift b/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
index 1b99dea..9759223 100644
--- a/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
+++ b/MiniScanner/Features/Common/Data/Repositories/SettingsRepository.swift
@@ -45,6 +45,11 @@ class SettingsRepository: SettingsRepositoryProtocol {
             changeAppColorScheme(to: colorScheme)
         }
     }
+    
+    func handleAppStart() {
+        handleColorScheme()
+        handleUISettings()
+    }
 }
 
 extension SettingsRepository {
@@ -77,3 +82,15 @@ extension SettingsRepository {
         window?.overrideUserInterfaceStyle = userInterfaceStyle
     }
 }
+
+extension SettingsRepository {
+    
+    func handleColorScheme() {
+        let colorScheme = getColorScheme()
+        changeAppColorScheme(to: colorScheme)
+    }
+    
+    func handleUISettings() {
+        
+    }
+}
diff --git a/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift b/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
index 453e045..42094b8 100644
--- a/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
+++ b/MiniScanner/Features/Common/Domain/Repositories/SettingsRepositoryProtocol.swift
@@ -16,4 +16,6 @@ protocol SettingsRepositoryProtocol {
     
     func getColorScheme() -> SupportedColorScheme
     func changeColorScheme(to colorScheme: SupportedColorScheme)
+    
+    func handleAppStart()
 }
diff --git a/MiniScanner/Features/Common/Domain/UseCases/HandleAppStartUseCase.swift b/MiniScanner/Features/Common/Domain/UseCases/HandleAppStartUseCase.swift
new file mode 100644
index 0000000..d08552d
--- /dev/null
+++ b/MiniScanner/Features/Common/Domain/UseCases/HandleAppStartUseCase.swift
@@ -0,0 +1,22 @@
+//
+//  HandleAppStartUseCase.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/17/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+class HandleAppStartUseCase {
+    
+    private let repository: SettingsRepositoryProtocol
+    
+    init(repository: SettingsRepositoryProtocol) {
+        self.repository = repository
+    }
+    
+    func execute() {
+        repository.handleAppStart()
+    }
+}
diff --git a/MiniScanner/Supporting Files/SceneDelegate.swift b/MiniScanner/Supporting Files/SceneDelegate.swift
index 28988ff..97a3b83 100644
--- a/MiniScanner/Supporting Files/SceneDelegate.swift	
+++ b/MiniScanner/Supporting Files/SceneDelegate.swift	
@@ -15,6 +15,10 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
     let navigationController = AppTabBarController.buildViewController()//BaseNavigationViewController.buildViewController()
     window?.rootViewController = navigationController
     window?.makeKeyAndVisible()
+      
+      @Inject var handleAppStartUseCase: HandleAppStartUseCase
+      
+      handleAppStartUseCase.execute()
   }
   
   func sceneDidDisconnect(_ scene: UIScene) {
-- 
GitLab