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:
SBiOSoftWhare 2021-01-29 21:12:22 +01:00 committed by GitHub
commit 19327dd650
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 80 additions and 15 deletions

View file

@ -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
*

View file

@ -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

View file

@ -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")

View file

@ -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,

View file

@ -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 {