SystemUI: Vibrate on QS tile click

Change-Id: I9419b50be423e0e9a823a0d73eb431b85e4693a0
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
index 1ca2a96..4862287 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileImpl.java
@@ -38,6 +38,8 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
+import android.os.Vibrator;
+import android.os.VibrationEffect;
 import android.text.format.DateUtils;
 import android.util.ArraySet;
 import android.util.Log;
@@ -124,6 +126,11 @@
     private boolean mShowingDetail;
     private int mIsFullQs;
 
+    private final boolean mHasVibrator;
+    private final Vibrator mVibrator;
+    private static final VibrationEffect QS_TILE_TOUCH_HAPTIC =
+            VibrationEffect.get(VibrationEffect.EFFECT_TICK);
+
     private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
 
     /**
@@ -204,6 +211,9 @@
 
         resetStates();
         mUiHandler.post(() -> mLifecycle.setCurrentState(CREATED));
+
+        mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
+        mHasVibrator = mVibrator != null && mVibrator.hasVibrator();
     }
 
     protected final void resetStates() {
@@ -295,6 +305,7 @@
     }
 
     public void click(@Nullable View view) {
+        if (mHasVibrator) mVibrator.vibrate(QS_TILE_TOUCH_HAPTIC);
         mMetricsLogger.write(populate(new LogMaker(ACTION_QS_CLICK).setType(TYPE_ACTION)
                 .addTaggedData(FIELD_STATUS_BAR_STATE,
                         mStatusBarStateController.getState())));