Chromium Code Reviews| Index: ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm |
| diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm |
| index 5c7bfa4b8bb2221b73fefe40856514c2a607f379..7b40186b98be1269894a314058f3e208426ab13d 100644 |
| --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm |
| +++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm |
| @@ -5,9 +5,13 @@ |
| #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h" |
| #include "base/memory/ptr_util.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/metrics/user_metrics.h" |
| #include "base/metrics/user_metrics_action.h" |
| #include "base/strings/sys_string_conversions.h" |
| +#include "components/prefs/pref_service.h" |
| +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
| +#include "ios/chrome/browser/pref_names.h" |
| #include "ios/chrome/browser/signin/chrome_identity_service_observer_bridge.h" |
| #import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h" |
| #import "ios/chrome/browser/ui/authentication/signin_promo_view_consumer.h" |
| @@ -25,6 +29,8 @@ |
| #endif |
| namespace { |
| +const int kAutomaticSigninPromoViewDismissCount = 20; |
| + |
| void RecordSigninUserActionForAccessPoint( |
| signin_metrics::AccessPoint access_point) { |
| switch (access_point) { |
| @@ -96,23 +102,40 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| break; |
| } |
| } |
| + |
| +enum class SigninPromoViewState { |
| + Unused = 0, |
| + Visible, |
| + Hidden, |
| + SigninStarted, |
| + Dismissed, |
| +}; |
| } // namespace |
| @interface SigninPromoViewMediator ()<ChromeIdentityServiceObserver> |
| @end |
| @implementation SigninPromoViewMediator { |
| + ios::ChromeBrowserState* _browserState; |
| std::unique_ptr<ChromeIdentityServiceObserverBridge> _identityServiceObserver; |
| UIImage* _identityAvatar; |
| + SigninPromoViewState _signinPromoViewState; |
| } |
| @synthesize consumer = _consumer; |
| @synthesize defaultIdentity = _defaultIdentity; |
| @synthesize accessPoint = _accessPoint; |
| +@synthesize displayedCountPreferenceKey = _displayedCountPreferenceKey; |
| +@synthesize alreadySeenSigninViewPreferenceKey = |
| + _alreadySeenSigninViewPreferenceKey; |
| +@synthesize dismissalCountHistogramName = _dismissalCountHistogramName; |
| +@synthesize countTilSigninHistogramName = _countTilSigninHistogramName; |
| +@synthesize countTilXHistogramName = _countTilXHistogramName; |
| -- (instancetype)init { |
| +- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { |
| self = [super init]; |
| if (self) { |
| + _browserState = browserState; |
| NSArray* identities = ios::GetChromeBrowserProvider() |
| ->GetChromeIdentityService() |
| ->GetAllIdentitiesSortedForDisplay(); |
| @@ -125,6 +148,16 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| return self; |
| } |
| +- (void)dealloc { |
| + if (_displayedCountPreferenceKey && _dismissalCountHistogramName && |
| + (_signinPromoViewState == SigninPromoViewState::Visible || |
| + _signinPromoViewState == SigninPromoViewState::Hidden)) { |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); |
| + UMA_HISTOGRAM_COUNTS_100(_dismissalCountHistogramName, displayedCount); |
|
rkaplow
2017/06/23 19:33:50
people generally inline the names of the histogram
jlebel
2017/06/23 23:42:36
Done.
|
| + } |
| +} |
| + |
| - (SigninPromoViewConfigurator*)createConfigurator { |
| if (_defaultIdentity) { |
| return [[SigninPromoViewConfigurator alloc] |
| @@ -165,6 +198,53 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| identityChanged:identityChanged]; |
| } |
| +- (void)sendCountTillSigninHistogram { |
| + DCHECK(_signinPromoViewState != SigninPromoViewState::Dismissed || |
| + _signinPromoViewState != SigninPromoViewState::Unused); |
| + _signinPromoViewState = SigninPromoViewState::SigninStarted; |
| + if (!_displayedCountPreferenceKey || !_countTilSigninHistogramName) |
| + return; |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); |
| + UMA_HISTOGRAM_COUNTS_100(_countTilSigninHistogramName, displayedCount); |
| +} |
| + |
| +- (void)signinPromoViewVisible { |
| + DCHECK(_signinPromoViewState != SigninPromoViewState::Dismissed); |
| + if (_signinPromoViewState == SigninPromoViewState::Visible) |
| + return; |
| + _signinPromoViewState = SigninPromoViewState::Visible; |
| + if (!_displayedCountPreferenceKey) |
| + return; |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); |
| + ++displayedCount; |
| + prefs->SetInteger(_displayedCountPreferenceKey, displayedCount); |
| + if (displayedCount >= kAutomaticSigninPromoViewDismissCount && |
| + _alreadySeenSigninViewPreferenceKey) { |
| + prefs->SetBoolean(prefs::kIosBookmarkPromoAlreadySeen, true); |
| + } |
| +} |
| + |
| +- (void)signinPromoViewHidden { |
| + DCHECK(_signinPromoViewState != SigninPromoViewState::Unused || |
| + _signinPromoViewState != SigninPromoViewState::Dismissed); |
| + if (_signinPromoViewState != SigninPromoViewState::Visible) |
| + return; |
| + _signinPromoViewState = SigninPromoViewState::Hidden; |
| +} |
| + |
| +- (void)signinPromoViewDismissed { |
| + DCHECK(_signinPromoViewState != SigninPromoViewState::Unused || |
| + _signinPromoViewState != SigninPromoViewState::Hidden); |
| + _signinPromoViewState = SigninPromoViewState::Dismissed; |
| + if (!_displayedCountPreferenceKey || !_countTilXHistogramName) |
| + return; |
| + PrefService* prefs = _browserState->GetPrefs(); |
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey); |
| + UMA_HISTOGRAM_COUNTS_100(_countTilXHistogramName, displayedCount); |
| +} |
| + |
| #pragma mark - ChromeIdentityServiceObserver |
| - (void)onIdentityListChanged { |
| @@ -192,6 +272,7 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| - (void)signinPromoViewDidTapSigninWithNewAccount: |
| (SigninPromoView*)signinPromoView { |
| DCHECK(!_defaultIdentity); |
| + [self sendCountTillSigninHistogram]; |
| RecordSigninUserActionForAccessPoint(_accessPoint); |
| RecordSigninNewAccountUserActionForAccessPoint(_accessPoint); |
| ShowSigninCommand* command = [[ShowSigninCommand alloc] |
| @@ -204,6 +285,7 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| - (void)signinPromoViewDidTapSigninWithDefaultAccount: |
| (SigninPromoView*)signinPromoView { |
| DCHECK(_defaultIdentity); |
| + [self sendCountTillSigninHistogram]; |
| RecordSigninUserActionForAccessPoint(_accessPoint); |
| RecordSigninDefaultUserActionForAccessPoint(_accessPoint); |
| ShowSigninCommand* command = [[ShowSigninCommand alloc] |
| @@ -218,6 +300,7 @@ void RecordSigninNewAccountUserActionForAccessPoint( |
| - (void)signinPromoViewDidTapSigninWithOtherAccount: |
| (SigninPromoView*)signinPromoView { |
| DCHECK(_defaultIdentity); |
| + [self sendCountTillSigninHistogram]; |
| RecordSigninNotDefaultUserActionForAccessPoint(_accessPoint); |
| RecordSigninUserActionForAccessPoint(_accessPoint); |
| ShowSigninCommand* command = [[ShowSigninCommand alloc] |