Merge "Print driving status and keyboard status in the kitchenSink for testing." into nyc-car-dev
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/keyboard_test.xml b/tests/EmbeddedKitchenSinkApp/res/layout/keyboard_test.xml
index c617094..7eac97c 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/keyboard_test.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/keyboard_test.xml
@@ -20,6 +20,12 @@
     android:layout_marginLeft="96dp">
 
     <TextView
+        android:id="@+id/driving_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textSize="20dp"/>
+
+    <TextView
         android:id="@+id/search_text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/keyboard/KeyboardFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/keyboard/KeyboardFragment.java
index 4ee0b16..42fc6d7 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/keyboard/KeyboardFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/keyboard/KeyboardFragment.java
@@ -18,9 +18,15 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.Nullable;
+import android.support.car.Car;
+import android.support.car.CarNotConnectedException;
+import android.support.car.CarNotSupportedException;
 import android.support.car.app.menu.CarDrawerActivity;
 import android.support.car.app.menu.SearchBoxEditListener;
+import android.support.car.hardware.CarSensorEvent;
+import android.support.car.hardware.CarSensorManager;
 import android.support.v4.app.Fragment;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -30,16 +36,19 @@
 import com.google.android.car.kitchensink.R;
 
 public class KeyboardFragment extends Fragment {
+    private static final String TAG = "KitchenSinkKeyboard";
     public static final int CARD = 0xfffafafa;
     public static final int TEXT_PRIMARY_DAY = 0xde000000;
     public static final int TEXT_SECONDARY_DAY = 0x8a000000;
 
+    private TextView mDrivingStatus;
     private Button mImeButton;
     private Button mCloseImeButton;
     private Button mShowHideInputButton;
     private CarDrawerActivity mActivity;
     private TextView mOnSearchText;
     private TextView mOnEditText;
+    private CarSensorManager mSensorManager;
 
     private final Handler mHandler = new Handler();
 
@@ -81,10 +90,53 @@
         mOnEditText = (TextView) v.findViewById(R.id.edit_text);
         resetInput();
         mActivity.setSearchBoxEndView(View.inflate(getContext(), R.layout.keyboard_end_view, null));
-
+        mDrivingStatus = (TextView) v.findViewById(R.id.driving_status);
         return v;
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        try {
+            mSensorManager = (CarSensorManager)
+                    mActivity.getCar().getCarManager(Car.SENSOR_SERVICE);
+            mSensorManager.registerListener(mCarSensorListener,
+                    CarSensorManager.SENSOR_TYPE_DRIVING_STATUS,
+                    CarSensorManager.SENSOR_RATE_FASTEST);
+        } catch (CarNotSupportedException | CarNotConnectedException e) {
+            Log.e(TAG, "Car not connected or not supported", e);
+        }
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        if (mSensorManager != null) {
+            mSensorManager.unregisterListener(mCarSensorListener);
+        }
+    }
+
+    private final CarSensorManager.CarSensorEventListener mCarSensorListener =
+            new CarSensorManager.CarSensorEventListener() {
+                @Override
+                public void onSensorChanged(CarSensorEvent event) {
+                    if (event.sensorType != CarSensorManager.SENSOR_TYPE_DRIVING_STATUS) {
+                        return;
+                    }
+                    int drivingStatus = event.getDrivingStatusData(null).status;
+
+                    boolean keyboardEnabled =
+                            (drivingStatus & CarSensorEvent.DRIVE_STATUS_NO_KEYBOARD_INPUT) == 0;
+                    mHandler.post(new Runnable() {
+                        @Override
+                        public void run() {
+                            mDrivingStatus.setText("Driving status: " + drivingStatus
+                                    + " Keyboard " + (keyboardEnabled ? "enabled" : "disabled"));
+                        }
+                    });
+                }
+            };
+
     private void resetInput() {
         mActivity.showSearchBox(new View.OnClickListener() {
             @Override