Merge "Fix the range of click within the scrollbar for thumb to drag." into rvc-qpr-dev
diff --git a/car-ui-lib/src/com/android/car/ui/FocusParkingView.java b/car-ui-lib/src/com/android/car/ui/FocusParkingView.java
index 2167d23..761a764 100644
--- a/car-ui-lib/src/com/android/car/ui/FocusParkingView.java
+++ b/car-ui-lib/src/com/android/car/ui/FocusParkingView.java
@@ -17,6 +17,7 @@
 
 import static android.view.accessibility.AccessibilityNodeInfo.ACTION_COLLAPSE;
 import static android.view.accessibility.AccessibilityNodeInfo.ACTION_DISMISS;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_FOCUS;
 
 import android.content.Context;
 import android.os.Bundle;
@@ -130,6 +131,12 @@
                         getContext().getSystemService(InputMethodManager.class);
                 return inputMethodManager.hideSoftInputFromWindow(getWindowToken(),
                         /* flags= */ 0);
+            case ACTION_FOCUS:
+                // Don't leave this to View to handle as it will exit touch mode.
+                if (!hasFocus()) {
+                    return requestFocus();
+                }
+                break;
         }
         return super.performAccessibilityAction(action, arguments);
     }
diff --git a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
index 7f7eb80..9506fe1 100644
--- a/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
+++ b/car-ui-lib/src/com/android/car/ui/toolbar/SearchView.java
@@ -23,6 +23,7 @@
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.util.AttributeSet;
+import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.inputmethod.EditorInfo;
@@ -116,15 +117,37 @@
         mSearchText.setOnEditorActionListener((v, actionId, event) -> {
             if (actionId == EditorInfo.IME_ACTION_DONE
                     || actionId == EditorInfo.IME_ACTION_SEARCH) {
-                mSearchText.clearFocus();
-                for (Toolbar.OnSearchCompletedListener listener : mSearchCompletedListeners) {
-                    listener.onSearchCompleted();
+                notifyQuerySubmit();
+            } else if (isEnter(event)) {
+                if (event.getAction() == KeyEvent.ACTION_UP) {
+                    // Note that we want to trigger search only on ACTION_UP, but want to return
+                    // true for all actions for the relevant key event.
+                    notifyQuerySubmit();
                 }
+                return true;
             }
             return false;
         });
     }
 
+    private boolean isEnter(KeyEvent event) {
+        boolean result = false;
+        if (event != null) {
+            int keyCode = event.getKeyCode();
+            result = keyCode == KeyEvent.KEYCODE_ENTER
+                    || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER
+                    || keyCode == KeyEvent.KEYCODE_SEARCH;
+        }
+        return result;
+    }
+
+    private void notifyQuerySubmit() {
+        mSearchText.clearFocus();
+        for (Toolbar.OnSearchCompletedListener listener : mSearchCompletedListeners) {
+            listener.onSearchCompleted();
+        }
+    }
+
     private boolean mWasShown = false;
 
     @Override