Index: chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc |
diff --git a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc |
index b4cba3f3b0609a62b09c4e79114e780cf215f3ed..01950b0a29494932bd1f4d186cb4a739d66b1c49 100644 |
--- a/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc |
+++ b/chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.cc |
@@ -4,14 +4,117 @@ |
#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_controller.h" |
-DesktopIOSPromotionController::DesktopIOSPromotionController() {} |
+#include "base/bind.h" |
+#include "base/metrics/histogram_macros.h" |
+#include "base/time/time.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h" |
+#include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_view.h" |
+#include "chrome/browser/ui/desktop_ios_promotion/sms_service.h" |
+#include "chrome/browser/ui/desktop_ios_promotion/sms_service_factory.h" |
+#include "components/prefs/pref_service.h" |
-DesktopIOSPromotionController::~DesktopIOSPromotionController() {} |
+DesktopIOSPromotionController::DesktopIOSPromotionController( |
+ Profile* profile, |
+ DesktopIOSPromotionView* promotion_view, |
+ desktop_ios_promotion::PromotionEntryPoint entry_point) |
+ : profile_prefs_(profile->GetPrefs()), |
+ entry_point_(entry_point), |
+ sms_service_(SMSServiceFactory::GetForProfile(profile)), |
+ promotion_view_(promotion_view), |
+ dismissal_reason_( |
+ desktop_ios_promotion::PromotionDismissalReason::FOCUS_LOST), |
+ weak_ptr_factory_(this) { |
+ sms_service_->QueryPhoneNumber( |
+ base::Bind(&DesktopIOSPromotionController::OnGotPhoneNumber, |
+ weak_ptr_factory_.GetWeakPtr())); |
+} |
+ |
+DesktopIOSPromotionController::~DesktopIOSPromotionController() { |
+ desktop_ios_promotion::LogDismissalReason(dismissal_reason_, entry_point_); |
+} |
void DesktopIOSPromotionController::OnSendSMSClicked() { |
- // TODO(crbug.com/676655): Call the growth api to send sms. |
+ // TODO(crbug.com/676655): Get the SMS message id from the finch group. |
+ std::string sms_message_id = "19001507"; |
+ sms_service_->SendSMS(sms_message_id, |
+ base::Bind(&DesktopIOSPromotionController::OnSendSMS, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ // Update Profile prefs. |
+ profile_prefs_->SetInteger(prefs::kIOSPromotionSMSEntryPoint, |
+ static_cast<int>(entry_point_)); |
+ |
+ // Update dismissal reason. |
+ dismissal_reason_ = desktop_ios_promotion::PromotionDismissalReason::SEND_SMS; |
+} |
+ |
+void DesktopIOSPromotionController::OnPromotionShown() { |
+ // update the impressions count. |
+ PrefService* local_state = g_browser_process->local_state(); |
+ int impressions = local_state->GetInteger( |
+ desktop_ios_promotion::kEntryPointLocalPrefs |
+ [static_cast<int>(entry_point_)][static_cast<int>( |
+ desktop_ios_promotion::EntryPointLocalPrefType::IMPRESSIONS)]); |
+ impressions++; |
+ local_state->SetInteger( |
+ desktop_ios_promotion::kEntryPointLocalPrefs |
+ [static_cast<int>(entry_point_)][static_cast<int>( |
+ desktop_ios_promotion::EntryPointLocalPrefType::IMPRESSIONS)], |
+ impressions); |
+ |
+ // Update synced profile prefs. |
+ int shown_entrypoints = |
+ profile_prefs_->GetInteger(prefs::kIOSPromotionShownEntryPoints); |
+ shown_entrypoints |= 1 << static_cast<int>(entry_point_); |
+ profile_prefs_->SetInteger(prefs::kIOSPromotionShownEntryPoints, |
+ shown_entrypoints); |
+ |
+ // If the promo is seen then it means the SMS was not sent on the last 7 days, |
+ // reset the pref. |
+ profile_prefs_->SetInteger(prefs::kIOSPromotionSMSEntryPoint, 0); |
+ |
+ double last_impression = base::Time::NowFromSystemTime().ToDoubleT(); |
+ profile_prefs_->SetDouble(prefs::kIOSPromotionLastImpression, |
+ last_impression); |
+ // Update histograms. |
+ UMA_HISTOGRAM_ENUMERATION( |
+ "DesktopIOSPromotion.ImpressionFromEntryPoint", |
+ static_cast<int>(entry_point_), |
+ static_cast<int>( |
+ desktop_ios_promotion::PromotionEntryPoint::ENTRY_POINT_MAX_VALUE)); |
} |
void DesktopIOSPromotionController::OnNoThanksClicked() { |
- // TODO(crbug.com/676655): Handle logging & update sync. |
+ PrefService* local_state = g_browser_process->local_state(); |
+ local_state->SetBoolean( |
+ desktop_ios_promotion::kEntryPointLocalPrefs |
+ [static_cast<int>(entry_point_)][static_cast<int>( |
+ desktop_ios_promotion::EntryPointLocalPrefType::DISMISSED)], |
+ true); |
+ dismissal_reason_ = |
+ desktop_ios_promotion::PromotionDismissalReason::NO_THANKS; |
+} |
+ |
+std::string DesktopIOSPromotionController::GetUsersRecoveryPhoneNumber() { |
+ return recovery_number_; |
+} |
+ |
+void DesktopIOSPromotionController::OnGotPhoneNumber( |
+ SMSService::Request* request, |
+ bool success, |
+ const std::string& number) { |
+ if (success) { |
sky
2017/02/18 18:03:51
Generally only use {} when conditional spans multi
mrefaat
2017/02/18 19:12:00
Yes but here i'm doing two things so i need the {}
|
+ recovery_number_ = number; |
+ promotion_view_->UpdateRecoveryPhoneLabel(); |
+ } |
+ UMA_HISTOGRAM_BOOLEAN("DesktopIOSPromotion.QueryPhoneNumberSucceeded", |
+ success); |
+} |
+ |
+void DesktopIOSPromotionController::OnSendSMS(SMSService::Request* request, |
+ bool success, |
+ const std::string& number) { |
+ UMA_HISTOGRAM_BOOLEAN("DesktopIOSPromotion.SendSMSSucceeded", success); |
} |