Don't commit fragment transactions if it's not safe.

Bug: 77807682
Test: listnr
PiperOrigin-RevId: 195477904
Change-Id: I5408f4fad9bbc20ff7ce72b25201c23b11a35c43
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index e3d42fa..2f54b10 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -1234,7 +1234,7 @@
     private static final String CONTACTS_TAG = "contacts";
     private static final String VOICEMAIL_TAG = "voicemail";
 
-    private final AppCompatActivity activity;
+    private final TransactionSafeActivity activity;
     private final FragmentManager fragmentManager;
     private final android.support.v4.app.FragmentManager supportFragmentManager;
     private final FloatingActionButton fab;
@@ -1242,7 +1242,7 @@
     @TabIndex private int selectedTab = -1;
 
     private MainBottomNavBarBottomNavTabListener(
-        AppCompatActivity activity,
+        TransactionSafeActivity activity,
         FragmentManager fragmentManager,
         android.support.v4.app.FragmentManager supportFragmentManager,
         FloatingActionButton fab) {
@@ -1300,7 +1300,7 @@
       android.support.v4.app.Fragment supportFragment =
           supportFragmentManager.findFragmentByTag(CALL_LOG_TAG);
       if (supportFragment != null) {
-        supportFragmentManager.beginTransaction().remove(supportFragment).commit();
+        supportFragmentManager.beginTransaction().remove(supportFragment).commitAllowingStateLoss();
         // If the NewCallLogFragment was showing, immediately show the old call log fragment
         // instead.
         if (selectedTab == TabIndex.CALL_LOG) {
@@ -1317,7 +1317,7 @@
       android.support.v4.app.Fragment supportFragment =
           supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG);
       if (supportFragment != null) {
-        supportFragmentManager.beginTransaction().remove(supportFragment).commit();
+        supportFragmentManager.beginTransaction().remove(supportFragment).commitAllowingStateLoss();
         // If the NewVoicemailFragment was showing, immediately show the old voicemail fragment
         // instead.
         if (selectedTab == TabIndex.VOICEMAIL) {
@@ -1445,7 +1445,9 @@
             "MainBottomNavBarBottomNavTabListener.showFragment", "Not added yet: " + fragment);
         transaction.add(R.id.fragment_container, fragment, tag);
       }
-      transaction.commit();
+      if (activity.isSafeToCommitTransactions()) {
+        transaction.commit();
+      }
 
       // Handle support fragments.
       // TODO(calderwoodra): Handle other new fragments.
@@ -1471,7 +1473,9 @@
             "Not added yet: " + supportFragment);
         supportTransaction.add(R.id.fragment_container, supportFragment, tag);
       }
-      supportTransaction.commit();
+      if (activity.isSafeToCommitTransactions()) {
+        supportTransaction.commit();
+      }
     }
 
     private void showSupportFragment(