From 1619c7f46ce5b10cb3c22631c54da3ab914e5065 Mon Sep 17 00:00:00 2001 From: Davide De Rosa Date: Thu, 28 Nov 2019 11:42:23 +0100 Subject: [PATCH] Use placeholder when provider logo is missing So far it's what happens for dynamically added providers, because there is no local asset. --- Passepartout-iOS/Global/SwiftGen+Assets.swift | 1 + Passepartout-iOS/Global/Theme.swift | 2 +- .../placeholder.imageset/Contents.json | 22 ++++++++++++++++++ .../placeholder.imageset/placeholder@2x.png | Bin 0 -> 2362 bytes .../placeholder.imageset/placeholder@3x.png | Bin 0 -> 3468 bytes .../Organizer/OrganizerViewController.swift | 11 ++++++--- 6 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 Passepartout-iOS/Providers.xcassets/placeholder.imageset/Contents.json create mode 100644 Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@2x.png create mode 100644 Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@3x.png diff --git a/Passepartout-iOS/Global/SwiftGen+Assets.swift b/Passepartout-iOS/Global/SwiftGen+Assets.swift index dc5ead11..5f14a848 100644 --- a/Passepartout-iOS/Global/SwiftGen+Assets.swift +++ b/Passepartout-iOS/Global/SwiftGen+Assets.swift @@ -284,6 +284,7 @@ internal enum Asset { internal static let mullvad = ImageAsset(name: "mullvad") internal static let nordvpn = ImageAsset(name: "nordvpn") internal static let pia = ImageAsset(name: "pia") + internal static let placeholder = ImageAsset(name: "placeholder") internal static let protonvpn = ImageAsset(name: "protonvpn") internal static let tunnelbear = ImageAsset(name: "tunnelbear") internal static let vyprvpn = ImageAsset(name: "vyprvpn") diff --git a/Passepartout-iOS/Global/Theme.swift b/Passepartout-iOS/Global/Theme.swift index 936089cb..bd894edc 100644 --- a/Passepartout-iOS/Global/Theme.swift +++ b/Passepartout-iOS/Global/Theme.swift @@ -191,7 +191,7 @@ extension MFMailComposeViewController { // FIXME: load from index JSON extension Infrastructure.Metadata { - var logo: UIImage? { + var logo: UIImage { return ImageAsset(name: name.lowercased()).image } } diff --git a/Passepartout-iOS/Providers.xcassets/placeholder.imageset/Contents.json b/Passepartout-iOS/Providers.xcassets/placeholder.imageset/Contents.json new file mode 100644 index 00000000..13f500e4 --- /dev/null +++ b/Passepartout-iOS/Providers.xcassets/placeholder.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "placeholder@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "placeholder@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@2x.png b/Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3117a66223f054a915dc42dc25c60d7b80ccbe48 GIT binary patch literal 2362 zcmZ`*X;jjS690pOfPuMnUCOQ0v`i4MTY3}11r$qj&k%7B*Tg*)z2uULxZLu(rsj32 z#HGw76Ror|w+u5w#g?nytT10{+RaBF--mbR%=~8N%x~tL`7md4PCMBl5h@4(0FXp` zf{Pd}e<}c3#F@uoOeCF zKG2-rsWH1ztWl5fE|a;Bo0Q4OaBs|LckSLQUYftjxsHUO;=DP&zV+az@ zMySqHPd@>QVWNJq=pwx-gx}S$KwVVWGLACjP{I#(4s+k2 zf(gVDu!IW846>~aYRgI_A>^`*)oflLkey$DT>Q0&sHvyiC%t7P^3#|Pt{r_0>@XYB zJDiFA28%kk*x+iZ`!L5A%w$l7WEB`Ci+k-P**?X?@|Ku|pkhcD>cerG=QssY`YKhu zL$`pSDN>&$Pg=}00T_XL!hlcci zATflyqF8k&XB8#X?rnAGk-Hq!ea!*9qX;2 z;6iziZB3ohg|J-_sleqt<98F1~=J^}n$V z@1^q|%veJf52GwMt$={s!QM9i@I&n@te{OYs_;@p%9^KLOnkgs!hGjkZHYN>ixw20UR(YQC5)DTc<5L5 zC}rD^>hZ2Qon>s_cGT?&*+pbIScLFbI`>re3<6k)_S{e8!)NgsH8feS>unX;OqNfq z)VDnAANy2GJqI;E&ciNVQG@Jr5@;@Vv$CXWkhPpFW-F(NwL}Zp`U5=7ogvaTO9!1I z)FfUEt0#&VD?^)0+C*nE^q)*jGk(`osefz`w06V|5Oh6w__Yoe++6?%U0Qd$oZJ1_ z-$iv5lnUE_6+c}$tt4uy;vh9HS(9=O+AJ5P|ErV?k1Bg=uUFWo>HXl4=t+;yz*65$ z;&O<^y_Ye9Q^GbnIrW6e-i5}QOgDYGXGq=-)WEq~R_eFwEhU_pOLxyg4JK8nS=hpg z5>Gd77CfatTDp}?)7{*aQG(1LY@6c6LZ;Nm4@k^w!v$Ywtr?6{FkH2J(O>?|mjz|{ z(@MT=mSc$9+zc*ASz^`$ho)MSB!%n-S@y}bQF3&H_eW?KpS8fOQ`DL$J$ER| z+WI$-p@1)8YNz-yww2uugHUuswH$4_(toU!-Wdg_4of%YZ^TN2`t ze(loVVl`lR2b0lwwV0a+T1gfy|djngSmUmqMEm!b9DD6O9+O@YsTdvZs zKU5_NeMe)qeKH9(**-qBhxv<%6vL0(E_=EF!R(pNA&y$Kav8}KMlaDS_u?6z4Zf0X z?nt?N4`_{bxE$8v_;>%+$)3UGC@rPpU;q`0RKw7>6^2YA!`=ISSx||u}D6(u>MR*jg+op^Sh8m2j2ura| zOWH#|07dP#af+>C0&&zKK!`!fKV`pSmOhA^+ird@8%B9y`^axql)I<4bdP8R=fKx} zCeh!VQmFZPS5@enl6 zGw#3$s;>1twH2t1swAevO!z)XRMhU&ksybD-X~1oiSwh1kXhJ%zjX!Dy0oiNcc#(M zOyUJ{U1}3PZX;iD3jgs&(pG)`wf3YRMY?|3+>x+q|T_N$)EDcOV|yW`0A=}EFnE+&%{owG8jzv&ZM zs$?|x?sn824YN4ss3eTjplXg0{YyGm#qYjBUW!h|i{}$rxiCvQN11Bas+bU|8!3z5 z8*fGNMc=D(HanL@2?Q2}Nt73QZ#sC`TaWR%pc*~QM>XLR!QK(;UGrVv`-78uC|pn5 z=_s4yR5F}Ow!++stqmRdi(Z(t$cu-%R9Q&6~9mmU|XdAiFxXcdoF`a>jr(UeJws zwpFE(eFbozNlv}>d3b+Px#Zdy8(?kUWf5BTm%qpoCqy=YQ}#7#ds?1 literal 0 HcmV?d00001 diff --git a/Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@3x.png b/Passepartout-iOS/Providers.xcassets/placeholder.imageset/placeholder@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc8aed71d220bc60830ad8a04efaa44ce362982 GIT binary patch literal 3468 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 literal 0 HcmV?d00001 diff --git a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift index f87c65a4..6ed2570a 100644 --- a/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift +++ b/Passepartout-iOS/Scenes/Organizer/OrganizerViewController.swift @@ -473,9 +473,14 @@ extension OrganizerViewController { case .profile: let cell = Cells.setting.dequeue(from: tableView, for: indexPath) let rowProfile = profileKey(at: indexPath) - if rowProfile.context == .provider, let metadata = InfrastructureFactory.shared.metadata(forName: rowProfile.id) { - cell.imageView?.image = metadata.logo - cell.leftText = metadata.description + if rowProfile.context == .provider { + if let metadata = InfrastructureFactory.shared.metadata(forName: rowProfile.id) { + cell.imageView?.image = metadata.logo + cell.leftText = metadata.description + } else { + cell.imageView?.image = Asset.Providers.placeholder.image + cell.leftText = rowProfile.id + } } else { cell.imageView?.image = nil cell.leftText = rowProfile.id