diff --git a/Yeeemp/app/src/main/AndroidManifest.xml b/Yeeemp/app/src/main/AndroidManifest.xml
index 29ff43a..029b852 100644
--- a/Yeeemp/app/src/main/AndroidManifest.xml
+++ b/Yeeemp/app/src/main/AndroidManifest.xml
@@ -3,6 +3,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
+
+
{
+ Utils.hapticTick(view);
+
// Finalize values
this.eventContainer.comment = this.binding.eventEditContent.eventEditComment.getText().toString().trim();
diff --git a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventListActivity.java b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventListActivity.java
index 920f8f1..1ad678c 100644
--- a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventListActivity.java
+++ b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventListActivity.java
@@ -124,6 +124,8 @@ public class EventListActivity extends AppCompatActivity {
return true;
});
binding.fab.setOnClickListener(view -> {
+ Utils.hapticTick(view);
+
Bundle extra = new Bundle();
extra.putInt("queue_id", this.queue.getId());
diff --git a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventRecyclerViewAdapter.java b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventRecyclerViewAdapter.java
index 0adccc3..1868f51 100644
--- a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventRecyclerViewAdapter.java
+++ b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/EventRecyclerViewAdapter.java
@@ -121,6 +121,8 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter {
+ Utils.hapticTick(view);
+
Bundle extra = new Bundle();
extra.putInt("event_id", this.events[position].getId());
extra.putInt("queue_id", this.queue.getId());
diff --git a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueListActivity.java b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueListActivity.java
index d96ee66..004851d 100644
--- a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueListActivity.java
+++ b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueListActivity.java
@@ -156,6 +156,8 @@ public class QueueListActivity extends AppCompatActivity {
return true;
});
binding.fab.setOnClickListener(view -> {
+ Utils.hapticTick(view);
+
Queue q = Wrapper.getQueueMaker().create();
q.setName("New Queue");
diff --git a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueRecyclerViewAdapter.java b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueRecyclerViewAdapter.java
index 04504de..352ec74 100644
--- a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueRecyclerViewAdapter.java
+++ b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/QueueRecyclerViewAdapter.java
@@ -17,11 +17,16 @@
package art.pegasko.yeeemp.ui.activity;
import android.app.AlertDialog;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.os.Build;
import android.os.Bundle;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.text.InputType;
import android.util.Log;
+import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
@@ -100,6 +105,8 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter {
+ Utils.hapticTick(view);
+
Bundle extra = new Bundle();
extra.putInt("queue_id", queues[position].getId());
@@ -112,6 +119,8 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter {
+ Utils.hapticTick(view);
+
Bundle extra = new Bundle();
extra.putInt("queue_id", this.queues[position].getId());
diff --git a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/Utils.java b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/Utils.java
index 3663462..a418d4b 100644
--- a/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/Utils.java
+++ b/Yeeemp/app/src/main/java/art/pegasko/yeeemp/ui/activity/Utils.java
@@ -16,6 +16,13 @@
package art.pegasko.yeeemp.ui.activity;
+import android.content.Context;
+import android.os.Build;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.view.HapticFeedbackConstants;
+import android.view.View;
+
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -55,4 +62,29 @@ public class Utils {
return 0;
return Math.abs(o.hashCode()) & ((1 << 16) - 1);
}
+
+ public static void hapticTick(View view) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ // Vibration muted, do nothing
+ if (!view.isHapticFeedbackEnabled()) {
+ return;
+ }
+
+ // Success only if haptics available and worked
+ if (view.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK)) {
+ return;
+ }
+ }
+
+ // Fallback to basic vibration
+ Vibrator vibrator = (Vibrator) view.getContext().getSystemService(Context.VIBRATOR_SERVICE);
+ if (vibrator != null) {
+ // TODO: Respect silent mode
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ vibrator.vibrate(VibrationEffect.createOneShot(10, 50));
+ } else {
+ vibrator.vibrate(10);
+ }
+ }
+ }
}