Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e16adb5 authored by calderwoodra's avatar calderwoodra Committed by Copybara-Service
Browse files

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
parent f6c6f3be
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1186,8 +1186,12 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen
     *
     * <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 @@ public class OldMainActivityPeer implements MainActivityPeer, FragmentUtilListen
      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();
+2 −1
Original line number Diff line number Diff line
@@ -155,7 +155,8 @@ public final class BottomNavBar extends LinearLayout {
    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);
    }