From c6604eac6387d1f694587b5597cb2a992d4df130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pellissier?= Date: Wed, 27 Oct 2021 18:28:19 +0200 Subject: [PATCH 01/11] chore: fix DSYM upload in bitrise --- bitrise.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitrise.yml b/bitrise.yml index f39fb0a8e..92760297c 100644 --- a/bitrise.yml +++ b/bitrise.yml @@ -72,7 +72,7 @@ workflows: Jira|<${JIRA_BASE_URL}browse/${JIRA_ISSUE_KEYS}|${JIRA_ISSUE_KEYS}> - firebase-dsym-upload: inputs: - - fdu_dsym_location: "$BITRISE_DEPLOY_DIR/Entourage-ios.dSYM.zip" + - fdu_dsym_location: "$BITRISE_DEPLOY_DIR/Entourage.dSYM.zip" - fdu_google_services_location: "./entourage/Settings/Environment/GoogleService-Info.plist" is_always_run: true - cache-push: From 32ace0c984cdfc39629af3e595dc03bc071d95cb Mon Sep 17 00:00:00 2001 From: Jr Date: Fri, 29 Oct 2021 17:12:58 +0200 Subject: [PATCH 02/11] [EN-4254] Add AB testing / remote config for 3 cells types -> homeExpert --- Podfile | 1 + Podfile.lock | 20 +- Shared/Cells Xib/CellHomeExpertActionA.xib | 164 ++ Shared/Cells Xib/CellHomeExpertActionB.xib | 136 ++ Shared/Cells Xib/CellHomeExpertEventA.xib | 153 ++ Shared/Cells Xib/CellHomeExpertEventB.xib | 126 ++ .../Home/OTHomeCollectionViewCells.swift | 89 +- .../Home/OTHomeExpertViewController.swift | 168 +- .../Home/OTHomeTableViewCells.swift | 145 +- Shared/Classes/Settings/OTAppConfiguration.m | 16 + Shared/Storyboards/Main.storyboard | 1576 +++++++++++++++-- entourage.xcodeproj/project.pbxproj | 40 +- ...rvice-Info-social.entourage.ios.beta.plist | 4 +- 13 files changed, 2442 insertions(+), 196 deletions(-) create mode 100644 Shared/Cells Xib/CellHomeExpertActionA.xib create mode 100644 Shared/Cells Xib/CellHomeExpertActionB.xib create mode 100644 Shared/Cells Xib/CellHomeExpertEventA.xib create mode 100644 Shared/Cells Xib/CellHomeExpertEventB.xib diff --git a/Podfile b/Podfile index e047a14bf..cd1966712 100644 --- a/Podfile +++ b/Podfile @@ -16,6 +16,7 @@ def sharedPods pod 'Firebase/Analytics', '~> 8.0.0' pod 'Firebase/Messaging', '~> 8.0.0' pod 'Firebase/Crashlytics', '~> 8.0.0' + pod 'Firebase/RemoteConfig', '~> 8.0.0' pod 'SnapKit', '~> 4.0.0' pod 'GooglePlaces', '~> 4.2.0' pod 'TTTAttributedLabel' diff --git a/Podfile.lock b/Podfile.lock index ca18bdfca..acab24fe1 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -30,6 +30,11 @@ PODS: - Firebase/Messaging (8.0.0): - Firebase/CoreOnly - FirebaseMessaging (~> 8.0.0) + - Firebase/RemoteConfig (8.0.0): + - Firebase/CoreOnly + - FirebaseRemoteConfig (~> 8.0.0) + - FirebaseABTesting (8.8.0): + - FirebaseCore (~> 8.0) - FirebaseAnalytics (8.0.0): - FirebaseAnalytics/AdIdSupport (= 8.0.0) - FirebaseCore (~> 8.0) @@ -84,6 +89,12 @@ PODS: - GoogleUtilities/Environment (~> 7.4) - GoogleUtilities/Reachability (~> 7.4) - GoogleUtilities/UserDefaults (~> 7.4) + - FirebaseRemoteConfig (8.0.0): + - FirebaseABTesting (~> 8.0) + - FirebaseCore (~> 8.0) + - FirebaseInstallations (~> 8.0) + - GoogleUtilities/Environment (~> 7.4) + - "GoogleUtilities/NSData+zlib (~> 7.4)" - GoogleAppMeasurement (8.0.0): - GoogleAppMeasurement/AdIdSupport (= 8.0.0) - GoogleUtilities/AppDelegateSwizzler (~> 7.4) @@ -142,6 +153,7 @@ DEPENDENCIES: - Firebase/Analytics (~> 8.0.0) - Firebase/Crashlytics (~> 8.0.0) - Firebase/Messaging (~> 8.0.0) + - Firebase/RemoteConfig (~> 8.0.0) - GooglePlaces (~> 4.2.0) - IQKeyboardManager (~> 6.5) - kingpin (= 0.3.1) @@ -156,12 +168,14 @@ SPEC REPOS: - AWSCore - AWSS3 - Firebase + - FirebaseABTesting - FirebaseAnalytics - FirebaseCore - FirebaseCoreDiagnostics - FirebaseCrashlytics - FirebaseInstallations - FirebaseMessaging + - FirebaseRemoteConfig - GoogleAppMeasurement - GoogleDataTransport - GoogleMaps @@ -181,12 +195,14 @@ SPEC CHECKSUMS: AWSCore: 55c154ae27efc5c98bdc30a0eeea5a35d10a2ab5 AWSS3: 2272253b098d07803af8dd20ce6ce7302bcffb47 Firebase: 73c3e3b216ec1ecbc54d2ffdd4670c65c749edb1 + FirebaseABTesting: 981336dd14d84787e33466e4247f77ec2343f8d9 FirebaseAnalytics: dcb92c7c9ef4fa7ffac276e8f87bd4fc8c97f1b8 FirebaseCore: 3f09591d51292843e2a46f18358d60bf4e996255 FirebaseCoreDiagnostics: a31d987ba0fe16d59886a5dbadc2f1de871f88c8 FirebaseCrashlytics: 69cddb6bfa7656c5346e603bc85b029392252ee6 FirebaseInstallations: c4aab1005d6547b00a7529777fe52f5d4d45165b FirebaseMessaging: 1a33b4af3c8042ed6ddacb6c031894af2064bfab + FirebaseRemoteConfig: 055f6b5ba1751547596ded5032c4d5c6054ca501 GoogleAppMeasurement: c6bbc9753d046b5456dd4f940057fbad2c28419e GoogleDataTransport: 11e3a5f2c190327df1a4a5d7e7ae3d4d5b9c9e4c GoogleMaps: eb03e327edfd70b06de1e6e321653f73712df7ad @@ -201,6 +217,6 @@ SPEC CHECKSUMS: SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6 TTTAttributedLabel: 8cffe8e127e4e82ff3af1e5386d4cd0ad000b656 -PODFILE CHECKSUM: a5bfdb803a8493719dc693c14e83e0feab207a69 +PODFILE CHECKSUM: e1e3407446476639377a5dedc009a2b48fbc77d1 -COCOAPODS: 1.10.1 +COCOAPODS: 1.11.2 diff --git a/Shared/Cells Xib/CellHomeExpertActionA.xib b/Shared/Cells Xib/CellHomeExpertActionA.xib new file mode 100644 index 000000000..37dfed4b4 --- /dev/null +++ b/Shared/Cells Xib/CellHomeExpertActionA.xib @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/Cells Xib/CellHomeExpertActionB.xib b/Shared/Cells Xib/CellHomeExpertActionB.xib new file mode 100644 index 000000000..06e9877b6 --- /dev/null +++ b/Shared/Cells Xib/CellHomeExpertActionB.xib @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/Cells Xib/CellHomeExpertEventA.xib b/Shared/Cells Xib/CellHomeExpertEventA.xib new file mode 100644 index 000000000..f1186c097 --- /dev/null +++ b/Shared/Cells Xib/CellHomeExpertEventA.xib @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/Cells Xib/CellHomeExpertEventB.xib b/Shared/Cells Xib/CellHomeExpertEventB.xib new file mode 100644 index 000000000..7aa6964b3 --- /dev/null +++ b/Shared/Cells Xib/CellHomeExpertEventB.xib @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/Classes/Controller/Home/OTHomeCollectionViewCells.swift b/Shared/Classes/Controller/Home/OTHomeCollectionViewCells.swift index ec6fc7d52..470122443 100644 --- a/Shared/Classes/Controller/Home/OTHomeCollectionViewCells.swift +++ b/Shared/Classes/Controller/Home/OTHomeCollectionViewCells.swift @@ -18,7 +18,7 @@ class OTHomeCollectionViewCell: UICollectionViewCell { @IBOutlet weak var ui_title_location: UILabel! @IBOutlet weak var ui_picto_location: UIImageView! - @IBOutlet weak var ui_info_action_by: UILabel! + @IBOutlet weak var ui_info_action_by: UILabel? @IBOutlet weak var ui_button_profile: UIButton! @IBOutlet weak var ui_picto_check_profile: UIImageView! @IBOutlet weak var ui_title_profile: UILabel! @@ -44,7 +44,7 @@ class OTHomeCollectionViewCell: UICollectionViewCell { ui_title_action.text = OTLocalisationService.getLocalizedValue(forKey: item.groupType) ui_title_action.textColor = UIColor.appOrange() ui_info_show_more?.text = OTLocalisationService.getLocalizedValue(forKey: "show_more_event") - ui_info_action_by.text = OTLocalisationService.getLocalizedValue(forKey: "home_event_info_user") + ui_info_action_by?.text = OTLocalisationService.getLocalizedValue(forKey: "home_event_info_user") } else { ui_title_action.text = OTLocalisationService.getLocalizedValue(forKey: item.entourage_type) @@ -52,11 +52,11 @@ class OTHomeCollectionViewCell: UICollectionViewCell { if item.entourage_type == "contribution" { ui_title_action.textColor = UIColor.appBlue() - ui_info_action_by.text = OTLocalisationService.getLocalizedValue(forKey: "home_action_contrib_info_user") + ui_info_action_by?.text = OTLocalisationService.getLocalizedValue(forKey: "home_action_contrib_info_user") } else { ui_title_action.textColor = UIColor.appOrange() - ui_info_action_by.text = OTLocalisationService.getLocalizedValue(forKey: "home_action_info_user") + ui_info_action_by?.text = OTLocalisationService.getLocalizedValue(forKey: "home_action_info_user") } } @@ -113,6 +113,77 @@ class OTHomeCollectionViewCell: UICollectionViewCell { } } + func updateCellVariant(item:OTEntourage,delegate:CellClickDelegate?) { + self.delegate = delegate + self.item = item + + let cat = getCat(type: item.type, category: item.category) + + ui_title_action.text = cat.title_list + ui_info_show_more?.text = OTLocalisationService.getLocalizedValue(forKey: "show_more") + + ui_title_description.text = item.title + ui_title_profile.text = item.author.displayName + + //Picto + if let pictoStr = OTAppAppearance.iconName(forEntourageItem: item, isAnnotation: false) { + ui_picto_action.image = UIImage.init(named: pictoStr) + } + + let distance = HomeCellUtils.getDistance(item: item) + var distanceStr = "" + + if distance < 1000000 { + distanceStr = HomeCellUtils.formattedItemDistance(distance: distance) + if distanceStr.count > 0 { + distanceStr = String.init(format: "%@ - ", distanceStr) + } + } + if item.postalCode.count == 0 && distanceStr.count == 0 { + distanceStr = " " + } + ui_title_location.text = String.init(format: "%@%@", distanceStr,item.postalCode) + + + if OTAppConfiguration.shouldShowCreatorImagesForNewsFeedItems() { + ui_button_profile.setupAsProfilePicture(fromUrl: item.author.avatarUrl) + ui_button_profile.isHidden = false + + if item.author.partner == nil { + ui_picto_check_profile.isHidden = true + } + else { + ui_picto_check_profile.isHidden = false + ui_picto_check_profile.setup(fromUrl: item.author.partner.smallLogoUrl, withPlaceholder: "badgeDefault") + } + } + else { + ui_button_profile.isHidden = true + ui_picto_check_profile.isHidden = true + } + } + + func getCat(type:String,category:String) -> OTCategory { + var cat = OTCategory.init() + if let _array = OTCategoryFromJsonService.getData() as? [OTCategoryType] { + + for item in _array { + if item.type == type { + for _item2 in item.categories { + if let _cat = _item2 as? OTCategory { + if _cat.category == category { + cat = _cat + break + } + } + } + break + } + } + } + return cat + } + @IBAction func action_show_profile(_ sender: UIButton) { self.delegate?.showDetailUser(userId: item.author.uID) } @@ -130,12 +201,14 @@ class OTHomeEventCollectionViewCell: UICollectionViewCell { @IBOutlet weak var ui_picto_location: UIImageView! @IBOutlet weak var ui_title_nb_people: UILabel! - @IBOutlet weak var ui_info_show_more: UILabel! + @IBOutlet weak var ui_info_show_more: UILabel? override func awakeFromNib() { super.awakeFromNib() self.contentView.layer.cornerRadius = 8.0 self.contentView.layer.masksToBounds = true + + ui_info_show_more?.text = OTLocalisationService.getLocalizedValue(forKey: "show_more") } func updateCell(item:OTEntourage) { @@ -171,8 +244,8 @@ class OTHomeEventCollectionViewCell: UICollectionViewCell { ui_title_nb_people?.text = "\(nbPeople) \(OTLocalisationService.getLocalizedValue(forKey: "participants")!)" } - if let url = item.entourage_event_url_image_portrait { - ui_image_event.setup(fromUrl: url, withPlaceholder: "ic_placeholder_event_feed") + if let url = item.entourage_event_url_image_landscape { + ui_image_event.setup(fromUrl: url, withPlaceholder: "ic_placeholder_event_horizontal") } } } @@ -237,7 +310,7 @@ class OTHomeCellOther: UICollectionViewCell { self.isShowZone = isShowZone self.ui_image_bottom?.isHidden = true self.ui_image?.isHidden = false - self.contentView.backgroundColor = UIColor.clear + self.contentView.backgroundColor = UIColor.appOrange() } func populateCell(title:String,buttonMoreTxt:String) { ui_title.text = title diff --git a/Shared/Classes/Controller/Home/OTHomeExpertViewController.swift b/Shared/Classes/Controller/Home/OTHomeExpertViewController.swift index bd10c4a60..3c7bcb4ed 100644 --- a/Shared/Classes/Controller/Home/OTHomeExpertViewController.swift +++ b/Shared/Classes/Controller/Home/OTHomeExpertViewController.swift @@ -7,12 +7,26 @@ // import UIKit +import FirebaseRemoteConfig +import AVFoundation + +enum VariantCell { + case Original + case VariantA + case VariantB +} + class OTHomeExpertViewController: UIViewController { let CELL_HEADLINES_HEIGHT:CGFloat = 330 - let CELL_EVENTS_HEIGHT:CGFloat = 280 - let CELL_ACTIONS_HEIGHT:CGFloat = 298 + let CELL_EVENTS_HEIGHT_ORIGINAL:CGFloat = 280 + let CELL_EVENTS_HEIGHT_VARIANT_B:CGFloat = 320 + let CELL_EVENTS_HEIGHT_VARIANT_A:CGFloat = 360 + + let CELL_ACTIONS_HEIGHT_ORIGINAL:CGFloat = 298 + let CELL_ACTIONS_HEIGHT_VARIANT_A:CGFloat = 328 + let CELL_ACTIONS_HEIGHT_VARIANT_B:CGFloat = 278 @IBOutlet weak var ui_tableview: UITableView! @IBOutlet weak var ui_button_tour: UIButton! @@ -33,6 +47,8 @@ class OTHomeExpertViewController: UIViewController { var isFromProfile = false + var variantType:VariantCell = .Original + override func viewDidLoad() { super.viewDidLoad() @@ -61,7 +77,42 @@ class OTHomeExpertViewController: UIViewController { OTLogger.logEvent(View_Start_ExpertFeed) - getFeed() + let remoteValue = RemoteConfig.remoteConfig()["cell_home_expert_type"] + switch(remoteValue.numberValue) { + case 0: + self.variantType = .Original + case 1: + self.variantType = .VariantA + case 2 : + self.variantType = .VariantB + default: + break + } + + let defaultDuration:TimeInterval = 0//60 * 60 * 24 //TODO -remettre les bonnes valuers après tests preprod- + RemoteConfig.remoteConfig().fetch(withExpirationDuration: defaultDuration) { Status, error in + if error == nil { + RemoteConfig.remoteConfig().activate { changed, error in + let remoteCell = RemoteConfig.remoteConfig()["cell_home_expert_type"] + + switch(remoteCell.numberValue) { + case 0: + self.variantType = .Original + case 1: + self.variantType = .VariantA + case 2 : + self.variantType = .VariantB + default: + break + } + + self.getFeed() + } + } + else { + self.getFeed() + } + } } override func viewWillAppear(_ animated: Bool) { @@ -273,13 +324,31 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCellAnnouncesEmpty", for: indexPath) as! OTHomeCellCollectionView } else if arrayFeedEmpty[indexPath.row].type == .Events { - cell = tableView.dequeueReusableCell(withIdentifier: "collectionCellEventsEmpty", for: indexPath) as! OTHomeCellCollectionView + var identifierVariant = "" + switch self.variantType { + case .Original: + identifierVariant = "collectionCellEventsEmpty" + case .VariantA: + identifierVariant = "collectionCellEventsEmptyA" + case .VariantB: + identifierVariant = "collectionCellEventsEmptyB" + } + cell = tableView.dequeueReusableCell(withIdentifier: identifierVariant, for: indexPath) as! OTHomeCellCollectionView } else { - cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCellActionsEmpty", for: indexPath) as! OTHomeCellCollectionView + var identifierVariant = "" + switch self.variantType { + case .Original: + identifierVariant = "CollectionCellActionsEmpty" + case .VariantA: + identifierVariant = "CollectionCellActionsEmptyA" + case .VariantB: + identifierVariant = "CollectionCellActionsEmptyB" + } + cell = tableView.dequeueReusableCell(withIdentifier: identifierVariant, for: indexPath) as! OTHomeCellCollectionView } - cell.populateCell(card: arrayFeedEmpty[indexPath.row],clickDelegate: self, isLoading: isLoading) + cell.populateCell(card: arrayFeedEmpty[indexPath.row],clickDelegate: self, isLoading: isLoading,variantType:self.variantType) return cell } @@ -296,13 +365,32 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCellAnnounces", for: indexPath) as! OTHomeCellCollectionView } else if arrayFeed[indexPath.row].type == .Events { - cell = tableView.dequeueReusableCell(withIdentifier: "collectionCellEvents", for: indexPath) as! OTHomeCellCollectionView + var identifierVariant = "" + switch self.variantType { + case .Original: + identifierVariant = "collectionCellEvents" + case .VariantA: + identifierVariant = "collectionCellEventsA" + case .VariantB: + identifierVariant = "collectionCellEventsB" + } + + cell = tableView.dequeueReusableCell(withIdentifier: identifierVariant, for: indexPath) as! OTHomeCellCollectionView } else { - cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCellActions", for: indexPath) as! OTHomeCellCollectionView + var identifierVariant = "" + switch self.variantType { + case .Original: + identifierVariant = "CollectionCellActions" + case .VariantA: + identifierVariant = "CollectionCellActionsA" + case .VariantB: + identifierVariant = "CollectionCellActionsB" + } + cell = tableView.dequeueReusableCell(withIdentifier: identifierVariant, for: indexPath) as! OTHomeCellCollectionView } - cell.populateCell(card: arrayFeed[indexPath.row],clickDelegate: self, isLoading: isLoading) + cell.populateCell(card: arrayFeed[indexPath.row],clickDelegate: self, isLoading: isLoading,variantType:self.variantType) return cell } @@ -313,9 +401,27 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource return CELL_HEADLINES_HEIGHT } if arrayFeedEmpty[indexPath.row].type == .Events { - return CELL_EVENTS_HEIGHT + var cell_height:CGFloat + switch self.variantType { + case .Original: + cell_height = CELL_EVENTS_HEIGHT_ORIGINAL + case .VariantA: + cell_height = CELL_EVENTS_HEIGHT_VARIANT_A + case .VariantB: + cell_height = CELL_EVENTS_HEIGHT_VARIANT_B + } + return cell_height + } + var cell_height:CGFloat + switch self.variantType { + case .Original: + cell_height = CELL_ACTIONS_HEIGHT_ORIGINAL + case .VariantA: + cell_height = CELL_ACTIONS_HEIGHT_VARIANT_A + case .VariantB: + cell_height = CELL_ACTIONS_HEIGHT_VARIANT_B } - return CELL_ACTIONS_HEIGHT + return cell_height } if indexPath.row == arrayFeed.count && self.isNeighbour { @@ -326,9 +432,28 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource return CELL_HEADLINES_HEIGHT } if arrayFeed[indexPath.row].type == .Events { - return CELL_EVENTS_HEIGHT + var cell_height:CGFloat + switch self.variantType { + case .Original: + cell_height = CELL_EVENTS_HEIGHT_ORIGINAL + case .VariantA: + cell_height = CELL_EVENTS_HEIGHT_VARIANT_A + case .VariantB: + cell_height = CELL_EVENTS_HEIGHT_VARIANT_B + } + return cell_height + } + + var cell_height:CGFloat + switch self.variantType { + case .Original: + cell_height = CELL_ACTIONS_HEIGHT_ORIGINAL + case .VariantA: + cell_height = CELL_ACTIONS_HEIGHT_VARIANT_A + case .VariantB: + cell_height = CELL_ACTIONS_HEIGHT_VARIANT_B } - return CELL_ACTIONS_HEIGHT + return cell_height } //MARK: Delegate click Cells @@ -343,6 +468,19 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource func selectCollectionViewCell(item:Any,type:HomeCardType, position:Int) { let posStr = "\(position+1)" var logString = "" + + //MARK: Use for AB Testing precision variant Analytics + var tagAB = "" + switch self.variantType { + case .Original: + tagAB = "Action__ExpertFeed__Show_O" + case .VariantA: + tagAB = "Action__ExpertFeed__Show_A" + case .VariantB: + tagAB = "Action__ExpertFeed__Show_B" + } + + if let _item = item as? OTEntourage { if _item.groupType == "outing" { if type == .Headlines { @@ -350,6 +488,8 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource } else { logString = "\(Action_expertFeed_Event)\(posStr)" + OTLogger.logEvent("Action__ExpertFeed__Show") //MARK: Use for AB Testing + OTLogger.logEvent(tagAB) //MARK: Use for AB Testing precision variant Analytics } let sb = UIStoryboard.init(name: "PublicFeedDetailNew", bundle: nil) let vc = sb.instantiateInitialViewController() as! OTDetailActionEventViewController @@ -363,6 +503,8 @@ extension OTHomeExpertViewController: UITableViewDelegate, UITableViewDataSource } else { logString = "\(Action_expertFeed_Action)\(posStr)" + OTLogger.logEvent("Action__ExpertFeed__Show") //MARK: Use for AB Testing + OTLogger.logEvent(tagAB) //MARK: Use for AB Testing precision variant Analytics } let sb = UIStoryboard.init(name: "PublicFeedDetailNew", bundle: nil) let vc = sb.instantiateInitialViewController() as! OTDetailActionEventViewController diff --git a/Shared/Classes/Controller/Home/OTHomeTableViewCells.swift b/Shared/Classes/Controller/Home/OTHomeTableViewCells.swift index 6ef005b7d..cbf345122 100644 --- a/Shared/Classes/Controller/Home/OTHomeTableViewCells.swift +++ b/Shared/Classes/Controller/Home/OTHomeTableViewCells.swift @@ -48,11 +48,27 @@ class OTHomeCellCollectionView: UITableViewCell,UICollectionViewDelegateFlowLayo weak var delegate:CellClickDelegate? = nil let cell_headline_size = CGSize(width: 200, height: 264) - let cell_event_size = CGSize(width: 292, height: 214) - let cell_event_zone_size = CGSize(width: 200, height: 214) - let cell_action_size = CGSize(width: 200, height: 232) - let cell_empty_event_size = CGSize(width: 140, height: 214) - let cell_empty_action_size = CGSize(width: 140, height: 232) + + let cell_event_size_Original = CGSize(width: 292, height: 214) + let cell_event_size_VariantB = CGSize(width: 230, height: 260) + let cell_event_size_VariantA = CGSize(width: 230, height: 300) + + let cell_event_zone_size_Original = CGSize(width: 200, height: 214) + let cell_event_zone_size_VariantB = CGSize(width: 200, height: 260) + let cell_event_zone_size_VariantA = CGSize(width: 200, height: 300) + + let cell_empty_event_size_Original = CGSize(width: 140, height: 214) + let cell_empty_event_size_VariantB = CGSize(width: 140, height: 260) + let cell_empty_event_size_VariantA = CGSize(width: 140, height: 300) + + let cell_action_size_Original = CGSize(width: 200, height: 232) + let cell_action_size_VariantA = CGSize(width: 230, height: 260) + let cell_action_size_VariantB = CGSize(width: 230, height: 210) + + let cell_empty_action_size_Original = CGSize(width: 140, height: 232) + let cell_empty_action_size_VariantA = CGSize(width: 140, height: 260) + let cell_empty_action_size_VariantB = CGSize(width: 140, height: 210) + let cell_spacing:CGFloat = 15.0 let minimumItemsToShowMore = 2 let spacing_coll_start:CGFloat = 25 @@ -64,12 +80,25 @@ class OTHomeCellCollectionView: UITableViewCell,UICollectionViewDelegateFlowLayo var isLoading = false + var variantType:VariantCell = .Original + override func awakeFromNib() { super.awakeFromNib() self.ui_collectionview.showsHorizontalScrollIndicator = false self.ui_collectionview.dataSource = self self.ui_collectionview.delegate = self + + //MARK: Use for AB Testing + let nibA = UINib(nibName: "CellHomeExpertEventA", bundle: nil) + ui_collectionview.register(nibA, forCellWithReuseIdentifier: "cellCollEventA") + let nibB = UINib(nibName: "CellHomeExpertEventB", bundle: nil) + ui_collectionview.register(nibB, forCellWithReuseIdentifier: "cellCollEventB") + + let nibActionA = UINib(nibName: "CellHomeExpertActionA", bundle: nil) + ui_collectionview.register(nibActionA, forCellWithReuseIdentifier: "cellCollActionA") + let nibActionB = UINib(nibName: "CellHomeExpertActionB", bundle: nil) + ui_collectionview.register(nibActionB, forCellWithReuseIdentifier: "cellCollActionB") } func changeFlowLayout() { @@ -79,10 +108,28 @@ class OTHomeCellCollectionView: UITableViewCell,UICollectionViewDelegateFlowLayo flowLayout.itemSize = cell_headline_size } else if cards.type == .Events { - flowLayout.itemSize = cell_event_size + var _size:CGSize + switch self.variantType { + case .Original: + _size = cell_event_size_Original + case .VariantA: + _size = cell_event_size_VariantA + case .VariantB: + _size = cell_event_size_VariantB + } + flowLayout.itemSize = _size } else { - flowLayout.itemSize = cell_action_size + var _size:CGSize + switch self.variantType { + case .Original: + _size = cell_action_size_Original + case .VariantA: + _size = cell_action_size_VariantA + case .VariantB: + _size = cell_action_size_VariantB + } + flowLayout.itemSize = _size } flowLayout.minimumLineSpacing = cell_spacing @@ -90,11 +137,13 @@ class OTHomeCellCollectionView: UITableViewCell,UICollectionViewDelegateFlowLayo self.ui_collectionview.collectionViewLayout = flowLayout } - func populateCell(card:HomeCard,clickDelegate:CellClickDelegate, isLoading:Bool) { + func populateCell(card:HomeCard,clickDelegate:CellClickDelegate, isLoading:Bool, variantType:VariantCell) { self.cards = card self.delegate = clickDelegate self.isLoading = isLoading + self.variantType = variantType + if card.type != .Headlines { self.isSpecialCells = cards.arrayCards.count <= minimalCellForSpecialCell } @@ -170,7 +219,16 @@ extension OTHomeCellCollectionView: UICollectionViewDataSource,UICollectionViewD return cell } - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellColl", for: indexPath) as! OTHomeEventCollectionViewCell + var cellName = "" + switch self.variantType { + case .Original: + cellName = "cellCollEvent" + case .VariantA: + cellName = "cellCollEventA" + case .VariantB: + cellName = "cellCollEventB" + } + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellName, for: indexPath) as! OTHomeEventCollectionViewCell let item = cards.arrayCards[indexPath.row] if let item = item as? OTEntourage { @@ -211,10 +269,25 @@ extension OTHomeCellCollectionView: UICollectionViewDataSource,UICollectionViewD return cell } - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellColl", for: indexPath) as! OTHomeCollectionViewCell + var cellName = "" + switch self.variantType { + case .Original: + cellName = "cellCollAction" + case .VariantA: + cellName = "cellCollActionA" + case .VariantB: + cellName = "cellCollActionB" + } + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellName, for: indexPath) as! OTHomeCollectionViewCell if let _entourage = cards.arrayCards[indexPath.row] as? OTEntourage { - cell.updateCell(item: _entourage,delegate: delegate) + if self.variantType == .Original { + cell.updateCell(item: _entourage,delegate: delegate) + } + else { + cell.updateCellVariant(item: _entourage,delegate: delegate) + } } return cell @@ -254,24 +327,62 @@ extension OTHomeCellCollectionView: UICollectionViewDataSource,UICollectionViewD return cell_headline_size } else if cards.type == .Events { + var specialSize:CGSize + var emptySize:CGSize + var normalSize:CGSize + switch self.variantType { + case .Original: + specialSize = cell_event_zone_size_Original + emptySize = cell_empty_event_size_Original + normalSize = cell_event_size_Original + case .VariantA: + specialSize = cell_event_zone_size_VariantA + emptySize = cell_empty_event_size_VariantA + normalSize = cell_event_size_VariantA + case .VariantB: + specialSize = cell_event_zone_size_VariantB + emptySize = cell_empty_event_size_VariantB + normalSize = cell_event_size_VariantB + } + if isSpecialCells && indexPath.row == cards.arrayCards.count { - return cell_event_zone_size + return specialSize } if indexPath.row == cards.arrayCards.count { - return cell_empty_event_size + return emptySize } - return cell_event_size + + return normalSize } else { + var specialSize:CGSize + var emptySize:CGSize + var normalSize:CGSize + switch self.variantType { + case .Original: + specialSize = cell_action_size_Original + emptySize = cell_empty_action_size_Original + normalSize = cell_action_size_Original + case .VariantA: + specialSize = cell_action_size_VariantA + emptySize = cell_empty_action_size_VariantA + normalSize = cell_action_size_VariantA + case .VariantB: + specialSize = cell_action_size_VariantB + emptySize = cell_empty_action_size_VariantB + normalSize = cell_action_size_VariantB + } + if isSpecialCells && indexPath.row == cards.arrayCards.count { - return cell_action_size + return specialSize } if indexPath.row == cards.arrayCards.count { - return cell_empty_action_size + return emptySize } - return cell_action_size + + return normalSize } } } diff --git a/Shared/Classes/Settings/OTAppConfiguration.m b/Shared/Classes/Settings/OTAppConfiguration.m index 683f0ce24..a8cf63f6d 100644 --- a/Shared/Classes/Settings/OTAppConfiguration.m +++ b/Shared/Classes/Settings/OTAppConfiguration.m @@ -221,6 +221,22 @@ - (void)configureFirebase [FIRAnalytics setUserPropertyString:[OTAuthService currentUserAuthenticationLevel] forName:@"AuthenticationLevel"]; [FIRMessaging messaging].delegate = (id)[UIApplication sharedApplication].delegate; + + [self configureRemoteConfig]; +} + +-(void) configureRemoteConfig { + [[FIRInstallations installations] authTokenForcingRefresh:true + completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) { + if (error != nil) { + NSLog(@"Error fetching Installation token %@", error); + return; + } + [[NSUserDefaults standardUserDefaults]setObject:[result authToken] forKey:@"token_abtest"]; + }]; + + NSDictionary * defaultValues = @{@"cell_home_expert_type" : @0}; + [[FIRRemoteConfig remoteConfig] setDefaults:defaultValues]; } - (void)configureAnalyticsWithOptions:(NSDictionary *)launchOptions diff --git a/Shared/Storyboards/Main.storyboard b/Shared/Storyboards/Main.storyboard index 7a042fc11..3888273fd 100644 --- a/Shared/Storyboards/Main.storyboard +++ b/Shared/Storyboards/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -1543,7 +1543,7 @@ Vous aussi, vous pouvez créer un entourage: appuyez sur + - + @@ -1690,7 +1690,7 @@ Vous aussi, vous pouvez créer un entourage: appuyez sur + - + @@ -1763,7 +1763,7 @@ Vous aussi, vous pouvez créer un entourage: appuyez sur + - + @@ -2736,7 +2736,7 @@ L2 - + @@ -3095,14 +3095,448 @@ de demandes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -3118,7 +3552,7 @@ de demandes - + @@ -3156,21 +3590,21 @@ de demandes - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -3270,52 +3924,52 @@ de demandes - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + - - - - - - - + + + + + + - - - - - - + + + + + + - - - - + + + + - + - - + + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - + + + + - + - - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + - + - + @@ -3586,11 +4664,11 @@ d’événements - + - + @@ -3611,14 +4689,14 @@ d’événements - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/entourage.xcodeproj/project.pbxproj b/entourage.xcodeproj/project.pbxproj index 90a7f94bc..587bc54dc 100644 --- a/entourage.xcodeproj/project.pbxproj +++ b/entourage.xcodeproj/project.pbxproj @@ -9,8 +9,13 @@ /* Begin PBXBuildFile section */ 0205197526F1E41F003B277B /* Pop_Info_Custom.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0205197426F1E41F003B277B /* Pop_Info_Custom.xib */; }; 0205197726F1E49E003B277B /* OTPopInfoCustom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0205197626F1E49E003B277B /* OTPopInfoCustom.swift */; }; + 020F46EF271EF92A0091B088 /* CellHomeExpertEventB.xib in Resources */ = {isa = PBXBuildFile; fileRef = 020F46EE271EF92A0091B088 /* CellHomeExpertEventB.xib */; }; + 020F46F3271EFDE00091B088 /* CellHomeExpertEventA.xib in Resources */ = {isa = PBXBuildFile; fileRef = 020F46F2271EFDE00091B088 /* CellHomeExpertEventA.xib */; }; 022231FB26F4929D000FCA9D /* OTEditActionPublicPrivateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022231FA26F4929D000FCA9D /* OTEditActionPublicPrivateViewController.swift */; }; 022F04C926F8CEF2001769C4 /* OTSearchEntouragesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 022F04C826F8CEF2001769C4 /* OTSearchEntouragesViewController.swift */; }; + 02659F5427204206009A3297 /* CellHomeExpertActionA.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02659F5327204206009A3297 /* CellHomeExpertActionA.xib */; }; + 02659F562720421B009A3297 /* CellHomeExpertActionB.xib in Resources */ = {isa = PBXBuildFile; fileRef = 02659F552720421B009A3297 /* CellHomeExpertActionB.xib */; }; + 0281F16C271D71130015F4A5 /* GoogleService-Info-social.entourage.ios.beta.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0281F16B271D71130015F4A5 /* GoogleService-Info-social.entourage.ios.beta.plist */; }; 02916A8A2716DA2B00A45AC5 /* OTMyActionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02916A892716DA2B00A45AC5 /* OTMyActionTableViewCell.swift */; }; 02F805E72715D88100694BB6 /* OTMyActionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02F805E62715D88100694BB6 /* OTMyActionsViewController.swift */; }; 0AA4C04C1C119B8000DBBE11 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AA4C04B1C119B8000DBBE11 /* AVFoundation.framework */; }; @@ -515,7 +520,6 @@ A28F4362216F88DD00A5EBEC /* OTAddActionConfidentialityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A28F4361216F88DD00A5EBEC /* OTAddActionConfidentialityViewController.m */; }; A296B90E2087218700F6AFBD /* Entourage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A296B90D2087218700F6AFBD /* Entourage.xcassets */; }; A296B91D2087A6F100F6AFBD /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A296B91B2087A6F000F6AFBD /* GoogleService-Info.plist */; }; - A296B9202087A70D00F6AFBD /* GoogleService-Info-social.entourage.ios.beta.plist in Resources */ = {isa = PBXBuildFile; fileRef = A296B91F2087A70D00F6AFBD /* GoogleService-Info-social.entourage.ios.beta.plist */; }; A296B92A2089DE4300F6AFBD /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A296B8EB20871FD800F6AFBD /* main.m */; }; A296B931208DFE8A00F6AFBD /* OTAppState.m in Sources */ = {isa = PBXBuildFile; fileRef = A296B930208DFE8A00F6AFBD /* OTAppState.m */; }; A296B93B2091ABDD00F6AFBD /* OTLocalisationService.m in Sources */ = {isa = PBXBuildFile; fileRef = A296B93A2091ABDD00F6AFBD /* OTLocalisationService.m */; }; @@ -552,8 +556,13 @@ /* Begin PBXFileReference section */ 0205197426F1E41F003B277B /* Pop_Info_Custom.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Pop_Info_Custom.xib; sourceTree = ""; }; 0205197626F1E49E003B277B /* OTPopInfoCustom.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTPopInfoCustom.swift; sourceTree = ""; }; + 020F46EE271EF92A0091B088 /* CellHomeExpertEventB.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CellHomeExpertEventB.xib; sourceTree = ""; }; + 020F46F2271EFDE00091B088 /* CellHomeExpertEventA.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellHomeExpertEventA.xib; sourceTree = ""; }; 022231FA26F4929D000FCA9D /* OTEditActionPublicPrivateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTEditActionPublicPrivateViewController.swift; sourceTree = ""; }; 022F04C826F8CEF2001769C4 /* OTSearchEntouragesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTSearchEntouragesViewController.swift; sourceTree = ""; }; + 02659F5327204206009A3297 /* CellHomeExpertActionA.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CellHomeExpertActionA.xib; sourceTree = ""; }; + 02659F552720421B009A3297 /* CellHomeExpertActionB.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellHomeExpertActionB.xib; sourceTree = ""; }; + 0281F16B271D71130015F4A5 /* GoogleService-Info-social.entourage.ios.beta.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-social.entourage.ios.beta.plist"; sourceTree = ""; }; 02916A892716DA2B00A45AC5 /* OTMyActionTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTMyActionTableViewCell.swift; sourceTree = ""; }; 02F805E62715D88100694BB6 /* OTMyActionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OTMyActionsViewController.swift; sourceTree = ""; }; 0AA4C04B1C119B8000DBBE11 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; @@ -1416,7 +1425,6 @@ A296B8EB20871FD800F6AFBD /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; A296B90D2087218700F6AFBD /* Entourage.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Entourage.xcassets; sourceTree = ""; }; A296B91B2087A6F000F6AFBD /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - A296B91F2087A70D00F6AFBD /* GoogleService-Info-social.entourage.ios.beta.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info-social.entourage.ios.beta.plist"; sourceTree = ""; }; A296B92F208DFE8A00F6AFBD /* OTAppState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OTAppState.h; sourceTree = ""; }; A296B930208DFE8A00F6AFBD /* OTAppState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OTAppState.m; sourceTree = ""; }; A296B9392091ABDD00F6AFBD /* OTLocalisationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OTLocalisationService.h; sourceTree = ""; }; @@ -1488,6 +1496,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 020F46F1271EFDC50091B088 /* Cells Xib */ = { + isa = PBXGroup; + children = ( + 020F46EE271EF92A0091B088 /* CellHomeExpertEventB.xib */, + 020F46F2271EFDE00091B088 /* CellHomeExpertEventA.xib */, + 02659F5327204206009A3297 /* CellHomeExpertActionA.xib */, + 02659F552720421B009A3297 /* CellHomeExpertActionB.xib */, + ); + path = "Cells Xib"; + sourceTree = ""; + }; 2B13BD8425FA59FE00B0E071 /* Home */ = { isa = PBXGroup; children = ( @@ -3047,7 +3066,7 @@ isa = PBXGroup; children = ( A2E5FA06208629690099B989 /* Entourage-Bridging-Header.h */, - A296B91F2087A70D00F6AFBD /* GoogleService-Info-social.entourage.ios.beta.plist */, + 0281F16B271D71130015F4A5 /* GoogleService-Info-social.entourage.ios.beta.plist */, A296B91B2087A6F000F6AFBD /* GoogleService-Info.plist */, ); path = Environment; @@ -3064,6 +3083,7 @@ A296B8EA20871FD800F6AFBD /* entourage-Prefix.pch */, 2BC579DC24B3751C00BB80C9 /* OTMainTabbarViewController.swift */, A296B8EB20871FD800F6AFBD /* main.m */, + 020F46F1271EFDC50091B088 /* Cells Xib */, A21D65822085FDAA00EF8E0E /* Storyboards */, A202E7BD2085CFC30058F32C /* Classes */, A202E79E2085CFC20058F32C /* Resources */, @@ -3309,10 +3329,12 @@ 0205197526F1E41F003B277B /* Pop_Info_Custom.xib in Resources */, A21D65AD2085FDAA00EF8E0E /* TourConfirmation.storyboard in Resources */, A21D65A92085FDAA00EF8E0E /* QuitFeedItem.storyboard in Resources */, + 02659F562720421B009A3297 /* CellHomeExpertActionB.xib in Resources */, A21D64AE2085E8B400EF8E0E /* Paris.gpx in Resources */, A21D65AE2085FDAA00EF8E0E /* MyEntourages.storyboard in Resources */, A202E7EF2085CFC40058F32C /* SF-UI-Text-HeavyItalic.otf in Resources */, A202E7E52085CFC40058F32C /* SF-UI-Text-UltrathinItalic.otf in Resources */, + 0281F16C271D71130015F4A5 /* GoogleService-Info-social.entourage.ios.beta.plist in Resources */, 2BB2E389244EFA84003011C9 /* Onboarding_V2.storyboard in Resources */, A202E7D32085CFC40058F32C /* Entourage.clr in Resources */, A21D65C02085FDAA00EF8E0E /* FeedChangeOptions.storyboard in Resources */, @@ -3340,6 +3362,7 @@ A2048A002151421500064EB0 /* IntroPage4.xib in Resources */, A21D65B82085FDAA00EF8E0E /* UserProfileEditor.storyboard in Resources */, A21D65A82085FDAA00EF8E0E /* Disclaimer.storyboard in Resources */, + 020F46F3271EFDE00091B088 /* CellHomeExpertEventA.xib in Resources */, A202E7ED2085CFC40058F32C /* SF-UI-Text-MediumItalic.otf in Resources */, 37339CD321FF01860048B6E1 /* OTPillLabelView.xib in Resources */, 2BE1F47825DAE16600CE318E /* Main2.storyboard in Resources */, @@ -3358,11 +3381,12 @@ A202E7CF2085CFC40058F32C /* logo_black.png in Resources */, A202E7F32085CFC40058F32C /* SF-UI-Text-Medium.otf in Resources */, A296B91D2087A6F100F6AFBD /* GoogleService-Info.plist in Resources */, + 02659F5427204206009A3297 /* CellHomeExpertActionA.xib in Resources */, A21D65B02085FDAA00EF8E0E /* EntourageEditor.storyboard in Resources */, A202E7F12085CFC40058F32C /* SF-UI-Text-LightItalic.otf in Resources */, A202E7D72085CFC40058F32C /* SharedImages.xcassets in Resources */, A2607686215577BC0068F65E /* OTFeedsTableFilterHeader.xib in Resources */, - A296B9202087A70D00F6AFBD /* GoogleService-Info-social.entourage.ios.beta.plist in Resources */, + 020F46EF271EF92A0091B088 /* CellHomeExpertEventB.xib in Resources */, A21D65B62085FDAA00EF8E0E /* Popup.storyboard in Resources */, A21D65BE2085FDAA00EF8E0E /* EntourageLaunchScreen.storyboard in Resources */, A202E7D52085CFC40058F32C /* Localizable.strings in Resources */, @@ -3446,11 +3470,13 @@ "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", "${BUILT_PRODUCTS_DIR}/AWSCore/AWSCore.framework", "${BUILT_PRODUCTS_DIR}/AWSS3/AWSS3.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseABTesting/FirebaseABTesting.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework", "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework", "${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework", "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework", @@ -3467,11 +3493,13 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSS3.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseABTesting.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCrashlytics.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseRemoteConfig.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManager.framework", @@ -3517,11 +3545,13 @@ "${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework", "${BUILT_PRODUCTS_DIR}/AWSCore/AWSCore.framework", "${BUILT_PRODUCTS_DIR}/AWSS3/AWSS3.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseABTesting/FirebaseABTesting.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework", "${BUILT_PRODUCTS_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework", "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework", "${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework", "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", "${BUILT_PRODUCTS_DIR}/IQKeyboardManager/IQKeyboardManager.framework", @@ -3538,11 +3568,13 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSCore.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AWSS3.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseABTesting.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCrashlytics.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseRemoteConfig.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManager.framework", diff --git a/entourage/Settings/Environment/GoogleService-Info-social.entourage.ios.beta.plist b/entourage/Settings/Environment/GoogleService-Info-social.entourage.ios.beta.plist index cd3aa5c48..5a3d70525 100644 --- a/entourage/Settings/Environment/GoogleService-Info-social.entourage.ios.beta.plist +++ b/entourage/Settings/Environment/GoogleService-Info-social.entourage.ios.beta.plist @@ -7,9 +7,9 @@ REVERSED_CLIENT_ID com.googleusercontent.apps.1085027645289-er783r6e1p5ec9h0nfteeoq0h88ga4j1 ANDROID_CLIENT_ID - 1085027645289-9rol5leuemfk2ntal17tog0n4aacncu6.apps.googleusercontent.com + 1085027645289-18d8ick3d57ava9kg67gpql6lcq673rg.apps.googleusercontent.com API_KEY - AIzaSyCggZeq74eDKAFqn7Jdmg4KwzB0pu-yDoU + AIzaSyBBr0X3w0cVrqBrrb_ArehtewjHmod4JcM GCM_SENDER_ID 1085027645289 PLIST_VERSION From 3a1557e36e3cef69bd03a814e49b0ab6b0b3111a Mon Sep 17 00:00:00 2001 From: Jr Date: Fri, 29 Oct 2021 17:14:18 +0200 Subject: [PATCH 03/11] [EN-4254] Add copy/paste token for ab/test inside profile Remind to remove after tests --- .../Settings/OTMenuProfileViewController.swift | 15 ++++++++++++++- Shared/Storyboards/Settings.storyboard | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Shared/Classes/Controller/Settings/OTMenuProfileViewController.swift b/Shared/Classes/Controller/Settings/OTMenuProfileViewController.swift index b39c34e9d..a7d7e2777 100644 --- a/Shared/Classes/Controller/Settings/OTMenuProfileViewController.swift +++ b/Shared/Classes/Controller/Settings/OTMenuProfileViewController.swift @@ -11,7 +11,7 @@ import Firebase import SVProgressHUD class OTMenuProfileViewController: UIViewController { - + @IBOutlet weak var ui_button_abtest: UIButton! @IBOutlet weak var ui_tableview: UITableView? var uuidInfo = "*****" @@ -39,6 +39,14 @@ class OTMenuProfileViewController: UIViewController { NotificationCenter.default.addObserver(self, selector: #selector(updateUser), name: NSNotification.Name(rawValue: kNotificationProfilePictureUpdated), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(updateUser), name: NSNotification.Name(rawValue: kNotificationSupportedPartnerUpdated), object: nil) + + + ui_button_abtest.isHidden = true + if isStaging { + ui_button_abtest.isHidden = false + + + } } deinit { @@ -228,6 +236,11 @@ class OTMenuProfileViewController: UIViewController { UIApplication.shared.openURL(url) } } + @IBAction func action_copy_token_abtest(_ sender: Any) { + let tokenABTest = UserDefaults.standard.string(forKey: "token_abtest") + UIPasteboard.general.string = tokenABTest + SVProgressHUD.showInfo(withStatus: "Information copiée dans le presse-papier") + } } //MARK: - UITableViewDelegate, UITableViewDataSource - diff --git a/Shared/Storyboards/Settings.storyboard b/Shared/Storyboards/Settings.storyboard index a0188e43c..deaff31ca 100644 --- a/Shared/Storyboards/Settings.storyboard +++ b/Shared/Storyboards/Settings.storyboard @@ -1,9 +1,9 @@ - + - + @@ -1483,9 +1483,20 @@ + + + @@ -1494,6 +1505,7 @@ + From 2b07adaa660ac9ec33ca97a08f4142652d598031 Mon Sep 17 00:00:00 2001 From: Jr Date: Wed, 10 Nov 2021 12:38:11 +0100 Subject: [PATCH 04/11] [EN-4259] add pop + show detail action/event when creating --- .../OTEntourageEditorViewController.m | 42 ++++--- .../Home/OTHomeMainViewController.swift | 61 ++++++++++ .../Home/OTHomeNeoActionViewController.swift | 12 +- Shared/Classes/View/OTCustomInfoPop.swift | 55 +++++++++ Shared/Classes/View/OTCustomInfoPop.xib | 94 ++++++++++++++++ Shared/OTMainTabbarViewController.swift | 4 +- Shared/Resources/Localizable.strings | 7 ++ Shared/Storyboards/Main.storyboard | 104 +++++++++--------- Shared/Storyboards/Main2.storyboard | 4 +- entourage.xcodeproj/project.pbxproj | 8 ++ 10 files changed, 310 insertions(+), 81 deletions(-) create mode 100644 Shared/Classes/View/OTCustomInfoPop.swift create mode 100644 Shared/Classes/View/OTCustomInfoPop.xib diff --git a/Shared/Classes/Controller/EntourageEditor/OTEntourageEditorViewController.m b/Shared/Classes/Controller/EntourageEditor/OTEntourageEditorViewController.m index 88ef27cc1..fd8314c56 100644 --- a/Shared/Classes/Controller/EntourageEditor/OTEntourageEditorViewController.m +++ b/Shared/Classes/Controller/EntourageEditor/OTEntourageEditorViewController.m @@ -315,11 +315,10 @@ - (void)createEntourage:(UIButton *)sender completion:(void(^)(void))completion [SVProgressHUD show]; [[OTEncounterService new] sendEntourage:self.editTableSource.entourage withSuccess:^(OTEntourage *sentEntourage) { - self.entourage = sentEntourage; - [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationEntourageCreated object:nil]; - [SVProgressHUD showSuccessWithStatus:OTLocalizedString(@"entourageCreated")]; - - + self.entourage = sentEntourage; + [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationEntourageCreated object:nil]; + [SVProgressHUD dismiss]; + // [SVProgressHUD showSuccessWithStatus:OTLocalizedString(@"entourageCreated")]; if (self.isFromHomeNeo) { NSString * tag = [NSString stringWithFormat:Action_NeoFeedAct_Send_X,self.tagNameAnalytic]; @@ -328,23 +327,22 @@ - (void)createEntourage:(UIButton *)sender completion:(void(^)(void))completion else { [OTLogger logEvent:@"CreateEntourageSuccess"]; } - - dispatch_async(dispatch_get_main_queue(), ^{ - - if ([self.entourageEditorDelegate respondsToSelector:@selector(didEditEntourage:)]) { - [self.entourageEditorDelegate performSelector:@selector(didEditEntourage:) withObject:sentEntourage]; - if (completion) { - completion(); - } - } - }); - } failure:^(NSError *error) { - [SVProgressHUD showErrorWithStatus:OTLocalizedString(@"entourageNotCreated")]; - sender.enabled = YES; - if (completion) { - completion(); - } - }]; + + dispatch_async(dispatch_get_main_queue(), ^{ + if ([self.entourageEditorDelegate respondsToSelector:@selector(didEditEntourage:)]) { + [self.entourageEditorDelegate performSelector:@selector(didEditEntourage:) withObject:sentEntourage]; + if (completion) { + completion(); + } + } + }); + } failure:^(NSError *error) { + [SVProgressHUD showErrorWithStatus:OTLocalizedString(@"entourageNotCreated")]; + sender.enabled = YES; + if (completion) { + completion(); + } + }]; } - (void)updateEntourage:(UIButton *)sender completion:(void(^)(void))completion { diff --git a/Shared/Classes/Controller/Home/OTHomeMainViewController.swift b/Shared/Classes/Controller/Home/OTHomeMainViewController.swift index 8fb907217..912c3f05e 100644 --- a/Shared/Classes/Controller/Home/OTHomeMainViewController.swift +++ b/Shared/Classes/Controller/Home/OTHomeMainViewController.swift @@ -7,6 +7,7 @@ // import UIKit +import SVProgressHUD class OTHomeMainViewController: UIViewController { @@ -19,6 +20,11 @@ class OTHomeMainViewController: UIViewController { var isExpertMode = false var isFromProfile = false + var timerClosePop:Timer? + let timerCount = 5 //seconds + var countdownClosePop = 5 //seconds + var alertPopInfo:OTCustomInfoPop? + override func viewDidLoad() { super.viewDidLoad() @@ -180,6 +186,49 @@ class OTHomeMainViewController: UIViewController { } } + func showFeedInfoDetail(feedItem:OTFeedItem) { + SVProgressHUD.dismiss() + if let tabvc = self.tabBarController { + alertPopInfo = OTCustomInfoPop(frame: tabvc.view.frame) + + var message = "" + var title = "" + if feedItem.isOuting() { + message = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateEvent") + title = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateEventTitle") + } + else { + if (feedItem as! OTEntourage).isAskForHelp() { + message = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateAsk") + title = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateAskTitle") + } + else { + message = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateContrib") + title = OTLocalisationService.getLocalizedValue(forKey: "infoPopCreateContribTitle") + } + } + + alertPopInfo?.setupTitle(title: title, subtitle: message) + alertPopInfo?.delegate = self + tabvc.view.addSubview(alertPopInfo!) + tabvc.view.bringSubviewToFront(alertPopInfo!) + } + + self.selectedFeedItem = feedItem + + countdownClosePop = timerCount + timerClosePop = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateCountdown), userInfo: nil, repeats: true) + } + + @objc func updateCountdown() { + if countdownClosePop > 0 { + countdownClosePop = countdownClosePop - 1 + } + else { + close() + } + } + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ActiveFeedItemDetailsSegue" { @@ -202,3 +251,15 @@ class OTHomeMainViewController: UIViewController { } } } + +//MARK: - ClosepopDelegate - +extension OTHomeMainViewController: ClosePopDelegate { + func close() { + alertPopInfo?.removeFromSuperview() + alertPopInfo = nil + timerClosePop?.invalidate() + DispatchQueue.main.async { + self.performSegue(withIdentifier: "pushDetailFeedNew", sender: self) + } + } +} diff --git a/Shared/Classes/Controller/Home/OTHomeNeoActionViewController.swift b/Shared/Classes/Controller/Home/OTHomeNeoActionViewController.swift index d8d1a60f9..b2f8b942b 100644 --- a/Shared/Classes/Controller/Home/OTHomeNeoActionViewController.swift +++ b/Shared/Classes/Controller/Home/OTHomeNeoActionViewController.swift @@ -52,8 +52,6 @@ extension OTHomeNeoActionViewController: UITableViewDataSource,UITableViewDelega func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - if indexPath.row == 6 { if let url = OTSafariService.redirectUrl(withIdentifier: SLUG_ACTION_SCB) { OTSafariService.launchInAppBrowser(with: url) @@ -155,10 +153,18 @@ extension OTHomeNeoActionViewController : EntourageEditorDelegate { func didEdit(_ entourage: OTEntourage!) { temporaryNavController?.dismiss(animated: true, completion: { self.temporaryNavController = nil - self.showAllActions() + self.showDetailEntourage(entourage) }) } + func showDetailEntourage(_ entourage: OTEntourage!) { + let sb = UIStoryboard.init(name: "PublicFeedDetailNew", bundle: nil) + if let vc = sb.instantiateInitialViewController() as? OTDetailActionEventViewController { + vc.feedItem = entourage + self.navigationController?.pushViewController(vc, animated: true) + } + } + func showAllEvents() { let sb = UIStoryboard.init(name: "Main2", bundle: nil) let vc = sb.instantiateViewController(withIdentifier: "OTMain0") as! OTFeedsViewController diff --git a/Shared/Classes/View/OTCustomInfoPop.swift b/Shared/Classes/View/OTCustomInfoPop.swift new file mode 100644 index 000000000..fbdd25bcc --- /dev/null +++ b/Shared/Classes/View/OTCustomInfoPop.swift @@ -0,0 +1,55 @@ +// +// OTCustomInfoPop.swift +// entourage +// +// Created by Jerome on 09/11/2021. +// Copyright © 2021 Entourage. All rights reserved. +// + +import UIKit + +class OTCustomInfoPop: UIView { + @IBOutlet weak var contentView: UIView! + @IBOutlet weak var ui_container_view: UIView! + + @IBOutlet weak var ui_top_title: UILabel! + @IBOutlet weak var ui_button: UIButton! + @IBOutlet weak var ui_title: UILabel! + + weak var delegate:ClosePopDelegate? + + override init(frame: CGRect) { + super.init(frame: frame) + setupInitial() + } + + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setupInitial() + } + + func setupInitial() { + contentView = loadViewFromNib() + contentView.frame = self.bounds + contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight] + addSubview(contentView) + ui_button.setTitle("", for: .normal) + + ui_container_view.layer.cornerRadius = 8 + } + + func loadViewFromNib() -> UIView { + let bundle = Bundle(for: type(of: self)) + let nib = UINib(nibName: "OTCustomInfoPop", bundle: bundle) + return nib.instantiate(withOwner: self, options: nil).first as! UIView + } + + func setupTitle(title:String,subtitle:String) { + ui_top_title.text = title + ui_title.text = subtitle + } + + @IBAction func action_close(_ sender: Any) { + delegate?.close() + } +} diff --git a/Shared/Classes/View/OTCustomInfoPop.xib b/Shared/Classes/View/OTCustomInfoPop.xib new file mode 100644 index 000000000..b61a13dd6 --- /dev/null +++ b/Shared/Classes/View/OTCustomInfoPop.xib @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shared/OTMainTabbarViewController.swift b/Shared/OTMainTabbarViewController.swift index 9a4d2023f..957c29681 100644 --- a/Shared/OTMainTabbarViewController.swift +++ b/Shared/OTMainTabbarViewController.swift @@ -335,7 +335,7 @@ extension OTMainTabbarViewController: EntourageEditorDelegate { func didEdit(_ entourage: OTEntourage!) { if let _vc = self.homeVC.children[0] as? OTHomeMainViewController { plusVC.dismiss(animated: true) { - _vc.showFeedInfo(feedItem: entourage) + _vc.showFeedInfoDetail(feedItem: entourage) } } else { @@ -343,7 +343,7 @@ extension OTMainTabbarViewController: EntourageEditorDelegate { showHomeVC() plusVC.dismiss(animated: true) { if let _vc = self.homeVC.children[0] as? OTHomeMainViewController { - _vc.showFeedInfo(feedItem: entourage) + _vc.showFeedInfoDetail(feedItem: entourage) } } } diff --git a/Shared/Resources/Localizable.strings b/Shared/Resources/Localizable.strings index 424c7d0a3..203522c38 100644 --- a/Shared/Resources/Localizable.strings +++ b/Shared/Resources/Localizable.strings @@ -1144,3 +1144,10 @@ "myActionsCreated" = "Mes actions solidaires créées"; "MyActionEmptyAsk" = "Actuellement vous n'avez pas de demandes publiées sur l'application ;)"; "MyActionEmptyContrib" = "Actuellement vous n'avez pas de dons publiés sur l'application ;)"; + +"infoPopCreateContrib" = "Félicitations !\nVotre contribution a bien été créée."; +"infoPopCreateAsk" = "Félicitations !\nVotre demande a bien été créée."; +"infoPopCreateEvent" = "Félicitations !\nVotre événement a bien été créé."; +"infoPopCreateContribTitle" = "Action solidaire\ncréée"; +"infoPopCreateAskTitle" = "Action solidaire\ncréée"; +"infoPopCreateEventTitle" = "Événement créé"; diff --git a/Shared/Storyboards/Main.storyboard b/Shared/Storyboards/Main.storyboard index 3888273fd..158141e21 100644 --- a/Shared/Storyboards/Main.storyboard +++ b/Shared/Storyboards/Main.storyboard @@ -1543,7 +1543,7 @@ Vous aussi, vous pouvez créer un entourage: appuyez sur + - + @@ -2277,30 +2277,30 @@ En tant que riverain, vous pouvez suggérer un lieu à une personne de la rue, m - + - + - + - - - + @@ -695,19 +695,19 @@ - - - - - - - - + @@ -1001,19 +1001,19 @@ - - + - - - - + + + + + - - + + + + + - - - - - - - - - - + + + + + + + + + + + + @@ -2610,7 +2636,7 @@ - + @@ -2628,7 +2654,7 @@ - + @@ -2645,6 +2671,7 @@ + diff --git a/Shared/Storyboards/GuideSolidarity.storyboard b/Shared/Storyboards/GuideSolidarity.storyboard index 734a747ee..021e8ca62 100644 --- a/Shared/Storyboards/GuideSolidarity.storyboard +++ b/Shared/Storyboards/GuideSolidarity.storyboard @@ -1,9 +1,9 @@ - + - + @@ -55,7 +55,7 @@ - + @@ -76,13 +76,13 @@ - diff --git a/Shared/Cells Xib/CellHomeExpertEventA.xib b/Shared/Cells Xib/CellHomeExpertEventA.xib index f1186c097..22039818a 100644 --- a/Shared/Cells Xib/CellHomeExpertEventA.xib +++ b/Shared/Cells Xib/CellHomeExpertEventA.xib @@ -12,24 +12,24 @@ - + - + - + - + - + - + - + - + @@ -89,13 +89,13 @@ Ligne 2 + - @@ -103,20 +103,21 @@ Ligne 2 - + + - + - - + - + + diff --git a/Shared/Cells Xib/CellHomeExpertEventB.xib b/Shared/Cells Xib/CellHomeExpertEventB.xib index 7aa6964b3..dfe69d0d0 100644 --- a/Shared/Cells Xib/CellHomeExpertEventB.xib +++ b/Shared/Cells Xib/CellHomeExpertEventB.xib @@ -12,24 +12,24 @@ - + - + - + - + - + - +