@@ -548,6 +548,8 @@ final class PeerInfoHeaderNode: ASDisplayNode {
548548 let buttonKeys : [ PeerInfoHeaderButtonKey ] = ( self . isSettings || self . isMyProfile) ? [ ] : peerInfoHeaderButtons ( peer: peer, cachedData: cachedData, isOpenedFromChat: self . isOpenedFromChat, isExpanded: true , videoCallsEnabled: width > 320.0 && self . videoCallsEnabled, isSecretChat: isSecretChat, isContact: isContact, threadInfo: threadData? . info)
549549
550550 let useOledProfileStyle = presentationData. theme. overallDarkAppearance && !self . isSettings && !self . isMyProfile
551+ let useOledCardLayout = useOledProfileStyle
552+ let headerButtonKeys = useOledCardLayout ? [ ] : buttonKeys
551553
552554 let backgroundCoverSubject : PeerInfoCoverComponent . Subject ?
553555 var backgroundCoverAnimateIn = false
@@ -561,7 +563,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
561563 }
562564 self . didSetupBackgroundCover = true
563565 }
564- if !buttonKeys . isEmpty {
566+ if !headerButtonKeys . isEmpty {
565567 backgroundDefaultHeight = 327.0
566568 if metrics. isTablet {
567569 backgroundDefaultHeight += 60.0
@@ -2295,7 +2297,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
22952297 let buttonSpacing : CGFloat = 8.0
22962298 let buttonSideInset = max ( 16.0 , containerInset)
22972299
2298- let useCircularHeaderButtons = useOledProfileStyle && !buttonKeys . isEmpty
2300+ let useCircularHeaderButtons = useOledProfileStyle && !headerButtonKeys . isEmpty
22992301 let circularButtonDiameter : CGFloat = 52.0
23002302 let circularButtonSpacing : CGFloat = 20.0
23012303
@@ -2355,7 +2357,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
23552357 }
23562358 }
23572359
2358- let buttonWidth = useCircularHeaderButtons ? circularButtonDiameter : ( width - buttonSideInset * 2.0 + buttonSpacing) / CGFloat( buttonKeys . count) - buttonSpacing
2360+ let buttonWidth = useCircularHeaderButtons ? circularButtonDiameter : ( width - buttonSideInset * 2.0 + buttonSpacing) / CGFloat( max ( 1 , headerButtonKeys . count) ) - buttonSpacing
23592361 let buttonSize = CGSize ( width: buttonWidth, height: useCircularHeaderButtons ? circularButtonDiameter : 58.0 )
23602362 var buttonRightOrigin = CGPoint ( x: width - buttonSideInset, y: backgroundHeight - bottomInset - 16.0 - buttonSize. height)
23612363 if !actionButtonKeys. isEmpty {
@@ -2377,11 +2379,11 @@ final class PeerInfoHeaderNode: ASDisplayNode {
23772379
23782380 var circularButtonLeftOrigin : CGFloat = 0.0
23792381 if useCircularHeaderButtons {
2380- let totalButtonsWidth = CGFloat ( buttonKeys . count) * circularButtonDiameter + CGFloat( max ( 0 , buttonKeys . count - 1 ) ) * circularButtonSpacing
2382+ let totalButtonsWidth = CGFloat ( headerButtonKeys . count) * circularButtonDiameter + CGFloat( max ( 0 , headerButtonKeys . count - 1 ) ) * circularButtonSpacing
23812383 circularButtonLeftOrigin = floor ( ( width - totalButtonsWidth) / 2.0 )
23822384 }
23832385
2384- let orderedButtonKeys : [ PeerInfoHeaderButtonKey ] = useCircularHeaderButtons ? buttonKeys : buttonKeys . reversed ( )
2386+ let orderedButtonKeys : [ PeerInfoHeaderButtonKey ] = useCircularHeaderButtons ? headerButtonKeys : headerButtonKeys . reversed ( )
23852387 for buttonKey in orderedButtonKeys {
23862388 let buttonNode : PeerInfoHeaderButtonNode
23872389 var wasAdded = false
@@ -2413,55 +2415,16 @@ final class PeerInfoHeaderNode: ASDisplayNode {
24132415 }
24142416 buttonTransition. updateFrame ( view: buttonNode. backgroundContainerView, frame: buttonFrame. offsetBy ( dx: 0.0 , dy: - buttonFrame. minY) )
24152417
2416- let buttonText : String
2417- let buttonIcon : PeerInfoHeaderButtonIcon
2418- switch buttonKey {
2419- case . message:
2420- buttonText = presentationData. strings. PeerInfo_ButtonMessage
2421- buttonIcon = . message
2422- case . discussion:
2423- buttonText = presentationData. strings. PeerInfo_ButtonDiscuss
2424- buttonIcon = . message
2425- case . call:
2426- buttonText = presentationData. strings. PeerInfo_ButtonCall
2427- buttonIcon = . call
2428- case . videoCall:
2429- buttonText = presentationData. strings. PeerInfo_ButtonVideoCall
2430- buttonIcon = . videoCall
2431- case . voiceChat:
2432- if case let . channel( channel) = peer, case . broadcast = channel. info {
2433- buttonText = presentationData. strings. PeerInfo_ButtonLiveStream
2434- } else {
2435- buttonText = presentationData. strings. PeerInfo_ButtonVoiceChat
2436- }
2437- buttonIcon = . voiceChat
2438- case . mute:
2439- let chatIsMuted = peerInfoIsChatMuted ( peer: peer, peerNotificationSettings: peerNotificationSettings, threadNotificationSettings: threadNotificationSettings, globalNotificationSettings: globalNotificationSettings)
2440- if chatIsMuted {
2441- buttonText = presentationData. strings. PeerInfo_ButtonUnmute
2442- buttonIcon = . unmute
2443- } else {
2444- buttonText = presentationData. strings. PeerInfo_ButtonMute
2445- buttonIcon = . mute
2446- }
2447- case . more:
2448- buttonText = presentationData. strings. PeerInfo_ButtonMore
2449- buttonIcon = . more
2450- case . addMember:
2451- buttonText = presentationData. strings. PeerInfo_ButtonAddMember
2452- buttonIcon = . addMember
2453- case . search:
2454- buttonText = presentationData. strings. PeerInfo_ButtonSearch
2455- buttonIcon = . search
2456- case . leave:
2457- buttonText = presentationData. strings. PeerInfo_ButtonLeave
2458- buttonIcon = . leave
2459- case . stop:
2460- buttonText = presentationData. strings. PeerInfo_ButtonStop
2461- buttonIcon = . stop
2462- case . addContact:
2463- fatalError ( )
2464- }
2418+ let buttonContent = peerInfoHeaderButtonContent (
2419+ key: buttonKey,
2420+ presentationData: presentationData,
2421+ peer: peer,
2422+ peerNotificationSettings: peerNotificationSettings,
2423+ threadNotificationSettings: threadNotificationSettings,
2424+ globalNotificationSettings: globalNotificationSettings
2425+ )
2426+ let buttonText = buttonContent. text
2427+ let buttonIcon = buttonContent. icon
24652428
24662429 var isActive = true
24672430 if let highlightedButton = state. highlightedButton {
@@ -2496,7 +2459,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
24962459 }
24972460
24982461 for key in self . buttonNodes. keys {
2499- if !buttonKeys . contains ( key) {
2462+ if !headerButtonKeys . contains ( key) {
25002463 if let buttonNode = self . buttonNodes [ key] {
25012464 self . buttonNodes. removeValue ( forKey: key)
25022465 transition. updateAlpha ( layer: buttonNode. backgroundContainerView. layer, alpha: 0.0 )
@@ -2553,7 +2516,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
25532516 avatarSize: apparentAvatarFrame. size,
25542517 avatarScale: avatarScale,
25552518 defaultHeight: backgroundDefaultHeight,
2556- gradientCenter: CGPoint ( x: 0.5 , y: buttonKeys . isEmpty ? 0.5 : 0.45 ) ,
2519+ gradientCenter: CGPoint ( x: 0.5 , y: headerButtonKeys . isEmpty ? 0.5 : 0.45 ) ,
25572520 avatarTransitionFraction: max ( 0.0 , min ( 1.0 , titleCollapseFraction + transitionFraction * 2.0 ) ) ,
25582521 patternTransitionFraction: buttonsTransitionFraction * backgroundTransitionFraction
25592522 ) ) ,
@@ -2598,7 +2561,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
25982561 topLeftButtonsSize: CGSize ( width: ( self . isSettings ? 57.0 : 47.0 ) , height: 46.0 ) ,
25992562 topRightButtonsSize: CGSize ( width: 76.0 + ( self . isMyProfile ? 38.0 : 0.0 ) , height: 46.0 ) ,
26002563 titleWidth: max ( 140.0 , titleFrame. width) + 42.0 ,
2601- bottomHeight: !buttonKeys . isEmpty ? 81.0 : 30.0 ,
2564+ bottomHeight: !headerButtonKeys . isEmpty ? 81.0 : 30.0 ,
26022565 action: { [ weak self] gift in
26032566 guard let self, case let . unique( gift) = gift. gift else {
26042567 return
0 commit comments