Convert new speed dial to support fragment and add it to new peer.

Bug: 36841782
Test: MainActivityNewPeerTest
PiperOrigin-RevId: 191924314
Change-Id: I5e4a4adadd5477115d6b4daf8afb8c6f819496c8
diff --git a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
index 364ae6f..317f24f 100644
--- a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
+++ b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
@@ -18,7 +18,6 @@
 
 import android.app.Fragment;
 import android.app.FragmentManager;
-import android.content.Context;
 import android.support.annotation.IntDef;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.view.ViewGroup;
@@ -26,11 +25,9 @@
 import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.contactsfragment.ContactsFragment;
 import com.android.dialer.contactsfragment.ContactsFragment.Header;
 import com.android.dialer.database.CallLogQueryHandler;
-import com.android.dialer.speeddial.SpeedDialFragment;
 import com.android.dialer.util.ViewUtil;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -55,9 +52,7 @@
 
   private final List<Fragment> fragments = new ArrayList<>();
   private final String[] tabTitles;
-  private final boolean useNewSpeedDialTab;
   private OldSpeedDialFragment oldSpeedDialFragment;
-  private SpeedDialFragment speedDialFragment;
   private CallLogFragment callLogFragment;
   private ContactsFragment contactsFragment;
   private CallLogFragment voicemailFragment;
@@ -65,10 +60,8 @@
   private boolean hasActiveVoicemailProvider;
 
   public DialtactsPagerAdapter(
-      Context context, FragmentManager fm, String[] tabTitles, boolean hasVoicemailProvider) {
+      FragmentManager fm, String[] tabTitles, boolean hasVoicemailProvider) {
     super(fm);
-    useNewSpeedDialTab =
-        ConfigProviderBindings.get(context).getBoolean("enable_new_favorites_tab", false);
     this.tabTitles = tabTitles;
     hasActiveVoicemailProvider = hasVoicemailProvider;
     fragments.addAll(Collections.nCopies(TAB_COUNT_WITH_VOICEMAIL, null));
@@ -84,17 +77,10 @@
     LogUtil.d("ViewPagerAdapter.getItem", "position: %d", position);
     switch (getRtlPosition(position)) {
       case TAB_INDEX_SPEED_DIAL:
-        if (useNewSpeedDialTab) {
-          if (speedDialFragment == null) {
-            speedDialFragment = SpeedDialFragment.newInstance();
-          }
-          return speedDialFragment;
-        } else {
-          if (oldSpeedDialFragment == null) {
-            oldSpeedDialFragment = new OldSpeedDialFragment();
-          }
-          return oldSpeedDialFragment;
+        if (oldSpeedDialFragment == null) {
+          oldSpeedDialFragment = new OldSpeedDialFragment();
         }
+        return oldSpeedDialFragment;
       case TAB_INDEX_HISTORY:
         if (callLogFragment == null) {
           callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
@@ -128,8 +114,6 @@
     final Fragment fragment = (Fragment) super.instantiateItem(container, position);
     if (fragment instanceof OldSpeedDialFragment) {
       oldSpeedDialFragment = (OldSpeedDialFragment) fragment;
-    } else if (fragment instanceof SpeedDialFragment) {
-      speedDialFragment = (SpeedDialFragment) fragment;
     } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_HISTORY) {
       callLogFragment = (CallLogFragment) fragment;
     } else if (fragment instanceof ContactsFragment) {
diff --git a/java/com/android/dialer/app/list/ListsFragment.java b/java/com/android/dialer/app/list/ListsFragment.java
index d314917..93e8923 100644
--- a/java/com/android/dialer/app/list/ListsFragment.java
+++ b/java/com/android/dialer/app/list/ListsFragment.java
@@ -45,7 +45,6 @@
 import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.logging.UiAction;
 import com.android.dialer.performancereport.PerformanceReport;
-import com.android.dialer.speeddial.SpeedDialFragment;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.voicemail.listui.error.VoicemailStatusCorruptionHandler;
 import com.android.dialer.voicemail.listui.error.VoicemailStatusCorruptionHandler.Source;
@@ -199,7 +198,6 @@
     viewPager = (DialerViewPager) parentView.findViewById(R.id.lists_pager);
     adapter =
         new DialtactsPagerAdapter(
-            getContext(),
             getChildFragmentManager(),
             tabTitles,
             prefs.getBoolean(
@@ -456,11 +454,10 @@
   }
 
   public boolean hasFrequents() {
-    Fragment page =
-        adapter.getItem(adapter.getRtlPosition(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL));
-    return page instanceof OldSpeedDialFragment
-        ? ((OldSpeedDialFragment) page).hasFrequents()
-        : ((SpeedDialFragment) page).hasFrequents();
+    OldSpeedDialFragment page =
+        (OldSpeedDialFragment)
+            adapter.getItem(adapter.getRtlPosition(DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL));
+    return page.hasFrequents();
   }
 
   public RemoveView getRemoveView() {
diff --git a/java/com/android/dialer/main/impl/NewMainActivityPeer.java b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
index 9607879..0ab69a4 100644
--- a/java/com/android/dialer/main/impl/NewMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/NewMainActivityPeer.java
@@ -29,6 +29,7 @@
 import com.android.dialer.main.impl.bottomnav.BottomNavBar;
 import com.android.dialer.main.impl.bottomnav.BottomNavBar.OnBottomNavTabSelectedListener;
 import com.android.dialer.main.impl.bottomnav.BottomNavBar.TabIndex;
+import com.android.dialer.speeddial.SpeedDialFragment;
 import com.android.dialer.voicemail.listui.NewVoicemailFragment;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.MoreExecutors;
@@ -89,6 +90,7 @@
   private static final class MainBottomNavBarBottomNavTabListener
       implements OnBottomNavTabSelectedListener {
 
+    private static final String SPEED_DIAL_TAG = "speed_dial";
     private static final String CALL_LOG_TAG = "call_log";
     private static final String VOICEMAIL_TAG = "voicemail";
 
@@ -104,7 +106,16 @@
     @Override
     public void onSpeedDialSelected() {
       hideAllFragments();
-      // TODO(calderwoodra): Implement SpeedDialFragment when FragmentUtils#getParent works
+      SpeedDialFragment fragment =
+          (SpeedDialFragment) supportFragmentManager.findFragmentByTag(SPEED_DIAL_TAG);
+      if (fragment == null) {
+        supportFragmentManager
+            .beginTransaction()
+            .add(R.id.fragment_container, SpeedDialFragment.newInstance(), SPEED_DIAL_TAG)
+            .commit();
+      } else {
+        supportFragmentManager.beginTransaction().show(fragment).commit();
+      }
     }
 
     @Override
@@ -143,8 +154,14 @@
       }
     }
 
+    // TODO(calderwoodra): fix overlapping fragments issue
     private void hideAllFragments() {
       FragmentTransaction supportTransaction = supportFragmentManager.beginTransaction();
+      Fragment speedDialFragment = supportFragmentManager.findFragmentByTag(SPEED_DIAL_TAG);
+      if (speedDialFragment != null) {
+        supportTransaction.hide(speedDialFragment);
+      }
+
       Fragment callLogFragment = supportFragmentManager.findFragmentByTag(CALL_LOG_TAG);
       if (callLogFragment != null) {
         if (callLogFragment.isVisible()) {
@@ -158,6 +175,7 @@
         }
         supportTransaction.hide(callLogFragment);
       }
+
       if (supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG) != null) {
         supportTransaction.hide(supportFragmentManager.findFragmentByTag(VOICEMAIL_TAG));
       }
diff --git a/java/com/android/dialer/speeddial/DisambigDialog.java b/java/com/android/dialer/speeddial/DisambigDialog.java
index ca02f41..1ee26f5 100644
--- a/java/com/android/dialer/speeddial/DisambigDialog.java
+++ b/java/com/android/dialer/speeddial/DisambigDialog.java
@@ -16,10 +16,7 @@
 
 package com.android.dialer.speeddial;
 
-import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
 import android.content.ContentResolver;
 import android.content.res.Resources;
 import android.database.Cursor;
@@ -27,6 +24,9 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
+import android.support.v4.app.DialogFragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v7.app.AlertDialog;
 import android.text.TextUtils;
 import android.util.ArraySet;
 import android.view.LayoutInflater;
@@ -37,7 +37,6 @@
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.duo.DuoComponent;
 import com.android.dialer.precall.PreCall;
 import java.util.ArrayList;
@@ -48,10 +47,14 @@
 public class DisambigDialog extends DialogFragment {
 
   @VisibleForTesting public static final String DISAMBIG_DIALOG_TAG = "disambig_dialog";
+
+  @SuppressWarnings("unused")
   private static final String DISAMBIG_DIALOG_WORKER_TAG = "disambig_dialog_worker";
 
   private final Set<String> phoneNumbers = new ArraySet<>();
   private LinearLayout container;
+
+  @SuppressWarnings("unused")
   private String lookupKey;
 
   /** Show a disambiguation dialog for a starred contact without a favorite communication avenue. */
@@ -71,12 +74,6 @@
   }
 
   @Override
-  public void onResume() {
-    super.onResume();
-    lookupContactInfo();
-  }
-
-  @Override
   public void onPause() {
     super.onPause();
     // TODO(calderwoodra): for simplicity, just dismiss the dialog on configuration change and
@@ -84,19 +81,6 @@
     dismiss();
   }
 
-  private void lookupContactInfo() {
-    DialerExecutorComponent.get(getContext())
-        .dialerExecutorFactory()
-        .createUiTaskBuilder(
-            getFragmentManager(),
-            DISAMBIG_DIALOG_WORKER_TAG,
-            new LookupContactInfoWorker(getContext().getContentResolver()))
-        .onSuccess(this::insertOptions)
-        .onFailure(this::onLookupFailed)
-        .build()
-        .executeParallel(lookupKey);
-  }
-
   /**
    * Inflates and inserts the following in the dialog:
    *
@@ -106,6 +90,7 @@
    *   <li>Clickable voice option
    * </ul>
    */
+  @SuppressWarnings("unused")
   private void insertOptions(Cursor cursor) {
     if (!cursorIsValid(cursor)) {
       dismiss();
@@ -197,11 +182,6 @@
     return true;
   }
 
-  private void onLookupFailed(Throwable throwable) {
-    LogUtil.e("DisambigDialog.onLookupFailed", null, throwable);
-    insertOptions(null);
-  }
-
   private static class LookupContactInfoWorker implements Worker<String, Cursor> {
 
     static final int NUMBER_INDEX = 0;
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index 979c894..03a3c75 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -16,13 +16,13 @@
 
 package com.android.dialer.speeddial;
 
-import android.app.Fragment;
-import android.app.LoaderManager.LoaderCallbacks;
 import android.content.Intent;
-import android.content.Loader;
 import android.database.Cursor;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.LoaderManager.LoaderCallbacks;
+import android.support.v4.content.Loader;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
diff --git a/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java b/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
index 40d0384..a2dcfdc 100644
--- a/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
+++ b/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
@@ -17,13 +17,13 @@
 package com.android.dialer.speeddial;
 
 import android.content.Context;
-import android.content.CursorLoader;
 import android.database.Cursor;
 import android.database.MatrixCursor;
 import android.net.Uri;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.Contacts;
+import android.support.v4.content.CursorLoader;
 
 /** Cursor Loader for strequent contacts. */
 public final class StrequentContactsCursorLoader extends CursorLoader {