BTUIKViewUtil.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. #import "BTUIKViewUtil.h"
  2. #import "BTUIKMasterCardVectorArtView.h"
  3. #import "BTUIKJCBVectorArtView.h"
  4. #import "BTUIKMaestroVectorArtView.h"
  5. #import "BTUIKVisaVectorArtView.h"
  6. #import "BTUIKDiscoverVectorArtView.h"
  7. #import "BTUIKUnknownCardVectorArtView.h"
  8. #import "BTUIKDinersClubVectorArtView.h"
  9. #import "BTUIKAmExVectorArtView.h"
  10. #import "BTUIKPayPalMonogramCardView.h"
  11. #import "BTUIKCoinbaseMonogramCardView.h"
  12. #import "BTUIKVenmoMonogramCardView.h"
  13. #import "BTUIKUnionPayVectorArtView.h"
  14. #import "BTUIKHipercardVectorArtView.h"
  15. #import "BTUIKHiperVectorArtView.h"
  16. #import "BTUIKApplePayMarkVectorArtView.h"
  17. #import "BTUIKLargeMasterCardVectorArtView.h"
  18. #import "BTUIKLargeJCBVectorArtView.h"
  19. #import "BTUIKLargeMaestroVectorArtView.h"
  20. #import "BTUIKLargeVisaVectorArtView.h"
  21. #import "BTUIKLargeDiscoverVectorArtView.h"
  22. #import "BTUIKLargeUnknownCardVectorArtView.h"
  23. #import "BTUIKLargeDinersClubVectorArtView.h"
  24. #import "BTUIKLargeAmExVectorArtView.h"
  25. #import "BTUIKLargePayPalMonogramCardView.h"
  26. #import "BTUIKLargeCoinbaseMonogramCardView.h"
  27. #import "BTUIKLargeVenmoMonogramCardView.h"
  28. #import "BTUIKLargeUnionPayVectorArtView.h"
  29. #import "BTUIKLargeHiperVectorArtView.h"
  30. #import "BTUIKLargeHipercardVectorArtView.h"
  31. #import "BTUIKLargeApplePayMarkVectorArtView.h"
  32. #import "BTUIKCVVBackVectorArtView.h"
  33. #import "BTUIKCVVFrontVectorArtView.h"
  34. @import AudioToolbox;
  35. @implementation BTUIKViewUtil
  36. + (BTUIKPaymentOptionType)paymentMethodTypeForCardType:(BTUIKCardType *)cardType {
  37. if (cardType == nil) {
  38. return BTUIKPaymentOptionTypeUnknown;
  39. }
  40. if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_AMERICAN_EXPRESS)]) {
  41. return BTUIKPaymentOptionTypeAMEX;
  42. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_VISA)]) {
  43. return BTUIKPaymentOptionTypeVisa;
  44. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_MASTER_CARD)]) {
  45. return BTUIKPaymentOptionTypeMasterCard;
  46. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_DISCOVER)]) {
  47. return BTUIKPaymentOptionTypeDiscover;
  48. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_JCB)]) {
  49. return BTUIKPaymentOptionTypeJCB;
  50. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_MAESTRO)]) {
  51. return BTUIKPaymentOptionTypeMaestro;
  52. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_DINERS_CLUB)]) {
  53. return BTUIKPaymentOptionTypeDinersClub;
  54. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_UNION_PAY)]) {
  55. return BTUIKPaymentOptionTypeUnionPay;
  56. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_HIPER)]) {
  57. return BTUIKPaymentOptionTypeHiper;
  58. } else if ([cardType.brand isEqualToString:BTUIKLocalizedString(CARD_TYPE_HIPERCARD)]) {
  59. return BTUIKPaymentOptionTypeHipercard;
  60. } else {
  61. return BTUIKPaymentOptionTypeUnknown;
  62. }
  63. }
  64. + (NSString *)nameForPaymentMethodType:(BTUIKPaymentOptionType)paymentMethodType {
  65. switch (paymentMethodType) {
  66. case BTUIKPaymentOptionTypeUnknown:
  67. return BTUIKLocalizedString(CARD_TYPE_GENERIC_CARD);
  68. case BTUIKPaymentOptionTypeAMEX:
  69. return BTUIKLocalizedString(CARD_TYPE_AMERICAN_EXPRESS);
  70. case BTUIKPaymentOptionTypeDinersClub:
  71. return BTUIKLocalizedString(CARD_TYPE_DINERS_CLUB);
  72. case BTUIKPaymentOptionTypeDiscover:
  73. return BTUIKLocalizedString(CARD_TYPE_DISCOVER);
  74. case BTUIKPaymentOptionTypeMasterCard:
  75. return BTUIKLocalizedString(CARD_TYPE_MASTER_CARD);
  76. case BTUIKPaymentOptionTypeVisa:
  77. return BTUIKLocalizedString(CARD_TYPE_VISA);
  78. case BTUIKPaymentOptionTypeJCB:
  79. return BTUIKLocalizedString(CARD_TYPE_JCB);
  80. case BTUIKPaymentOptionTypeLaser:
  81. return BTUIKLocalizedString(CARD_TYPE_GENERIC_CARD);
  82. case BTUIKPaymentOptionTypeMaestro:
  83. return BTUIKLocalizedString(CARD_TYPE_MAESTRO);
  84. case BTUIKPaymentOptionTypeUnionPay:
  85. return BTUIKLocalizedString(CARD_TYPE_UNION_PAY);
  86. case BTUIKPaymentOptionTypeHiper:
  87. return BTUIKLocalizedString(CARD_TYPE_HIPER);
  88. case BTUIKPaymentOptionTypeHipercard:
  89. return BTUIKLocalizedString(CARD_TYPE_HIPERCARD);
  90. case BTUIKPaymentOptionTypeSolo:
  91. return BTUIKLocalizedString(CARD_TYPE_GENERIC_CARD);
  92. case BTUIKPaymentOptionTypeSwitch:
  93. return BTUIKLocalizedString(CARD_TYPE_GENERIC_CARD);
  94. case BTUIKPaymentOptionTypeUKMaestro:
  95. return BTUIKLocalizedString(CARD_TYPE_MAESTRO);
  96. case BTUIKPaymentOptionTypePayPal:
  97. return BTUIKLocalizedString(PAYPAL);
  98. case BTUIKPaymentOptionTypeCoinbase:
  99. return BTUIKLocalizedString(BRANDING_COINBASE);
  100. case BTUIKPaymentOptionTypeVenmo:
  101. return BTUIKLocalizedString(BRANDING_VENMO);
  102. case BTUIKPaymentOptionTypeApplePay:
  103. return BTUIKLocalizedString(BRANDING_APPLE_PAY);
  104. }
  105. }
  106. + (void)vibrate {
  107. AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
  108. }
  109. #pragma mark Icons
  110. + (BTUIKPaymentOptionType)paymentOptionTypeForPaymentInfoType:(NSString *)typeString {
  111. if ([typeString isEqualToString:@"Visa"]) {
  112. return BTUIKPaymentOptionTypeVisa;
  113. } else if ([typeString isEqualToString:@"MasterCard"]) {
  114. return BTUIKPaymentOptionTypeMasterCard;
  115. } else if ([typeString isEqualToString:@"Coinbase"]) {
  116. return BTUIKPaymentOptionTypeCoinbase;
  117. } else if ([typeString isEqualToString:@"PayPal"]) {
  118. return BTUIKPaymentOptionTypePayPal;
  119. } else if ([typeString isEqualToString:@"DinersClub"]) {
  120. return BTUIKPaymentOptionTypeDinersClub;
  121. } else if ([typeString isEqualToString:@"JCB"]) {
  122. return BTUIKPaymentOptionTypeJCB;
  123. } else if ([typeString isEqualToString:@"Maestro"]) {
  124. return BTUIKPaymentOptionTypeMaestro;
  125. } else if ([typeString isEqualToString:@"Discover"]) {
  126. return BTUIKPaymentOptionTypeDiscover;
  127. } else if ([typeString isEqualToString:@"UKMaestro"]) {
  128. return BTUIKPaymentOptionTypeUKMaestro;
  129. } else if ([typeString isEqualToString:@"AMEX"] || [typeString isEqualToString:@"American Express"]) {
  130. return BTUIKPaymentOptionTypeAMEX;
  131. } else if ([typeString isEqualToString:@"Solo"]) {
  132. return BTUIKPaymentOptionTypeSolo;
  133. } else if ([typeString isEqualToString:@"Laser"]) {
  134. return BTUIKPaymentOptionTypeLaser;
  135. } else if ([typeString isEqualToString:@"Switch"]) {
  136. return BTUIKPaymentOptionTypeSwitch;
  137. } else if ([typeString isEqualToString:@"UnionPay"]) {
  138. return BTUIKPaymentOptionTypeUnionPay;
  139. } else if ([typeString isEqualToString:@"Hiper"]) {
  140. return BTUIKPaymentOptionTypeHiper;
  141. } else if ([typeString isEqualToString:@"Hipercard"]) {
  142. return BTUIKPaymentOptionTypeHipercard;
  143. } else if ([typeString isEqualToString:@"Venmo"]) {
  144. return BTUIKPaymentOptionTypeVenmo;
  145. } else if ([typeString isEqualToString:@"ApplePay"]) {
  146. return BTUIKPaymentOptionTypeApplePay;
  147. } else {
  148. return BTUIKPaymentOptionTypeUnknown;
  149. }
  150. }
  151. + (BOOL)isPaymentOptionTypeACreditCard:(BTUIKPaymentOptionType)paymentOptionType {
  152. switch(paymentOptionType) {
  153. case BTUIKPaymentOptionTypeVisa:
  154. case BTUIKPaymentOptionTypeMasterCard:
  155. case BTUIKPaymentOptionTypeDinersClub:
  156. case BTUIKPaymentOptionTypeJCB:
  157. case BTUIKPaymentOptionTypeMaestro:
  158. case BTUIKPaymentOptionTypeDiscover:
  159. case BTUIKPaymentOptionTypeUKMaestro:
  160. case BTUIKPaymentOptionTypeAMEX:
  161. case BTUIKPaymentOptionTypeSolo:
  162. case BTUIKPaymentOptionTypeLaser:
  163. case BTUIKPaymentOptionTypeSwitch:
  164. case BTUIKPaymentOptionTypeUnionPay:
  165. case BTUIKPaymentOptionTypeHiper:
  166. case BTUIKPaymentOptionTypeHipercard:
  167. return YES;
  168. default:
  169. return NO;
  170. }
  171. }
  172. + (BTUIKVectorArtView *)vectorArtViewForPaymentInfoType:(NSString *)typeString {
  173. return [self vectorArtViewForPaymentOptionType:[self.class paymentOptionTypeForPaymentInfoType:typeString]];
  174. }
  175. + (BTUIKVectorArtView *)vectorArtViewForPaymentOptionType:(BTUIKPaymentOptionType)type {
  176. return [self vectorArtViewForPaymentOptionType:type size:BTUIKVectorArtSizeRegular];
  177. }
  178. + (BTUIKVectorArtView *)vectorArtViewForPaymentOptionType:(BTUIKPaymentOptionType)type size:(BTUIKVectorArtSize)size {
  179. switch (type) {
  180. case BTUIKPaymentOptionTypeVisa:
  181. return size == BTUIKVectorArtSizeRegular ? [BTUIKVisaVectorArtView new] : [BTUIKLargeVisaVectorArtView new];
  182. case BTUIKPaymentOptionTypeMasterCard:
  183. return size == BTUIKVectorArtSizeRegular ? [BTUIKMasterCardVectorArtView new] : [BTUIKLargeMasterCardVectorArtView new];
  184. case BTUIKPaymentOptionTypeCoinbase:
  185. return size == BTUIKVectorArtSizeRegular ? [BTUIKCoinbaseMonogramCardView new] : [BTUIKLargeCoinbaseMonogramCardView new];
  186. case BTUIKPaymentOptionTypePayPal:
  187. return size == BTUIKVectorArtSizeRegular ? [BTUIKPayPalMonogramCardView new] : [BTUIKLargePayPalMonogramCardView new];
  188. case BTUIKPaymentOptionTypeDinersClub:
  189. return size == BTUIKVectorArtSizeRegular ? [BTUIKDinersClubVectorArtView new] : [BTUIKLargeDinersClubVectorArtView new];
  190. case BTUIKPaymentOptionTypeJCB:
  191. return size == BTUIKVectorArtSizeRegular ? [BTUIKJCBVectorArtView new] : [BTUIKLargeJCBVectorArtView new];
  192. case BTUIKPaymentOptionTypeMaestro:
  193. return size == BTUIKVectorArtSizeRegular ? [BTUIKMaestroVectorArtView new] : [BTUIKLargeMaestroVectorArtView new];
  194. case BTUIKPaymentOptionTypeDiscover:
  195. return size == BTUIKVectorArtSizeRegular ? [BTUIKDiscoverVectorArtView new] : [BTUIKLargeDiscoverVectorArtView new];
  196. case BTUIKPaymentOptionTypeUKMaestro:
  197. return size == BTUIKVectorArtSizeRegular ? [BTUIKMaestroVectorArtView new] : [BTUIKLargeMaestroVectorArtView new];
  198. case BTUIKPaymentOptionTypeAMEX:
  199. return size == BTUIKVectorArtSizeRegular ? [BTUIKAmExVectorArtView new] : [BTUIKLargeAmExVectorArtView new];
  200. case BTUIKPaymentOptionTypeVenmo:
  201. return size == BTUIKVectorArtSizeRegular ? [BTUIKVenmoMonogramCardView new] : [BTUIKLargeVenmoMonogramCardView new];
  202. case BTUIKPaymentOptionTypeUnionPay:
  203. return size == BTUIKVectorArtSizeRegular ? [BTUIKUnionPayVectorArtView new] : [BTUIKLargeUnionPayVectorArtView new];
  204. case BTUIKPaymentOptionTypeHiper:
  205. return size == BTUIKVectorArtSizeRegular ? [BTUIKHiperVectorArtView new] : [BTUIKLargeHiperVectorArtView new];
  206. case BTUIKPaymentOptionTypeHipercard:
  207. return size == BTUIKVectorArtSizeRegular ? [BTUIKHipercardVectorArtView new] : [BTUIKLargeHipercardVectorArtView new];
  208. case BTUIKPaymentOptionTypeApplePay:
  209. // No large apple pay
  210. return [BTUIKApplePayMarkVectorArtView new];
  211. case BTUIKPaymentOptionTypeSolo:
  212. case BTUIKPaymentOptionTypeLaser:
  213. case BTUIKPaymentOptionTypeSwitch:
  214. case BTUIKPaymentOptionTypeUnknown:
  215. return size == BTUIKVectorArtSizeRegular ? [BTUIKUnknownCardVectorArtView new] : [BTUIKLargeUnknownCardVectorArtView new];
  216. }
  217. }
  218. + (BTUIKVectorArtView *)vectorArtViewForVisualAssetType:(BTUIKVisualAssetType)type {
  219. switch (type) {
  220. case BTUIKVisualAssetTypeCVVFront:
  221. return [BTUIKCVVFrontVectorArtView new];
  222. case BTUIKVisualAssetTypeCVVBack:
  223. return [BTUIKCVVBackVectorArtView new];
  224. case BTUIKVisualAssetTypeUnknown:
  225. return [BTUIKVectorArtView new];
  226. }
  227. }
  228. + (BOOL)isLanguageLayoutDirectionRightToLeft {
  229. return [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft;
  230. }
  231. + (NSTextAlignment)naturalTextAlignment {
  232. return [self isLanguageLayoutDirectionRightToLeft] ? NSTextAlignmentRight : NSTextAlignmentLeft;
  233. }
  234. + (NSTextAlignment)naturalTextAlignmentInverse {
  235. return [self isLanguageLayoutDirectionRightToLeft] ? NSTextAlignmentLeft : NSTextAlignmentRight;
  236. }
  237. + (UIWindowScene *)activeWindowScene API_AVAILABLE(ios(13.0)) {
  238. for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
  239. if (scene.activationState == UISceneActivationStateForegroundActive) {
  240. return (UIWindowScene *)scene;
  241. }
  242. }
  243. return nil;
  244. }
  245. + (BOOL)isOrientationLandscape {
  246. if (@available(iOS 13, *)) {
  247. return UIInterfaceOrientationIsLandscape([self activeWindowScene].interfaceOrientation);
  248. } else {
  249. return UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication.statusBarOrientation);
  250. }
  251. }
  252. + (CGFloat)statusBarHeight {
  253. if (@available(iOS 13, *)) {
  254. return CGRectGetHeight([self activeWindowScene].statusBarManager.statusBarFrame);
  255. } else {
  256. return CGRectGetHeight(UIApplication.sharedApplication.statusBarFrame);
  257. }
  258. }
  259. @end