diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 37b241b..465c579 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -1727,6 +1727,9 @@
     clearSearchOnPause = true;
   }
 
+  @Override
+  public void requestingPermission() {}
+
   protected int getPreviouslySelectedTabIndex() {
     return previouslySelectedTabIndex;
   }
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index 7d57f98..92e5651 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -86,6 +86,14 @@
 
   private final List<OnSearchShowListener> onSearchShowListenerList = new ArrayList<>();
 
+  /**
+   * True when an action happens that closes search (like leaving the app or placing a call). We
+   * want to wait until onPause is called otherwise the transition will look extremely janky.
+   */
+  private boolean closeSearchOnPause;
+
+  private boolean requestingPermission;
+
   public MainSearchController(
       MainActivity mainActivity,
       BottomNavBar bottomNav,
@@ -444,15 +452,35 @@
   }
 
   @Override
+  public void onActivityPause() {
+    if (closeSearchOnPause) {
+      closeSearchOnPause = false;
+      if (isInSearch()) {
+        closeSearch(false);
+      }
+    }
+  }
+
+  @Override
   public void onUserLeaveHint() {
     if (isInSearch()) {
-      closeSearch(false);
+      // Requesting a permission causes this to be called and we want search to remain open when
+      // that happens. Otherwise, close search.
+      closeSearchOnPause = !requestingPermission;
+
+      // Always hide the keyboard when the user leaves dialer (including permission requests)
+      toolbar.hideKeyboard();
     }
   }
 
   @Override
   public void onCallPlacedFromSearch() {
-    closeSearch(false);
+    closeSearchOnPause = true;
+  }
+
+  @Override
+  public void requestingPermission() {
+    requestingPermission = true;
   }
 
   public void onVoiceResults(int resultCode, Intent data) {
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index 3c335b3..b617646 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -447,7 +447,9 @@
   }
 
   @Override
-  public void onActivityPause() {}
+  public void onActivityPause() {
+    searchController.onActivityPause();
+  }
 
   @Override
   public void onActivityStop() {
@@ -676,6 +678,11 @@
       // TODO(calderwoodra): logging
       searchController.onCallPlacedFromSearch();
     }
+
+    @Override
+    public void requestingPermission() {
+      searchController.requestingPermission();
+    }
   }
 
   /** @see DialpadFragment.HostInterface */
diff --git a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
index 857c4b9..d01fe3a 100644
--- a/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
+++ b/java/com/android/dialer/main/impl/toolbar/SearchBarListener.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.main.impl.toolbar;
 
+import android.app.Activity;
 import android.support.v7.app.AppCompatActivity;
 import android.view.MenuItem;
 
@@ -37,12 +38,18 @@
   /** Called when a toolbar menu item is clicked. */
   boolean onMenuItemClicked(MenuItem menuItem);
 
+  /** Called when {@link Activity#onPause()} is called. */
+  void onActivityPause();
+
   /** Called when {@link AppCompatActivity#onUserLeaveHint()} is called. */
   void onUserLeaveHint();
 
   /** Called when the user places a call from search (regular or dialpad). */
   void onCallPlacedFromSearch();
 
+  /** Called when a permission is about to be requested. */
+  void requestingPermission();
+
   /** Interface for returning voice results to the search bar. */
   interface VoiceSearchResultCallback {
 
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index aff9462..6a60598 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -29,7 +29,6 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.VisibleForTesting;
-import android.support.v13.app.FragmentCompat;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.telephony.PhoneNumberUtils;
@@ -342,8 +341,8 @@
       LogUtil.i(
           "NewSearchFragment.onEmptyViewActionButtonClicked",
           "Requesting permissions: " + Arrays.toString(deniedPermissions));
-      FragmentCompat.requestPermissions(
-          this, deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE);
+      FragmentUtils.getParentUnsafe(this, SearchFragmentListener.class).requestingPermission();
+      requestPermissions(deniedPermissions, READ_CONTACTS_PERMISSION_REQUEST_CODE);
     }
   }
 
@@ -411,6 +410,7 @@
     String[] deniedPermissions =
         PermissionsUtil.getPermissionsCurrentlyDenied(
             getContext(), PermissionsUtil.allLocationGroupPermissionsUsedInDialer);
+    FragmentUtils.getParentUnsafe(this, SearchFragmentListener.class).requestingPermission();
     requestPermissions(deniedPermissions, LOCATION_PERMISSION_REQUEST_CODE);
   }
 
@@ -557,5 +557,8 @@
 
     /** Called when a call is placed from the search fragment. */
     void onCallPlacedFromSearch();
+
+    /** Called when a permission is about to be requested. */
+    void requestingPermission();
   }
 }
