From 4282c53372d852fd8512ff3fcb870334fc81daad Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 23 Nov 2025 18:47:38 +0100 Subject: [PATCH] Vibration fix --- .../java/com/jens/automation2/Actions.java | 71 +++++++++++++------ 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index a2055ef..6721fe5 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -959,33 +959,58 @@ public class Actions public static void vibrate(boolean parameter1, String parameter2) { - String vibrateDurations[] = parameter2.split(Action.vibrateSeparator); + String[] vibrateDurations = parameter2.split(Action.vibrateSeparator); int counter = 1; - for (String vibrate : vibrateDurations) - { - if (counter % 2 != 0) - { - Vibrator vibrator = (Vibrator) Miscellaneous.getAnyContext().getSystemService(Context.VIBRATOR_SERVICE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - vibrator.vibrate(VibrationEffect.createOneShot(Long.parseLong(vibrate), VibrationEffect.DEFAULT_AMPLITUDE)); - else - vibrator.vibrate(Long.parseLong(vibrate)); - } - else - { - try - { - Thread.sleep(Long.parseLong(vibrate)); - } - catch (Exception e) - { - Miscellaneous.logEvent("e", "VibrateSleep", Log.getStackTraceString(e), 5); - } - } - counter++; + Vibrator vibrator = (Vibrator) Miscellaneous.getAnyContext().getSystemService(Context.VIBRATOR_SERVICE); + + if(ActivityPermissions.havePermission(Manifest.permission.VIBRATE, Miscellaneous.getAnyContext())) + Miscellaneous.logEvent("i", "Vibrate", "Have permission.", 3); + + if(vibrator != null && vibrator.hasVibrator()) + { + for (String vibrateDuration : vibrateDurations) + { + vibrator.cancel(); + + if (counter % 2 != 0) + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) + { + VibrationEffect ve = VibrationEffect.createOneShot(Long.parseLong(vibrateDuration), VibrationEffect.DEFAULT_AMPLITUDE); + vibrator.vibrate(ve); + + // For newer versions it seems we have to wait for the vibration to complete. + try + { + Thread.sleep(Long.parseLong(vibrateDuration)); + } + catch (Exception e) + { + Miscellaneous.logEvent("e", "VibrateSleep", Log.getStackTraceString(e), 5); + } + } + else + vibrator.vibrate(Long.parseLong(vibrateDuration)); + } + else + { + try + { + Thread.sleep(Long.parseLong(vibrateDuration)); + } + catch (Exception e) + { + Miscellaneous.logEvent("e", "VibrateSleep", Log.getStackTraceString(e), 5); + } + } + + counter++; + } } + else + Miscellaneous.logEvent("w", "Vibrate", "Device doesn't have vibrator.", 3); } public void useDownloadedWebpage(String result)