[TabGroupCollapse] Emit metric on manual collapse/expand

Emit metric on manual collapse/expand.
-Recorded as Android.TabStrip.TabGroupCollapsed.
-True if collapsing and false if expanding.
-Does not record when the collapse state is automatically updated. For
 example, we don't record when synced groups are automatically collapsed
 or when a tab selections automatically expands a group.

Bug: 346344439
Change-Id: I969b1fe52046cbfebc4a9021a9be5479b254aecf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5631000
Reviewed-by: Sirisha Kavuluru <skavuluru@google.com>
Reviewed-by: Zhe Li <zheliooo@google.com>
Commit-Queue: Neil Coronado <nemco@google.com>
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Sinan Sahin <sinansahin@google.com>
Cr-Commit-Position: refs/heads/main@{#1314963}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
index b9f8abb..04ce2a10 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
@@ -2606,6 +2606,7 @@
         assert isCollapsed == groupTitle.isCollapsed();
 
         mTabGroupModelFilter.setTabGroupCollapsed(rootId, !isCollapsed);
+        RecordHistogram.recordBooleanHistogram("Android.TabStrip.TabGroupCollapsed", !isCollapsed);
     }
 
     private Animator updateTabCollapsed(StripLayoutTab tab, boolean isCollapsed, boolean animate) {
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
index b2fc8418..aaba96e3 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperTest.java
@@ -60,6 +60,7 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Features.DisableFeatures;
 import org.chromium.base.test.util.Features.EnableFeatures;
+import org.chromium.base.test.util.HistogramWatcher;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.compositor.LayerTitleCache;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerHost;
@@ -4117,6 +4118,8 @@
     })
     public void testHandleGroupTitleClick_Collapse() {
         // Initialize with 4 tabs. Group first three tabs.
+        HistogramWatcher histogramWatcher =
+                HistogramWatcher.newSingleRecordWatcher("Android.TabStrip.TabGroupCollapsed", true);
         initializeTest(false, false, true, 3, 4);
         mStripLayoutHelper.onSizeChanged(
                 SCREEN_WIDTH, SCREEN_HEIGHT, false, TIMESTAMP, PADDING_LEFT, PADDING_RIGHT);
@@ -4128,6 +4131,8 @@
 
         // Verify the proper event was sent to the TabGroupModelFilter.
         verify(mTabGroupModelFilter).setTabGroupCollapsed(0, true);
+        // Verify we record the correct metric.
+        histogramWatcher.assertExpected("Should record true, since we're collapsing.");
     }
 
     @Test
@@ -4137,6 +4142,9 @@
     })
     public void testHandleGroupTitleClick_Expand() {
         // Initialize with 4 tabs. Group first three tabs.
+        HistogramWatcher histogramWatcher =
+                HistogramWatcher.newSingleRecordWatcher(
+                        "Android.TabStrip.TabGroupCollapsed", false);
         initializeTest(false, false, true, 3, 4);
         mStripLayoutHelper.onSizeChanged(
                 SCREEN_WIDTH, SCREEN_HEIGHT, false, TIMESTAMP, PADDING_LEFT, PADDING_RIGHT);
@@ -4150,6 +4158,8 @@
 
         // Verify the proper event was sent to the TabGroupModelFilter.
         verify(mTabGroupModelFilter).setTabGroupCollapsed(0, false);
+        // Verify we record the correct metric.
+        histogramWatcher.assertExpected("Should record false, since we're expanding.");
     }
 
     @Test
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml
index b91d739..82df7f7b40 100644
--- a/tools/metrics/histograms/metadata/android/histograms.xml
+++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -4661,6 +4661,20 @@
   </summary>
 </histogram>
 
+<histogram name="Android.TabStrip.TabGroupCollapsed" enum="Boolean"
+    expires_after="2024-09-13">
+  <owner>nemco@google.com</owner>
+  <owner>skavuluru@google.com</owner>
+  <owner>zheliooo@google.com</owner>
+  <summary>
+    Recorded when the user clicks on the tab group title indicator to collapse
+    or expand it. True if the user is collapsing a group and false if a user is
+    expanding it. We don't record when the collapsed state changes
+    automatically. e.g. Selecting a tab automatically expands its group and
+    groups created through sync are automatically collapsed.
+  </summary>
+</histogram>
+
 <histogram name="Android.TabStrip.TimeToBufferSwapAfterInitializeTabState"
     units="ms" expires_after="2024-11-17">
   <owner>nemco@google.com</owner>