From 4c4aa05e57c0802c87018b78b7004df64ca33ed8 Mon Sep 17 00:00:00 2001 From: Milen Pivchev Date: Thu, 18 Sep 2025 09:37:47 +0200 Subject: [PATCH 1/8] WIP Signed-off-by: Milen Pivchev --- Nextcloud.xcodeproj/project.pbxproj | 6 + .../NCAccountSettingsModel.swift | 6 +- .../NCAccountSettingsView.swift | 3 + .../Account Settings/UserStatusView.swift | 24 ++++ .../Image.imageset/Contents.json | 20 --- .../Contents.json | 15 --- .../selectFull.pdf | Bin 2030 -> 0 bytes .../circle_fill.imageset/Contents.json | 15 --- .../circle_fill.imageset/circle_fill.pdf | Bin 3353 -> 0 bytes .../userStatusAway.imageset/Contents.json | 15 --- .../userStatusAway.pdf | Bin 1149 -> 0 bytes .../userStatusDnd.imageset/Contents.json | 15 --- .../userStatusDnd.imageset/userStatusDnd.pdf | Bin 1134 -> 0 bytes .../userStatusOffline.imageset/Contents.json | 15 --- .../userStatusOffline.imageset/offline.pdf | Bin 3667 -> 0 bytes iOSClient/UserStatus/NCUserStatus.storyboard | 118 ++++++++++++------ iOSClient/UserStatus/NCUserStatus.swift | 12 ++ iOSClient/Utility/NCUtility+Image.swift | 22 +++- 18 files changed, 146 insertions(+), 140 deletions(-) create mode 100644 iOSClient/Account/Account Settings/UserStatusView.swift delete mode 100644 iOSClient/Images.xcassets/Image.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/checkmark.circle.fill.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/checkmark.circle.fill.imageset/selectFull.pdf delete mode 100644 iOSClient/Images.xcassets/circle_fill.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/circle_fill.imageset/circle_fill.pdf delete mode 100644 iOSClient/Images.xcassets/userStatusAway.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/userStatusAway.imageset/userStatusAway.pdf delete mode 100644 iOSClient/Images.xcassets/userStatusDnd.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/userStatusDnd.imageset/userStatusDnd.pdf delete mode 100644 iOSClient/Images.xcassets/userStatusOffline.imageset/Contents.json delete mode 100644 iOSClient/Images.xcassets/userStatusOffline.imageset/offline.pdf diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index e19b80853c..505998b8c0 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/Nextcloud.xcodeproj/project.pbxproj @@ -156,6 +156,7 @@ F359D86B2A7D03420023F405 /* NCUtility+Exif.swift in Sources */ = {isa = PBXBuildFile; fileRef = F359D8662A7D03420023F405 /* NCUtility+Exif.swift */; }; F359D86C2A7D03420023F405 /* NCUtility+Exif.swift in Sources */ = {isa = PBXBuildFile; fileRef = F359D8662A7D03420023F405 /* NCUtility+Exif.swift */; }; F359D86D2A7D03420023F405 /* NCUtility+Exif.swift in Sources */ = {isa = PBXBuildFile; fileRef = F359D8662A7D03420023F405 /* NCUtility+Exif.swift */; }; + F35FABDB2E79C7AB0077994E /* UserStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F35FABDA2E79C7AB0077994E /* UserStatusView.swift */; }; F36E64F72B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */; }; F36E64FA2B96236C0085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; F36E64FB2B9733F10085ABB5 /* UIView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7E41315294A19B300839300 /* UIView+Extension.swift */; }; @@ -1368,6 +1369,8 @@ F343A4BA2A1E734600DDA874 /* Optional+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Optional+Extension.swift"; sourceTree = ""; }; F351D1A52D0AF24A00930F94 /* PHAssetCollection+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PHAssetCollection+Extension.swift"; sourceTree = ""; }; F359D8662A7D03420023F405 /* NCUtility+Exif.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCUtility+Exif.swift"; sourceTree = ""; }; + F35FABDA2E79C7AB0077994E /* UserStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusView.swift; sourceTree = ""; }; + F362B4062E79880000FDE57B /* NextcloudKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = NextcloudKit; path = ../NextcloudKit; sourceTree = SOURCE_ROOT; }; F36E64F62B9245210085ABB5 /* NCCollectionViewCommon+SelectTabBarDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCCollectionViewCommon+SelectTabBarDelegate.swift"; sourceTree = ""; }; F37208742BAB4AB0006B5430 /* TestConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestConstants.swift; sourceTree = ""; }; F3754A7C2CF87D600009312E /* SetupPasscodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetupPasscodeView.swift; sourceTree = ""; }; @@ -3325,6 +3328,7 @@ C04E2F202A17BB4D001BAD85 /* NextcloudIntegrationTests.xctest */, C0046CDA2A17B98400D87C9D /* NextcloudUITests.xctest */, F7F1FBA62E27D13700C79E20 /* Frameworks */, + F362B4062E79880000FDE57B /* NextcloudKit */, ); sourceTree = ""; }; @@ -3427,6 +3431,7 @@ children = ( F7FDFF562E437E55000D7688 /* NCAccountSettingsModel.swift */, F7FDFF572E437E55000D7688 /* NCAccountSettingsView.swift */, + F35FABDA2E79C7AB0077994E /* UserStatusView.swift */, ); path = "Account Settings"; sourceTree = ""; @@ -4924,6 +4929,7 @@ F763D29D2A249C4500A3C901 /* NCManageDatabase+Capabilities.swift in Sources */, F76882252C0DD1E7001CF441 /* NCSettingsAdvancedModel.swift in Sources */, F7C7B489245EBA4100D93E60 /* NCViewerQuickLook.swift in Sources */, + F35FABDB2E79C7AB0077994E /* UserStatusView.swift in Sources */, F758B45E212C569D00515F55 /* NCScanCell.swift in Sources */, F78B87E72B62527100C65ADC /* NCMediaDataSource.swift in Sources */, F76882272C0DD1E7001CF441 /* NCManageE2EEView.swift in Sources */, diff --git a/iOSClient/Account/Account Settings/NCAccountSettingsModel.swift b/iOSClient/Account/Account Settings/NCAccountSettingsModel.swift index 41b3962375..0267991c2b 100644 --- a/iOSClient/Account/Account Settings/NCAccountSettingsModel.swift +++ b/iOSClient/Account/Account Settings/NCAccountSettingsModel.swift @@ -114,16 +114,16 @@ class NCAccountSettingsModel: ObservableObject, ViewOnAppearHandling { } /// Function to update the user data - func getUserStatus() -> (statusImage: UIImage?, statusMessage: String, descriptionMessage: String) { + func getUserStatus() -> (statusImage: UIImage?, statusImageColor: UIColor, statusMessage: String, descriptionMessage: String) { guard let tblAccount, let capabilities = NCNetworking.shared.capabilities[tblAccount.account] else { - return (UIImage(), "", "") + return (UIImage(), .black, "", "") } if capabilities.userStatusEnabled, let tableAccount = database.getTableAccount(predicate: NSPredicate(format: "account == %@", tblAccount.account)) { return NCUtility().getUserStatus(userIcon: tableAccount.userStatusIcon, userStatus: tableAccount.userStatusStatus, userMessage: tableAccount.userStatusMessage) } - return (nil, "", "") + return (nil, .black, "", "") } /// Is the user an Admin diff --git a/iOSClient/Account/Account Settings/NCAccountSettingsView.swift b/iOSClient/Account/Account Settings/NCAccountSettingsView.swift index 28e20be76d..12fb4dc4f2 100644 --- a/iOSClient/Account/Account Settings/NCAccountSettingsView.swift +++ b/iOSClient/Account/Account Settings/NCAccountSettingsView.swift @@ -30,6 +30,7 @@ struct NCAccountSettingsView: View { ForEach(0..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 G!v6zej=sDA diff --git a/iOSClient/Images.xcassets/userStatusAway.imageset/Contents.json b/iOSClient/Images.xcassets/userStatusAway.imageset/Contents.json deleted file mode 100644 index 2a7dda6375..0000000000 --- a/iOSClient/Images.xcassets/userStatusAway.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "userStatusAway.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/iOSClient/Images.xcassets/userStatusAway.imageset/userStatusAway.pdf b/iOSClient/Images.xcassets/userStatusAway.imageset/userStatusAway.pdf deleted file mode 100644 index 79ab7882bd7d3bfb4f8a06b00a946d55fa7a20ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmaJ>U2GIp6jq6UlNJpm8bgiefsF-a?wy(am1d*e?a!v&w!2dby35aH_HH}v?A&GM zZd?ip4eZ)}1x~fBJ!V?uv;)Y7qutp74({<=^xFtQ|l7y-u$7E&Z+0A9wDP+VG zrJBVtPjkv<1j~U++`u1={B7Z;ndH!!enF=?)im9p2^!Ij=O}#^ALM04>HjIoq{7`& zpo-B_$6}xQSW=47)%puJ!QQ`_2EgrM0#@zH+s{?XR`F_C7GVe&xwU^JM?UKSOuU^sjk5bLgozFIf*y?&?_l>M;BfmTj}KL zys&Ej-1{qHT+Yp`efs0qHh({Jcsl=1skrCLsVCok>$&g2e9TJJoz=wko8jF8fRw^czF_3<&y_PvXEX^ODWb zZcv~IhIKTvkx0Z_GYn4&G_)&y2wIp|h$+3AB}bUo04aK{F@?xK%ieQE@Yy^wtvdW* zxtc2jmkih?9|}Ra`K>LVM3;x9m}HI^54IV{>X+?O_jp;M5L4*VfM_IQM4${yn1(^Y z0Cx$CB4asbP(0_$c!m-G7Z(4I*mwd3yca7yW;@&qt_#zi=9nGH3n3w>4F$}&WdXsJ Vf=y6-$voMpB4NaoP^f3P_iqn&XXF3? diff --git a/iOSClient/Images.xcassets/userStatusDnd.imageset/Contents.json b/iOSClient/Images.xcassets/userStatusDnd.imageset/Contents.json deleted file mode 100644 index 28cd3bcbcd..0000000000 --- a/iOSClient/Images.xcassets/userStatusDnd.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "userStatusDnd.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/iOSClient/Images.xcassets/userStatusDnd.imageset/userStatusDnd.pdf b/iOSClient/Images.xcassets/userStatusDnd.imageset/userStatusDnd.pdf deleted file mode 100644 index 345da9f4e4032f166935d862be49178725e79948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmaJ>ZAcVB7&alIC8CH3E#i%k&OUZ#ckj--vV*+S>(EQNGYeE~+?&(Qy&c_~t1Bvk z3hGb&DIt*h7m-*>L=i>w1!W+Z^nq01kG>%&iYNk`y)G{-8Wwi;+4r4!pXYsM${Ip7 zYZTcnm5sfBJ0U56fwga!Dl1XYri3#aTv4{$FinCyGKLmcl<0=VS-Nu_L@Z8C5CGK2 zVJj%OP4TwjmU7t8-EGn>w7u5g$fH%rnpY&&ZfuO!tp?NRq7bHf7ZZV1EW0b-6h@lt zR%I1}oiF$+QNLQsuia#0zoF+~j_s>^Gb8z(I(o;9T z4>e8n#!AmUDPOYh&5Y`3OY`~Cy-!x$l0J-UL*7dZy1r_AdoI*I9XTT3ShlkKd2r&{ zz2V8?&kAfl)ie_E>?4mRcV4f%a%Ft%%%zw5o7USUudYVsf7m{AaLgs`xzqkFxh2#i zkKZ5YKYVui<^6py)L%OAuFiXUbZ7VNi!TnG9QMU}*VC53*+V}*-TgB6DF6@To(ZDN?z rcJ7C`v73tOP>eAS4mTlS#7Z)7?hw%gDb0z^b1eL-DwUO0*Vp_6O0;8e diff --git a/iOSClient/Images.xcassets/userStatusOffline.imageset/Contents.json b/iOSClient/Images.xcassets/userStatusOffline.imageset/Contents.json deleted file mode 100644 index d2bcf52f86..0000000000 --- a/iOSClient/Images.xcassets/userStatusOffline.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "offline.pdf", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/iOSClient/Images.xcassets/userStatusOffline.imageset/offline.pdf b/iOSClient/Images.xcassets/userStatusOffline.imageset/offline.pdf deleted file mode 100644 index ba2fa7f75fbe18941dcbd2c6c7d6c63340df5867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3667 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 - + - - + @@ -15,20 +14,20 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + @@ -281,7 +321,9 @@ + + @@ -294,12 +336,13 @@ - + - + + @@ -308,24 +351,24 @@ - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + @@ -281,7 +321,9 @@ + + @@ -294,12 +336,13 @@ - + - + + @@ -308,24 +351,24 @@ - - + + - + + + + + + + + + + + + + + + + + + + + + + +