NUI logging

- Add screen events for 4 tabs, dialpad and search.
- Add impressions for opening MainActivity with tabs/dialpad (non user tab selection).
- Add impression for VVM visible.

Bug: 72525843
Test: MainActivityOldPeerTest, MainSearchControllerTest
PiperOrigin-RevId: 188090249
Change-Id: Ifdf3519f07d7230f20b5d82691a96747b1944d63
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 80249f4..8af807f 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -12,7 +12,7 @@
   // Event enums to be used for Impression Logging in Dialer.
   // It's perfectly acceptable for this enum to be large
   // Values should be from 1000 to 100000.
-  // Next Tag: 1346
+  // Next Tag: 1352
   enum Type {
     UNKNOWN_AOSP_EVENT_TYPE = 1000;
 
@@ -658,7 +658,7 @@
     DUO_CALL_LOG_SET_UP_ACTIVATE_SHOWN = 1325;
     DUO_CALL_LOG_INVITE_SHOWN = 1326;
 
-    // NUI bottom navigation bar
+    // NUI bottom navigation bar user actions
     MAIN_SWITCH_TAB_TO_FAVORITE = 1327;
     MAIN_SWITCH_TAB_TO_CALL_LOG = 1328;
     MAIN_SWITCH_TAB_TO_CONTACTS = 1329;
@@ -686,5 +686,14 @@
     ANNOTATED_CALL_LOG_CHANGES_NEEDED = 1344;
     // The call log was force refreshed and changes were needed.
     ANNOTATED_CALL_LOG_FORCE_REFRESH_CHANGES_NEEDED = 1345;
+
+    MAIN_VVM_TAB_VISIBLE = 1346;
+
+    // Main bottom navigation bar non user actions
+    MAIN_OPEN_WITH_TAB_FAVORITE = 1347;
+    MAIN_OPEN_WITH_TAB_CALL_LOG = 1348;
+    MAIN_OPEN_WITH_TAB_CONTACTS = 1349;
+    MAIN_OPEN_WITH_TAB_VOICEMAIL = 1350;
+    MAIN_OPEN_WITH_DIALPAD = 1351;
   }
 }
diff --git a/java/com/android/dialer/logging/screen_event.proto b/java/com/android/dialer/logging/screen_event.proto
index 603f710..f4d0735 100644
--- a/java/com/android/dialer/logging/screen_event.proto
+++ b/java/com/android/dialer/logging/screen_event.proto
@@ -69,5 +69,12 @@
     BLOCKED_NUMBER_ADD_NUMBER = 19;
 
     CALL_DETAILS = 20;
+
+    MAIN_SPEED_DIAL = 21;
+    MAIN_CALL_LOG = 22;
+    MAIN_CONTACTS = 23;
+    MAIN_VOICEMAIL = 24;
+    MAIN_DIALPAD = 25;
+    MAIN_SEARCH = 26;
   }
 }
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 993ed3d..7d57f98 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -114,6 +114,8 @@
   private void showDialpad(boolean animate, boolean fromNewIntent) {
     Assert.checkArgument(!isDialpadVisible());
 
+    Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_DIALPAD, mainActivity);
+
     fab.hide();
     toolbar.slideUp(animate);
     toolbar.expand(animate, Optional.absent());
@@ -357,6 +359,9 @@
 
   private void openSearch(Optional<String> query) {
     LogUtil.enterBlock("MainSearchController.openSearch");
+
+    Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_SEARCH, mainActivity);
+
     fab.hide();
     toolbar.expand(/* animate=*/ true, query);
     toolbar.showKeyboard();
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index e87fb0e..d0dd2c0 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -83,6 +83,7 @@
 import com.android.dialer.interactions.PhoneNumberInteraction;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.main.MainActivityPeer;
 import com.android.dialer.main.impl.bottomnav.BottomNavBar;
 import com.android.dialer.main.impl.bottomnav.BottomNavBar.OnBottomNavTabSelectedListener;
@@ -242,6 +243,7 @@
     onPhoneNumberPickerActionListener = new MainOnPhoneNumberPickerActionListener(mainActivity);
     oldSpeedDialFragmentHost =
         new MainOldSpeedDialFragmentHost(
+            mainActivity,
             bottomNav,
             mainActivity.findViewById(R.id.contact_tile_drag_shadow_overlay),
             mainActivity.findViewById(R.id.remove_view),
@@ -337,31 +339,35 @@
     //     select a tab here.
     //  2) Don't return early here in case the intent does contain extra data.
     //  3) External intents should take priority over other intents (like Calls.CONTENT_TYPE).
+    @TabIndex int tabToSelect;
     if (Calls.CONTENT_TYPE.equals(intent.getType())) {
       Bundle extras = intent.getExtras();
       if (extras != null && extras.getInt(Calls.EXTRA_CALL_TYPE_FILTER) == Calls.VOICEMAIL_TYPE) {
         LogUtil.i("OldMainActivityPeer.onHandleIntent", "Voicemail content type intent");
-        bottomNav.selectTab(TabIndex.VOICEMAIL);
+        tabToSelect = TabIndex.VOICEMAIL;
         Logger.get(mainActivity).logImpression(DialerImpression.Type.VVM_NOTIFICATION_CLICKED);
       } else {
         LogUtil.i("OldMainActivityPeer.onHandleIntent", "Call log content type intent");
-        bottomNav.selectTab(TabIndex.CALL_LOG);
+        tabToSelect = TabIndex.CALL_LOG;
       }
 
     } else if (isShowTabIntent(intent)) {
       LogUtil.i("OldMainActivityPeer.onHandleIntent", "Show tab intent");
-      bottomNav.selectTab(getTabFromIntent(intent));
+      tabToSelect = getTabFromIntent(intent);
     } else if (lastTabController.isEnabled) {
       LogUtil.i("OldMainActivityPeer.onHandleIntent", "Show last tab");
-      lastTabController.selectLastTab();
+      tabToSelect = lastTabController.getLastTab();
     } else {
-      bottomNav.selectTab(TabIndex.SPEED_DIAL);
+      tabToSelect = TabIndex.SPEED_DIAL;
     }
+    logImpressionForSelectedTab(tabToSelect);
+    bottomNav.selectTab(tabToSelect);
 
     if (isDialOrAddCallIntent(intent)) {
       LogUtil.i("OldMainActivityPeer.onHandleIntent", "Dial or add call intent");
       // Dialpad will grab the intent and populate the number
       searchController.showDialpadFromNewIntent();
+      Logger.get(mainActivity).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_DIALPAD);
     }
 
     if (intent.getBooleanExtra(DialtactsActivity.EXTRA_CLEAR_NEW_VOICEMAILS, false)) {
@@ -370,6 +376,21 @@
     }
   }
 
+  /** Log impression for non user tab selection. */
+  private void logImpressionForSelectedTab(@TabIndex int tab) {
+    if (tab == TabIndex.SPEED_DIAL) {
+      Logger.get(mainActivity).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_FAVORITE);
+    } else if (tab == TabIndex.CALL_LOG) {
+      Logger.get(mainActivity).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_CALL_LOG);
+    } else if (tab == TabIndex.CONTACTS) {
+      Logger.get(mainActivity).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_CONTACTS);
+    } else if (tab == TabIndex.VOICEMAIL) {
+      Logger.get(mainActivity).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_VOICEMAIL);
+    } else {
+      throw new IllegalStateException("Invalid tab: " + tab);
+    }
+  }
+
   /** Returns true if the given intent is a Dial intent with data or an Add Call intent. */
   private boolean isDialOrAddCallIntent(Intent intent) {
     if (intent == null) {
@@ -819,8 +840,7 @@
               numberOfActiveVoicemailSources));
 
       if (hasActiveVoicemailProvider) {
-        // TODO(yueg): Use new logging for VVM_TAB_VISIBLE
-        // Logger.get(context).logImpression(DialerImpression.Type.VVM_TAB_VISIBLE);
+        Logger.get(context).logImpression(DialerImpression.Type.MAIN_VVM_TAB_VISIBLE);
         bottomNavBar.showVoicemail(true);
         callLogQueryHandler.fetchVoicemailUnreadCount();
       } else {
@@ -994,6 +1014,7 @@
   private static final class MainOldSpeedDialFragmentHost
       implements OldSpeedDialFragment.HostInterface, OnDragDropListener {
 
+    private final Context context;
     private final BottomNavBar bottomNavBar;
     private final ImageView dragShadowOverlay;
     private final RemoveView removeView;
@@ -1005,11 +1026,13 @@
     private DragDropController dragDropController;
 
     MainOldSpeedDialFragmentHost(
+        Context context,
         BottomNavBar bottomNavBar,
         ImageView dragShadowOverlay,
         RemoveView removeView,
         View searchViewContainer,
         MainToolbar toolbar) {
+      this.context = context;
       this.bottomNavBar = bottomNavBar;
       this.dragShadowOverlay = dragShadowOverlay;
       this.removeView = removeView;
@@ -1025,6 +1048,7 @@
     @Override
     public void showAllContactsTab() {
       bottomNavBar.selectTab(TabIndex.CONTACTS);
+      Logger.get(context).logImpression(DialerImpression.Type.MAIN_OPEN_WITH_TAB_CONTACTS);
     }
 
     @Override
@@ -1077,22 +1101,22 @@
     private static final String CONTACTS_TAG = "contacts";
     private static final String VOICEMAIL_TAG = "voicemail";
 
-    private final Context context;
+    private final MainActivity mainActivity;
     private final FragmentManager fragmentManager;
     private final FloatingActionButton fab;
 
     @TabIndex private int selectedTab = -1;
 
     private MainBottomNavBarBottomNavTabListener(
-        Context context, FragmentManager fragmentManager, FloatingActionButton fab) {
-      this.context = context;
+        MainActivity mainActivity, FragmentManager fragmentManager, FloatingActionButton fab) {
+      this.mainActivity = mainActivity;
       this.fragmentManager = fragmentManager;
       this.fab = fab;
       preloadCallLogFragment();
     }
 
     private void preloadCallLogFragment() {
-      if (ConfigProviderBindings.get(context).getBoolean("nui_preload_call_log", true)) {
+      if (ConfigProviderBindings.get(mainActivity).getBoolean("nui_preload_call_log", true)) {
         CallLogFragment fragment = new CallLogFragment();
         fragmentManager
             .beginTransaction()
@@ -1106,7 +1130,7 @@
     public void onSpeedDialSelected() {
       LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onSpeedDialSelected");
       if (selectedTab != TabIndex.SPEED_DIAL) {
-        Logger.get(context).logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_FAVORITE);
+        Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_SPEED_DIAL, mainActivity);
         selectedTab = TabIndex.SPEED_DIAL;
       }
       hideAllFragments();
@@ -1126,7 +1150,7 @@
     public void onCallLogSelected() {
       LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onCallLogSelected");
       if (selectedTab != TabIndex.CALL_LOG) {
-        Logger.get(context).logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_CALL_LOG);
+        Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_CALL_LOG, mainActivity);
         selectedTab = TabIndex.CALL_LOG;
       }
       hideAllFragments();
@@ -1146,7 +1170,7 @@
     public void onContactsSelected() {
       LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onContactsSelected");
       if (selectedTab != TabIndex.CONTACTS) {
-        Logger.get(context).logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_CONTACTS);
+        Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_CONTACTS, mainActivity);
         selectedTab = TabIndex.CONTACTS;
       }
       hideAllFragments();
@@ -1170,7 +1194,7 @@
     public void onVoicemailSelected() {
       LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onVoicemailSelected");
       if (selectedTab != TabIndex.VOICEMAIL) {
-        Logger.get(context).logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_VOICEMAIL);
+        Logger.get(mainActivity).logScreenView(ScreenEvent.Type.MAIN_VOICEMAIL, mainActivity);
         selectedTab = TabIndex.VOICEMAIL;
       }
       hideAllFragments();
@@ -1228,7 +1252,8 @@
     }
 
     /** Sets the last tab if the feature is enabled, otherwise defaults to speed dial. */
-    void selectLastTab() {
+    @TabIndex
+    int getLastTab() {
       @TabIndex int tabIndex = TabIndex.SPEED_DIAL;
       if (isEnabled) {
         tabIndex =
@@ -1242,7 +1267,7 @@
         tabIndex = TabIndex.SPEED_DIAL;
       }
 
-      bottomNavBar.selectTab(tabIndex);
+      return tabIndex;
     }
 
     void onActivityStop() {
diff --git a/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java b/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
index 5ee33fc..903f51f 100644
--- a/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
+++ b/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
@@ -24,6 +24,8 @@
 import android.widget.LinearLayout;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -74,27 +76,35 @@
 
     speedDial.setOnClickListener(
         v -> {
-          selectedTab = TabIndex.SPEED_DIAL;
-          setSelected(speedDial);
-          updateListeners(selectedTab);
+          if (selectedTab != TabIndex.SPEED_DIAL) {
+            Logger.get(getContext())
+                .logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_FAVORITE);
+          }
+          selectTab(TabIndex.SPEED_DIAL);
         });
     callLog.setOnClickListener(
         v -> {
-          selectedTab = TabIndex.CALL_LOG;
-          setSelected(callLog);
-          updateListeners(selectedTab);
+          if (selectedTab != TabIndex.CALL_LOG) {
+            Logger.get(getContext())
+                .logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_CALL_LOG);
+          }
+          selectTab(TabIndex.CALL_LOG);
         });
     contacts.setOnClickListener(
         v -> {
-          selectedTab = TabIndex.CONTACTS;
-          setSelected(contacts);
-          updateListeners(selectedTab);
+          if (selectedTab != TabIndex.CONTACTS) {
+            Logger.get(getContext())
+                .logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_CONTACTS);
+          }
+          selectTab(TabIndex.CONTACTS);
         });
     voicemail.setOnClickListener(
         v -> {
-          selectedTab = TabIndex.VOICEMAIL;
-          setSelected(voicemail);
-          updateListeners(selectedTab);
+          if (selectedTab != TabIndex.VOICEMAIL) {
+            Logger.get(getContext())
+                .logImpression(DialerImpression.Type.MAIN_SWITCH_TAB_TO_VOICEMAIL);
+          }
+          selectTab(TabIndex.VOICEMAIL);
         });
   }
 
@@ -106,22 +116,28 @@
   }
 
   /**
-   * Calls {@link View#performClick()} on the desired tab.
+   * Select tab for uesr and non-user click.
    *
    * @param tab {@link TabIndex}
    */
   public void selectTab(@TabIndex int tab) {
     if (tab == TabIndex.SPEED_DIAL) {
-      speedDial.performClick();
+      selectedTab = TabIndex.SPEED_DIAL;
+      setSelected(speedDial);
     } else if (tab == TabIndex.CALL_LOG) {
-      callLog.performClick();
+      selectedTab = TabIndex.CALL_LOG;
+      setSelected(callLog);
     } else if (tab == TabIndex.CONTACTS) {
-      contacts.performClick();
+      selectedTab = TabIndex.CONTACTS;
+      setSelected(contacts);
     } else if (tab == TabIndex.VOICEMAIL) {
-      voicemail.performClick();
+      selectedTab = TabIndex.VOICEMAIL;
+      setSelected(voicemail);
     } else {
       throw new IllegalStateException("Invalid tab: " + tab);
     }
+
+    updateListeners(selectedTab);
   }
 
   /**