Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm

Issue 2942923002: Implementing sign-in promo histograms for bookmark (Closed)
Patch Set: Renaming histograms Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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]

Powered by Google App Engine
This is Rietveld 408576698