diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 164c1ea..791a710 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -124,6 +124,7 @@
 import com.android.dialer.postcall.PostCall;
 import com.android.dialer.proguard.UsedByReflection;
 import com.android.dialer.searchfragment.list.NewSearchFragment;
+import com.android.dialer.searchfragment.list.NewSearchFragment.SearchFragmentListTouchListener;
 import com.android.dialer.simulator.Simulator;
 import com.android.dialer.simulator.SimulatorComponent;
 import com.android.dialer.smartdial.SmartDialNameMatcher;
@@ -161,7 +162,8 @@
         PhoneNumberInteraction.InteractionErrorListener,
         PhoneNumberInteraction.DisambigDialogDismissedListener,
         ActivityCompat.OnRequestPermissionsResultCallback,
-        DialpadListener {
+        DialpadListener,
+        SearchFragmentListTouchListener {
 
   public static final boolean DEBUG = false;
   @VisibleForTesting public static final String TAG_DIALPAD_FRAGMENT = "dialpad";
@@ -1650,6 +1652,17 @@
         : CallInitiationType.Type.REGULAR_SEARCH;
   }
 
+  @Override
+  public boolean onSearchListTouch(MotionEvent event) {
+    if (mIsDialpadShown) {
+      hideDialpadFragment(true, false);
+      if (TextUtils.isEmpty(mDialpadQuery)) {
+        exitSearchUi();
+      }
+    }
+    return false;
+  }
+
   /** Popup menu accessible from the search bar */
   protected class OptionsPopupMenu extends PopupMenu {
 
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index b06f9c3..393b07a 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -33,7 +33,9 @@
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
+import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
 import android.view.animation.Interpolator;
 import android.widget.FrameLayout;
@@ -42,6 +44,7 @@
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.common.Assert;
+import com.android.dialer.common.FragmentUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -68,7 +71,8 @@
 public final class NewSearchFragment extends Fragment
     implements LoaderCallbacks<Cursor>,
         OnEmptyViewActionButtonClickedListener,
-        CapabilitiesListener {
+        CapabilitiesListener,
+        OnTouchListener {
 
   // Since some of our queries can generate network requests, we should delay them until the user
   // stops typing to prevent generating too much network traffic.
@@ -127,6 +131,7 @@
     emptyContentView = view.findViewById(R.id.empty_view);
     recyclerView = view.findViewById(R.id.recycler_view);
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+    recyclerView.setOnTouchListener(this);
     recyclerView.setAdapter(adapter);
 
     if (!PermissionsUtil.hasContactsReadPermissions(getContext())) {
@@ -340,7 +345,7 @@
     if (!PermissionsUtil.hasLocationPermissions(getContext())
         && !DialerUtils.getDefaultSharedPreferenceForDeviceProtectedStorageContext(getContext())
             .getBoolean(KEY_LOCATION_PROMPT_DISMISSED, false)) {
-      if (adapter != null) {
+      if (adapter != null && isRegularSearch()) {
         adapter.showLocationPermissionRequest(
             v -> requestLocationPermission(), v -> dismissLocationPermission());
       }
@@ -427,7 +432,28 @@
     return actions;
   }
 
+  // Returns true if currently in Regular Search (as opposed to Dialpad Search).
   private boolean isRegularSearch() {
     return callInitiationType == CallInitiationType.Type.REGULAR_SEARCH;
   }
+
+  @Override
+  public boolean onTouch(View v, MotionEvent event) {
+    if (event.getAction() == MotionEvent.ACTION_UP) {
+      v.performClick();
+    }
+    return FragmentUtils.getParentUnsafe(this, SearchFragmentListTouchListener.class)
+        .onSearchListTouch(event);
+  }
+
+  /** Callback to {@link NewSearchFragment}'s parent to notify when the list is touched. */
+  public interface SearchFragmentListTouchListener {
+
+    /**
+     * Called when the list view in {@link NewSearchFragment} is touched.
+     *
+     * @see OnTouchListener#onTouch(View, MotionEvent)
+     */
+    boolean onSearchListTouch(MotionEvent event);
+  }
 }
