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 fea44a81e4962499cc31a79add3b5aad20a783bb..e6671a9fd810dacf1a9943dca038622696d4084b 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" |
@@ -96,6 +98,8 @@ namespace { |
const CGFloat kAccountProfilePhotoDimension = 40.0f; |
+const int kAutomaticSigninPromoViewDismissCount = 20; |
+ |
typedef NS_ENUM(NSInteger, SectionIdentifier) { |
SectionIdentifierSignIn = kSectionIdentifierEnumZero, |
SectionIdentifierBasics, |
@@ -224,6 +228,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 |
@@ -310,6 +317,18 @@ 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.ImpressionsTilDismiss", |
+ displayedCount); |
+ } |
+} |
+ |
#pragma mark SettingsRootCollectionViewController |
- (void)loadModel { |
@@ -329,10 +348,16 @@ 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; |
+ prefs->SetInteger(prefs::kIosSettingsSigninPromoDisplayedCount, |
+ displayedCount + 1); |
} |
[model addItem:[self signInTextItem] |
toSectionWithIdentifier:SectionIdentifierSignIn]; |
@@ -412,8 +437,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 = |
@@ -1161,6 +1185,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
- (void)signinPromoViewDidTapSigninWithNewAccount: |
(SigninPromoView*)signinPromoView { |
+ [self sendImpressionsTilSigninButtonsHistogram]; |
DCHECK(!_signinPromoViewMediator.defaultIdentity); |
base::RecordAction( |
base::UserMetricsAction("Signin_SigninNewAccount_FromSettings")); |
@@ -1171,6 +1196,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
- (void)signinPromoViewDidTapSigninWithDefaultAccount: |
(SigninPromoView*)signinPromoView { |
+ [self sendImpressionsTilSigninButtonsHistogram]; |
ChromeIdentity* identity = _signinPromoViewMediator.defaultIdentity; |
DCHECK(identity); |
base::RecordAction( |
@@ -1182,6 +1208,7 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
- (void)signinPromoViewDidTapSigninWithOtherAccount: |
(SigninPromoView*)signinPromoView { |
+ [self sendImpressionsTilSigninButtonsHistogram]; |
DCHECK(_signinPromoViewMediator.defaultIdentity); |
base::RecordAction( |
base::UserMetricsAction("Signin_SigninNotDefault_FromSettings")); |
@@ -1190,4 +1217,16 @@ void SigninObserverBridge::GoogleSignedOut(const std::string& account_id, |
PROMO_ACTION_NOT_DEFAULT]; |
} |
+#pragma mark - Metrics |
+ |
+- (void)sendImpressionsTilSigninButtonsHistogram { |
+ _signinStarted = YES; |
+ PrefService* prefs = _browserState->GetPrefs(); |
+ int displayedCount = |
+ prefs->GetInteger(prefs::kIosSettingsSigninPromoDisplayedCount); |
+ UMA_HISTOGRAM_COUNTS_100( |
+ "MobileSignInPromo.SettingsManager.ImpressionsTilSigninButtons", |
+ displayedCount); |
+} |
+ |
@end |