From dbac01de8193fd969659b8ba275fa18e8d019e19 Mon Sep 17 00:00:00 2001
From: Mustafa Merza <mustafa.merza95@gmail.com>
Date: Tue, 13 Aug 2024 18:53:02 +0300
Subject: [PATCH] - Changed settings screen design to match with Figma.

- Added changing default file type for sharing setting.
- Added changing default screen when app starts setting.

- Added primary button control to be reusable.
- Added custom picker to be reusable.
- Added no indicator scroll view to be reusable.

- Added empty and generic action to be reusable.

- Added custom modifiers to:
	* change color.
	* change corner radius.
	* read view's size.
	* display sheets.
---
 MiniScanner.xcodeproj/project.pbxproj         |  72 +++++
 MiniScanner/Extensions/Image+Images.swift     |   6 +
 .../Extensions/String+StringKeys.swift        |  13 +-
 .../Extensions/View/CornerRadiusShape.swift   |  23 ++
 .../View/Sheet/View+CustomSheet.swift         |  60 +++++
 .../View/Sheet/View+iOS15Sheet.swift          | 247 ++++++++++++++++++
 .../Extensions/View/View+CustomColor.swift    |  46 ++++
 .../View/View+CustomCornerRadius.swift        |  33 +++
 .../Extensions/View/View+ReadSize.swift       |  47 ++++
 .../Common/DI/DependencyManager.swift         |   4 +
 .../Data/DataSources/UserSettings.swift       |  55 ++++
 .../Common/Data/Model/DefaultFileType.swift   |  30 +++
 .../Common/Data/Model/DefaultScreen.swift     |  26 ++
 .../Data/Model/SupportedColorScheme.swift     |   3 +-
 .../Common/Data/Model/SupportedLanguage.swift |   2 +-
 .../Common/Presentation/CustomPicker.swift    |  52 ++++
 .../Common/Presentation/EmptyAction.swift     |  11 +
 .../Common/Presentation/GenericAction.swift   |  11 +
 .../Presentation/NoIndicatorsScrollView.swift |  37 +++
 .../Common/Presentation/PrimaryButton.swift   |  41 +++
 .../Settings/Presentation/SettingButton.swift |  76 ++++++
 .../Presentation/SettingSheetView.swift       |  56 ++++
 .../Settings/Presentation/SettingsView.swift  | 135 ++++++----
 .../Presentation/SettingsViewModel.swift      | 136 +++++++++-
 .../UserDefaults/UserDefaultsKeys.swift       |   3 +
 .../brush-ic.imageset/Contents.json           |  16 ++
 .../brush-ic.imageset/brush-ic.svg            |   3 +
 .../file-down-ic.imageset/Contents.json       |  16 ++
 .../file-down-ic.imageset/file-down-ic.svg    |   3 +
 .../languages-ic.imageset/Contents.json       |  16 ++
 .../languages-ic.imageset/languages-ic.svg    |   3 +
 .../smartphone-ic.imageset/Contents.json      |  16 ++
 .../smartphone-ic.imageset/smartphone-ic.svg  |   3 +
 .../Localization/Localizable.xcstrings        | 153 +++++++----
 34 files changed, 1350 insertions(+), 104 deletions(-)
 create mode 100644 MiniScanner/Extensions/View/CornerRadiusShape.swift
 create mode 100644 MiniScanner/Extensions/View/Sheet/View+CustomSheet.swift
 create mode 100644 MiniScanner/Extensions/View/Sheet/View+iOS15Sheet.swift
 create mode 100644 MiniScanner/Extensions/View/View+CustomColor.swift
 create mode 100644 MiniScanner/Extensions/View/View+CustomCornerRadius.swift
 create mode 100644 MiniScanner/Extensions/View/View+ReadSize.swift
 create mode 100644 MiniScanner/Features/Common/Data/DataSources/UserSettings.swift
 create mode 100644 MiniScanner/Features/Common/Data/Model/DefaultFileType.swift
 create mode 100644 MiniScanner/Features/Common/Data/Model/DefaultScreen.swift
 create mode 100644 MiniScanner/Features/Common/Presentation/CustomPicker.swift
 create mode 100644 MiniScanner/Features/Common/Presentation/EmptyAction.swift
 create mode 100644 MiniScanner/Features/Common/Presentation/GenericAction.swift
 create mode 100644 MiniScanner/Features/Common/Presentation/NoIndicatorsScrollView.swift
 create mode 100644 MiniScanner/Features/Common/Presentation/PrimaryButton.swift
 create mode 100644 MiniScanner/Features/Settings/Presentation/SettingButton.swift
 create mode 100644 MiniScanner/Features/Settings/Presentation/SettingSheetView.swift
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/Contents.json
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/brush-ic.svg
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/Contents.json
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/file-down-ic.svg
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/Contents.json
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/languages-ic.svg
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/Contents.json
 create mode 100644 MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/smartphone-ic.svg

diff --git a/MiniScanner.xcodeproj/project.pbxproj b/MiniScanner.xcodeproj/project.pbxproj
index 52fb0a0..6645f8d 100644
--- a/MiniScanner.xcodeproj/project.pbxproj
+++ b/MiniScanner.xcodeproj/project.pbxproj
@@ -250,6 +250,22 @@
 		67A2AF6E2C6B46D100039F30 /* ScanSessionPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF6C2C6B46D100039F30 /* ScanSessionPreviewViewController.swift */; };
 		67A2AF6F2C6B46D100039F30 /* ScanSessionPreviewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 67A2AF6D2C6B46D100039F30 /* ScanSessionPreviewViewController.xib */; };
 		67A2AF712C6B4A5400039F30 /* ScannedItemPreviewPagerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF702C6B4A5400039F30 /* ScannedItemPreviewPagerViewCell.swift */; };
+		67A2AF752C6B6F5100039F30 /* SettingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF742C6B6F5100039F30 /* SettingButton.swift */; };
+		67A2AF782C6B6F7700039F30 /* NoIndicatorsScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF762C6B6F7700039F30 /* NoIndicatorsScrollView.swift */; };
+		67A2AF792C6B6F7700039F30 /* EmptyAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF772C6B6F7700039F30 /* EmptyAction.swift */; };
+		67A2AF7B2C6B759100039F30 /* SettingSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF7A2C6B759100039F30 /* SettingSheetView.swift */; };
+		67A2AF7D2C6B76BC00039F30 /* CustomPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF7C2C6B76BC00039F30 /* CustomPicker.swift */; };
+		67A2AF7F2C6B7E5D00039F30 /* View+CustomCornerRadius.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF7E2C6B7E5D00039F30 /* View+CustomCornerRadius.swift */; };
+		67A2AF812C6B7E8000039F30 /* CornerRadiusShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF802C6B7E8000039F30 /* CornerRadiusShape.swift */; };
+		67A2AF832C6B82BC00039F30 /* DefaultScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF822C6B82BC00039F30 /* DefaultScreen.swift */; };
+		67A2AF852C6B831700039F30 /* DefaultFileType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF842C6B831700039F30 /* DefaultFileType.swift */; };
+		67A2AF872C6B8B2A00039F30 /* PrimaryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF862C6B8B2A00039F30 /* PrimaryButton.swift */; };
+		67A2AF892C6B8F4500039F30 /* View+ReadSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF882C6B8F4500039F30 /* View+ReadSize.swift */; };
+		67A2AF8B2C6B900500039F30 /* GenericAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF8A2C6B900500039F30 /* GenericAction.swift */; };
+		67A2AF8D2C6B959900039F30 /* View+CustomColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF8C2C6B959900039F30 /* View+CustomColor.swift */; };
+		67A2AF8F2C6B9B5400039F30 /* View+CustomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF8E2C6B9B5400039F30 /* View+CustomSheet.swift */; };
+		67A2AF922C6B9B8700039F30 /* View+iOS15Sheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF912C6B9B8700039F30 /* View+iOS15Sheet.swift */; };
+		67A2AF962C6BADAA00039F30 /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A2AF952C6BADAA00039F30 /* UserSettings.swift */; };
 		67D714B52C5161A30065E6F4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67D714B42C5161A30065E6F4 /* Images.xcassets */; };
 		67E6A1962C64DEB400A77F29 /* ScannedItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E6A1952C64DEB400A77F29 /* ScannedItemType.swift */; };
 		67E6A1982C65151F00A77F29 /* ImageCompressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E6A1972C65151F00A77F29 /* ImageCompressView.swift */; };
@@ -548,6 +564,22 @@
 		67A2AF6C2C6B46D100039F30 /* ScanSessionPreviewViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanSessionPreviewViewController.swift; sourceTree = "<group>"; };
 		67A2AF6D2C6B46D100039F30 /* ScanSessionPreviewViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ScanSessionPreviewViewController.xib; sourceTree = "<group>"; };
 		67A2AF702C6B4A5400039F30 /* ScannedItemPreviewPagerViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScannedItemPreviewPagerViewCell.swift; sourceTree = "<group>"; };
+		67A2AF742C6B6F5100039F30 /* SettingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingButton.swift; sourceTree = "<group>"; };
+		67A2AF762C6B6F7700039F30 /* NoIndicatorsScrollView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NoIndicatorsScrollView.swift; sourceTree = "<group>"; };
+		67A2AF772C6B6F7700039F30 /* EmptyAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmptyAction.swift; sourceTree = "<group>"; };
+		67A2AF7A2C6B759100039F30 /* SettingSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingSheetView.swift; sourceTree = "<group>"; };
+		67A2AF7C2C6B76BC00039F30 /* CustomPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPicker.swift; sourceTree = "<group>"; };
+		67A2AF7E2C6B7E5D00039F30 /* View+CustomCornerRadius.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+CustomCornerRadius.swift"; sourceTree = "<group>"; };
+		67A2AF802C6B7E8000039F30 /* CornerRadiusShape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CornerRadiusShape.swift; sourceTree = "<group>"; };
+		67A2AF822C6B82BC00039F30 /* DefaultScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultScreen.swift; sourceTree = "<group>"; };
+		67A2AF842C6B831700039F30 /* DefaultFileType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultFileType.swift; sourceTree = "<group>"; };
+		67A2AF862C6B8B2A00039F30 /* PrimaryButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimaryButton.swift; sourceTree = "<group>"; };
+		67A2AF882C6B8F4500039F30 /* View+ReadSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+ReadSize.swift"; sourceTree = "<group>"; };
+		67A2AF8A2C6B900500039F30 /* GenericAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GenericAction.swift; sourceTree = "<group>"; };
+		67A2AF8C2C6B959900039F30 /* View+CustomColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+CustomColor.swift"; sourceTree = "<group>"; };
+		67A2AF8E2C6B9B5400039F30 /* View+CustomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+CustomSheet.swift"; sourceTree = "<group>"; };
+		67A2AF912C6B9B8700039F30 /* View+iOS15Sheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+iOS15Sheet.swift"; sourceTree = "<group>"; };
+		67A2AF952C6BADAA00039F30 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = "<group>"; };
 		67D714B42C5161A30065E6F4 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
 		67E6A1952C64DEB400A77F29 /* ScannedItemType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScannedItemType.swift; sourceTree = "<group>"; };
 		67E6A1972C65151F00A77F29 /* ImageCompressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCompressView.swift; sourceTree = "<group>"; };
@@ -1182,6 +1214,7 @@
 			isa = PBXGroup;
 			children = (
 				672C46BE2C47E98A00497EF0 /* SettingsDataSource.swift */,
+				67A2AF952C6BADAA00039F30 /* UserSettings.swift */,
 			);
 			path = DataSources;
 			sourceTree = "<group>";
@@ -1192,6 +1225,8 @@
 				678BD70C2C4CF18300833DA5 /* CustomMenuPickerItem.swift */,
 				672C46C02C47E98A00497EF0 /* SupportedLanguage.swift */,
 				672C46D22C47EA8F00497EF0 /* SupportedColorScheme.swift */,
+				67A2AF822C6B82BC00039F30 /* DefaultScreen.swift */,
+				67A2AF842C6B831700039F30 /* DefaultFileType.swift */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -1377,10 +1412,15 @@
 		67807F972C49313C00D1F168 /* Presentation */ = {
 			isa = PBXGroup;
 			children = (
+				67A2AF772C6B6F7700039F30 /* EmptyAction.swift */,
+				67A2AF8A2C6B900500039F30 /* GenericAction.swift */,
+				67A2AF762C6B6F7700039F30 /* NoIndicatorsScrollView.swift */,
 				678BD70E2C4CF1A000833DA5 /* CustomMenuPicker.swift */,
+				67A2AF7C2C6B76BC00039F30 /* CustomPicker.swift */,
 				67807F9A2C49325A00D1F168 /* MainView.swift */,
 				67807F982C49320100D1F168 /* MainViewModel.swift */,
 				67807F942C49306C00D1F168 /* MainCoordinator.swift */,
+				67A2AF862C6B8B2A00039F30 /* PrimaryButton.swift */,
 			);
 			path = Presentation;
 			sourceTree = "<group>";
@@ -1388,7 +1428,12 @@
 		67807F9C2C49348B00D1F168 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				67A2AF902C6B9B6000039F30 /* Sheet */,
 				67807F9F2C4934BD00D1F168 /* View+LayoutChanges.swift */,
+				67A2AF7E2C6B7E5D00039F30 /* View+CustomCornerRadius.swift */,
+				67A2AF802C6B7E8000039F30 /* CornerRadiusShape.swift */,
+				67A2AF882C6B8F4500039F30 /* View+ReadSize.swift */,
+				67A2AF8C2C6B959900039F30 /* View+CustomColor.swift */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -1399,6 +1444,8 @@
 				678BD7102C4CF1EB00833DA5 /* SettingsView.swift */,
 				678BD7112C4CF1EB00833DA5 /* SettingsViewCoordinator.swift */,
 				678BD7122C4CF1EB00833DA5 /* SettingsViewModel.swift */,
+				67A2AF742C6B6F5100039F30 /* SettingButton.swift */,
+				67A2AF7A2C6B759100039F30 /* SettingSheetView.swift */,
 			);
 			path = Presentation;
 			sourceTree = "<group>";
@@ -1439,6 +1486,15 @@
 			path = ScanSessionPreview;
 			sourceTree = "<group>";
 		};
+		67A2AF902C6B9B6000039F30 /* Sheet */ = {
+			isa = PBXGroup;
+			children = (
+				67A2AF8E2C6B9B5400039F30 /* View+CustomSheet.swift */,
+				67A2AF912C6B9B8700039F30 /* View+iOS15Sheet.swift */,
+			);
+			path = Sheet;
+			sourceTree = "<group>";
+		};
 		98E49D3F46C8E62718825860 /* Pods */ = {
 			isa = PBXGroup;
 			children = (
@@ -1788,6 +1844,7 @@
 				539996A32C27130000671340 /* ConstraintLayoutSupportDSL.swift in Sources */,
 				53D9D1C52C1AF521004D1C1C /* MyExtention.swift in Sources */,
 				672C46DC2C48018D00497EF0 /* UIColors+Colors.swift in Sources */,
+				67A2AF7B2C6B759100039F30 /* SettingSheetView.swift in Sources */,
 				672C46662C47C74C00497EF0 /* Inject.swift in Sources */,
 				535983F22C144E87003EB6ED /* Keys.swift in Sources */,
 				539996962C27130000671340 /* ConstraintOffsetTarget.swift in Sources */,
@@ -1801,6 +1858,7 @@
 				53014FAA2C11A8E80071CE39 /* Quadrilateral.swift in Sources */,
 				539996832C27130000671340 /* ConstraintMakerPriortizable.swift in Sources */,
 				678BD71D2C4D057200833DA5 /* UIImage+Images.swift in Sources */,
+				67A2AF8B2C6B900500039F30 /* GenericAction.swift in Sources */,
 				677E65F42C5AA3EE0039E2C5 /* Array+RemoveElement.swift in Sources */,
 				5399969E2C27130000671340 /* Debugging.swift in Sources */,
 				672C46682C47C75100497EF0 /* Clear.swift in Sources */,
@@ -1816,6 +1874,7 @@
 				53014FB72C11A8E80071CE39 /* CaptureDevice.swift in Sources */,
 				5399968D2C27130000671340 /* ConstraintDirectionalInsetTarget.swift in Sources */,
 				53014F8F2C11A8E80071CE39 /* RectangleFeaturesFunnel.swift in Sources */,
+				67A2AF852C6B831700039F30 /* DefaultFileType.swift in Sources */,
 				53014F932C11A8E80071CE39 /* PDFCreator.swift in Sources */,
 				675FF4F12C622CDE00E42214 /* ScanSessionPrintable.swift in Sources */,
 				539D1C852C164F85009DB24A /* CustomTabBarView.swift in Sources */,
@@ -1827,6 +1886,7 @@
 				539996972C27130000671340 /* ConstraintMakerEditable.swift in Sources */,
 				539996A02C27130000671340 /* LayoutConstraint.swift in Sources */,
 				53014F972C11A8E80071CE39 /* AVCaptureVideoOrientation+Utils.swift in Sources */,
+				67A2AF872C6B8B2A00039F30 /* PrimaryButton.swift in Sources */,
 				535983EF2C142C9F003EB6ED /* Localization.swift in Sources */,
 				539996892C27130000671340 /* ConstraintDSL.swift in Sources */,
 				539996952C27130000671340 /* ConstraintConstantTarget.swift in Sources */,
@@ -1883,6 +1943,7 @@
 				53014F982C11A8E80071CE39 /* URL+Utils.swift in Sources */,
 				EC8A9B00254DBFC700F9AF99 /* UserDefaults+Extensions.swift in Sources */,
 				672C46C82C47E98A00497EF0 /* SettingsDataSource.swift in Sources */,
+				67A2AF832C6B82BC00039F30 /* DefaultScreen.swift in Sources */,
 				53CD5F5C2C1505A20010424B /* Globals.swift in Sources */,
 				EC8A9B03254DC08800F9AF99 /* NSNotification+Extensions.swift in Sources */,
 				677E65B82C5A14100039E2C5 /* CoreDataManagerProtocol.swift in Sources */,
@@ -1891,11 +1952,13 @@
 				5359841A2C145E55003EB6ED /* DocumentsTableViewCell.swift in Sources */,
 				677E65DF2C5A36170039E2C5 /* DeleteFolderUseCase.swift in Sources */,
 				EC702522254DF13200BE1958 /* PencilKitViewController.swift in Sources */,
+				67A2AF962C6BADAA00039F30 /* UserSettings.swift in Sources */,
 				675FF4F52C6231D000E42214 /* PayloadType.swift in Sources */,
 				5399968F2C27130000671340 /* ConstraintConfig.swift in Sources */,
 				539996342C26D41300671340 /* OCRViewController.swift in Sources */,
 				53014F902C11A8E80071CE39 /* CaptureSessionManager.swift in Sources */,
 				539996912C27130000671340 /* ConstraintView.swift in Sources */,
+				67A2AF812C6B7E8000039F30 /* CornerRadiusShape.swift in Sources */,
 				ECA1FAA4254DEB140081F00B /* CustomPDFView.swift in Sources */,
 				53014FA32C11A8E80071CE39 /* ZoomGestureController.swift in Sources */,
 				5399964C2C26E86700671340 /* CDCameraView.m in Sources */,
@@ -1926,6 +1989,7 @@
 				67A2AF6E2C6B46D100039F30 /* ScanSessionPreviewViewController.swift in Sources */,
 				678809ED2C6A2ECB00EF9046 /* CompressType.swift in Sources */,
 				5399968A2C27130000671340 /* ConstraintMakerExtendable.swift in Sources */,
+				67A2AF792C6B6F7700039F30 /* EmptyAction.swift in Sources */,
 				67A20DDD2C57A142009D2F25 /* DocumentLayout.swift in Sources */,
 				53014FBA2C11A8E80071CE39 /* CaptureSession+Flash.swift in Sources */,
 				539996572C27124B00671340 /* FontChooserContainerView.swift in Sources */,
@@ -1943,15 +2007,18 @@
 				EC8A9B24254DE72F00F9AF99 /* UIView+Extensions.swift in Sources */,
 				EC0CF200254D8BBF00888722 /* SceneDelegate.swift in Sources */,
 				53014FBB2C11A8E80071CE39 /* CaptureSession+Orientation.swift in Sources */,
+				67A2AF7F2C6B7E5D00039F30 /* View+CustomCornerRadius.swift in Sources */,
 				53014F942C11A8E80071CE39 /* DeviceOrientationHelper.swift in Sources */,
 				EC8A9B27254DE91B00F9AF99 /* DocumentPreviewViewController.swift in Sources */,
 				67807F992C49320100D1F168 /* MainViewModel.swift in Sources */,
 				5399964A2C26E86700671340 /* CropperConstantValues.m in Sources */,
 				53014F9F2C11A8E80071CE39 /* UIImage+Utils.swift in Sources */,
 				53CD5F582C1504CF0010424B /* UIButton+Extensions.swift in Sources */,
+				67A2AF782C6B6F7700039F30 /* NoIndicatorsScrollView.swift in Sources */,
 				677E65F62C5F9E6E0039E2C5 /* ScannedItemPagerViewCell.swift in Sources */,
 				677E65DD2C5A35EE0039E2C5 /* AddFolderUseCase.swift in Sources */,
 				672C46CA2C47E98A00497EF0 /* SettingsRepository.swift in Sources */,
+				67A2AF8D2C6B959900039F30 /* View+CustomColor.swift in Sources */,
 				539D1C8B2C16E97F009DB24A /* ShareSheetViewController.swift in Sources */,
 				539996A12C27130000671340 /* ConstraintLayoutGuide+Extensions.swift in Sources */,
 				677E65C02C5A15F40039E2C5 /* ScanSessionEntity+CoreDataClass.swift in Sources */,
@@ -1963,6 +2030,7 @@
 				53014F962C11A8E80071CE39 /* ScannerViewController.swift in Sources */,
 				53014FA52C11A8E80071CE39 /* EditScanCornerView.swift in Sources */,
 				677E65EE2C5A6C0A0039E2C5 /* SessionModel.xcdatamodeld in Sources */,
+				67A2AF752C6B6F5100039F30 /* SettingButton.swift in Sources */,
 				6794328C2C689E9F002E5F8D /* WXCompress.swift in Sources */,
 				53E7D3382C1B00880025A1D3 /* FSPagerViewLayoutAttributes.swift in Sources */,
 				53014F8E2C11A8E80071CE39 /* ImageScannerController.swift in Sources */,
@@ -1974,13 +2042,17 @@
 				539996942C27130000671340 /* Typealiases.swift in Sources */,
 				5399964D2C26E86700671340 /* CDImageRectangleDetector.m in Sources */,
 				5399964E2C26E86700671340 /* CDZoomView.m in Sources */,
+				67A2AF7D2C6B76BC00039F30 /* CustomPicker.swift in Sources */,
 				535983ED2C142B49003EB6ED /* UIFont+Extensions.swift in Sources */,
 				539996582C27124B00671340 /* ImageStickerContainerView.swift in Sources */,
 				5399968B2C27130000671340 /* ConstraintPriority.swift in Sources */,
 				675FF4F92C6235F600E42214 /* ShareOption.swift in Sources */,
 				539996862C27130000671340 /* ConstraintPriorityTarget.swift in Sources */,
+				67A2AF892C6B8F4500039F30 /* View+ReadSize.swift in Sources */,
+				67A2AF922C6B9B8700039F30 /* View+iOS15Sheet.swift in Sources */,
 				EC8A9AD0254DB5A400F9AF99 /* AppTabBarController.swift in Sources */,
 				53CD5F5A2C1505500010424B /* UITextView+Extensions.swift in Sources */,
+				67A2AF8F2C6B9B5400039F30 /* View+CustomSheet.swift in Sources */,
 				539996932C27130000671340 /* ConstraintLayoutSupport.swift in Sources */,
 				5399969F2C27130000671340 /* ConstraintRelatableTarget.swift in Sources */,
 				53F21F912C1248EC00172BFC /* FolderCollectionViewCell.swift in Sources */,
diff --git a/MiniScanner/Extensions/Image+Images.swift b/MiniScanner/Extensions/Image+Images.swift
index f4616a7..f7242be 100644
--- a/MiniScanner/Extensions/Image+Images.swift
+++ b/MiniScanner/Extensions/Image+Images.swift
@@ -11,10 +11,16 @@ import SwiftUI
 // MARK: - App images and icons
 extension Image {
     
+    static let languages = Image(.languagesIc)
+    static let brush = Image(.brushIc)
+    static let fileDown = Image(.fileDownIc)
+    static let smartphone = Image(.smartphoneIc)
 }
 
 // MARK: - Common system images and icons
 extension Image {
     
     static let chevronBackward = Image(systemName: "chevron.backward")
+    
+    static let checkmark = Image(systemName: "checkmark")
 }
diff --git a/MiniScanner/Extensions/String+StringKeys.swift b/MiniScanner/Extensions/String+StringKeys.swift
index 74a7ffc..4ec20d5 100644
--- a/MiniScanner/Extensions/String+StringKeys.swift
+++ b/MiniScanner/Extensions/String+StringKeys.swift
@@ -64,12 +64,17 @@ extension String {
     
     static let settings = "settings"
     
-    static let language = "language"
+    static let change = "change"
+    static let appLanguage = "app_language"
     static let appTheme = "app_theme"
     
-    static let appearence = "appearence"
-    static let deviceLanguage = "device_language"
-    static let deviceTheme = "device_theme"
+    static let defaultFileTypeForInstalling = "default_file_type_for_installing"
+    
+    static let defaultScreenWhenAppStarts = "default_screen_when_app_starts"
+    static let files = "files"
+    
+    static let basedOnDevice = "based_on_device"
+    
     static let darkMode = "dark_mode"
     static let lightMode = "light_mode"
     
diff --git a/MiniScanner/Extensions/View/CornerRadiusShape.swift b/MiniScanner/Extensions/View/CornerRadiusShape.swift
new file mode 100644
index 0000000..adae08e
--- /dev/null
+++ b/MiniScanner/Extensions/View/CornerRadiusShape.swift
@@ -0,0 +1,23 @@
+//
+//  CornerRadiusShape.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct CornerRadiusShape: Shape {
+    
+    var radius: CGFloat = .infinity
+    var corners: UIRectCorner = .allCorners
+    
+    func path(in rect: CGRect) -> Path {
+        let path = UIBezierPath(roundedRect: rect,
+                                byRoundingCorners: corners,
+                                cornerRadii: CGSize(width: radius, height: radius))
+        
+        return Path(path.cgPath)
+    }
+}
diff --git a/MiniScanner/Extensions/View/Sheet/View+CustomSheet.swift b/MiniScanner/Extensions/View/Sheet/View+CustomSheet.swift
new file mode 100644
index 0000000..8e1f651
--- /dev/null
+++ b/MiniScanner/Extensions/View/Sheet/View+CustomSheet.swift
@@ -0,0 +1,60 @@
+//
+//  View+CustomSheet.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct CustomSheetModifier<SheetContent: View>: ViewModifier {
+    
+    var isPresented: Binding<Bool>
+    var dismissable: Bool = true
+    var height: CGFloat
+    @ViewBuilder var sheetContent: () -> SheetContent
+    
+    func body(content: Content) -> some View {
+        
+        if #available(iOS 16.0, *) {
+            iOS16View(content: content)
+        } else {
+            iOS15View(content: content)
+        }
+    }
+    
+    @available(iOS 16.0, *)
+    private func iOS16View(content: Content) -> some View {
+        
+        content
+            .sheet(isPresented: isPresented) {
+                
+                sheetContent()
+                    .presentationDetents([.height(height)])
+                    .interactiveDismissDisabled(!dismissable)
+            }
+    }
+    
+    private func iOS15View(content: Content) -> some View {
+        
+        content
+            .bottomSheet(isPresented: isPresented,
+                         shouldScrollExpandSheet: true,
+                         showGrabber: false,
+                         showNavigationBar: true,
+                         dismissable: dismissable,
+                         content: sheetContent)
+    }
+}
+
+extension View {
+    
+    func customSheet<Content: View>(isPresented: Binding<Bool>,
+                                    dismissable: Bool = true,
+                                    height: CGFloat,
+                                    @ViewBuilder content: @escaping () -> Content) -> some View {
+        
+        ModifiedContent(content: self, modifier: CustomSheetModifier(isPresented: isPresented, dismissable: dismissable, height: height, sheetContent: content))
+    }
+}
diff --git a/MiniScanner/Extensions/View/Sheet/View+iOS15Sheet.swift b/MiniScanner/Extensions/View/Sheet/View+iOS15Sheet.swift
new file mode 100644
index 0000000..3aa99f9
--- /dev/null
+++ b/MiniScanner/Extensions/View/Sheet/View+iOS15Sheet.swift
@@ -0,0 +1,247 @@
+//
+//  View+iOS15Sheet.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+extension View {
+
+    /// Presents a bottomSheet when a binding to a Boolean value that you provide is true.
+    func bottomSheet<Content: View>(
+        isPresented: Binding<Bool>,
+        detents: [BottomSheet.Detent] = [.medium],
+        shouldScrollExpandSheet: Bool = true,
+        largestUndimmedDetent: BottomSheet.LargestUndimmedDetent? = nil,
+        showGrabber: Bool = false,
+        cornerRadius: CGFloat? = nil,
+        showsInCompactHeight: Bool = false,
+        showNavigationBar: Bool = true,
+        dismissable: Bool = true,
+        preferredColorScheme: ColorScheme? = nil,
+        @ViewBuilder content: @escaping () -> Content
+    ) -> some View {
+        background {
+            Color.clear
+                .onDisappear {
+                    BottomSheet.dismiss()
+                }
+                .onChange(of: isPresented.wrappedValue) { show in
+                    if show {
+                        BottomSheet.present(
+                            detents: detents,
+                            shouldScrollExpandSheet: shouldScrollExpandSheet,
+                            largestUndimmedDetent: largestUndimmedDetent,
+                            showGrabber: showGrabber,
+                            cornerRadius: cornerRadius,
+                            showsInCompactHeight: showsInCompactHeight,
+                            showNavigationBar: showNavigationBar,
+                            dismissable: dismissable,
+                            preferredColorScheme: preferredColorScheme
+                        ) {
+                            content()
+                                .onDisappear {
+                                    isPresented.projectedValue.wrappedValue = false
+                                }
+                        }
+                    } else {
+                        BottomSheet.dismiss()
+                    }
+                }
+        }
+    }
+}
+
+struct BottomSheet {
+    
+    /// Wraps the UIKit's detents (UISheetPresentationController.Detent)
+    public enum Detent: Identifiable, CustomStringConvertible, Equatable {
+        case medium
+        case large
+        case fixed(Int)
+        case ratio(Double)
+        
+        public var id: String { description }
+        
+        public var description: String {
+            switch self {
+            case .medium:
+                return "Medium"
+                
+            case .large:
+                return "Large"
+                
+            case .fixed(let value):
+                return "Fixed height of \(value)"
+                
+            case .ratio(let value):
+                return "Ratio of \(value)"
+            }
+        }
+        
+        var asUIKitDetent: UISheetPresentationController.Detent? {
+            switch self {
+            case .medium:
+                return .medium()
+                
+            case .large:
+                return .large()
+                
+#if swift(>=5.7)
+            case .fixed(let value):
+                guard #available(iOS 16, *) else { return nil }
+                return .custom { _ in CGFloat(value) }
+                
+            case .ratio(let value):
+                guard #available(iOS 16, *) else { return nil }
+                return .custom { $0.maximumDetentValue * value }
+#else
+            case .fixed, .ratio:
+                return nil
+#endif
+            }
+        }
+    }
+    
+    /// Wraps the UIKit's largestUndimmedDetentIdentifier.
+    /// *"The largest detent that doesn’t dim the view underneath the sheet."*
+    public enum LargestUndimmedDetent: CaseIterable, Identifiable {
+        case medium
+        case large
+        
+        fileprivate var value: UISheetPresentationController.Detent.Identifier {
+            switch self {
+            case .medium:
+                return .medium
+                
+            case .large:
+                return .large
+            }
+        }
+        
+        public var description: String {
+            switch self {
+            case .medium:
+                return "Medium"
+                
+            case .large:
+                return "Large"
+            }
+        }
+        
+        public var id: Int {
+            self.hashValue
+        }
+    }
+    
+    private static var ref: UINavigationController? = nil
+    
+    public static func dismiss() {
+        ref?.dismiss(animated: true, completion: { ref = nil })
+    }
+    
+    private static func userInterfaceStyle(for colorScheme: ColorScheme) -> UIUserInterfaceStyle? {
+        switch colorScheme {
+        case .dark:
+            return .dark
+            
+        case .light:
+            return .light
+            
+        @unknown default:
+            return nil
+        }
+    }
+    
+    /// Handles the presentation logic of the new UIKit's pageSheet modal presentation style.
+    /// *Sarun's* blog article source: https://sarunw.com/posts/bottom-sheet-in-ios-15-with-
+    fileprivate static func present<Content: View>(
+        detents: [Detent],
+        shouldScrollExpandSheet: Bool,
+        largestUndimmedDetent: LargestUndimmedDetent?,
+        showGrabber: Bool,
+        cornerRadius: CGFloat?,
+        showsInCompactHeight: Bool,
+        showNavigationBar: Bool,
+        dismissable: Bool,
+        preferredColorScheme: ColorScheme?,
+        @ViewBuilder _ contentView: @escaping () -> Content
+    ) {
+        let detailViewController = UIHostingController(rootView: contentView())
+        let nav = UINavigationController(rootViewController: detailViewController)
+        
+        ref = nav
+        
+        nav.navigationBar.isHidden = !showNavigationBar
+        nav.modalPresentationStyle = .pageSheet
+        nav.isModalInPresentation = !dismissable
+        
+        if let preferredColorScheme, let style = userInterfaceStyle(for: preferredColorScheme) {
+            nav.overrideUserInterfaceStyle = style
+        }
+        
+        if let sheet = nav.sheetPresentationController {
+            sheet.detents = detents.isEmpty ? [.medium()] : detents.compactMap { $0.asUIKitDetent }
+            sheet.prefersScrollingExpandsWhenScrolledToEdge = shouldScrollExpandSheet
+            setLargestUndimmedDetentIdentifier(
+                to: sheet,
+                detent: largestUndimmedDetent,
+                availableDetents: detents
+            )
+            sheet.prefersGrabberVisible = showGrabber
+            sheet.preferredCornerRadius = cornerRadius
+            sheet.prefersEdgeAttachedInCompactHeight = showsInCompactHeight
+            
+            if let firstDetent = detents.first {
+                switch firstDetent {
+                case .medium:
+                    sheet.selectedDetentIdentifier = .medium
+                    
+                case .large:
+                    sheet.selectedDetentIdentifier = .large
+                    
+                case .ratio, .fixed:
+                    guard #available(iOS 16, *) else {
+                        if detents.contains(.medium) {
+                            sheet.selectedDetentIdentifier = .medium
+                        } else if detents.contains(.large) {
+                            sheet.selectedDetentIdentifier = .large
+                        }
+                        break
+                    }
+#if swift(>=5.7)
+                    sheet.selectedDetentIdentifier = firstDetent.asUIKitDetent?.identifier
+#endif
+                }
+            }
+        }
+        
+        //UIApplication.shared.windows.first?.rootViewController?.present(nav, animated: true, completion: nil)
+        
+        let window = UIApplication.shared.connectedScenes
+            .flatMap { ($0 as? UIWindowScene)?.windows ?? [] }
+            .first { $0.isKeyWindow }
+        
+        window?.rootViewController?.present(nav, animated: true, completion: nil)
+    }
+    
+    fileprivate static func setLargestUndimmedDetentIdentifier(
+        to sheet: UISheetPresentationController,
+        detent: LargestUndimmedDetent?,
+        availableDetents: [Detent]
+    ) {
+        guard let detent = detent else { return }
+        if detent == .medium || detent == .large {
+            sheet.largestUndimmedDetentIdentifier = detent.value
+        } else {
+            if availableDetents.contains(.medium) {
+                sheet.largestUndimmedDetentIdentifier = .medium
+            } else if availableDetents.contains(.large) {
+                sheet.largestUndimmedDetentIdentifier = .large
+            }
+        }
+    }
+}
diff --git a/MiniScanner/Extensions/View/View+CustomColor.swift b/MiniScanner/Extensions/View/View+CustomColor.swift
new file mode 100644
index 0000000..75ea55e
--- /dev/null
+++ b/MiniScanner/Extensions/View/View+CustomColor.swift
@@ -0,0 +1,46 @@
+//
+//  View+CustomColor.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct CustomColorModifier: ViewModifier {
+    
+    var color: Color
+    var place: ColorPlace
+    
+    func body(content: Content) -> some View {
+        
+        switch place {
+        case .background:
+            
+            content
+                .background(color)
+            
+        case .foreground:
+            
+            content
+                .foregroundStyle(color)
+        }
+    }
+}
+
+extension View {
+    
+    func customForeground(_ color: Color) -> some View {
+        ModifiedContent(content: self, modifier: CustomColorModifier(color: color, place: .foreground))
+    }
+    
+    func customBackground(_ color: Color) -> some View {
+        ModifiedContent(content: self, modifier: CustomColorModifier(color: color, place: .background))
+    }
+}
+
+enum ColorPlace {
+    case background
+    case foreground
+}
diff --git a/MiniScanner/Extensions/View/View+CustomCornerRadius.swift b/MiniScanner/Extensions/View/View+CustomCornerRadius.swift
new file mode 100644
index 0000000..a27332f
--- /dev/null
+++ b/MiniScanner/Extensions/View/View+CustomCornerRadius.swift
@@ -0,0 +1,33 @@
+//
+//  View+CustomCornerRadius.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct CornerRadiusModifier: ViewModifier {
+    
+    var radius: CGFloat
+    var corners: UIRectCorner
+    
+    func body(content: Content) -> some View {
+        
+        content
+            .clipShape(CornerRadiusShape(radius: radius, corners: corners))
+    }
+}
+
+extension View {
+    
+    func customCornerRadius(_ radius: CGFloat) -> some View {
+        self
+            .clipShape(.rect(cornerRadius: radius))
+    }
+    
+    func customCornerRadii(_ radius: CGFloat, corners: UIRectCorner) -> some View {
+        ModifiedContent(content: self, modifier: CornerRadiusModifier(radius: radius, corners: corners))
+    }
+}
diff --git a/MiniScanner/Extensions/View/View+ReadSize.swift b/MiniScanner/Extensions/View/View+ReadSize.swift
new file mode 100644
index 0000000..e51d203
--- /dev/null
+++ b/MiniScanner/Extensions/View/View+ReadSize.swift
@@ -0,0 +1,47 @@
+//
+//  View+ReadSize.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct ReadSizeModifier: ViewModifier {
+    
+    var onChange: GenericAction<CGSize>
+    @Binding var size: CGSize
+    
+    func body(content: Content) -> some View {
+        
+        content
+            .background {
+                
+                GeometryReader { proxy in
+                    
+                    Color.clear
+                        .preference(key: SizePreferenceKey.self, value: proxy.size)
+                }
+            }
+            .onPreferenceChange(SizePreferenceKey.self) { onChange?($0) }
+            .onPreferenceChange(SizePreferenceKey.self) { size = $0 }
+    }
+}
+
+extension View {
+    
+    func readSize(onChange: GenericAction<CGSize>) -> some View {
+        ModifiedContent(content: self, modifier: ReadSizeModifier(onChange: onChange, size: .constant(.zero)))
+    }
+    
+    func readSize(size: Binding<CGSize>) -> some View {
+        ModifiedContent(content: self, modifier: ReadSizeModifier(onChange: nil, size: size))
+    }
+}
+
+fileprivate struct SizePreferenceKey: PreferenceKey {
+    static var defaultValue: CGSize = .zero
+    
+    static func reduce(value: inout CGSize, nextValue: () -> CGSize) { }
+}
diff --git a/MiniScanner/Features/Common/DI/DependencyManager.swift b/MiniScanner/Features/Common/DI/DependencyManager.swift
index 13e61ae..c9a3fbb 100644
--- a/MiniScanner/Features/Common/DI/DependencyManager.swift
+++ b/MiniScanner/Features/Common/DI/DependencyManager.swift
@@ -13,12 +13,14 @@ final class DependencyManager {
     let userDefaultsManager: UserDefaultsManagerProtocol
     let coreDataManager: CoreDataManagerProtocol
     let persistantContainer: PersistentContainer
+    let userSettings: UserSettings
     
     init() {
         self.userDefaultsManager = UserDefaultsManager()
         
         self.persistantContainer = PersistentContainer()
         self.coreDataManager = CoreDataManager(persistentContainer: persistantContainer)
+        self.userSettings = UserSettings(userDefaultsManager: userDefaultsManager)
         
         initializeDependencies()
     }
@@ -34,6 +36,8 @@ final class DependencyManager {
         let dataSource = SettingsDataSource(userDefaultsManager: userDefaultsManager)
         let repository = SettingsRepository(dataSource: dataSource)
         
+        @Provide var userSettings = userSettings
+        
         @Provide var getLanguagesUseCase = GetLanguagesUseCase(repository: repository)
         @Provide var getLanguageUseCase = GetLanguageUseCase(repository: repository)
         @Provide var changeLanguageUseCase = ChangeLanguageUseCase(repository: repository)
diff --git a/MiniScanner/Features/Common/Data/DataSources/UserSettings.swift b/MiniScanner/Features/Common/Data/DataSources/UserSettings.swift
new file mode 100644
index 0000000..d61fc60
--- /dev/null
+++ b/MiniScanner/Features/Common/Data/DataSources/UserSettings.swift
@@ -0,0 +1,55 @@
+//
+//  UserSettings.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+class UserSettings {
+    
+    private let userDefaultsManager: UserDefaultsManagerProtocol
+    
+    init(userDefaultsManager: UserDefaultsManagerProtocol) {
+        self.userDefaultsManager = userDefaultsManager
+    }
+    
+    private var _defaultFileType: DefaultFileType?
+    private var _defaultScreen: DefaultScreen?
+    
+    var defaultFileType: DefaultFileType {
+        get {
+            
+            if _defaultFileType == nil {
+                
+                _defaultFileType = userDefaultsManager.get(key: .defaultFileType) ?? .pdf
+            }
+            
+            return _defaultFileType!
+        }
+        set {
+            _defaultFileType = newValue
+            
+            userDefaultsManager.set(value: newValue, key: .defaultFileType)
+        }
+    }
+    
+    var defaultScreen: DefaultScreen {
+        get {
+            
+            if _defaultScreen == nil {
+                
+                _defaultScreen = userDefaultsManager.get(key: .defaultScreen) ?? .files
+            }
+            
+            return _defaultScreen!
+        }
+        set {
+            _defaultScreen = newValue
+            
+            userDefaultsManager.set(value: newValue, key: .defaultScreen)
+        }
+    }
+}
diff --git a/MiniScanner/Features/Common/Data/Model/DefaultFileType.swift b/MiniScanner/Features/Common/Data/Model/DefaultFileType.swift
new file mode 100644
index 0000000..a72833e
--- /dev/null
+++ b/MiniScanner/Features/Common/Data/Model/DefaultFileType.swift
@@ -0,0 +1,30 @@
+//
+//  DefaultFileType.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+enum DefaultFileType: CaseIterable, CustomMenuPickerItem, Codable {
+    
+    case pdf
+    case jpeg
+    
+    var id: Self { self }
+    
+    var displayedName: String {
+        switch self {
+        case .pdf:
+                .pdf.localized
+        case .jpeg:
+                .jpeg.localized
+        }
+    }
+    
+    var shareType: ShareType {
+        self == .pdf ? .pdf : .jpeg
+    }
+}
diff --git a/MiniScanner/Features/Common/Data/Model/DefaultScreen.swift b/MiniScanner/Features/Common/Data/Model/DefaultScreen.swift
new file mode 100644
index 0000000..d61e528
--- /dev/null
+++ b/MiniScanner/Features/Common/Data/Model/DefaultScreen.swift
@@ -0,0 +1,26 @@
+//
+//  DefaultScreen.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+enum DefaultScreen: CaseIterable, CustomMenuPickerItem, Codable {
+    
+    case files
+    case camera
+    
+    var id: Self { self }
+    
+    var displayedName: String {
+        switch self {
+        case .files:
+                .files.localized
+        case .camera:
+                .camera.localized
+        }
+    }
+}
diff --git a/MiniScanner/Features/Common/Data/Model/SupportedColorScheme.swift b/MiniScanner/Features/Common/Data/Model/SupportedColorScheme.swift
index 39381e3..64a97f6 100644
--- a/MiniScanner/Features/Common/Data/Model/SupportedColorScheme.swift
+++ b/MiniScanner/Features/Common/Data/Model/SupportedColorScheme.swift
@@ -19,14 +19,13 @@ enum SupportedColorScheme: String, CaseIterable, CustomMenuPickerItem {
     var displayedName: String {
         switch self {
         case .device:
-                .deviceTheme.localized
+                .basedOnDevice.localized
         case .light:
                 .lightMode.localized
         case .dark:
                 .darkMode.localized
         }
     }
-    
 }
 
 extension SupportedColorScheme {
diff --git a/MiniScanner/Features/Common/Data/Model/SupportedLanguage.swift b/MiniScanner/Features/Common/Data/Model/SupportedLanguage.swift
index 342ed8d..419c28b 100644
--- a/MiniScanner/Features/Common/Data/Model/SupportedLanguage.swift
+++ b/MiniScanner/Features/Common/Data/Model/SupportedLanguage.swift
@@ -66,7 +66,7 @@ enum SupportedLanguage: CaseIterable, CustomMenuPickerItem {
     var displayedName: String {
         switch self {
         case .device:
-                .deviceLanguage.localized
+                .basedOnDevice.localized
         case .english:
             displayNameForLanguage(.english)
         case .arabic:
diff --git a/MiniScanner/Features/Common/Presentation/CustomPicker.swift b/MiniScanner/Features/Common/Presentation/CustomPicker.swift
new file mode 100644
index 0000000..433fee4
--- /dev/null
+++ b/MiniScanner/Features/Common/Presentation/CustomPicker.swift
@@ -0,0 +1,52 @@
+//
+//  CustomPicker.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct CustomPicker<Item: CustomMenuPickerItem>: View {
+    
+    @Binding var selectedItem: Item
+    var items: [Item]
+    
+    var body: some View {
+        VStack(spacing: 8) {
+            
+            ForEach(items) { item in
+                
+                getItemView(for: item)
+            }
+        }
+    }
+    
+    private func getItemView(for item: Item) -> some View {
+        Button(action: {
+            selectedItem = item
+        }, label: {
+            
+            HStack {
+                
+                Text(item.displayedName)
+                    .customForeground(.mainText)
+                
+                Spacer()
+                
+                if item == selectedItem {
+                    
+                    Image.checkmark
+                        .resizable()
+                        .aspectRatio(contentMode: .fit)
+                        .frame(width: 12, height: 12)
+                        .customForeground(.mainBlue)
+                }
+            }
+            .frame(maxWidth: .infinity)
+            .padding(.horizontal, 16)
+            .padding(.vertical, 10)
+        })
+    }
+}
diff --git a/MiniScanner/Features/Common/Presentation/EmptyAction.swift b/MiniScanner/Features/Common/Presentation/EmptyAction.swift
new file mode 100644
index 0000000..15f0836
--- /dev/null
+++ b/MiniScanner/Features/Common/Presentation/EmptyAction.swift
@@ -0,0 +1,11 @@
+//
+//  EmptyAction.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/18/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+typealias EmptyAction = (()->Void)?
diff --git a/MiniScanner/Features/Common/Presentation/GenericAction.swift b/MiniScanner/Features/Common/Presentation/GenericAction.swift
new file mode 100644
index 0000000..f2b0a85
--- /dev/null
+++ b/MiniScanner/Features/Common/Presentation/GenericAction.swift
@@ -0,0 +1,11 @@
+//
+//  GenericAction.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import Foundation
+
+typealias GenericAction<T> = ((T) -> Void)?
diff --git a/MiniScanner/Features/Common/Presentation/NoIndicatorsScrollView.swift b/MiniScanner/Features/Common/Presentation/NoIndicatorsScrollView.swift
new file mode 100644
index 0000000..9fbfd28
--- /dev/null
+++ b/MiniScanner/Features/Common/Presentation/NoIndicatorsScrollView.swift
@@ -0,0 +1,37 @@
+//
+//  NoIndicatorsScrollView.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 7/21/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct NoIndicatorsScrollView<Content: View>: View {
+    
+    var axes: Axis.Set = .vertical
+    @ViewBuilder var content: () -> Content
+    
+    var body: some View {
+        if #available(iOS 16.0, *) {
+            return iOS16Body
+        } else {
+            return iOS15Body
+        }
+    }
+    
+    @available(iOS 16.0, *)
+    private var iOS16Body: some View {
+        ScrollView(axes, content: content)
+            .scrollIndicators(.hidden)
+    }
+    
+    private var iOS15Body: some View {
+        ScrollView(axes, showsIndicators: false, content: content)
+    }
+}
+
+#Preview {
+    NoIndicatorsScrollView { }
+}
diff --git a/MiniScanner/Features/Common/Presentation/PrimaryButton.swift b/MiniScanner/Features/Common/Presentation/PrimaryButton.swift
new file mode 100644
index 0000000..9e1a879
--- /dev/null
+++ b/MiniScanner/Features/Common/Presentation/PrimaryButton.swift
@@ -0,0 +1,41 @@
+//
+//  PrimaryButton.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct PrimaryButton: View {
+    
+    var title: String
+    
+    var action: EmptyAction
+    
+    var body: some View {
+        Button(action: {
+            action?()
+        }, label: {
+            
+            HStack {
+                
+                titleView
+            }
+            .frame(height: 54)
+            .frame(maxWidth: .infinity)
+        })
+        .customBackground(.buttonsBlue)
+        .customCornerRadius(12)
+    }
+    
+    private var titleView: some View {
+        Text(title)
+            .customForeground(.mainText)
+    }
+}
+
+#Preview {
+    PrimaryButton(title: "Button", action: { })
+}
diff --git a/MiniScanner/Features/Settings/Presentation/SettingButton.swift b/MiniScanner/Features/Settings/Presentation/SettingButton.swift
new file mode 100644
index 0000000..ae10da9
--- /dev/null
+++ b/MiniScanner/Features/Settings/Presentation/SettingButton.swift
@@ -0,0 +1,76 @@
+//
+//  SettingButton.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct SettingButton: View {
+    
+    var icon: Image
+    var title: String
+    var value: String
+    var action: EmptyAction
+    
+    var body: some View {
+        HStack {
+            
+            settings
+            
+            Spacer()
+            
+            changeButton
+        }
+    }
+    
+    private var settings: some View {
+        HStack(alignment: .top, spacing: 20) {
+            
+            iconView
+            
+            VStack(alignment: .leading, spacing: 6) {
+                
+                titleView
+                
+                valueView
+            }
+        }
+    }
+    
+    private var iconView: some View {
+        icon
+            .resizable()
+            .aspectRatio(contentMode: .fit)
+            .frame(width: 20, height: 20)
+    }
+    
+    private var titleView: some View {
+        Text(title)
+            .customForeground(.mainText)
+    }
+    
+    private var valueView: some View {
+        Text(value)
+            .customForeground(.mainText)
+    }
+    
+    private var changeButton: some View {
+        Button(action: {
+            action?()
+        }, label: {
+            
+            Text(String.change.localized)
+                .customForeground(.mainText)
+        })
+    }
+}
+
+#Preview {
+    SettingButton(icon: .chevronBackward,
+                  title: "Title",
+                  value: "Value",
+                  action: { })
+}
diff --git a/MiniScanner/Features/Settings/Presentation/SettingSheetView.swift b/MiniScanner/Features/Settings/Presentation/SettingSheetView.swift
new file mode 100644
index 0000000..28dc36f
--- /dev/null
+++ b/MiniScanner/Features/Settings/Presentation/SettingSheetView.swift
@@ -0,0 +1,56 @@
+//
+//  SettingSheetView.swift
+//  MiniScanner
+//
+//  Created by Mustafa Merza on 8/13/24.
+//  Copyright © 2024 AppsNectar. All rights reserved.
+//
+
+import SwiftUI
+
+struct SettingSheetView<Item: CustomMenuPickerItem>: View {
+    
+    @Environment(\.dismiss) var dismiss
+    
+    var title: String
+    
+    @Binding var selectedItem: Item
+    var items: [Item]
+    
+    var saveAction: EmptyAction
+    
+    var body: some View {
+        VStack(alignment: .leading, spacing: 30) {
+            
+            titleView
+            
+            picker
+            
+            save
+        }
+        .padding(.vertical, 16)
+        .padding(.horizontal, 16)
+        .customCornerRadii(50, corners: [.topLeft, .topRight])
+        .handleLayoutChanges()
+    }
+}
+
+extension SettingSheetView {
+    
+    private var titleView: some View {
+        Text(title)
+            .customForeground(.mainText)
+    }
+    
+    private var picker: some View {
+        CustomPicker(selectedItem: $selectedItem,
+                     items: items)
+    }
+    
+    private var save: some View {
+        PrimaryButton(title: .save.localized) {
+            saveAction?()
+            dismiss()
+        }
+    }
+}
diff --git a/MiniScanner/Features/Settings/Presentation/SettingsView.swift b/MiniScanner/Features/Settings/Presentation/SettingsView.swift
index 9095868..eff78c4 100644
--- a/MiniScanner/Features/Settings/Presentation/SettingsView.swift
+++ b/MiniScanner/Features/Settings/Presentation/SettingsView.swift
@@ -20,19 +20,46 @@ struct SettingsView: View {
         MainView(viewModel: viewModel) {
             VStack {
                 
-                if viewModel.refreshView {
-                    settingsForm
-                }
-                else {
-                    settingsForm
+                NoIndicatorsScrollView {
+                    
+                    settings
+                        .padding(.horizontal, 20)
                 }
+                .padding(.top, 32)
             }
             .navigationTitle(viewModel.navigationTitle)
             .customNavigationBackButton(defaultBackButtonHidden: viewModel.isDefaultBackButtonHidden,
                                         backButton: backButton)
             .environment(\.layoutDirection, viewModel.layoutDirection)
+            .customSheet(isPresented: $viewModel.isLanguageSettingSheetPresented,
+                         height: viewModel.sheetSize.height,
+                         content: {
+                languageSheet
+                    .readSize(size: $viewModel.sheetSize)
+            })
+            .customSheet(isPresented: $viewModel.isColorSchemeSettingSheetPresented,
+                         height: viewModel.sheetSize.height,
+                         content : {
+                colorSchemeSheet
+                    .readSize(size: $viewModel.sheetSize)
+            })
+            .customSheet(isPresented: $viewModel.isFileTypeSettingSheetPresented,
+                         height: viewModel.sheetSize.height,
+                         content : {
+                fileTypeSheet
+                    .readSize(size: $viewModel.sheetSize)
+            })
+            .customSheet(isPresented: $viewModel.isScreenSettingSheetPresented,
+                         height: viewModel.sheetSize.height,
+                         content : {
+                screenSheet
+                    .readSize(size: $viewModel.sheetSize)
+            })
         }
     }
+}
+
+extension SettingsView {
     
     private var backButton: some View {
         Button(action: {
@@ -47,61 +74,73 @@ struct SettingsView: View {
         })
     }
     
-    private var settingsForm: some View {
-        
-        Form {
+    private var settings: some View {
+        VStack(spacing: 24) {
             
-            Section {
-                
-                language
-                
-                colorScheme
-                
-            } header: {
-                Text(String.appearence.localized)
-            }
+            language
+            
+            colorScheme
+            
+            fileType
+            
+            screenType
         }
     }
-}
-
-extension SettingsView {
     
     private var language: some View {
-        CustomMenuPicker(selectedItem: $viewModel.selectedLanguage,
+        SettingButton(icon: .languages,
+                      title: .appLanguage.localized,
+                      value: viewModel.selectedLanguage.displayedName,
+                      action: viewModel.onLanguageClick)
+    }
+    
+    private var colorScheme: some View {
+        SettingButton(icon: .brush,
+                      title: .appTheme.localized,
+                      value: viewModel.selectedColorScheme.displayedName,
+                      action: viewModel.onColorSchemeClick)
+    }
+    
+    private var fileType: some View {
+        SettingButton(icon: .fileDown,
+                      title: .defaultFileTypeForInstalling.localized,
+                      value: viewModel.selectedDefaultFileType.displayedName,
+                      action: viewModel.onFileTypeClick)
+    }
+    
+    private var screenType: some View {
+        SettingButton(icon: .smartphone,
+                      title: .defaultScreenWhenAppStarts.localized,
+                      value: viewModel.selectedDefaultScreen.displayedName,
+                      action: viewModel.onScreenClick)
+    }
+    
+    private var languageSheet: some View {
+        SettingSheetView(title: .appLanguage.localized,
+                         selectedItem: $viewModel.selectedLanguageForSheet,
                          items: viewModel.languages,
-                         label: { languageLabel })
+                         saveAction: viewModel.onLanguageSaveClick)
     }
     
-    private var languageLabel: some View {
-        HStack {
-            
-            Text(String.language.localized)
-            
-            Spacer()
-            
-            Text(viewModel.selectedLanguage.displayedName)
-            
-            Text(viewModel.selectedLanguage.flag)
-        }
-        .foregroundStyle(Color.mainText)
+    private var colorSchemeSheet: some View {
+        SettingSheetView(title: .appTheme.localized,
+                         selectedItem: $viewModel.selectedColorSchemeForSheet,
+                         items: viewModel.colorSchemes,
+                         saveAction: viewModel.onColorSchemeSaveClick)
     }
     
-    private var colorScheme: some View {
-        CustomMenuPicker(selectedItem: $viewModel.selectedColorScheme,
-                         items: viewModel.colorShemes,
-                         label: { colorSchemeLabel })
+    private var fileTypeSheet: some View {
+        SettingSheetView(title: .defaultFileTypeForInstalling.localized,
+                         selectedItem: $viewModel.selectedDefaultFileTypeForSheet,
+                         items: viewModel.fileTypes,
+                         saveAction: viewModel.onFileTypeSaveClick)
     }
     
-    private var colorSchemeLabel: some View {
-        HStack {
-            
-            Text(String.appTheme.localized)
-            
-            Spacer()
-            
-            Text(viewModel.selectedColorScheme.displayedName)
-        }
-        .foregroundStyle(Color.mainText)
+    private var screenSheet: some View {
+        SettingSheetView(title: .defaultScreenWhenAppStarts.localized,
+                         selectedItem: $viewModel.selectedDefaultScreenForSheet,
+                         items: viewModel.screens,
+                         saveAction: viewModel.onScreenSaveClick)
     }
 }
 
diff --git a/MiniScanner/Features/Settings/Presentation/SettingsViewModel.swift b/MiniScanner/Features/Settings/Presentation/SettingsViewModel.swift
index f3e24db..6523d31 100644
--- a/MiniScanner/Features/Settings/Presentation/SettingsViewModel.swift
+++ b/MiniScanner/Features/Settings/Presentation/SettingsViewModel.swift
@@ -15,7 +15,9 @@ final class SettingsViewModel: MainViewModel {
     @Published var refreshView: Bool = false
     
     @Published var languages: [SupportedLanguage] = []
-    @Published var colorShemes: [SupportedColorScheme] = []
+    @Published var colorSchemes: [SupportedColorScheme] = []
+    @Published var fileTypes: [DefaultFileType] = []
+    @Published var screens: [DefaultScreen] = []
     
     @Published var selectedLanguage: SupportedLanguage = .device {
         didSet {
@@ -25,12 +27,42 @@ final class SettingsViewModel: MainViewModel {
     
     @Published var selectedColorScheme: SupportedColorScheme = .device {
         didSet {
-            changeColorShceme(to: selectedColorScheme)
+            changeColorScheme(to: selectedColorScheme)
         }
     }
     
+    @Published var selectedLanguageForSheet: SupportedLanguage = .device
+    @Published var selectedColorSchemeForSheet: SupportedColorScheme = .device
+    @Published var selectedDefaultFileTypeForSheet: DefaultFileType = .pdf
+    @Published var selectedDefaultScreenForSheet: DefaultScreen = .files
+    
+    @Published var sheetSize: CGSize = .zero
+    
     @Published var isDefaultBackButtonHidden: Bool = false
     
+    @Published var isLanguageSettingSheetPresented: Bool = false
+    @Published var isColorSchemeSettingSheetPresented: Bool = false
+    @Published var isFileTypeSettingSheetPresented: Bool = false
+    @Published var isScreenSettingSheetPresented: Bool = false
+    
+    var selectedDefaultFileType: DefaultFileType {
+        get {
+            userSettings.defaultFileType
+        }
+        set {
+            userSettings.defaultFileType = newValue
+        }
+    }
+    
+    var selectedDefaultScreen: DefaultScreen {
+        get {
+            userSettings.defaultScreen
+        }
+        set {
+            userSettings.defaultScreen = newValue
+        }
+    }
+    
     var navigationTitle: String { .settings.localized }
     var backButtonTitle: String { .fileManager.localized }
     
@@ -41,6 +73,8 @@ final class SettingsViewModel: MainViewModel {
     @Inject var getColorSchemeUseCase: GetColorSchemeUseCase
     @Inject var changeColorSchemeUseCase: ChangeColorSchemeUseCase
     
+    @Inject var userSettings: UserSettings
+    
     private let coordinator: SettingsViewCoordinating
     
     init(coordinator: SettingsViewCoordinating) {
@@ -53,13 +87,107 @@ extension SettingsViewModel {
     func onAppear() {
         fetchSettings()
     }
+    
+    func onLanguageClick() {
+        
+        selectedLanguageForSheet = selectedLanguage
+        
+        displayLanguageSheet()
+    }
+    
+    func onLanguageSaveClick() {
+        
+        selectedLanguage = selectedLanguageForSheet
+        
+        hideLanguageSheet()
+    }
+    
+    func onColorSchemeClick() {
+        
+        selectedColorSchemeForSheet = selectedColorScheme
+        
+        displayColorSchemeSheet()
+    }
+    
+    func onColorSchemeSaveClick() {
+        
+        selectedColorScheme = selectedColorSchemeForSheet
+        
+        hideColorSchemeSheet()
+    }
+    
+    func onFileTypeClick() {
+        
+        selectedDefaultFileTypeForSheet = selectedDefaultFileType
+        
+        displayFileTypeSheet()
+    }
+    
+    func onFileTypeSaveClick() {
+        
+        selectedDefaultFileType = selectedDefaultFileTypeForSheet
+        
+        hideFileTypeSheet()
+    }
+    
+    func onScreenClick() {
+        
+        selectedDefaultScreenForSheet = selectedDefaultScreen
+        
+        displayScreenSheet()
+    }
+    
+    func onScreenSaveClick() {
+        
+        selectedDefaultScreen = selectedDefaultScreenForSheet
+        
+        hideScreenSheet()
+    }
+}
+
+extension SettingsViewModel {
+    
+    private func displayLanguageSheet() {
+        isLanguageSettingSheetPresented = true
+    }
+    
+    private func hideLanguageSheet() {
+        isLanguageSettingSheetPresented = false
+    }
+    
+    private func displayColorSchemeSheet() {
+        isColorSchemeSettingSheetPresented = true
+    }
+    
+    private func hideColorSchemeSheet() {
+        isColorSchemeSettingSheetPresented = false
+    }
+    
+    private func displayFileTypeSheet() {
+        isFileTypeSettingSheetPresented = true
+    }
+    
+    private func hideFileTypeSheet() {
+        isFileTypeSettingSheetPresented = false
+    }
+    
+    private func displayScreenSheet() {
+        isScreenSettingSheetPresented = true
+    }
+    
+    private func hideScreenSheet() {
+        isScreenSettingSheetPresented = false
+    }
 }
 
 extension SettingsViewModel {
     
     private func fetchSettings() {
         languages = getLanguagesUseCase.execute()
-        colorShemes = SupportedColorScheme.allCases
+        
+        colorSchemes = SupportedColorScheme.allCases
+        fileTypes = DefaultFileType.allCases
+        screens = DefaultScreen.allCases
         
         selectedLanguage = getLanguageUseCase.execute()
         selectedColorScheme = getColorSchemeUseCase.execute()
@@ -86,7 +214,7 @@ extension SettingsViewModel {
         }
     }
     
-    private func changeColorShceme(to colorScheme: SupportedColorScheme) {
+    private func changeColorScheme(to colorScheme: SupportedColorScheme) {
         changeColorSchemeUseCase.execute(to: colorScheme)
     }
 }
diff --git a/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift b/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift
index 8e0bc31..41d87d0 100644
--- a/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift
+++ b/MiniScanner/Managers/UserDefaults/UserDefaultsKeys.swift
@@ -12,4 +12,7 @@ enum UserDefaultsKeys: String {
     
     case appLanguage = "app_language"
     case appColorScheme = "app_color_scheme"
+    
+    case defaultFileType = "default_file_type"
+    case defaultScreen = "default_screen"
 }
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/Contents.json b/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/Contents.json
new file mode 100644
index 0000000..519a21e
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/Contents.json	
@@ -0,0 +1,16 @@
+{
+  "images" : [
+    {
+      "filename" : "brush-ic.svg",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  },
+  "properties" : {
+    "preserves-vector-representation" : true,
+    "template-rendering-intent" : "template"
+  }
+}
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/brush-ic.svg b/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/brush-ic.svg
new file mode 100644
index 0000000..d9e8e31
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/brush-ic.imageset/brush-ic.svg	
@@ -0,0 +1,3 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10.5701 13.8826L19.9851 4.47929C20.292 4.16248 20.6588 3.9099 21.0643 3.73625C21.4698 3.56261 21.9058 3.47138 22.3468 3.46788C22.7879 3.46437 23.2253 3.54867 23.6335 3.71584C24.0416 3.88302 24.4125 4.12975 24.7244 4.44164C25.0363 4.75354 25.283 5.12438 25.4502 5.53256C25.6174 5.94074 25.7017 6.37811 25.6981 6.81919C25.6946 7.26026 25.6034 7.69623 25.4298 8.10171C25.2561 8.50718 25.0035 8.87405 24.6867 9.18096L15.2834 18.6076M8.24836 17.4293C6.31169 17.4293 4.74836 19.0043 4.74836 20.9527C4.74836 22.5043 1.83169 22.726 2.41503 23.3093C3.67503 24.5927 5.32003 25.666 7.08169 25.666C9.64836 25.666 11.7484 23.566 11.7484 20.9527C11.7499 20.4915 11.6606 20.0345 11.4855 19.6079C11.3105 19.1813 11.0531 18.7933 10.7281 18.4661C10.4031 18.1389 10.0168 17.879 9.59133 17.7011C9.16586 17.5232 8.70952 17.4309 8.24836 17.4293Z" stroke="#1C1C1E" stroke-width="2.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/Contents.json b/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/Contents.json
new file mode 100644
index 0000000..28885b7
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/Contents.json	
@@ -0,0 +1,16 @@
+{
+  "images" : [
+    {
+      "filename" : "file-down-ic.svg",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  },
+  "properties" : {
+    "preserves-vector-representation" : true,
+    "template-rendering-intent" : "template"
+  }
+}
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/file-down-ic.svg b/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/file-down-ic.svg
new file mode 100644
index 0000000..d5663a8
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/file-down-ic.imageset/file-down-ic.svg	
@@ -0,0 +1,3 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.3334 2.33301V6.99967C16.3334 7.61851 16.5792 8.21201 17.0168 8.64959C17.4544 9.08718 18.0479 9.33301 18.6667 9.33301H23.3334M14.0001 20.9997V13.9997M14.0001 20.9997L10.5001 17.4997M14.0001 20.9997L17.5001 17.4997M17.5001 2.33301H7.00008C6.38124 2.33301 5.78775 2.57884 5.35017 3.01643C4.91258 3.45401 4.66675 4.0475 4.66675 4.66634V23.333C4.66675 23.9518 4.91258 24.5453 5.35017 24.9829C5.78775 25.4205 6.38124 25.6663 7.00008 25.6663H21.0001C21.6189 25.6663 22.2124 25.4205 22.65 24.9829C23.0876 24.5453 23.3334 23.9518 23.3334 23.333V8.16634L17.5001 2.33301Z" stroke="#1C1C1E" stroke-width="2.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/Contents.json b/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/Contents.json
new file mode 100644
index 0000000..d408735
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/Contents.json	
@@ -0,0 +1,16 @@
+{
+  "images" : [
+    {
+      "filename" : "languages-ic.svg",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  },
+  "properties" : {
+    "preserves-vector-representation" : true,
+    "template-rendering-intent" : "template"
+  }
+}
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/languages-ic.svg b/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/languages-ic.svg
new file mode 100644
index 0000000..b8732a9
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/languages-ic.imageset/languages-ic.svg	
@@ -0,0 +1,3 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.83325 9.33301L12.8333 16.333M4.66659 16.333L11.6666 9.33301L13.9999 5.83301M2.33325 5.83301H16.3333M8.16659 2.33301H9.33325M25.6666 25.6663L19.8333 13.9997L13.9999 25.6663M16.3333 20.9997H23.3333" stroke="#1C1C1E" stroke-width="2.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/Contents.json b/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/Contents.json
new file mode 100644
index 0000000..72ab726
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/Contents.json	
@@ -0,0 +1,16 @@
+{
+  "images" : [
+    {
+      "filename" : "smartphone-ic.svg",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  },
+  "properties" : {
+    "preserves-vector-representation" : true,
+    "template-rendering-intent" : "template"
+  }
+}
diff --git a/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/smartphone-ic.svg b/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/smartphone-ic.svg
new file mode 100644
index 0000000..c84a579
--- /dev/null
+++ b/MiniScanner/Supporting Files/Icons.xcassets/smartphone-ic.imageset/smartphone-ic.svg	
@@ -0,0 +1,3 @@
+<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.9999 20.9997H14.0116M8.16659 2.33301H19.8333C21.1219 2.33301 22.1666 3.37768 22.1666 4.66634V23.333C22.1666 24.6217 21.1219 25.6663 19.8333 25.6663H8.16659C6.87792 25.6663 5.83325 24.6217 5.83325 23.333V4.66634C5.83325 3.37768 6.87792 2.33301 8.16659 2.33301Z" stroke="#1C1C1E" stroke-width="2.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>
diff --git a/MiniScanner/Supporting Files/Localization/Localizable.xcstrings b/MiniScanner/Supporting Files/Localization/Localizable.xcstrings
index d935c65..9f530f3 100644
--- a/MiniScanner/Supporting Files/Localization/Localizable.xcstrings	
+++ b/MiniScanner/Supporting Files/Localization/Localizable.xcstrings	
@@ -191,9 +191,32 @@
         }
       }
     },
+    "app_language" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "لغة التطبيق"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "App Language"
+          }
+        }
+      }
+    },
     "app_theme" : {
       "extractionState" : "manual",
       "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "مظهر التطبيق"
+          }
+        },
         "en" : {
           "stringUnit" : {
             "state" : "translated",
@@ -270,6 +293,23 @@
         }
       }
     },
+    "based_on_device" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "حسب تفضيلات الجهاز"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "Based on Device"
+          }
+        }
+      }
+    },
     "camera" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -304,6 +344,23 @@
         }
       }
     },
+    "change" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "needs_review",
+            "value" : "تغيير"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "Change"
+          }
+        }
+      }
+    },
     "clear" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -445,6 +502,40 @@
         }
       }
     },
+    "default_file_type_for_installing" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "نوع الملف الافتراضي للتنزيل"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "Default file type for installing"
+          }
+        }
+      }
+    },
+    "default_screen_when_app_starts" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "الصفحة الافتراضية عند فتح التطبيق"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "Default screen when app starts"
+          }
+        }
+      }
+    },
     "default_signature" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -615,34 +706,6 @@
         }
       }
     },
-    "device_language" : {
-      "extractionState" : "manual",
-      "localizations" : {
-        "ar" : {
-          "stringUnit" : {
-            "state" : "translated",
-            "value" : "لغة الجهاز"
-          }
-        },
-        "en" : {
-          "stringUnit" : {
-            "state" : "translated",
-            "value" : "Device language"
-          }
-        }
-      }
-    },
-    "device_theme" : {
-      "extractionState" : "manual",
-      "localizations" : {
-        "en" : {
-          "stringUnit" : {
-            "state" : "translated",
-            "value" : "Device Theme"
-          }
-        }
-      }
-    },
     "didnt_sign_alert_message" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -852,6 +915,23 @@
         }
       }
     },
+    "files" : {
+      "extractionState" : "manual",
+      "localizations" : {
+        "ar" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "الملفات"
+          }
+        },
+        "en" : {
+          "stringUnit" : {
+            "state" : "translated",
+            "value" : "Files"
+          }
+        }
+      }
+    },
     "folder_files" : {
       "extractionState" : "manual",
       "localizations" : {
@@ -965,23 +1045,6 @@
         }
       }
     },
-    "language" : {
-      "extractionState" : "manual",
-      "localizations" : {
-        "ar" : {
-          "stringUnit" : {
-            "state" : "translated",
-            "value" : "اللغة"
-          }
-        },
-        "en" : {
-          "stringUnit" : {
-            "state" : "translated",
-            "value" : "Language"
-          }
-        }
-      }
-    },
     "light_mode" : {
       "extractionState" : "manual",
       "localizations" : {
-- 
GitLab