| 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..14596ecfb3cb7c10d85795ed3faae9a3851893d6 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,38 @@ 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 histograms = _histograms;
|
|
|
| -- (instancetype)init {
|
| +- (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
|
| self = [super init];
|
| if (self) {
|
| + _browserState = browserState;
|
| NSArray* identities = ios::GetChromeBrowserProvider()
|
| ->GetChromeIdentityService()
|
| ->GetAllIdentitiesSortedForDisplay();
|
| @@ -125,6 +146,24 @@ void RecordSigninNewAccountUserActionForAccessPoint(
|
| return self;
|
| }
|
|
|
| +- (void)dealloc {
|
| + if (_displayedCountPreferenceKey &&
|
| + (_signinPromoViewState == SigninPromoViewState::Visible ||
|
| + _signinPromoViewState == SigninPromoViewState::Hidden)) {
|
| + PrefService* prefs = _browserState->GetPrefs();
|
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey);
|
| + switch (_histograms) {
|
| + case ios::SigninPromoViewHistograms::Bookmarks:
|
| + UMA_HISTOGRAM_COUNTS_100(
|
| + "MobileSignInPromo.BookmarkManager.ImpressionsTilDismiss",
|
| + displayedCount);
|
| + break;
|
| + case ios::SigninPromoViewHistograms::None:
|
| + break;
|
| + }
|
| + }
|
| +}
|
| +
|
| - (SigninPromoViewConfigurator*)createConfigurator {
|
| if (_defaultIdentity) {
|
| return [[SigninPromoViewConfigurator alloc]
|
| @@ -165,6 +204,69 @@ void RecordSigninNewAccountUserActionForAccessPoint(
|
| identityChanged:identityChanged];
|
| }
|
|
|
| +- (void)sendImpressionsTillSigninButtonsHistogram {
|
| + DCHECK(_signinPromoViewState != SigninPromoViewState::Dismissed ||
|
| + _signinPromoViewState != SigninPromoViewState::Unused);
|
| + _signinPromoViewState = SigninPromoViewState::SigninStarted;
|
| + if (!_displayedCountPreferenceKey)
|
| + return;
|
| + PrefService* prefs = _browserState->GetPrefs();
|
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey);
|
| + switch (_histograms) {
|
| + case ios::SigninPromoViewHistograms::Bookmarks:
|
| + UMA_HISTOGRAM_COUNTS_100(
|
| + "MobileSignInPromo.BookmarkManager.ImpressionsTilSigninButtons",
|
| + displayedCount);
|
| + break;
|
| + case ios::SigninPromoViewHistograms::None:
|
| + break;
|
| + }
|
| +}
|
| +
|
| +- (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)
|
| + return;
|
| + PrefService* prefs = _browserState->GetPrefs();
|
| + int displayedCount = prefs->GetInteger(_displayedCountPreferenceKey);
|
| + switch (_histograms) {
|
| + case ios::SigninPromoViewHistograms::Bookmarks:
|
| + UMA_HISTOGRAM_COUNTS_100(
|
| + "MobileSignInPromo.BookmarkManager.ImpressionsTilXButton",
|
| + displayedCount);
|
| + break;
|
| + case ios::SigninPromoViewHistograms::None:
|
| + break;
|
| + }
|
| +}
|
| +
|
| #pragma mark - ChromeIdentityServiceObserver
|
|
|
| - (void)onIdentityListChanged {
|
| @@ -192,6 +294,7 @@ void RecordSigninNewAccountUserActionForAccessPoint(
|
| - (void)signinPromoViewDidTapSigninWithNewAccount:
|
| (SigninPromoView*)signinPromoView {
|
| DCHECK(!_defaultIdentity);
|
| + [self sendImpressionsTillSigninButtonsHistogram];
|
| RecordSigninUserActionForAccessPoint(_accessPoint);
|
| RecordSigninNewAccountUserActionForAccessPoint(_accessPoint);
|
| ShowSigninCommand* command = [[ShowSigninCommand alloc]
|
| @@ -204,6 +307,7 @@ void RecordSigninNewAccountUserActionForAccessPoint(
|
| - (void)signinPromoViewDidTapSigninWithDefaultAccount:
|
| (SigninPromoView*)signinPromoView {
|
| DCHECK(_defaultIdentity);
|
| + [self sendImpressionsTillSigninButtonsHistogram];
|
| RecordSigninUserActionForAccessPoint(_accessPoint);
|
| RecordSigninDefaultUserActionForAccessPoint(_accessPoint);
|
| ShowSigninCommand* command = [[ShowSigninCommand alloc]
|
| @@ -218,6 +322,7 @@ void RecordSigninNewAccountUserActionForAccessPoint(
|
| - (void)signinPromoViewDidTapSigninWithOtherAccount:
|
| (SigninPromoView*)signinPromoView {
|
| DCHECK(_defaultIdentity);
|
| + [self sendImpressionsTillSigninButtonsHistogram];
|
| RecordSigninNotDefaultUserActionForAccessPoint(_accessPoint);
|
| RecordSigninUserActionForAccessPoint(_accessPoint);
|
| ShowSigninCommand* command = [[ShowSigninCommand alloc]
|
|
|