Added old call log to NUI.

Bug: 72618828
Test: existing
PiperOrigin-RevId: 183902491
Change-Id: I079aca188b52c29c12b3cae7e57bf71a4e883898
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 4f5035f..7f635db 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -53,10 +53,10 @@
 import com.android.dialer.app.contactinfo.ContactInfoCache;
 import com.android.dialer.app.contactinfo.ContactInfoCache.OnContactInfoChangedListener;
 import com.android.dialer.app.contactinfo.ExpirableCacheHeadlessFragment;
-import com.android.dialer.app.list.ListsFragment;
 import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter;
 import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.common.Assert;
+import com.android.dialer.common.FragmentUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.database.CallLogQueryHandler;
 import com.android.dialer.database.CallLogQueryHandler.Listener;
@@ -344,9 +344,10 @@
                 recyclerView,
                 this,
                 this,
-                activityType == CallLogAdapter.ACTIVITY_TYPE_DIALTACTS
-                    ? (CallLogAdapter.OnActionModeStateChangedListener) getActivity()
-                    : null,
+                // We aren't calling getParentUnsafe because CallLogActivity doesn't need to
+                // implement this listener
+                FragmentUtils.getParent(
+                    this, CallLogAdapter.OnActionModeStateChangedListener.class),
                 new CallLogCache(getActivity()),
                 contactInfoCache,
                 getVoicemailPlaybackPresenter(),
@@ -479,7 +480,7 @@
   public void fetchCalls() {
     callLogQueryHandler.fetchCalls(callTypeFilter, dateLimit);
     if (!isCallLogActivity) {
-      ((ListsFragment) getParentFragment()).updateTabUnreadCounts();
+      FragmentUtils.getParentUnsafe(this, CallLogFragmentListener.class).updateTabUnreadCounts();
     }
   }
 
@@ -616,7 +617,8 @@
   public void onVisible() {
     LogUtil.enterBlock("CallLogFragment.onPageSelected");
     if (getActivity() != null && getActivity() instanceof HostInterface) {
-      ((HostInterface) getActivity()).enableFloatingButton(!isModalAlertVisible());
+      FragmentUtils.getParentUnsafe(this, HostInterface.class)
+          .enableFloatingButton(!isModalAlertVisible());
     }
   }
 
@@ -638,7 +640,7 @@
         this,
         getUserVisibleHint());
     getAdapter().notifyDataSetChanged();
-    HostInterface hostInterface = (HostInterface) getActivity();
+    HostInterface hostInterface = FragmentUtils.getParent(this, HostInterface.class);
     if (show) {
       recyclerView.setVisibility(View.GONE);
       modalAlertView.setVisibility(View.VISIBLE);
@@ -659,7 +661,8 @@
     multiSelectUnSelectAllViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
     multiSelectUnSelectAllViewContent.setAlpha(show ? 0 : 1);
     multiSelectUnSelectAllViewContent.animate().alpha(show ? 1 : 0).start();
-    ((ListsFragment) getParentFragment()).showMultiSelectRemoveView(show);
+    FragmentUtils.getParentUnsafe(this, CallLogFragmentListener.class)
+        .showMultiSelectRemoveView(show);
   }
 
   @Override
@@ -717,4 +720,16 @@
       refreshDataRequired = true;
     }
   }
+
+  /** Useful callback for ListsFragment children to use to call into ListsFragment. */
+  public interface CallLogFragmentListener {
+
+    /**
+     * External method to update unread count because the unread count changes when the user expands
+     * a voicemail in the call log or when the user expands an unread call in the call history tab.
+     */
+    void updateTabUnreadCounts();
+
+    void showMultiSelectRemoveView(boolean show);
+  }
 }
diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java
index bbbf056..d314917 100644
--- a/java/com/android/dialer/app/list/ListsFragment.java
+++ b/java/com/android/dialer/app/list/ListsFragment.java
@@ -34,6 +34,7 @@
 import com.android.contacts.common.list.ViewPagerTabs;
 import com.android.dialer.app.R;
 import com.android.dialer.app.calllog.CallLogFragment;
+import com.android.dialer.app.calllog.CallLogFragment.CallLogFragmentListener;
 import com.android.dialer.app.calllog.CallLogNotificationsService;
 import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
 import com.android.dialer.common.LogUtil;
@@ -59,7 +60,8 @@
  * Contacts list. This will also eventually contain the logic that allows sliding the ViewPager
  * containing the lists up above the search bar and pin it against the top of the screen.
  */
-public class ListsFragment extends Fragment implements OnPageChangeListener, Listener {
+public class ListsFragment extends Fragment
+    implements OnPageChangeListener, Listener, CallLogFragmentListener {
 
   private static final String TAG = "ListsFragment";
 
@@ -423,10 +425,7 @@
     return true;
   }
 
-  /**
-   * External method to update unread count because the unread count changes when the user expands a
-   * voicemail in the call log or when the user expands an unread call in the call history tab.
-   */
+  @Override
   public void updateTabUnreadCounts() {
     if (callLogQueryHandler != null) {
       callLogQueryHandler.fetchMissedCallsUnreadCount();
@@ -450,6 +449,7 @@
     removeView.animate().alpha(show ? 1 : 0).start();
   }
 
+  @Override
   public void showMultiSelectRemoveView(boolean show) {
     viewPagerTabs.setVisibility(show ? View.GONE : View.VISIBLE);
     viewPager.setEnableSwipingPages(!show);
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 4bc15da..57cc684 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -30,6 +30,9 @@
 import android.view.View;
 import android.widget.ImageView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.dialer.app.calllog.CallLogAdapter;
+import com.android.dialer.app.calllog.CallLogFragment;
+import com.android.dialer.app.calllog.CallLogFragment.CallLogFragmentListener;
 import com.android.dialer.app.list.DragDropController;
 import com.android.dialer.app.list.OldSpeedDialFragment;
 import com.android.dialer.app.list.OnDragDropListener;
@@ -90,6 +93,10 @@
   private MainOnDialpadQueryChangedListener onDialpadQueryChangedListener;
   private MainDialpadListener dialpadListener;
   private MainSearchFragmentListener searchFragmentListener;
+  private MainCallLogAdapterOnActionModeStateChangedListener
+      callLogAdapterOnActionModeStateChangedListener;
+  private MainCallLogHost callLogHostInterface;
+  private MainCallLogFragmentListener callLogFragmentListener;
   private MainOnListFragmentScrolledListener onListFragmentScrolledListener;
   private MainOnPhoneNumberPickerActionListener onPhoneNumberPickerActionListener;
   private MainOldSpeedDialFragmentHostInterface oldSpeedDialFragmentHostInterface;
@@ -148,6 +155,10 @@
     onDialpadQueryChangedListener = new MainOnDialpadQueryChangedListener(searchController);
     dialpadListener = new MainDialpadListener(this, searchController, getLastOutgoingCallListener);
     searchFragmentListener = new MainSearchFragmentListener(searchController);
+    callLogAdapterOnActionModeStateChangedListener =
+        new MainCallLogAdapterOnActionModeStateChangedListener();
+    callLogHostInterface = new MainCallLogHost(searchController, fab);
+    callLogFragmentListener = new MainCallLogFragmentListener();
     onListFragmentScrolledListener = new MainOnListFragmentScrolledListener(snackbarContainer);
     onPhoneNumberPickerActionListener = new MainOnPhoneNumberPickerActionListener(this);
     oldSpeedDialFragmentHostInterface =
@@ -228,6 +239,12 @@
       return (T) dialpadFragmentHostInterface;
     } else if (callbackInterface.isInstance(searchFragmentListener)) {
       return (T) searchFragmentListener;
+    } else if (callbackInterface.isInstance(callLogAdapterOnActionModeStateChangedListener)) {
+      return (T) callLogAdapterOnActionModeStateChangedListener;
+    } else if (callbackInterface.isInstance(callLogHostInterface)) {
+      return (T) callLogHostInterface;
+    } else if (callbackInterface.isInstance(callLogFragmentListener)) {
+      return (T) callLogFragmentListener;
     } else if (callbackInterface.isInstance(onListFragmentScrolledListener)) {
       return (T) onListFragmentScrolledListener;
     } else if (callbackInterface.isInstance(onPhoneNumberPickerActionListener)) {
@@ -360,6 +377,60 @@
     }
   }
 
+  /** @see CallLogAdapter.OnActionModeStateChangedListener */
+  // TODO(a bug): handle multiselect mode
+  private static final class MainCallLogAdapterOnActionModeStateChangedListener
+      implements CallLogAdapter.OnActionModeStateChangedListener {
+
+    @Override
+    public void onActionModeStateChanged(boolean isEnabled) {}
+
+    @Override
+    public boolean isActionModeStateEnabled() {
+      return false;
+    }
+  }
+
+  /** @see CallLogFragment.HostInterface */
+  private static final class MainCallLogHost implements CallLogFragment.HostInterface {
+
+    private final MainSearchController searchController;
+    private final FloatingActionButton fab;
+
+    MainCallLogHost(MainSearchController searchController, FloatingActionButton fab) {
+      this.searchController = searchController;
+      this.fab = fab;
+    }
+
+    @Override
+    public void showDialpad() {
+      searchController.showDialpad(true);
+    }
+
+    @Override
+    public void enableFloatingButton(boolean enabled) {
+      if (enabled) {
+        fab.show();
+      } else {
+        fab.hide();
+      }
+    }
+  }
+
+  /** @see CallLogFragmentListener */
+  private static final class MainCallLogFragmentListener implements CallLogFragmentListener {
+
+    @Override
+    public void updateTabUnreadCounts() {
+      // TODO(a bug): implement unread counts
+    }
+
+    @Override
+    public void showMultiSelectRemoveView(boolean show) {
+      // TODO(a bug): handle multiselect mode
+    }
+  }
+
   /** @see OnListFragmentScrolledListener */
   private static final class MainOnListFragmentScrolledListener
       implements OnListFragmentScrolledListener {
@@ -521,15 +592,30 @@
     @Override
     public void onCallLogSelected() {
       hideAllFragments();
-      NewCallLogFragment fragment =
-          (NewCallLogFragment) supportFragmentManager.findFragmentByTag(CALL_LOG_TAG);
-      if (fragment == null) {
-        supportFragmentManager
-            .beginTransaction()
-            .add(R.id.fragment_container, new NewCallLogFragment(), CALL_LOG_TAG)
-            .commit();
+      if (ConfigProviderComponent.get(context)
+          .getConfigProvider()
+          .getBoolean("enable_new_call_log", false)) {
+        NewCallLogFragment fragment =
+            (NewCallLogFragment) supportFragmentManager.findFragmentByTag(CALL_LOG_TAG);
+        if (fragment == null) {
+          supportFragmentManager
+              .beginTransaction()
+              .add(R.id.fragment_container, new NewCallLogFragment(), CALL_LOG_TAG)
+              .commit();
+        } else {
+          supportFragmentManager.beginTransaction().show(fragment).commit();
+        }
       } else {
-        supportFragmentManager.beginTransaction().show(fragment).commit();
+        CallLogFragment fragment =
+            (CallLogFragment) fragmentManager.findFragmentByTag(CALL_LOG_TAG);
+        if (fragment == null) {
+          fragmentManager
+              .beginTransaction()
+              .add(R.id.fragment_container, new CallLogFragment(), CALL_LOG_TAG)
+              .commit();
+        } else {
+          fragmentManager.beginTransaction().show(fragment).commit();
+        }
       }
     }
 
@@ -569,6 +655,7 @@
     private void hideAllFragments() {
       FragmentTransaction supportTransaction = supportFragmentManager.beginTransaction();
       if (supportFragmentManager.findFragmentByTag(CALL_LOG_TAG) != null) {
+        // NewCallLogFragment
         supportTransaction.hide(supportFragmentManager.findFragmentByTag(CALL_LOG_TAG));
       }
       if (supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG) != null) {
@@ -580,6 +667,10 @@
       if (fragmentManager.findFragmentByTag(SPEED_DIAL_TAG) != null) {
         transaction.hide(fragmentManager.findFragmentByTag(SPEED_DIAL_TAG));
       }
+      if (fragmentManager.findFragmentByTag(CALL_LOG_TAG) != null) {
+        // Old CallLogFragment
+        transaction.hide(fragmentManager.findFragmentByTag(CALL_LOG_TAG));
+      }
       if (fragmentManager.findFragmentByTag(CONTACTS_TAG) != null) {
         transaction.hide(fragmentManager.findFragmentByTag(CONTACTS_TAG));
       }