mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-29 07:42:40 +00:00
Merge pull request #3982 from vector-im/element_3980
Social login: Handle new identity provider brand field in order to customize buttons
This commit is contained in:
commit
19327dd650
8 changed files with 80 additions and 15 deletions
|
@ -5,7 +5,7 @@ Changes to be released in next version
|
|||
*
|
||||
|
||||
🙌 Improvements
|
||||
*
|
||||
* Social login: Handle new identity provider brand field in order to customize buttons (#3980).
|
||||
|
||||
🐛 Bugfix
|
||||
*
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "social_login_button_gitlab.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "social_login_button_gitlab@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "social_login_button_gitlab@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 628 B |
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
|
@ -23,6 +23,7 @@ internal enum Asset {
|
|||
internal static let socialLoginButtonApple = ImageAsset(name: "social_login_button_apple")
|
||||
internal static let socialLoginButtonFacebook = ImageAsset(name: "social_login_button_facebook")
|
||||
internal static let socialLoginButtonGithub = ImageAsset(name: "social_login_button_github")
|
||||
internal static let socialLoginButtonGitlab = ImageAsset(name: "social_login_button_gitlab")
|
||||
internal static let socialLoginButtonGoogle = ImageAsset(name: "social_login_button_google")
|
||||
internal static let socialLoginButtonTwitter = ImageAsset(name: "social_login_button_twitter")
|
||||
internal static let callAudioMuteOffIcon = ImageAsset(name: "call_audio_mute_off_icon")
|
||||
|
|
|
@ -34,18 +34,7 @@ class SocialLoginButtonFactory {
|
|||
let defaultStyle: SocialLoginButtonStyle
|
||||
var styles: [String: SocialLoginButtonStyle] = [:]
|
||||
|
||||
switch identityProvider.identifier {
|
||||
case "google":
|
||||
(defaultStyle, styles) = self.buildGoogleButtonStyles()
|
||||
case "facebook":
|
||||
(defaultStyle, styles) = self.buildFacebookButtonStyles()
|
||||
case "github":
|
||||
(defaultStyle, styles) = self.buildGitHubButtonStyles()
|
||||
case "apple":
|
||||
(defaultStyle, styles) = self.buildAppleButtonStyles()
|
||||
case "twitter":
|
||||
(defaultStyle, styles) = self.buildTwitterButtonStyles()
|
||||
default:
|
||||
let buildDefaultButtonStyles: () -> (SocialLoginButtonStyle, [String: SocialLoginButtonStyle]) = {
|
||||
let image: SourceImage?
|
||||
|
||||
if let imageStringURL = identityProvider.icon, let imageURL = URL(string: imageStringURL) {
|
||||
|
@ -54,7 +43,30 @@ class SocialLoginButtonFactory {
|
|||
image = nil
|
||||
}
|
||||
|
||||
(defaultStyle, styles) = self.buildDefaultButtonStyles(with: image)
|
||||
return self.buildDefaultButtonStyles(with: image)
|
||||
}
|
||||
|
||||
if let idpBrandIdentifier = identityProvider.brand {
|
||||
let idpBrand = MXLoginSSOIdentityProviderBrand(rawValue: idpBrandIdentifier)
|
||||
|
||||
switch idpBrand {
|
||||
case .gitlab:
|
||||
(defaultStyle, styles) = self.buildGitLabButtonStyles()
|
||||
case .github:
|
||||
(defaultStyle, styles) = self.buildGitHubButtonStyles()
|
||||
case .apple:
|
||||
(defaultStyle, styles) = self.buildAppleButtonStyles()
|
||||
case .google:
|
||||
(defaultStyle, styles) = self.buildGoogleButtonStyles()
|
||||
case .facebook:
|
||||
(defaultStyle, styles) = self.buildFacebookButtonStyles()
|
||||
case .twitter:
|
||||
(defaultStyle, styles) = self.buildTwitterButtonStyles()
|
||||
default:
|
||||
(defaultStyle, styles) = buildDefaultButtonStyles()
|
||||
}
|
||||
} else {
|
||||
(defaultStyle, styles) = buildDefaultButtonStyles()
|
||||
}
|
||||
|
||||
let title = self.buildButtonTitle(with: identityProvider.name, mode: mode)
|
||||
|
@ -211,6 +223,31 @@ class SocialLoginButtonFactory {
|
|||
return (defaultStyle, styles)
|
||||
}
|
||||
|
||||
private func buildGitLabButtonStyles() -> (SocialLoginButtonStyle, [String: SocialLoginButtonStyle]) {
|
||||
|
||||
let logo: SourceImage = .local(Asset.Images.socialLoginButtonGitlab.image)
|
||||
|
||||
let lightStyle = SocialLoginButtonStyle(logo: logo,
|
||||
titleColor: .black,
|
||||
backgroundColor: .white,
|
||||
borderColor: .black)
|
||||
|
||||
let darkStyle = SocialLoginButtonStyle(logo: logo,
|
||||
titleColor: .white,
|
||||
backgroundColor: .black,
|
||||
borderColor: .white)
|
||||
|
||||
let defaultStyle: SocialLoginButtonStyle = lightStyle
|
||||
|
||||
let styles: [String: SocialLoginButtonStyle] = [
|
||||
ThemeIdentifier.light.rawValue: lightStyle,
|
||||
ThemeIdentifier.dark.rawValue: darkStyle,
|
||||
ThemeIdentifier.black.rawValue: darkStyle
|
||||
]
|
||||
|
||||
return (defaultStyle, styles)
|
||||
}
|
||||
|
||||
private func buildDefaultButtonStyles(with image: SourceImage?) -> (SocialLoginButtonStyle, [String: SocialLoginButtonStyle]) {
|
||||
|
||||
let lightStyle = SocialLoginButtonStyle(logo: image,
|
||||
|
|
|
@ -119,7 +119,11 @@ final class SocialLoginListView: UIView, NibLoadable {
|
|||
|
||||
// Order alphabeticaly by Identity Provider identifier
|
||||
let sortedIdentityProviders = identityProviders.sorted { (firstIdentityProvider, secondIdentityProvider) -> Bool in
|
||||
firstIdentityProvider.identifier < secondIdentityProvider.identifier
|
||||
if let firstIdentityProviderBrand = firstIdentityProvider.brand, let secondIdentityProviderBrand = secondIdentityProvider.brand {
|
||||
return firstIdentityProviderBrand < secondIdentityProviderBrand
|
||||
} else {
|
||||
return firstIdentityProvider.identifier < secondIdentityProvider.identifier
|
||||
}
|
||||
}
|
||||
|
||||
for identityProvider in sortedIdentityProviders {
|
||||
|
|
Loading…
Reference in a new issue