Merge "Moved new call log fragment to NUI."
diff --git a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
index d9cb0c1..1fbf0f0 100644
--- a/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
+++ b/java/com/android/dialer/app/list/DialtactsPagerAdapter.java
@@ -24,9 +24,6 @@
 import android.view.ViewGroup;
 import com.android.dialer.app.calllog.CallLogFragment;
 import com.android.dialer.app.calllog.VisualVoicemailCallLogFragment;
-import com.android.dialer.calllog.CallLogComponent;
-import com.android.dialer.calllog.CallLogFramework;
-import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
@@ -60,12 +57,10 @@
   private final List<Fragment> fragments = new ArrayList<>();
   private final String[] tabTitles;
   private final boolean useNewSpeedDialTab;
-  private final boolean useNewCallLogTab;
   private final boolean useNewContactsTab;
   private OldSpeedDialFragment oldSpeedDialFragment;
   private SpeedDialFragment speedDialFragment;
   private CallLogFragment callLogFragment;
-  private NewCallLogFragment newCallLogFragment;
   private AllContactsFragment oldContactsFragment;
   private ContactsFragment contactsFragment;
   private CallLogFragment voicemailFragment;
@@ -77,8 +72,6 @@
     super(fm);
     useNewSpeedDialTab =
         ConfigProviderBindings.get(context).getBoolean("enable_new_favorites_tab", false);
-    CallLogFramework callLogFramework = CallLogComponent.get(context).callLogFramework();
-    useNewCallLogTab = callLogFramework.isNewCallLogEnabled(context);
     useNewContactsTab =
         ConfigProviderBindings.get(context).getBoolean("enable_new_contacts_tab", true);
     this.tabTitles = tabTitles;
@@ -108,17 +101,10 @@
           return oldSpeedDialFragment;
         }
       case TAB_INDEX_HISTORY:
-        if (useNewCallLogTab) {
-          if (newCallLogFragment == null) {
-            newCallLogFragment = new NewCallLogFragment();
-          }
-          return newCallLogFragment;
-        } else {
-          if (callLogFragment == null) {
-            callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
-          }
-          return callLogFragment;
+        if (callLogFragment == null) {
+          callLogFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
         }
+        return callLogFragment;
       case TAB_INDEX_ALL_CONTACTS:
         if (useNewContactsTab) {
           if (contactsFragment == null) {
@@ -159,8 +145,6 @@
       speedDialFragment = (SpeedDialFragment) fragment;
     } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_HISTORY) {
       callLogFragment = (CallLogFragment) fragment;
-    } else if (fragment instanceof NewCallLogFragment) {
-      newCallLogFragment = (NewCallLogFragment) fragment;
     } else if (fragment instanceof ContactsFragment) {
       contactsFragment = (ContactsFragment) fragment;
     } else if (fragment instanceof AllContactsFragment) {
diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java
index d3a2c63..788e56b 100644
--- a/java/com/android/dialer/calllog/CallLogFramework.java
+++ b/java/com/android/dialer/calllog/CallLogFramework.java
@@ -21,11 +21,11 @@
 import android.preference.PreferenceManager;
 import android.support.annotation.MainThread;
 import android.support.annotation.Nullable;
+import com.android.dialer.buildtype.BuildType;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
 import com.android.dialer.calllog.datasources.DataSources;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
@@ -49,21 +49,20 @@
     this.dataSources = dataSources;
   }
 
-  public boolean isNewCallLogEnabled(Context context) {
-    return ConfigProviderBindings.get(context).getBoolean("enable_new_call_log_tab", false);
-  }
-
   /** Registers the content observers for all data sources. */
   public void registerContentObservers(Context appContext) {
     LogUtil.enterBlock("CallLogFramework.registerContentObservers");
 
-    if (!isNewCallLogEnabled(appContext)) {
-      LogUtil.i("CallLogFramework.registerContentObservers", "new call log not enabled");
-      return;
-    }
-
-    for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) {
-      dataSource.registerContentObservers(appContext, this);
+    // This is the same condition used in MainImpl#isNewUiEnabled. It means that bugfood/debug
+    // users will have "new call log" content observers firing. These observers usually do simple
+    // things like writing shared preferences.
+    // TODO(zachh): Find a way to access Main#isNewUiEnabled without creating a circular dependency.
+    if (BuildType.get() == BuildType.BUGFOOD || LogUtil.isDebugEnabled()) {
+      for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) {
+        dataSource.registerContentObservers(appContext, this);
+      }
+    } else {
+      LogUtil.i("CallLogFramework.registerContentObservers", "not registering content observers");
     }
   }
 
diff --git a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
index 488e8f4..51a5532 100644
--- a/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
+++ b/java/com/android/dialer/calllog/ui/CoalescedAnnotatedCallLogCursorLoader.java
@@ -17,8 +17,8 @@
 package com.android.dialer.calllog.ui;
 
 import android.content.Context;
-import android.content.CursorLoader;
 import android.database.Cursor;
+import android.support.v4.content.CursorLoader;
 import com.android.dialer.CallTypes;
 import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.CoalescedAnnotatedCallLog;
 import com.google.protobuf.InvalidProtocolBufferException;
diff --git a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
index 9227678..ab73813 100644
--- a/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
+++ b/java/com/android/dialer/calllog/ui/NewCallLogFragment.java
@@ -15,11 +15,11 @@
  */
 package com.android.dialer.calllog.ui;
 
-import android.app.Fragment;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Loader;
 import android.database.Cursor;
 import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.LoaderManager.LoaderCallbacks;
+import android.support.v4.content.Loader;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
@@ -65,6 +65,7 @@
     DialerExecutorFactory dialerExecutorFactory =
         DialerExecutorComponent.get(getContext()).dialerExecutorFactory();
 
+    // TODO(zachh): Use support fragment manager and add support for them in executors library.
     refreshAnnotatedCallLogTask =
         dialerExecutorFactory
             .createUiTaskBuilder(
@@ -138,6 +139,12 @@
   public void onLoadFinished(Loader<Cursor> loader, Cursor newCursor) {
     LogUtil.enterBlock("NewCallLogFragment.onLoadFinished");
 
+    if (newCursor == null) {
+      // This might be possible when the annotated call log hasn't been created but we're trying
+      // to show the call log.
+      LogUtil.w("NewCallLogFragment.onLoadFinished", "null cursor");
+      return;
+    }
     // TODO(zachh): Handle empty cursor by showing empty view.
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
     recyclerView.setAdapter(new NewCallLogAdapter(newCursor, System::currentTimeMillis));
diff --git a/java/com/android/dialer/main/impl/MainImpl.java b/java/com/android/dialer/main/impl/MainImpl.java
index d29e8c0..675533c 100644
--- a/java/com/android/dialer/main/impl/MainImpl.java
+++ b/java/com/android/dialer/main/impl/MainImpl.java
@@ -21,11 +21,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.os.Build;
 import android.os.Build.VERSION_CODES;
 import android.support.v4.content.pm.ShortcutInfoCompat;
 import android.support.v4.content.pm.ShortcutManagerCompat;
 import android.support.v4.graphics.drawable.IconCompat;
-import android.support.v4.os.BuildCompat;
 import com.android.dialer.buildtype.BuildType;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.main.Main;
@@ -36,7 +36,7 @@
   private static final String SHORTCUT_KEY = "nui_launcher_shortcut";
 
   @Inject
-  public MainImpl() {}
+  MainImpl() {}
 
   @Override
   public boolean isNewUiEnabled(Context context) {
@@ -46,7 +46,7 @@
   @Override
   public void createNewUiLauncherShortcut(Context context) {
     enableComponent(context);
-    if (BuildCompat.isAtLeastO()) {
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
       createLauncherShortcutO(context);
     } else {
       createLauncherShortcutPreO(context);
diff --git a/java/com/android/dialer/main/impl/MainPagerAdapter.java b/java/com/android/dialer/main/impl/MainPagerAdapter.java
index 33d85ca..10256a1 100644
--- a/java/com/android/dialer/main/impl/MainPagerAdapter.java
+++ b/java/com/android/dialer/main/impl/MainPagerAdapter.java
@@ -21,6 +21,7 @@
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentStatePagerAdapter;
+import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.Assert;
 import com.android.dialer.voicemail.listui.VoicemailFragment;
 import java.lang.annotation.Retention;
@@ -60,6 +61,8 @@
     switch (position) {
       case TabIndex.VOICEMAIL:
         return new VoicemailFragment();
+      case TabIndex.HISTORY:
+        return new NewCallLogFragment();
       default:
         return new StubFragment();
     }
diff --git a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
index 9659113..f095a59 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
@@ -99,7 +99,7 @@
     subMenu
         .add("Clean database")
         .setOnMenuItemClickListener(
-            (itme) -> {
+            (item) -> {
               cleanDatabase();
               return true;
             });