Chromium Code Reviews| Index: ios/chrome/browser/ui/settings/settings_collection_view_controller.mm |
| diff --git a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm |
| index 03077d2bb7b4bdafcb7c61388f2c1ff03881aef4..16b271b44caae822365f9aab8a34065a56b29228 100644 |
| --- a/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm |
| +++ b/ios/chrome/browser/ui/settings/settings_collection_view_controller.mm |
| @@ -7,6 +7,7 @@ |
| #include <memory> |
| #import "base/mac/foundation_util.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/metrics/user_metrics.h" |
| #include "base/scoped_observer.h" |
| #include "base/strings/sys_string_conversions.h" |
| @@ -15,6 +16,7 @@ |
| #include "components/keyed_service/core/service_access_type.h" |
| #include "components/password_manager/core/browser/password_store.h" |
| #include "components/password_manager/core/common/password_manager_pref_names.h" |
| +#include "components/pref_registry/pref_registry_syncable.h" |
| #include "components/prefs/pref_change_registrar.h" |
| #include "components/prefs/pref_service.h" |
| #include "components/search_engines/util.h" |
| @@ -95,6 +97,8 @@ namespace { |
| const CGFloat kAccountProfilePhotoDimension = 40.0f; |
| +const int kAutomaticSigninPromoViewDismissCount = 20; |
| + |
| typedef NS_ENUM(NSInteger, SectionIdentifier) { |
| SectionIdentifierSignIn = kSectionIdentifierEnumZero, |
| SectionIdentifierBasics, |
| @@ -222,6 +226,9 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| CollectionViewDetailItem* _defaultSearchEngineItem; |
| CollectionViewDetailItem* _savePasswordsDetailItem; |
| CollectionViewDetailItem* _autoFillDetailItem; |
| + |
| + // YES if the user used at least once the sign-in promo view buttons. |
| + BOOL _signinStarted; |
| } |
| // Stops observing browser state services. This is required during the shutdown |
| @@ -305,6 +312,17 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| [self updateSearchCell]; |
| } |
| +- (void)viewDidDisappear:(BOOL)animated { |
| + [super viewDidDisappear:animated]; |
| + if (!_signinStarted && _signinPromoViewMediator) { |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = |
| + prefs->GetInteger(prefs::kIosSettingsSigninPromoDisplayedCount); |
| + UMA_HISTOGRAM_COUNTS_100("MobileSignInPromo.SettingsManager.DismissalCount", |
| + displayedCount); |
| + } |
| +} |
| + |
| #pragma mark SettingsRootCollectionViewController |
| - (void)loadModel { |
| @@ -324,10 +342,17 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| base::UserMetricsAction("Signin_Impression_FromSettings")); |
| _hasRecordedSigninImpression = YES; |
| } |
| - if (experimental_flags::IsSigninPromoEnabled()) { |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = |
| + prefs->GetInteger(prefs::kIosSettingsSigninPromoDisplayedCount); |
| + if (experimental_flags::IsSigninPromoEnabled() && |
| + displayedCount < kAutomaticSigninPromoViewDismissCount) { |
| _signinPromoViewMediator = |
| [[SigninPromoViewMediator alloc] initWithBrowserState:_browserState]; |
| _signinPromoViewMediator.consumer = self; |
| + ++displayedCount; |
|
sdefresne
2017/06/26 06:34:35
nit: it is clearer in my opinion to just pass "dis
jlebel
2017/06/26 19:19:21
Done.
|
| + prefs->SetInteger(prefs::kIosSettingsSigninPromoDisplayedCount, |
| + displayedCount); |
| } |
| [model addItem:[self signInTextItem] |
| toSectionWithIdentifier:SectionIdentifierSignIn]; |
| @@ -407,8 +432,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| #pragma mark - Model Items |
| - (CollectionViewItem*)signInTextItem { |
| - if (experimental_flags::IsSigninPromoEnabled()) { |
| - DCHECK(_signinPromoViewMediator); |
| + if (_signinPromoViewMediator) { |
| SigninPromoItem* signinPromoItem = |
| [[SigninPromoItem alloc] initWithType:ItemTypeSigninPromo]; |
| signinPromoItem.configurator = |
| @@ -1148,6 +1172,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| - (void)signinPromoViewDidTapSigninWithNewAccount: |
| (SigninPromoView*)signinPromoView { |
| + [self sendCountTillSigninHistogram]; |
| DCHECK(!_signinPromoViewMediator.defaultIdentity); |
| base::RecordAction( |
| base::UserMetricsAction("Signin_SigninNewAccount_FromSettings")); |
| @@ -1158,6 +1183,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| - (void)signinPromoViewDidTapSigninWithDefaultAccount: |
| (SigninPromoView*)signinPromoView { |
| + [self sendCountTillSigninHistogram]; |
| ChromeIdentity* identity = _signinPromoViewMediator.defaultIdentity; |
| DCHECK(identity); |
| base::RecordAction( |
| @@ -1169,6 +1195,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| - (void)signinPromoViewDidTapSigninWithOtherAccount: |
| (SigninPromoView*)signinPromoView { |
| + [self sendCountTillSigninHistogram]; |
| DCHECK(_signinPromoViewMediator.defaultIdentity); |
| base::RecordAction( |
| base::UserMetricsAction("Signin_SigninNotDefault_FromSettings")); |
| @@ -1177,4 +1204,15 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
| PROMO_ACTION_NOT_DEFAULT]; |
| } |
| +#pragma mark - Metrics |
| + |
| +- (void)sendCountTillSigninHistogram { |
|
sdefresne
2017/06/26 06:34:35
nit: in your other CL and the histogram.xml file y
jlebel
2017/06/26 19:19:21
Yes, I definitely made a mistake here. Thanks.
|
| + _signinStarted = YES; |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = |
| + prefs->GetInteger(prefs::kIosSettingsSigninPromoDisplayedCount); |
| + UMA_HISTOGRAM_COUNTS_100("MobileSignInPromo.SettingsManager.CountTilSignin", |
| + displayedCount); |
| +} |
| + |
| @end |