Add home page

This commit is contained in:
Benoit Martins 2023-10-16 16:57:04 +02:00
parent 2abc2e6500
commit 8f733195d4
23 changed files with 724 additions and 112 deletions

View file

@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
D706BA822ADD72D100278F45 /* DeviceRotationViewModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D706BA812ADD72D100278F45 /* DeviceRotationViewModifier.swift */; };
D70C93DE2AC2D0F60063CA3B /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = D70C93DD2AC2D0F60063CA3B /* Localizable.xcstrings */; };
D717071E2AC5922E0037746F /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D717071D2AC5922E0037746F /* ColorExtension.swift */; };
D71707202AC5989C0037746F /* TextExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D717071F2AC5989C0037746F /* TextExtension.swift */; };
@ -17,10 +18,12 @@
D719ABC92ABC6FD700B41C10 /* CoreContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABC82ABC6FD700B41C10 /* CoreContext.swift */; };
D719ABCC2ABC769C00B41C10 /* AssistantView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABCB2ABC769C00B41C10 /* AssistantView.swift */; };
D719ABCF2ABC779A00B41C10 /* AccountLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D719ABCE2ABC779A00B41C10 /* AccountLoginViewModel.swift */; };
D72250632ADE9615008FB426 /* HistoryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72250622ADE9615008FB426 /* HistoryViewModel.swift */; };
D72343302ACEFEF8009AA24E /* QrCodeScannerFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D723432F2ACEFEF8009AA24E /* QrCodeScannerFragment.swift */; };
D72343322ACEFF58009AA24E /* QRScannerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72343312ACEFF58009AA24E /* QRScannerController.swift */; };
D72343342ACEFFC3009AA24E /* QRScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72343332ACEFFC3009AA24E /* QRScanner.swift */; };
D72343362AD037AF009AA24E /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72343352AD037AF009AA24E /* ToastView.swift */; };
D72992392ADD7F68003AF125 /* HistoryContactFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72992382ADD7F68003AF125 /* HistoryContactFragment.swift */; };
D748BF2C2ACD82D2004844EB /* ThirdPartySipAccountLoginFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D748BF2B2ACD82D2004844EB /* ThirdPartySipAccountLoginFragment.swift */; };
D748BF2E2ACD82E7004844EB /* ThirdPartySipAccountWarningFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D748BF2D2ACD82E7004844EB /* ThirdPartySipAccountWarningFragment.swift */; };
D74C9CF82ACACECE0021626A /* WelcomePage1Fragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74C9CF72ACACECE0021626A /* WelcomePage1Fragment.swift */; };
@ -30,6 +33,8 @@
D74C9D012ACB098C0021626A /* PermissionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74C9D002ACB098C0021626A /* PermissionManager.swift */; };
D750D3392AD3E6EE00EC99C5 /* PopupLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D750D3382AD3E6EE00EC99C5 /* PopupLoadingView.swift */; };
D7702EF22AC7205000557C00 /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7702EF12AC7205000557C00 /* WelcomeView.swift */; };
D78290B82ADD3910004AA85C /* ContactFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78290B72ADD3910004AA85C /* ContactFragment.swift */; };
D78290BB2ADD40B2004AA85C /* ContactViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78290BA2ADD40B2004AA85C /* ContactViewModel.swift */; };
D7A03FBD2ACC2DB60081A588 /* ContactsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FBC2ACC2DB60081A588 /* ContactsView.swift */; };
D7A03FC02ACC2E390081A588 /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FBF2ACC2E390081A588 /* HistoryView.swift */; };
D7A03FC62ACC458A0081A588 /* SplashScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FC52ACC458A0081A588 /* SplashScreen.swift */; };
@ -50,6 +55,7 @@
/* Begin PBXFileReference section */
377E0B5C2B1F38192E694334 /* Pods-Linphone.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Linphone.debug.xcconfig"; path = "Target Support Files/Pods-Linphone/Pods-Linphone.debug.xcconfig"; sourceTree = "<group>"; };
6F5B27C5576B1EAED2F205EB /* Pods_Linphone.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Linphone.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D706BA812ADD72D100278F45 /* DeviceRotationViewModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceRotationViewModifier.swift; sourceTree = "<group>"; };
D70C93DD2AC2D0F60063CA3B /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
D717071D2AC5922E0037746F /* ColorExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorExtension.swift; sourceTree = "<group>"; };
D717071F2AC5989C0037746F /* TextExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextExtension.swift; sourceTree = "<group>"; };
@ -62,10 +68,12 @@
D719ABC82ABC6FD700B41C10 /* CoreContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreContext.swift; sourceTree = "<group>"; };
D719ABCB2ABC769C00B41C10 /* AssistantView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssistantView.swift; sourceTree = "<group>"; };
D719ABCE2ABC779A00B41C10 /* AccountLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountLoginViewModel.swift; sourceTree = "<group>"; };
D72250622ADE9615008FB426 /* HistoryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryViewModel.swift; sourceTree = "<group>"; };
D723432F2ACEFEF8009AA24E /* QrCodeScannerFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QrCodeScannerFragment.swift; sourceTree = "<group>"; };
D72343312ACEFF58009AA24E /* QRScannerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRScannerController.swift; sourceTree = "<group>"; };
D72343332ACEFFC3009AA24E /* QRScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRScanner.swift; sourceTree = "<group>"; };
D72343352AD037AF009AA24E /* ToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastView.swift; sourceTree = "<group>"; };
D72992382ADD7F68003AF125 /* HistoryContactFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryContactFragment.swift; sourceTree = "<group>"; };
D748BF2B2ACD82D2004844EB /* ThirdPartySipAccountLoginFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThirdPartySipAccountLoginFragment.swift; sourceTree = "<group>"; };
D748BF2D2ACD82E7004844EB /* ThirdPartySipAccountWarningFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThirdPartySipAccountWarningFragment.swift; sourceTree = "<group>"; };
D74C9CF72ACACECE0021626A /* WelcomePage1Fragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomePage1Fragment.swift; sourceTree = "<group>"; };
@ -75,6 +83,8 @@
D74C9D002ACB098C0021626A /* PermissionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionManager.swift; sourceTree = "<group>"; };
D750D3382AD3E6EE00EC99C5 /* PopupLoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopupLoadingView.swift; sourceTree = "<group>"; };
D7702EF12AC7205000557C00 /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = "<group>"; };
D78290B72ADD3910004AA85C /* ContactFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactFragment.swift; sourceTree = "<group>"; };
D78290BA2ADD40B2004AA85C /* ContactViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactViewModel.swift; sourceTree = "<group>"; };
D7A03FBC2ACC2DB60081A588 /* ContactsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsView.swift; sourceTree = "<group>"; };
D7A03FBF2ACC2E390081A588 /* HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryView.swift; sourceTree = "<group>"; };
D7A03FC52ACC458A0081A588 /* SplashScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashScreen.swift; sourceTree = "<group>"; };
@ -226,6 +236,22 @@
path = Viewmodel;
sourceTree = "<group>";
};
D72250612ADE95E4008FB426 /* ViewModel */ = {
isa = PBXGroup;
children = (
D72250622ADE9615008FB426 /* HistoryViewModel.swift */,
);
path = ViewModel;
sourceTree = "<group>";
};
D72992372ADD7F1C003AF125 /* Fragments */ = {
isa = PBXGroup;
children = (
D72992382ADD7F68003AF125 /* HistoryContactFragment.swift */,
);
path = Fragments;
sourceTree = "<group>";
};
D74C9CF62ACACEB70021626A /* Fragments */ = {
isa = PBXGroup;
children = (
@ -242,6 +268,7 @@
D74C9CFE2ACAEC5E0021626A /* PopupView.swift */,
D72343352AD037AF009AA24E /* ToastView.swift */,
D750D3382AD3E6EE00EC99C5 /* PopupLoadingView.swift */,
D706BA812ADD72D100278F45 /* DeviceRotationViewModifier.swift */,
);
path = Fragments;
sourceTree = "<group>";
@ -255,9 +282,27 @@
path = Welcome;
sourceTree = "<group>";
};
D78290B62ADD38F9004AA85C /* Fragments */ = {
isa = PBXGroup;
children = (
D78290B72ADD3910004AA85C /* ContactFragment.swift */,
);
path = Fragments;
sourceTree = "<group>";
};
D78290B92ADD409D004AA85C /* ViewModel */ = {
isa = PBXGroup;
children = (
D78290BA2ADD40B2004AA85C /* ContactViewModel.swift */,
);
path = ViewModel;
sourceTree = "<group>";
};
D7A03FBB2ACC2D850081A588 /* Contacts */ = {
isa = PBXGroup;
children = (
D78290B62ADD38F9004AA85C /* Fragments */,
D78290B92ADD409D004AA85C /* ViewModel */,
D7A03FBC2ACC2DB60081A588 /* ContactsView.swift */,
);
path = Contacts;
@ -266,6 +311,8 @@
D7A03FBE2ACC2E010081A588 /* History */ = {
isa = PBXGroup;
children = (
D72992372ADD7F1C003AF125 /* Fragments */,
D72250612ADE95E4008FB426 /* ViewModel */,
D7A03FBF2ACC2E390081A588 /* HistoryView.swift */,
);
path = History;
@ -450,13 +497,17 @@
D71707202AC5989C0037746F /* TextExtension.swift in Sources */,
D719ABB92ABC67BF00B41C10 /* ContentView.swift in Sources */,
D750D3392AD3E6EE00EC99C5 /* PopupLoadingView.swift in Sources */,
D706BA822ADD72D100278F45 /* DeviceRotationViewModifier.swift in Sources */,
D719ABC92ABC6FD700B41C10 /* CoreContext.swift in Sources */,
D7EAACCF2AD6ED8000AA6A8A /* PermissionsFragment.swift in Sources */,
D7A03FBD2ACC2DB60081A588 /* ContactsView.swift in Sources */,
D719ABCF2ABC779A00B41C10 /* AccountLoginViewModel.swift in Sources */,
D78290BB2ADD40B2004AA85C /* ContactViewModel.swift in Sources */,
D72992392ADD7F68003AF125 /* HistoryContactFragment.swift in Sources */,
D74C9D012ACB098C0021626A /* PermissionManager.swift in Sources */,
D7702EF22AC7205000557C00 /* WelcomeView.swift in Sources */,
D719ABB72ABC67BF00B41C10 /* LinphoneApp.swift in Sources */,
D72250632ADE9615008FB426 /* HistoryViewModel.swift in Sources */,
D7A2EDD62AC18115005D90FC /* SharedMainViewModel.swift in Sources */,
D7A03FC62ACC458A0081A588 /* SplashScreen.swift in Sources */,
D7A03FC02ACC2E390081A588 /* HistoryView.swift in Sources */,
@ -469,6 +520,7 @@
D72343342ACEFFC3009AA24E /* QRScanner.swift in Sources */,
D72343302ACEFEF8009AA24E /* QrCodeScannerFragment.swift in Sources */,
D717071E2AC5922E0037746F /* ColorExtension.swift in Sources */,
D78290B82ADD3910004AA85C /* ContactFragment.swift in Sources */,
D7DA67642ACCB31700E95002 /* ProfileModeFragment.swift in Sources */,
D74C9CFC2ACACF370021626A /* WelcomePage3Fragment.swift in Sources */,
D719ABCC2ABC769C00B41C10 /* AssistantView.swift in Sources */,
@ -621,8 +673,8 @@
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
@ -665,8 +717,8 @@
"INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
"INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
"LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "contacts.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="29" height="28" viewBox="0 0 29 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M27.3332 14.8022C27.3332 15.0149 27.2487 15.2189 27.0983 15.3693C26.9479 15.5198 26.7439 15.6043 26.5312 15.6043H24.927V17.2084C24.927 17.4212 24.8425 17.6252 24.6921 17.7756C24.5416 17.926 24.3376 18.0105 24.1249 18.0105C23.9122 18.0105 23.7082 17.926 23.5577 17.7756C23.4073 17.6252 23.3228 17.4212 23.3228 17.2084V15.6043H21.7187C21.5059 15.6043 21.3019 15.5198 21.1515 15.3693C21.0011 15.2189 20.9166 15.0149 20.9166 14.8022C20.9166 14.5895 21.0011 14.3854 21.1515 14.235C21.3019 14.0846 21.5059 14.0001 21.7187 14.0001H23.3228V12.3959C23.3228 12.1832 23.4073 11.9792 23.5577 11.8288C23.7082 11.6784 23.9122 11.5939 24.1249 11.5939C24.3376 11.5939 24.5416 11.6784 24.6921 11.8288C24.8425 11.9792 24.927 12.1832 24.927 12.3959V14.0001H26.5312C26.7439 14.0001 26.9479 14.0846 27.0983 14.235C27.2487 14.3854 27.3332 14.5895 27.3332 14.8022ZM21.5312 20.7025C21.6681 20.8655 21.7347 21.0762 21.7163 21.2883C21.6978 21.5004 21.5959 21.6965 21.4329 21.8335C21.2699 21.9704 21.0592 22.037 20.8471 22.0186C20.635 22.0001 20.4389 21.8982 20.302 21.7352C18.2847 19.333 15.5115 18.0105 12.4947 18.0105C9.47786 18.0105 6.70466 19.333 4.68742 21.7352C4.55047 21.8981 4.35444 21.9999 4.14244 22.0182C3.93044 22.0365 3.71985 21.9699 3.55698 21.833C3.39411 21.696 3.29231 21.5 3.27398 21.288C3.25565 21.076 3.32228 20.8654 3.45923 20.7025C4.95712 18.9199 6.81995 17.6536 8.89033 16.9758C7.63297 16.1927 6.66487 15.0214 6.1325 13.639C5.60013 12.2567 5.53246 10.7386 5.93972 9.31439C6.34698 7.89017 7.20701 6.63734 8.3897 5.74544C9.57239 4.85354 11.0134 4.37109 12.4947 4.37109C13.976 4.37109 15.417 4.85354 16.5997 5.74544C17.7824 6.63734 18.6424 7.89017 19.0497 9.31439C19.4569 10.7386 19.3893 12.2567 18.8569 13.639C18.3245 15.0214 17.3564 16.1927 16.0991 16.9758C18.1694 17.6536 20.0323 18.9199 21.5312 20.7025ZM12.4947 16.4064C13.5258 16.4064 14.5338 16.1006 15.3912 15.5277C16.2485 14.9548 16.9168 14.1406 17.3114 13.1879C17.706 12.2353 17.8092 11.187 17.6081 10.1757C17.4069 9.16437 16.9104 8.23541 16.1812 7.50628C15.4521 6.77715 14.5231 6.28061 13.5118 6.07945C12.5005 5.87828 11.4522 5.98153 10.4996 6.37613C9.54691 6.77073 8.73266 7.43896 8.15979 8.29632C7.58692 9.15369 7.28115 10.1617 7.28115 11.1928C7.28274 12.575 7.83254 13.9002 8.80992 14.8776C9.78731 15.855 11.1125 16.4048 12.4947 16.4064Z" fill="#4E6074"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "filtres.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.8783 5.02484C20.7717 4.77862 20.5951 4.56916 20.3704 4.42251C20.1458 4.27586 19.8829 4.1985 19.6146 4.20003H4.38205C4.11404 4.20056 3.85194 4.27885 3.62754 4.42541C3.40315 4.57197 3.22611 4.7805 3.11789 5.0257C3.00968 5.27089 2.97495 5.54223 3.01791 5.80678C3.06086 6.07133 3.17967 6.31772 3.35991 6.51608L3.36684 6.52387L9.22879 12.7831V19.4326C9.22873 19.6833 9.29669 19.9292 9.42542 20.1442C9.55415 20.3593 9.73883 20.5353 9.95977 20.6537C10.1807 20.772 10.4296 20.8282 10.6799 20.8161C10.9303 20.8041 11.1727 20.7244 11.3813 20.5855L14.1508 18.7385C14.3407 18.612 14.4964 18.4406 14.604 18.2395C14.7117 18.0384 14.768 17.8138 14.7679 17.5857V12.7831L20.6307 6.52387L20.6377 6.51608C20.8198 6.31863 20.9398 6.0719 20.9825 5.8067C21.0253 5.5415 20.9891 5.26956 20.8783 5.02484ZM13.7588 11.8406C13.5182 12.0955 13.3839 12.4326 13.3831 12.7831V17.5857L10.6136 19.4326V12.7831C10.6144 12.4313 10.4806 12.0926 10.2397 11.8362L4.38205 5.58482H19.6146L13.7588 11.8406Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "illus-belledonne1.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "more.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.8 12.5C13.8 12.856 13.6944 13.204 13.4966 13.5C13.2988 13.796 13.0177 14.0267 12.6888 14.163C12.3599 14.2992 11.998 14.3349 11.6488 14.2654C11.2996 14.196 10.9789 14.0245 10.7272 13.7728C10.4754 13.5211 10.304 13.2003 10.2345 12.8512C10.1651 12.502 10.2007 12.1401 10.337 11.8112C10.4732 11.4823 10.7039 11.2011 10.9999 11.0034C11.2959 10.8056 11.6439 10.7 12 10.7C12.4773 10.7 12.9352 10.8896 13.2727 11.2272C13.6103 11.5648 13.8 12.0226 13.8 12.5ZM12 7.1C12.356 7.1 12.704 6.99443 13 6.79665C13.296 6.59886 13.5267 6.31774 13.6629 5.98883C13.7992 5.65992 13.8348 5.298 13.7654 4.94884C13.6959 4.59967 13.5245 4.27894 13.2727 4.02721C13.021 3.77547 12.7003 3.60404 12.3511 3.53459C12.0019 3.46513 11.64 3.50078 11.3111 3.63702C10.9822 3.77326 10.7011 4.00397 10.5033 4.29997C10.3055 4.59598 10.2 4.94399 10.2 5.3C10.2 5.77739 10.3896 6.23523 10.7272 6.57279C11.0647 6.91036 11.5226 7.1 12 7.1ZM12 17.9C11.6439 17.9 11.2959 18.0056 10.9999 18.2034C10.7039 18.4011 10.4732 18.6823 10.337 19.0112C10.2007 19.3401 10.1651 19.702 10.2345 20.0512C10.304 20.4003 10.4754 20.7211 10.7272 20.9728C10.9789 21.2245 11.2996 21.396 11.6488 21.4654C11.998 21.5349 12.3599 21.4992 12.6888 21.363C13.0177 21.2267 13.2988 20.996 13.4966 20.7C13.6944 20.404 13.8 20.056 13.8 19.7C13.8 19.2226 13.6103 18.7648 13.2727 18.4272C12.9352 18.0896 12.4773 17.9 12 17.9Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "profile-image-example.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -0,0 +1,21 @@
{
"images" : [
{
"filename" : "search.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,3 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M21.7748 21.1875L16.9656 16.3793C18.3595 14.7058 19.0546 12.5594 18.9062 10.3865C18.7579 8.2136 17.7775 6.18155 16.1691 4.71306C14.5607 3.24457 12.448 2.4527 10.2707 2.50219C8.09327 2.55167 6.01878 3.4387 4.47874 4.97874C2.9387 6.51878 2.05167 8.59327 2.00219 10.7707C1.9527 12.948 2.74457 15.0607 4.21306 16.6691C5.68155 18.2775 7.7136 19.2579 9.88649 19.4062C12.0594 19.5546 14.2058 18.8595 15.8793 17.4656L20.6875 22.2748C20.7589 22.3462 20.8437 22.4028 20.937 22.4415C21.0302 22.4801 21.1302 22.5 21.2312 22.5C21.3321 22.5 21.4321 22.4801 21.5254 22.4415C21.6187 22.4028 21.7034 22.3462 21.7748 22.2748C21.8462 22.2034 21.9028 22.1187 21.9415 22.0254C21.9801 21.9321 22 21.8321 22 21.7312C22 21.6302 21.9801 21.5302 21.9415 21.437C21.9028 21.3437 21.8462 21.2589 21.7748 21.1875ZM3.55803 10.9736C3.55803 9.60583 3.96362 8.26878 4.72351 7.13151C5.4834 5.99425 6.56347 5.10787 7.82713 4.58444C9.09078 4.06102 10.4813 3.92407 11.8228 4.19091C13.1643 4.45775 14.3965 5.11639 15.3637 6.08355C16.3308 7.05071 16.9895 8.28295 17.2563 9.62444C17.5231 10.9659 17.3862 12.3564 16.8628 13.6201C16.3393 14.8837 15.453 15.9638 14.3157 16.7237C13.1784 17.4836 11.8414 17.8892 10.4736 17.8892C8.6401 17.8872 6.88228 17.1579 5.5858 15.8614C4.28932 14.5649 3.56006 12.8071 3.55803 10.9736Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -28,7 +28,7 @@ struct LinphoneApp: App {
var body: some Scene {
WindowGroup {
if isActive {
ContentView(sharedMainViewModel: SharedMainViewModel())
ContentView(sharedMainViewModel: SharedMainViewModel(), contactViewModel: ContactViewModel(), historyViewModel: HistoryViewModel())
.toast(isShowing: $coreContext.toastMessage)
} else {
SplashScreen(isActive: $isActive)

View file

@ -36,6 +36,9 @@
},
"**Notifications** : Pour vous informé quand vous recevez un message ou un appel." : {
},
"%lld" : {
},
"%lld Book (Example)" : {
"extractionState" : "manual",
@ -127,9 +130,6 @@
},
"Contacts" : {
},
"Contacts View" : {
},
"Continue" : {
@ -161,7 +161,7 @@
"Error" : {
},
"History View" : {
"History Contact fragment" : {
},
"I prefere create an account" : {
@ -190,6 +190,12 @@
},
"Next" : {
},
"No calls for the moment..." : {
},
"No contacts for the moment..." : {
},
"Not account yet?" : {

View file

@ -20,17 +20,109 @@
import SwiftUI
struct ContactsView: View {
@ObservedObject var contactViewModel: ContactViewModel
@ObservedObject var historyViewModel: HistoryViewModel
@State private var orientation = UIDevice.current.orientation
@State private var selectedIndex = 0
var objects: [Int] = [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
]
var body: some View {
VStack {
NavigationView {
ZStack(alignment: .bottomTrailing) {
VStack(spacing: 0) {
HStack {
Image("profile-image-example")
.resizable()
.frame(width: 40, height: 40)
.clipShape(Circle())
Text("Contacts")
.default_text_style_white_800(styleSize: 20)
.padding(.leading, 10)
Spacer()
Button {
} label: {
Image("search")
}
Button {
} label: {
Image("filtres")
}
.padding(.leading)
}
.frame(maxWidth: .infinity)
.frame(height: 50)
.padding(.horizontal)
.background(Color.orangeMain500)
VStack {
List {
ForEach(objects, id: \.self) { index in
Button {
withAnimation {
contactViewModel.contactTitle = String(index)
}
} label: {
Text("\(index)")
.frame( maxWidth: .infinity, alignment: .leading)
.foregroundStyle(Color.orangeMain500)
}
.buttonStyle(.borderless)
.listRowSeparator(.hidden)
}
}
.listStyle(.plain)
.overlay(
VStack {
if objects.isEmpty {
Spacer()
Image("illus-belledonne1")
.resizable()
.scaledToFit()
.clipped()
.padding(.all)
Text("No contacts for the moment...")
.default_text_style_800(styleSize: 16)
Spacer()
Image("linphone")
.padding(.bottom, 20)
Text("Contacts View")
Spacer()
}
}
.padding(.all)
)
}
}
.onRotate { newOrientation in
orientation = newOrientation
}
Button {
// Action
} label: {
Image("contacts")
.padding()
.background(.white)
.clipShape(Circle())
.shadow(color: .black.opacity(0.2), radius: 4)
}
.padding()
}
}
.navigationViewStyle(.stack)
}
}
#Preview {
ContactsView()
ContactsView(contactViewModel: ContactViewModel(), historyViewModel: HistoryViewModel())
}

View file

@ -0,0 +1,77 @@
/*
* Copyright (c) 2010-2023 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import SwiftUI
struct ContactFragment: View {
@ObservedObject var contactViewModel: ContactViewModel
@State private var orientation = UIDevice.current.orientation
var body: some View {
VStack(alignment: .leading) {
if !(orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height) {
HStack {
Image("caret-left")
.renderingMode(.template)
.resizable()
.foregroundStyle(Color.grayMain2c500)
.frame(width: 25, height: 25, alignment: .leading)
.padding(.top, 20)
.onTapGesture {
withAnimation {
contactViewModel.contactTitle = ""
}
}
Spacer()
}
.padding(.leading)
}
Spacer()
Text(contactViewModel.contactTitle)
.frame(maxWidth: .infinity)
List {
ForEach(1...40, id: \.self) { index in
Button {
contactViewModel.contactTitle = String(index)
} label: {
Text("\(index)")
.frame( maxWidth: .infinity, alignment: .leading)
}
.buttonStyle(.borderless)
}
}
}
.navigationBarHidden(true)
.onRotate { newOrientation in
orientation = newOrientation
}
}
}
#Preview {
ContactFragment(contactViewModel: ContactViewModel())
}

View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2010-2023 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import Foundation
class ContactViewModel: ObservableObject {
@Published var contactTitle: String = ""
init() {}
}

View file

@ -22,6 +22,8 @@ import SwiftUI
struct ContentView: View {
@ObservedObject var sharedMainViewModel: SharedMainViewModel
@ObservedObject var contactViewModel: ContactViewModel
@ObservedObject var historyViewModel: HistoryViewModel
@ObservedObject private var coreContext = CoreContext.shared
@State var index = 0
@ -34,9 +36,10 @@ struct ContentView: View {
AssistantView(sharedMainViewModel: sharedMainViewModel)
} else {
GeometryReader { geometry in
NavigationView {
if orientation == .landscapeLeft || orientation == .landscapeRight || geometry.size.width > geometry.size.height {
ZStack {
VStack(spacing: 0) {
HStack(spacing: 0) {
if orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height {
VStack {
Group {
Spacer()
@ -63,6 +66,7 @@ struct ContentView: View {
Button(action: {
self.index = 1
contactViewModel.contactTitle = ""
}, label: {
VStack {
Image("phone")
@ -83,30 +87,30 @@ struct ContentView: View {
Spacer()
}
}
.frame(width: 60)
.frame(width: 75)
.padding(.leading, orientation == .landscapeRight && geometry.safeAreaInsets.bottom > 0 ? -geometry.safeAreaInsets.leading : 0)
.background(Color.gray100)
}
VStack {
if self.index == 0 {
ContactsView()
ContactsView(contactViewModel: contactViewModel, historyViewModel: historyViewModel)
} else if self.index == 1 {
HistoryView()
}
}
.frame(maxWidth: .infinity)
}
} else {
VStack(spacing: 0) {
VStack {
if self.index == 0 {
ContactsView()
} else if self.index == 1 {
HistoryView()
}
}
.frame(maxWidth: .infinity)
.frame(maxWidth:
(orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height)
? geometry.size.width/100*40
: .infinity
)
if orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height {
Spacer()
}
}
.shadow(color: Color.gray200, radius: 2)
if !(orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height) {
HStack {
Group {
Spacer()
@ -134,6 +138,7 @@ struct ContentView: View {
Button(action: {
self.index = 1
contactViewModel.contactTitle = ""
}, label: {
VStack {
Image("phone")
@ -151,11 +156,38 @@ struct ContentView: View {
}
})
.padding(.top)
Spacer()
}
}
.padding(.bottom, geometry.safeAreaInsets.bottom > 0 ? 0 : 15)
.background(
Color.white
.shadow(color: Color.gray200, radius: 4, x: 0, y: 0)
.mask(Rectangle().padding(.top, -8))
)
}
}
if !contactViewModel.contactTitle.isEmpty || !historyViewModel.historyTitle.isEmpty {
HStack(spacing: 0) {
Spacer()
.frame(maxWidth:
(orientation == .landscapeLeft || orientation == .landscapeRight || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height)
? (geometry.size.width/100*40) + 75
: 0
)
if self.index == 0 {
ContactFragment(contactViewModel: contactViewModel)
.frame(maxWidth: .infinity)
.background(Color.gray100)
} else if self.index == 1 {
HistoryContactFragment()
.frame(maxWidth: .infinity)
.background(Color.gray100)
}
}
.padding(.leading, orientation == .landscapeRight && geometry.safeAreaInsets.bottom > 0 ? -geometry.safeAreaInsets.leading : 0)
.transition(.move(edge: .trailing))
}
}
}
@ -164,31 +196,8 @@ struct ContentView: View {
}
}
}
}
}
struct DeviceRotationViewModifier: ViewModifier {
let action: (UIDeviceOrientation) -> Void
func body(content: Content) -> some View {
content
.onAppear()
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
if UIDevice.current.orientation == .landscapeLeft
|| UIDevice.current.orientation == .landscapeRight
|| UIDevice.current.orientation == .portrait {
action(UIDevice.current.orientation)
}
}
}
}
extension View {
func onRotate(perform action: @escaping (UIDeviceOrientation) -> Void) -> some View {
self.modifier(DeviceRotationViewModifier(action: action))
}
}
#Preview {
ContentView(sharedMainViewModel: SharedMainViewModel())
ContentView(sharedMainViewModel: SharedMainViewModel(), contactViewModel: ContactViewModel(), historyViewModel: HistoryViewModel())
}

View file

@ -0,0 +1,46 @@
/*
* Copyright (c) 2010-2023 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import SwiftUI
struct DeviceRotationViewModifier: ViewModifier {
private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
let action: (UIDeviceOrientation) -> Void
func body(content: Content) -> some View {
content
.onAppear()
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
if UIDevice.current.orientation == .landscapeLeft
|| UIDevice.current.orientation == .landscapeRight
|| UIDevice.current.orientation == .portrait
|| (UIDevice.current.orientation == .portraitUpsideDown && idiom == .pad) {
action(UIDevice.current.orientation)
}
}
}
}
extension View {
func onRotate(perform action: @escaping (UIDeviceOrientation) -> Void) -> some View {
self.modifier(DeviceRotationViewModifier(action: action))
}
}

View file

@ -0,0 +1,34 @@
/*
* Copyright (c) 2010-2023 Belledonne Communications SARL.
*
* This file is part of Linphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import SwiftUI
struct HistoryContactFragment: View {
var body: some View {
VStack {
Spacer()
Text("History Contact fragment")
Spacer()
}
}
}
#Preview {
HistoryContactFragment()
}

View file

@ -21,16 +21,55 @@ import SwiftUI
struct HistoryView: View {
@ObservedObject private var coreContext = CoreContext.shared
var body: some View {
NavigationView {
VStack(spacing: 0) {
HStack {
Image("profile-image-example")
.resizable()
.frame(width: 40, height: 40)
.clipShape(Circle())
Text("Calls")
.default_text_style_white_800(styleSize: 20)
.padding(.leading, 10)
Spacer()
Button {
} label: {
Image("search")
}
Button {
} label: {
Image("more")
}
.padding(.leading)
}
.frame(maxWidth: .infinity)
.frame(height: 50)
.padding(.horizontal)
.background(Color.orangeMain500)
VStack {
Spacer()
Image("linphone")
.padding(.bottom, 20)
Text("History View")
Image("illus-belledonne1")
.resizable()
.scaledToFit()
.clipped()
.padding(.all)
Text("No calls for the moment...")
.default_text_style_800(styleSize: 16)
Spacer()
Spacer()
}
.padding(.all)
}
}
.navigationViewStyle(.stack)
}
}

View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2010-2023 Belledonne Communications SARL.
*
* This file is part of linphone-iphone
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import Foundation
class HistoryViewModel: ObservableObject {
@Published var historyTitle: String = ""
init() {}
}