From 2df95d805360f76f8b819d1644c99900d0c68eea Mon Sep 17 00:00:00 2001 From: gogerald Date: Sat, 13 Feb 2016 16:28:50 -0500 Subject: Implementation of newly designed sign in related histograms for Android. This CL is dedicated to implement newly designed sign in related histograms (Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, Signin.SigninReason) for Android. Please refer https://docs.google.com/a/google.com/document/d/1-gXYAMXXgsJhk6jxO55RuYJ00JBGermevJZ0sIlk6ko/edit?usp=sharing for details. BUG=532557 Review URL: https://codereview.chromium.org/1578433002 Cr-Commit-Position: refs/heads/master@{#373577} (cherry picked from commit 5a9e2b34d01056dfdc1a60ce418f5e9f884c9967) Review URL: https://codereview.chromium.org/1699633002 . Cr-Commit-Position: refs/branch-heads/2623@{#392} Cr-Branched-From: 92d77538a86529ca35f9220bd3cd512cbea1f086-refs/heads/master@{#369907} --- chrome/BUILD.gn | 7 +++++++ chrome/android/BUILD.gn | 1 + .../EnhancedBookmarkSigninActivity.java | 6 ++++++ .../chrome/browser/firstrun/FirstRunActivity.java | 3 +++ .../chrome/browser/ntp/RecentTabsManager.java | 6 ++++++ .../chrome/browser/ntp/RecentTabsPromoView.java | 8 +++++++- .../browser/preferences/MainPreferences.java | 2 ++ .../chrome/browser/signin/SigninManager.java | 23 ++++++++++++++++++++++ .../chrome/browser/signin/SigninPromoScreen.java | 1 + chrome/chrome.gyp | 10 ++++++++++ components/signin/core/browser/signin_metrics.h | 6 ++++++ tools/android/eclipse/.classpath | 1 + 12 files changed, 73 insertions(+), 1 deletion(-) diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index cc14b81..4edb1d6 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn @@ -945,6 +945,13 @@ if (is_android) { ] } + # GYP: //chrome/chrome.gyp:signin_metrics_enum_java + java_cpp_enum("signin_metrics_enum_javagen") { + sources = [ + "../components/signin/core/browser/signin_metrics.h", + ] + } + # GYP: //chrome/chrome.gyp:page_info_connection_type_java java_cpp_enum("page_info_connection_type_javagen") { sources = [ diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index 37ced33..5e50b32 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn @@ -167,6 +167,7 @@ android_library("chrome_java") { ":resource_id_javagen", "//chrome:content_setting_javagen", "//chrome:content_settings_type_javagen", + "//chrome:signin_metrics_enum_javagen", ] # TODO(sievers): Split java code into components. Not everything diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSigninActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSigninActivity.java index 7912bd04..5d2d7c6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSigninActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkSigninActivity.java @@ -13,6 +13,7 @@ import org.chromium.chrome.browser.ntp.RecentTabsPromoView; import org.chromium.chrome.browser.ntp.RecentTabsPromoView.SyncPromoModel; import org.chromium.chrome.browser.ntp.RecentTabsPromoView.UserActionListener; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.signin.SigninAccessPoint; import org.chromium.chrome.browser.signin.SigninManager; import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; import org.chromium.chrome.browser.sync.ProfileSyncService; @@ -136,4 +137,9 @@ public class EnhancedBookmarkSigninActivity extends EnhancedBookmarkActivityBase } return mProfileDataCache; } + + @Override + public int getAccessPoint() { + return SigninAccessPoint.BOOKMARK_MANAGER; + } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java index 0318783..fdd9e72 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/FirstRunActivity.java @@ -26,6 +26,8 @@ import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; import org.chromium.chrome.browser.preferences.datareduction.DataReductionPromoScreen; import org.chromium.chrome.browser.preferences.datareduction.DataReductionProxyUma; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.signin.SigninAccessPoint; +import org.chromium.chrome.browser.signin.SigninManager; import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; @@ -307,6 +309,7 @@ public class FirstRunActivity extends AppCompatActivity implements FirstRunPageD public void onSigninDialogShown() { RecordUserAction.record("MobileFre.SignInShown"); RecordUserAction.record("Signin_Impression_FromStartPage"); + SigninManager.logSigninStartAccessPoint(SigninAccessPoint.START_PAGE); } @Override diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java index 5f2749c..c598cfa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java @@ -22,6 +22,7 @@ import org.chromium.chrome.browser.ntp.RecentTabsPromoView.SyncPromoModel; import org.chromium.chrome.browser.ntp.RecentlyClosedBridge.RecentlyClosedCallback; import org.chromium.chrome.browser.ntp.RecentlyClosedBridge.RecentlyClosedTab; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.signin.SigninAccessPoint; import org.chromium.chrome.browser.signin.SigninManager; import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; import org.chromium.chrome.browser.sync.ProfileSyncService; @@ -475,4 +476,9 @@ public class RecentTabsManager implements AndroidSyncSettingsObserver, SignInSta } return mProfileDataCache; } + + @Override + public int getAccessPoint() { + return SigninAccessPoint.RECENT_TABS; + } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPromoView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPromoView.java index 946b28a..8356faa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPromoView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsPromoView.java @@ -19,6 +19,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.firstrun.AccountFirstRunView; import org.chromium.chrome.browser.firstrun.ProfileDataCache; import org.chromium.chrome.browser.signin.AccountAdder; +import org.chromium.chrome.browser.signin.SigninManager; import org.chromium.chrome.browser.sync.ui.ConfirmAccountChangeFragment; import org.chromium.sync.AndroidSyncSettings.AndroidSyncSettingsObserver; @@ -73,6 +74,11 @@ public class RecentTabsPromoView extends FrameLayout implements AndroidSyncSetti * @return A ProfileDataCache to retrieve user account info. */ public ProfileDataCache getProfileDataCache(); + + /** + * @return the access point of creating this view. + */ + public int getAccessPoint(); } /** @@ -282,7 +288,7 @@ public class RecentTabsPromoView extends FrameLayout implements AndroidSyncSetti assert false : "No forced accounts in SignInPromoView"; } }); - + SigninManager.logSigninStartAccessPoint(mModel.getAccessPoint()); return signInPromoView; } } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java index 76a086a..6a9496c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/MainPreferences.java @@ -24,6 +24,7 @@ import org.chromium.chrome.browser.preferences.datareduction.DataReductionPrefer import org.chromium.chrome.browser.signin.AccountAdder; import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment; import org.chromium.chrome.browser.signin.AddGoogleAccountDialogFragment.AddGoogleAccountListener; +import org.chromium.chrome.browser.signin.SigninAccessPoint; import org.chromium.chrome.browser.signin.SigninManager; import org.chromium.chrome.browser.signin.SigninManager.SignInStateObserver; import org.chromium.chrome.browser.sync.ui.ChooseAccountFragment; @@ -202,6 +203,7 @@ public class MainPreferences extends PreferenceFragment implements SignInStateOb new ChooseAccountFragment(accountNames); chooserFragment.show(getFragmentManager(), ACCOUNT_PICKER_DIALOG_TAG); callback.onResult(chooserFragment); + SigninManager.logSigninStartAccessPoint(SigninAccessPoint.SETTINGS); } } else { AddGoogleAccountDialogFragment dialog = new AddGoogleAccountDialogFragment(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java index d1ac844..9f4d3f6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManager.java @@ -18,6 +18,7 @@ import org.chromium.base.Log; import org.chromium.base.ObserverList; import org.chromium.base.ThreadUtils; import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler; import org.chromium.sync.signin.ChromeSigninController; @@ -51,6 +52,7 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed private static final String TAG = "SigninManager"; private static SigninManager sSigninManager; + private static int sSignInAccessPoint = SigninAccessPoint.UNKNOWN; private final Context mContext; private final long mNativeSigninManagerAndroid; @@ -163,6 +165,22 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed } /** + * Log the access point when the user see the view of choosing account to sign in. + * @param accessPoint the enum value of AccessPoint defined in signin_metrics.h. + */ + public static void logSigninStartAccessPoint(int accessPoint) { + RecordHistogram.recordEnumeratedHistogram( + "Signin.SigninStartedAccessPoint", accessPoint, SigninAccessPoint.MAX); + sSignInAccessPoint = accessPoint; + } + + private void logSigninCompleteAccessPoint() { + RecordHistogram.recordEnumeratedHistogram( + "Signin.SigninCompletedAccessPoint", sSignInAccessPoint, SigninAccessPoint.MAX); + sSignInAccessPoint = SigninAccessPoint.UNKNOWN; + } + + /** * Notifies the SigninManager that the First Run check has completed. * * The user will be allowed to sign-in once this is signaled. @@ -488,6 +506,11 @@ public class SigninManager implements AccountTrackerService.OnSystemAccountsSeed } SigninManager.get(mContext).logInSignedInUser(); + logSigninCompleteAccessPoint(); + // Log signin in reason as defined in signin_metrics.h. Right now only + // SIGNIN_PRIMARY_ACCOUNT available on Android. + RecordHistogram.recordEnumeratedHistogram("Signin.SigninReason", + SigninReason.SIGNIN_PRIMARY_ACCOUNT, SigninReason.MAX); } @Override public void onSigninCancelled() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoScreen.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoScreen.java index 8fff265..067efea 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoScreen.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoScreen.java @@ -61,6 +61,7 @@ public class SigninPromoScreen SigninPromoScreen promoScreen = new SigninPromoScreen(activity); promoScreen.show(); + SigninManager.logSigninStartAccessPoint(SigninAccessPoint.SIGNIN_PROMO); preferenceManager.setSigninPromoShown(); return true; } diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index cc6424b..5a16c54 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -547,6 +547,7 @@ 'profile_account_management_metrics_java', 'resource_id_java', 'shortcut_source_java', + 'signin_metrics_enum_java', 'tab_load_status_java', '../base/base.gyp:base', '../build/android/java_google_api_keys.gyp:google_api_keys_java', @@ -670,6 +671,15 @@ }, 'includes': [ '../build/android/java_cpp_enum.gypi' ], }, + { + # GN: //chrome:signin_metrics_enum_javagen + 'target_name': 'signin_metrics_enum_java', + 'type': 'none', + 'variables': { + 'source_file': '../components/signin/core/browser/signin_metrics.h', + }, + 'includes': [ '../build/android/java_cpp_enum.gypi' ], + }, ], # 'targets' 'includes': [ 'chrome_android.gypi', diff --git a/components/signin/core/browser/signin_metrics.h b/components/signin/core/browser/signin_metrics.h index 762fd37..420916a 100644 --- a/components/signin/core/browser/signin_metrics.h +++ b/components/signin/core/browser/signin_metrics.h @@ -115,6 +115,9 @@ enum Source { // initiated. Not all of them exist on all platforms. They are used with // "Signin.SigninStartedAccessPoint" and "Signin.SigninCompletedAccessPoint" // histograms. +// A Java counterpart will be generated for this enum. +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.signin +// GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninAccessPoint enum class AccessPoint : int { ACCESS_POINT_START_PAGE = 0, ACCESS_POINT_NTP_LINK, @@ -138,6 +141,9 @@ enum class AccessPoint : int { }; // Enum values which enumerates all reasons to start sign in process. +// A Java counterpart will be generated for this enum. +// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.signin +// GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninReason enum class Reason : int { REASON_SIGNIN_PRIMARY_ACCOUNT = 0, REASON_ADD_SECONDARY_ACCOUNT, diff --git a/tools/android/eclipse/.classpath b/tools/android/eclipse/.classpath index eef7d41..f498617 100644 --- a/tools/android/eclipse/.classpath +++ b/tools/android/eclipse/.classpath @@ -135,6 +135,7 @@ to the classpath for downstream development. See "additional_entries" below. + -- cgit v1.1