Fixed overlapping fragments issue.
Fast consercutive calls to #showFragment can have undesirable effects because
fragment manager doesn't handle transactions sychronously. This CL resolves one
of the scanrios where voicemail fetch status was calling #showFragment nearly
simulataniously to the #onHandleIntent call.
This issue may show itself again and I'm looking into more long term solutions
but we should be fine in the short term since the all of our fragment logic
is implemented.
Bug: 74051208,74621909
Test: manual
PiperOrigin-RevId: 188956984
Change-Id: I0796e31b03e0b749ae7e81f82859ea6f814a5fb5
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);
}