refactor on profile picture view

pull/874/head
Ryan Zhao 11 months ago
parent 0ace277878
commit 01ee543758

@ -159,7 +159,6 @@
7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */; };
7BD477A827EC39F5004E2822 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD477A727EC39F5004E2822 /* Atomic.swift */; };
7BD687D12A5D0D1200D8E455 /* MessageInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD687D02A5D0D1200D8E455 /* MessageInfoView.swift */; };
7BD687D42A5E852600D8E455 /* ProfilePictureView+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BD687D32A5E852600D8E455 /* ProfilePictureView+SwiftUI.swift */; };
7BD976972A776C76001B466F /* SessionCarouselView+SwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BE2701D2A64C11500CEB71A /* SessionCarouselView+SwiftUI.swift */; };
7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; };
7BDCFC0B2421EB7600641C39 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; };
@ -1276,7 +1275,6 @@
7BD477A727EC39F5004E2822 /* Atomic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
7BD687D02A5D0D1200D8E455 /* MessageInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageInfoView.swift; sourceTree = "<group>"; };
7BD687D22A5D283200D8E455 /* build_libSession_util.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = build_libSession_util.sh; sourceTree = "<group>"; };
7BD687D32A5E852600D8E455 /* ProfilePictureView+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfilePictureView+SwiftUI.swift"; sourceTree = "<group>"; };
7BDCFC0424206E7300641C39 /* SessionNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SessionNotificationServiceExtension.entitlements; sourceTree = "<group>"; };
7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationServiceExtensionContext.swift; sourceTree = "<group>"; };
7BE2701D2A64C11500CEB71A /* SessionCarouselView+SwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SessionCarouselView+SwiftUI.swift"; sourceTree = "<group>"; };
@ -2945,7 +2943,6 @@
FD52090628B49738006098F6 /* ConfirmationModal.swift */,
C38EF2A3255B6D93007E1867 /* PlaceholderIcon.swift */,
C38EF2A4255B6D93007E1867 /* ProfilePictureView.swift */,
7BD687D32A5E852600D8E455 /* ProfilePictureView+SwiftUI.swift */,
FD71165A28E6DDBC00B47552 /* StyledNavigationController.swift */,
FD0B77AF29B69A65009169BA /* TopBannerController.swift */,
);
@ -5490,7 +5487,6 @@
FD71162C28E1451400B47552 /* Position.swift in Sources */,
FD52090328B4680F006098F6 /* RadioButton.swift in Sources */,
C331FFE82558FB0000070591 /* TextView.swift in Sources */,
7BD687D42A5E852600D8E455 /* ProfilePictureView+SwiftUI.swift in Sources */,
FD71162028D97ABC00B47552 /* UIImage+Tinting.swift in Sources */,
FD71162A28DA83DF00B47552 /* GradientView.swift in Sources */,
FD37E9D728A20B5D003AE748 /* UIColor+Utilities.swift in Sources */,

@ -13,21 +13,46 @@ public extension ProfilePictureView {
additionalProfile: Profile? = nil,
additionalProfileIcon: ProfileIcon = .none
) {
let (info, additionalInfo): (Info?, Info?) = Self.getProfilePictureInfo(
size: self.size,
publicKey: publicKey,
threadVariant: threadVariant,
customImageData: customImageData,
profile: profile,
profileIcon: profileIcon,
additionalProfile: additionalProfile,
additionalProfileIcon: additionalProfileIcon
)
guard let info: Info = info else { return }
update(info, additionalInfo: additionalInfo)
}
static func getProfilePictureInfo(
size: Size,
publicKey: String,
threadVariant: SessionThread.Variant,
customImageData: Data?,
profile: Profile?,
profileIcon: ProfileIcon = .none,
additionalProfile: Profile? = nil,
additionalProfileIcon: ProfileIcon = .none
) -> (Info?, Info?) {
// If we are given 'customImageData' then only use that
guard customImageData == nil else { return update(Info(imageData: customImageData)) }
guard customImageData == nil else { return (Info(imageData: customImageData), nil) }
// Otherwise there are conversation-type-specific behaviours
switch threadVariant {
case .community:
let placeholderImage: UIImage = {
switch self.size {
switch size {
case .navigation, .message: return #imageLiteral(resourceName: "SessionWhite16")
case .list: return #imageLiteral(resourceName: "SessionWhite24")
case .hero: return #imageLiteral(resourceName: "SessionWhite40")
}
}()
update(
return (
Info(
imageData: placeholderImage.pngData(),
inset: UIEdgeInsets(
@ -38,13 +63,14 @@ public extension ProfilePictureView {
),
icon: profileIcon,
forcedBackgroundColor: .theme(.classicDark, color: .borderSeparator)
)
),
nil
)
case .legacyGroup, .group:
guard !publicKey.isEmpty else { return }
guard !publicKey.isEmpty else { return (nil, nil) }
update(
return (
Info(
imageData: (
profile.map { ProfileManager.profileAvatar(profile: $0) } ??
@ -53,14 +79,14 @@ public extension ProfilePictureView {
text: (profile?.displayName(for: threadVariant))
.defaulting(to: publicKey),
size: (additionalProfile != nil ?
self.size.multiImageSize :
self.size.viewSize
size.multiImageSize :
size.viewSize
)
).pngData()
),
icon: profileIcon
),
additionalInfo: additionalProfile
additionalProfile
.map { otherProfile in
Info(
imageData: (
@ -68,7 +94,7 @@ public extension ProfilePictureView {
PlaceholderIcon.generate(
seed: otherProfile.id,
text: otherProfile.displayName(for: threadVariant),
size: self.size.multiImageSize
size: size.multiImageSize
).pngData()
),
icon: additionalProfileIcon
@ -91,9 +117,9 @@ public extension ProfilePictureView {
)
case .contact:
guard !publicKey.isEmpty else { return }
guard !publicKey.isEmpty else { return (nil, nil) }
update(
return (
Info(
imageData: (
profile.map { ProfileManager.profileAvatar(profile: $0) } ??
@ -102,13 +128,14 @@ public extension ProfilePictureView {
text: (profile?.displayName(for: threadVariant))
.defaulting(to: publicKey),
size: (additionalProfile != nil ?
self.size.multiImageSize :
self.size.viewSize
size.multiImageSize :
size.viewSize
)
).pngData()
),
icon: profileIcon
)
),
nil
)
}
}

@ -1,21 +0,0 @@
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import SwiftUI
public struct ProfilePictureSwiftUI: UIViewRepresentable {
public typealias UIViewType = ProfilePictureView
var size: ProfilePictureView.Size
public init(size: ProfilePictureView.Size) {
self.size = size
}
public func makeUIView(context: Context) -> ProfilePictureView {
ProfilePictureView(size: size)
}
public func updateUIView(_ uiView: ProfilePictureView, context: Context) {
}
}

@ -550,3 +550,34 @@ public final class ProfilePictureView: UIView {
additionalProfileIconBackgroundView.layer.cornerRadius = (size.iconSize / 2)
}
}
import SwiftUI
struct ProfilePictureSwiftUI: UIViewRepresentable {
typealias UIViewType = ProfilePictureView
var size: ProfilePictureView.Size
var info: ProfilePictureView.Info
var additionalInfo: ProfilePictureView.Info?
public init(
size: ProfilePictureView.Size,
info: ProfilePictureView.Info,
additionalInfo: ProfilePictureView.Info? = nil
) {
self.size = size
self.info = info
self.additionalInfo = additionalInfo
}
func makeUIView(context: Context) -> ProfilePictureView {
ProfilePictureView(size: size)
}
func updateUIView(_ profilePictureView: ProfilePictureView, context: Context) {
profilePictureView.update(
info,
additionalInfo: additionalInfo
)
}
}

Loading…
Cancel
Save