CardMessageViewController.swift 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /*
  2. * Copyright 2019 Google
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. import UIKit
  17. class CardMessageViewController: CommonMessageTestVC {
  18. class TestableCardMessage: InAppMessagingCardDisplay {
  19. var writableTitle: String
  20. var writableBody: String?
  21. var writableTextColor: UIColor
  22. var writablePortraitImageData: InAppMessagingImageData
  23. var writableLandscapeImageData: InAppMessagingImageData?
  24. var writableBackgroundColor: UIColor
  25. var writablePrimaryActionButton: InAppMessagingActionButton
  26. var writablePrimaryActionURL: URL
  27. var writableSecondaryActionButton: InAppMessagingActionButton?
  28. var writableSecondaryActionURL: URL?
  29. override var title: String {
  30. return writableTitle
  31. }
  32. override var body: String? {
  33. return writableBody
  34. }
  35. override var textColor: UIColor {
  36. return writableTextColor
  37. }
  38. override var portraitImageData: InAppMessagingImageData {
  39. return writablePortraitImageData
  40. }
  41. override var landscapeImageData: InAppMessagingImageData? {
  42. return writableLandscapeImageData
  43. }
  44. override var displayBackgroundColor: UIColor {
  45. return writableBackgroundColor
  46. }
  47. override var primaryActionButton: InAppMessagingActionButton {
  48. return writablePrimaryActionButton
  49. }
  50. override var primaryActionURL: URL {
  51. return writablePrimaryActionURL
  52. }
  53. override var secondaryActionButton: InAppMessagingActionButton? {
  54. return writableSecondaryActionButton
  55. }
  56. override var secondaryActionURL: URL? {
  57. return writableSecondaryActionURL
  58. }
  59. init(titleText: String,
  60. body: String?,
  61. textColor: UIColor,
  62. portraitImageData: InAppMessagingImageData,
  63. landscapeImageData: InAppMessagingImageData?,
  64. backgroundColor: UIColor,
  65. primaryActionButton: InAppMessagingActionButton,
  66. primaryActionURL: URL,
  67. secondaryActionButton: InAppMessagingActionButton?,
  68. secondaryActionURL: URL?) {
  69. writableTitle = titleText
  70. writableBody = body
  71. writableTextColor = textColor
  72. writablePortraitImageData = portraitImageData
  73. writableLandscapeImageData = landscapeImageData
  74. writableBackgroundColor = backgroundColor
  75. writablePrimaryActionButton = primaryActionButton
  76. writablePrimaryActionURL = primaryActionURL
  77. writableSecondaryActionButton = secondaryActionButton
  78. writableSecondaryActionURL = secondaryActionURL
  79. super.init(messageID: "testID",
  80. campaignName: "testCampaign",
  81. renderAsTestMessage: false,
  82. messageType: .card,
  83. triggerType: .onAnalyticsEvent)
  84. }
  85. }
  86. let displayImpl = InAppMessagingDefaultDisplayImpl()
  87. @IBOutlet var verifyLabel: UILabel!
  88. override func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage,
  89. with action: InAppMessagingAction) {
  90. super.messageClicked(inAppMessage, with: action)
  91. verifyLabel.text = "message clicked!"
  92. }
  93. override func messageDismissed(_ inAppMessage: InAppMessagingDisplayMessage,
  94. dismissType: FIRInAppMessagingDismissType) {
  95. super.messageDismissed(inAppMessage, dismissType: dismissType)
  96. verifyLabel.text = "message dismissed!"
  97. }
  98. @IBAction func showRegularOneButtonWithBothImages(_ sender: Any) {
  99. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  100. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  101. imageData: portraitImageRawData!)
  102. let landscapeImageRawData = produceImageOfSize(size: CGSize(width: 200, height: 200))
  103. let landscapeImageData = InAppMessagingImageData(imageURL: "url not important",
  104. imageData: landscapeImageRawData!)
  105. let cardMessage = TestableCardMessage(
  106. titleText: normalMessageTitle,
  107. body: normalMessageBody,
  108. textColor: UIColor.black,
  109. portraitImageData: portraitImageData,
  110. landscapeImageData: landscapeImageData,
  111. backgroundColor: UIColor.white,
  112. primaryActionButton: defaultActionButton,
  113. primaryActionURL: URL(string: "http://google.com")!,
  114. secondaryActionButton: nil,
  115. secondaryActionURL: nil
  116. )
  117. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  118. }
  119. @IBAction func showRegularOneButtonWithOnlyPortrait(_ sender: Any) {
  120. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  121. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  122. imageData: portraitImageRawData!)
  123. let cardMessage = TestableCardMessage(
  124. titleText: normalMessageTitle,
  125. body: nil,
  126. textColor: UIColor.black,
  127. portraitImageData: portraitImageData,
  128. landscapeImageData: nil,
  129. backgroundColor: UIColor.white,
  130. primaryActionButton: defaultActionButton,
  131. primaryActionURL: URL(string: "http://google.com")!,
  132. secondaryActionButton: nil,
  133. secondaryActionURL: nil
  134. )
  135. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  136. }
  137. @IBAction func showRegularTwoButtonWithBothImages(_ sender: Any) {
  138. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  139. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  140. imageData: portraitImageRawData!)
  141. let landscapeImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 300))
  142. let landscapeImageData = InAppMessagingImageData(imageURL: "url not important",
  143. imageData: landscapeImageRawData!)
  144. let cardMessage = TestableCardMessage(
  145. titleText: normalMessageTitle,
  146. body: normalMessageBody,
  147. textColor: UIColor.black,
  148. portraitImageData: portraitImageData,
  149. landscapeImageData: landscapeImageData,
  150. backgroundColor: UIColor.white,
  151. primaryActionButton: defaultActionButton,
  152. primaryActionURL: URL(string: "http://google.com")!,
  153. secondaryActionButton: defaultSecondaryActionButton,
  154. secondaryActionURL: nil
  155. )
  156. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  157. }
  158. @IBAction func showLongTitleRegularBody(_ sender: Any) {
  159. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  160. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  161. imageData: portraitImageRawData!)
  162. let cardMessage = TestableCardMessage(
  163. titleText: longTitleText,
  164. body: normalMessageBody,
  165. textColor: UIColor.black,
  166. portraitImageData: portraitImageData,
  167. landscapeImageData: nil,
  168. backgroundColor: UIColor.white,
  169. primaryActionButton: defaultActionButton,
  170. primaryActionURL: URL(string: "http://google.com")!,
  171. secondaryActionButton: defaultSecondaryActionButton,
  172. secondaryActionURL: nil
  173. )
  174. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  175. }
  176. @IBAction func showRegularTitleLongBody(_ sender: Any) {
  177. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  178. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  179. imageData: portraitImageRawData!)
  180. let cardMessage = TestableCardMessage(
  181. titleText: normalMessageTitle,
  182. body: longBodyText,
  183. textColor: UIColor.black,
  184. portraitImageData: portraitImageData,
  185. landscapeImageData: nil,
  186. backgroundColor: UIColor.white,
  187. primaryActionButton: defaultActionButton,
  188. primaryActionURL: URL(string: "http://google.com")!,
  189. secondaryActionButton: defaultSecondaryActionButton,
  190. secondaryActionURL: nil
  191. )
  192. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  193. }
  194. @IBAction func showLongTitleNoBody(_ sender: Any) {
  195. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  196. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  197. imageData: portraitImageRawData!)
  198. let cardMessage = TestableCardMessage(
  199. titleText: longTitleText,
  200. body: nil,
  201. textColor: UIColor.black,
  202. portraitImageData: portraitImageData,
  203. landscapeImageData: nil,
  204. backgroundColor: UIColor.white,
  205. primaryActionButton: defaultActionButton,
  206. primaryActionURL: URL(string: "http://google.com")!,
  207. secondaryActionButton: defaultSecondaryActionButton,
  208. secondaryActionURL: nil
  209. )
  210. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  211. }
  212. @IBAction func showLongPrimaryButton(_ sender: Any) {
  213. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  214. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  215. imageData: portraitImageRawData!)
  216. let cardMessage = TestableCardMessage(
  217. titleText: longTitleText,
  218. body: normalMessageBody,
  219. textColor: UIColor.black,
  220. portraitImageData: portraitImageData,
  221. landscapeImageData: nil,
  222. backgroundColor: UIColor.white,
  223. primaryActionButton: longTextButton,
  224. primaryActionURL: URL(string: "http://google.com")!,
  225. secondaryActionButton: defaultSecondaryActionButton,
  226. secondaryActionURL: nil
  227. )
  228. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  229. }
  230. @IBAction func showLongSecondaryButton(_ sender: Any) {
  231. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 300, height: 200))
  232. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  233. imageData: portraitImageRawData!)
  234. let cardMessage = TestableCardMessage(
  235. titleText: longTitleText,
  236. body: normalMessageBody,
  237. textColor: UIColor.black,
  238. portraitImageData: portraitImageData,
  239. landscapeImageData: nil,
  240. backgroundColor: UIColor.white,
  241. primaryActionButton: defaultActionButton,
  242. primaryActionURL: URL(string: "http://google.com")!,
  243. secondaryActionButton: longTextButton,
  244. secondaryActionURL: nil
  245. )
  246. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  247. }
  248. @IBAction func showSmallImage(_ sender: Any) {
  249. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 30, height: 20))
  250. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  251. imageData: portraitImageRawData!)
  252. let cardMessage = TestableCardMessage(
  253. titleText: normalMessageTitle,
  254. body: normalMessageBody,
  255. textColor: UIColor.black,
  256. portraitImageData: portraitImageData,
  257. landscapeImageData: nil,
  258. backgroundColor: UIColor.white,
  259. primaryActionButton: defaultActionButton,
  260. primaryActionURL: URL(string: "http://google.com")!,
  261. secondaryActionButton: nil,
  262. secondaryActionURL: nil
  263. )
  264. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  265. }
  266. @IBAction func showHugeImage(_ sender: Any) {
  267. let portraitImageRawData = produceImageOfSize(size: CGSize(width: 3000, height: 2000))
  268. let portraitImageData = InAppMessagingImageData(imageURL: "url not important",
  269. imageData: portraitImageRawData!)
  270. let cardMessage = TestableCardMessage(
  271. titleText: normalMessageTitle,
  272. body: normalMessageBody,
  273. textColor: UIColor.black,
  274. portraitImageData: portraitImageData,
  275. landscapeImageData: nil,
  276. backgroundColor: UIColor.white,
  277. primaryActionButton: defaultActionButton,
  278. primaryActionURL: URL(string: "http://google.com")!,
  279. secondaryActionButton: nil,
  280. secondaryActionURL: nil
  281. )
  282. displayImpl.displayMessage(cardMessage, displayDelegate: self)
  283. }
  284. }