Search query is now shared with the Search Fragment in NUI.

This change also adds the logic for triggering SmartDialDatabase updates in
Activity#onResume so that Dialpad search has results it can show.

Bug: 181512198
Test: n/a
PiperOrigin-RevId: 182272002
Change-Id: I3f7f7795df5038c37c1c26e23f4fc816d515e41f
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 583310f..35597f9 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -27,9 +27,11 @@
 import android.widget.ImageView;
 import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.contactsfragment.ContactsFragment;
 import com.android.dialer.contactsfragment.ContactsFragment.Header;
 import com.android.dialer.contactsfragment.ContactsFragment.OnContactSelectedListener;
+import com.android.dialer.database.Database;
 import com.android.dialer.dialpadview.DialpadFragment;
 import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
 import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback;
@@ -37,6 +39,7 @@
 import com.android.dialer.main.impl.BottomNavBar.OnBottomNavTabSelectedListener;
 import com.android.dialer.main.impl.toolbar.MainToolbar;
 import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListener;
+import com.android.dialer.smartdial.util.SmartDialPrefix;
 import com.android.dialer.speeddial.SpeedDialFragment;
 import com.android.dialer.voicemail.listui.NewVoicemailFragment;
 
@@ -49,10 +52,14 @@
         SearchFragmentListener {
 
   private static final String IS_FAB_HIDDEN_KEY = "is_fab_hidden";
+  private static final String KEY_SAVED_LANGUAGE_CODE = "saved_language_code";
 
   private MainSearchController searchController;
   private FloatingActionButton fab;
 
+  /** Language the device was in last time {@link #onSaveInstanceState(Bundle)} was called. */
+  private String savedLanguageCode;
+
   /**
    * @param context Context of the application package implementing MainActivity class.
    * @return intent for MainActivity.class
@@ -69,6 +76,7 @@
     LogUtil.enterBlock("MainActivity.onCreate");
     setContentView(R.layout.main_activity);
     initLayout();
+    SmartDialPrefix.initializeNanpSettings(this);
   }
 
   private void initLayout() {
@@ -88,9 +96,19 @@
   }
 
   @Override
+  protected void onResume() {
+    super.onResume();
+    // Start the thread that updates the smart dial database if the activity is recreated with a
+    // language change.
+    boolean forceUpdate = !CompatUtils.getLocale(this).getISO3Language().equals(savedLanguageCode);
+    Database.get(this).getDatabaseHelper(this).startSmartDialUpdateThread(forceUpdate);
+  }
+
+  @Override
   protected void onSaveInstanceState(Bundle bundle) {
     super.onSaveInstanceState(bundle);
     bundle.putBoolean(IS_FAB_HIDDEN_KEY, !fab.isShown());
+    bundle.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(this).getISO3Language());
   }
 
   @Override
@@ -99,6 +117,7 @@
     if (savedInstanceState.getBoolean(IS_FAB_HIDDEN_KEY, false)) {
       fab.hide();
     }
+    savedLanguageCode = savedInstanceState.getString(KEY_SAVED_LANGUAGE_CODE);
   }
 
   @Override
@@ -110,7 +129,7 @@
 
   @Override // OnDialpadQueryChangedListener
   public void onDialpadQueryChanged(String query) {
-    // TODO(calderwoodra): update search fragment
+    searchController.onDialpadQueryChanged(query);
   }
 
   @Override // DialpadListener
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 4645c9a..4cccbf4 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -16,14 +16,17 @@
 
 package com.android.dialer.main.impl;
 
+import android.support.annotation.Nullable;
 import android.support.design.widget.FloatingActionButton;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.animation.Animation;
 import android.view.animation.Animation.AnimationListener;
+import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.common.Assert;
 import com.android.dialer.dialpadview.DialpadFragment;
 import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
+import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
 import com.android.dialer.main.impl.toolbar.MainToolbar;
 import com.android.dialer.main.impl.toolbar.SearchBarListener;
 import com.android.dialer.searchfragment.list.NewSearchFragment;
@@ -181,11 +184,13 @@
     mainActivity.getFragmentManager().beginTransaction().remove(getSearchFragment()).commit();
   }
 
+  @Nullable
   private DialpadFragment getDialpadFragment() {
     return (DialpadFragment)
         mainActivity.getFragmentManager().findFragmentByTag(DIALPAD_FRAGMENT_TAG);
   }
 
+  @Nullable
   private NewSearchFragment getSearchFragment() {
     return (NewSearchFragment)
         mainActivity.getFragmentManager().findFragmentByTag(SEARCH_FRAGMENT_TAG);
@@ -233,7 +238,20 @@
   }
 
   @Override
-  public void onSearchQueryUpdated(String query) {}
+  public void onSearchQueryUpdated(String query) {
+    NewSearchFragment fragment = getSearchFragment();
+    if (fragment != null) {
+      fragment.setQuery(query, CallInitiationType.Type.REGULAR_SEARCH);
+    }
+  }
+
+  /** @see OnDialpadQueryChangedListener#onDialpadQueryChanged(java.lang.String) */
+  public void onDialpadQueryChanged(String query) {
+    NewSearchFragment fragment = getSearchFragment();
+    if (fragment != null) {
+      fragment.setQuery(query, CallInitiationType.Type.DIALPAD);
+    }
+  }
 
   @Override
   public void onVoiceButtonClicked(VoiceSearchResultCallback voiceSearchResultCallback) {}