Merge "Fixed overlapping fragments issue."
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index 2ea36ea..03afef4 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -1186,8 +1186,12 @@
      *
      * <p>Executes all fragment shows/hides in one transaction with no conflicting transactions
      * (like showing and hiding the same fragment in the same transaction). See a bug.
+     *
+     * <p>Special care should be taken to avoid calling this method several times in a short window
+     * as it can lead to fragments overlapping.
      */
     private void showFragment(@NonNull Fragment fragment, String tag) {
+      LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.showFragment");
       Fragment speedDial = fragmentManager.findFragmentByTag(SPEED_DIAL_TAG);
       Fragment callLog = fragmentManager.findFragmentByTag(CALL_LOG_TAG);
       Fragment contacts = fragmentManager.findFragmentByTag(CONTACTS_TAG);
@@ -1200,6 +1204,8 @@
       fragmentShown |= showIfEqualElseHide(transaction, fragment, voicemail);
 
       if (!fragmentShown) {
+        LogUtil.i(
+            "MainBottomNavBarBottomNavTabListener.showFragment", "Not added yet: " + fragment);
         transaction.add(R.id.fragment_container, fragment, tag);
       }
       transaction.commit();
diff --git a/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java b/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
index 903f51f..80aa38b 100644
--- a/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
+++ b/java/com/android/dialer/main/impl/bottomnav/BottomNavBar.java
@@ -155,7 +155,8 @@
     int voicemailcurrentVisibility = voicemail.getVisibility();
 
     if (voicemailpreviousVisibility != voicemailcurrentVisibility
-        && voicemailpreviousVisibility == View.VISIBLE) {
+        && voicemailpreviousVisibility == View.VISIBLE
+        && getSelectedTab() == TabIndex.VOICEMAIL) {
       LogUtil.i("OldMainActivityPeer.showVoicemail", "hid VM tab and moved to speed dial tab");
       selectTab(TabIndex.SPEED_DIAL);
     }