Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
index bb500abb1bb367cf6b7ebac674c674b1b99cf1f0..39ac1eed88b41ccf34e816547e69c767a391588a 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
@@ -27,6 +27,7 @@ import android.widget.FrameLayout; |
import org.chromium.base.ActivityState; |
import org.chromium.base.ApiCompatibilityUtils; |
import org.chromium.base.ApplicationStatus; |
+import org.chromium.base.BuildInfo; |
import org.chromium.base.CommandLine; |
import org.chromium.base.Log; |
import org.chromium.base.MemoryPressureListener; |
@@ -106,6 +107,7 @@ import org.chromium.ui.widget.Toast; |
import java.lang.annotation.Retention; |
import java.lang.annotation.RetentionPolicy; |
import java.lang.ref.WeakReference; |
+import java.lang.reflect.Method; |
import java.util.List; |
/** |
@@ -768,7 +770,11 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
openNewTab(url, referer, headers, externalAppId, intent, false); |
break; |
case OPEN_NEW_TAB: |
- if (fromLauncherShortcut) recordLauncherShortcutAction(false); |
+ if (fromLauncherShortcut) { |
+ recordLauncherShortcutAction(false); |
+ reportNewTabShortcutUsed(false); |
+ } |
+ |
openNewTab(url, referer, headers, externalAppId, intent, true); |
break; |
case OPEN_NEW_INCOGNITO_TAB: |
@@ -778,6 +784,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
getTabCreator(true).launchUrl( |
UrlConstants.NTP_URL, TabLaunchType.FROM_EXTERNAL_APP); |
recordLauncherShortcutAction(true); |
+ reportNewTabShortcutUsed(true); |
} else if (TextUtils.equals(externalAppId, getPackageName())) { |
// Used by the Account management screen to open a new incognito tab. |
// Account management screen collects its metrics separately. |
@@ -1022,6 +1029,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
getTabModelSelector().getModel(false).commitAllTabClosures(); |
RecordUserAction.record("MobileMenuNewTab"); |
RecordUserAction.record("MobileNewTabOpened"); |
+ reportNewTabShortcutUsed(false); |
getTabCreator(false).launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI); |
} else if (id == R.id.new_incognito_tab_menu_id) { |
if (PrefServiceBridge.getInstance().isIncognitoModeEnabled()) { |
@@ -1030,6 +1038,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
// are dropped when an incognito tab is open. |
RecordUserAction.record("MobileMenuNewIncognitoTab"); |
RecordUserAction.record("MobileNewTabOpened"); |
+ reportNewTabShortcutUsed(true); |
getTabCreator(true).launchUrl(UrlConstants.NTP_URL, TabLaunchType.FROM_CHROME_UI); |
} |
} else if (id == R.id.all_bookmarks_menu_id) { |
@@ -1548,4 +1557,24 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
// Enter HTML5 fullscreen to ensure the texture fills the entire composited surface. |
getFullscreenManager().setPersistentFullscreenMode(visibility == View.GONE); |
} |
+ |
+ /** |
+ * Reports that a new tab launcher shortcut was selected or an action equivalent to a shortcut |
+ * was performed. |
+ * @param isIncognito Whether the shortcut or action created a new incognito tab. |
+ */ |
+ @TargetApi(25) |
+ private void reportNewTabShortcutUsed(boolean isIncognito) { |
+ if (!BuildInfo.isGreaterThanN()) return; |
+ |
+ try { |
+ Class<?> clazz = Class.forName("android.content.pm.ShortcutManager"); |
+ Method method = clazz.getDeclaredMethod("reportShortcutUsed", String.class); |
+ method.invoke(getSystemService(clazz), |
+ isIncognito ? "new-incognito-tab-shortcut" : "new-tab-shortcut"); |
+ } catch (Exception e) { |
+ e.printStackTrace(); |
+ } |
+ |
+ } |
} |