abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/VibratorCompat.java
diff options
context:
space:
mode:
authorJules Aguillon2023-06-03 11:08:22 +0200
committerJules Aguillon2023-06-03 11:15:19 +0200
commit69e0b4c2a2424b83ce0ec876938ec3e73dd5b612 (patch)
tree75c002dcf243d440497a6ce11b30c50a50b4bd8f /srcs/juloo.keyboard2/VibratorCompat.java
parent6f418727cfcdd9377a345c8a40e200f701aa7ac7 (diff)
downloadunexpected-keyboard-69e0b4c2a2424b83ce0ec876938ec3e73dd5b612.tar.gz
unexpected-keyboard-69e0b4c2a2424b83ce0ec876938ec3e73dd5b612.zip
More control over vibration
The newer haptic feedback API that is used instead of the vibrator service since ef03dfe doesn't work for everyone. The new vibration option allow to choose both the newer API ("system") and the older API ("strong", "medium", "light").
Diffstat (limited to 'srcs/juloo.keyboard2/VibratorCompat.java')
-rw-r--r--srcs/juloo.keyboard2/VibratorCompat.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/srcs/juloo.keyboard2/VibratorCompat.java b/srcs/juloo.keyboard2/VibratorCompat.java
new file mode 100644
index 0000000..99ff5f5
--- /dev/null
+++ b/srcs/juloo.keyboard2/VibratorCompat.java
@@ -0,0 +1,81 @@
+package juloo.keyboard2;
+
+import android.content.Context;
+import android.os.Build.VERSION;
+import android.os.Vibrator;
+import android.view.HapticFeedbackConstants;
+import android.view.View;
+
+public final class VibratorCompat
+{
+ public static void vibrate(View v, VibrationBehavior b)
+ {
+ switch (b)
+ {
+ case DISABLED:
+ break;
+ case SYSTEM:
+ if (VERSION.SDK_INT >= 8)
+ v.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP,
+ HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
+ break;
+ case STRONG:
+ vibrator_vibrate(v, 50);
+ break;
+ case MEDIUM:
+ vibrator_vibrate(v, 20);
+ break;
+ case LIGHT:
+ vibrator_vibrate(v, 10);
+ break;
+ }
+ }
+
+ /** Use the older [Vibrator] when the newer API is not available or the user
+ wants more control. */
+ static void vibrator_vibrate(View v, int duration)
+ {
+ try
+ {
+ get_vibrator(v).vibrate(duration);
+ }
+ catch (Exception e) {}
+ }
+
+ static Vibrator vibrator_service = null;
+
+ static Vibrator get_vibrator(View v)
+ {
+ if (vibrator_service == null)
+ {
+ vibrator_service =
+ (Vibrator)v.getContext().getSystemService(Context.VIBRATOR_SERVICE);
+ }
+ return vibrator_service;
+ }
+
+ public static enum VibrationBehavior
+ {
+ DISABLED,
+ SYSTEM,
+ STRONG,
+ MEDIUM,
+ LIGHT;
+
+ VibrationBehavior() {}
+
+ /** Defaults [SYSTEM] for unrecognized strings. */
+ public static VibrationBehavior of_string(String s)
+ {
+ switch (s)
+ {
+ case "disabled": return DISABLED;
+ case "system": return SYSTEM;
+ case "strong": return STRONG;
+ case "medium": return MEDIUM;
+ case "light": return LIGHT;
+ default: return SYSTEM;
+ }
+ }
+ }
+}