From 3f5d797cf0b88315c5cda6ea8e8630d61d75387a Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Sun, 16 Jun 2024 10:47:40 +0300 Subject: [PATCH 01/10] Update GameActivity.java --- .../main/java/org/haxe/lime/GameActivity.java | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index e0c37f44c..d61c7b00d 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -8,6 +8,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.VibrationEffect; import android.os.Vibrator; import android.util.DisplayMetrics; import android.util.Log; @@ -372,23 +373,55 @@ public class GameActivity extends SDLActivity { Vibrator v = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); - if (period == 0) { + if (v == null || !v.hasVibrator()) { - v.vibrate (duration); + return; - } else { + } - int periodMS = (int)Math.ceil (period / 2); - int count = (int)Math.ceil ((duration / period) * 2); - long[] pattern = new long[count]; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - for (int i = 0; i < count; i++) { + if (period == 0) { - pattern[i] = periodMS; + v.vibrate (VibrationEffect.createOneShot(duration, VibrationEffect.DEFAULT_AMPLITUDE)); + + } else { + + int periodMS = Math.max(1, (int) Math.ceil(period / 2.0)); + int count = Math.max(1, (int) Math.ceil((duration / (double) period) * 2)); + long[] pattern = new long[count]; + + for (int i = 0; i < count; i++) { + + pattern[i] = periodMS; + + } + + v.vibrate (VibrationEffect.createWaveform(pattern, -1)); } - v.vibrate (pattern, -1); + } else { + + if (period == 0) { + + v.vibrate (duration); + + } else { + + int periodMS = (int)Math.ceil (period / 2); + int count = (int)Math.ceil ((duration / period) * 2); + long[] pattern = new long[count]; + + for (int i = 0; i < count; i++) { + + pattern[i] = periodMS; + + } + + v.vibrate (pattern, -1); + + } } From bd3bbc532e3803c7b67193d52f01c503297b1f9c Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Sun, 16 Jun 2024 10:53:20 +0300 Subject: [PATCH 02/10] Maintain style --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index d61c7b00d..3edf875cd 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -383,12 +383,12 @@ public class GameActivity extends SDLActivity { if (period == 0) { - v.vibrate (VibrationEffect.createOneShot(duration, VibrationEffect.DEFAULT_AMPLITUDE)); + v.vibrate (VibrationEffect.createOneShot (duration, VibrationEffect.DEFAULT_AMPLITUDE)); } else { - int periodMS = Math.max(1, (int) Math.ceil(period / 2.0)); - int count = Math.max(1, (int) Math.ceil((duration / (double) period) * 2)); + int periodMS = Math.max (1, (int)Math.ceil (period / 2.0)); + int count = Math.max (1, (int)Math.ceil ((duration / (double) period) * 2)); long[] pattern = new long[count]; for (int i = 0; i < count; i++) { @@ -397,7 +397,7 @@ public class GameActivity extends SDLActivity { } - v.vibrate (VibrationEffect.createWaveform(pattern, -1)); + v.vibrate (VibrationEffect.createWaveform (pattern, -1)); } From 3d8ad8a0e374df4aeb74860e6a7ff4c56684ab63 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Mon, 17 Jun 2024 09:48:22 +0300 Subject: [PATCH 03/10] Cancel the vibration when the app pauses or when is being destroyed. --- .../main/java/org/haxe/lime/GameActivity.java | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index 3edf875cd..a1e855a66 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -33,6 +33,8 @@ public class GameActivity extends SDLActivity { public Handler handler; + protected Vibrator vibrator; + public static double getDisplayXDPI () { @@ -107,6 +109,8 @@ public class GameActivity extends SDLActivity { protected void onCreate (Bundle state) { + vibrator = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); + super.onCreate (state); assetManager = getAssets (); @@ -138,6 +142,14 @@ public class GameActivity extends SDLActivity { @Override protected void onDestroy () { + if (vibrator != null) { + + Log.d ("GameActivity", "Cancelling vibration"); + + vibrator.cancel (); + + } + for (Extension extension : extensions) { extension.onDestroy (); @@ -177,6 +189,14 @@ public class GameActivity extends SDLActivity { @Override protected void onPause () { + if (vibrator != null) { + + Log.d ("GameActivity", "Cancelling vibration"); + + vibrator.cancel (); + + } + super.onPause (); for (Extension extension : extensions) { @@ -371,9 +391,7 @@ public class GameActivity extends SDLActivity { public static void vibrate (int period, int duration) { - Vibrator v = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); - - if (v == null || !v.hasVibrator()) { + if (vibrator == null || !vibrator.hasVibrator ()) { return; @@ -383,7 +401,7 @@ public class GameActivity extends SDLActivity { if (period == 0) { - v.vibrate (VibrationEffect.createOneShot (duration, VibrationEffect.DEFAULT_AMPLITUDE)); + vibrator.vibrate (VibrationEffect.createOneShot (duration, VibrationEffect.DEFAULT_AMPLITUDE)); } else { @@ -397,7 +415,7 @@ public class GameActivity extends SDLActivity { } - v.vibrate (VibrationEffect.createWaveform (pattern, -1)); + vibrator.vibrate (VibrationEffect.createWaveform (pattern, -1)); } @@ -405,7 +423,7 @@ public class GameActivity extends SDLActivity { if (period == 0) { - v.vibrate (duration); + vibrator.vibrate (duration); } else { @@ -419,7 +437,7 @@ public class GameActivity extends SDLActivity { } - v.vibrate (pattern, -1); + vibrator.vibrate (pattern, -1); } From 165d478cb9a383e446febcec8c7db27dcec8d7d4 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Mon, 17 Jun 2024 10:22:28 +0300 Subject: [PATCH 04/10] Oops --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index a1e855a66..712995355 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -30,12 +30,10 @@ public class GameActivity extends SDLActivity { private static AssetManager assetManager; private static List extensions; private static DisplayMetrics metrics; + private static Vibrator vibrator; public Handler handler; - protected Vibrator vibrator; - - public static double getDisplayXDPI () { if (metrics == null) { @@ -110,7 +108,7 @@ public class GameActivity extends SDLActivity { protected void onCreate (Bundle state) { vibrator = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); - + super.onCreate (state); assetManager = getAssets (); From b7d44342d1049cadf0d3fc94581b0ff9bd3cf974 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Mon, 17 Jun 2024 12:01:00 +0300 Subject: [PATCH 05/10] Oops --- .../template/app/src/main/java/org/haxe/lime/GameActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index 712995355..498b9b408 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -107,11 +107,10 @@ public class GameActivity extends SDLActivity { protected void onCreate (Bundle state) { - vibrator = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); - super.onCreate (state); assetManager = getAssets (); + vibrator = (Vibrator)mSingleton.getSystemService (Context.VIBRATOR_SERVICE); handler = new Handler (); Extension.assetManager = assetManager; From 24ac93a18a74bb130cf83e7a360a94ff6f0bcf91 Mon Sep 17 00:00:00 2001 From: Mihai Alexandru <77043862+MAJigsaw77@users.noreply.github.com> Date: Sun, 7 Jul 2024 20:18:11 +0300 Subject: [PATCH 06/10] Alright --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index 498b9b408..02dabb4f6 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -139,14 +139,6 @@ public class GameActivity extends SDLActivity { @Override protected void onDestroy () { - if (vibrator != null) { - - Log.d ("GameActivity", "Cancelling vibration"); - - vibrator.cancel (); - - } - for (Extension extension : extensions) { extension.onDestroy (); From 99ff0afeab720a21a70ef9750b8461ced9009ece Mon Sep 17 00:00:00 2001 From: player-03 Date: Sun, 7 Jul 2024 13:20:06 -0400 Subject: [PATCH 07/10] Reduce duplicate logic. I'd rather duplicate the SDK version check, not the math. --- .../main/java/org/haxe/lime/GameActivity.java | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index 02dabb4f6..b5b0c78f8 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -386,46 +386,36 @@ public class GameActivity extends SDLActivity { } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (period == 0) { - if (period == 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate (VibrationEffect.createOneShot (duration, VibrationEffect.DEFAULT_AMPLITUDE)); } else { - int periodMS = Math.max (1, (int)Math.ceil (period / 2.0)); - int count = Math.max (1, (int)Math.ceil ((duration / (double) period) * 2)); - long[] pattern = new long[count]; - - for (int i = 0; i < count; i++) { - - pattern[i] = periodMS; - - } - - vibrator.vibrate (VibrationEffect.createWaveform (pattern, -1)); + vibrator.vibrate (duration); } } else { - if (period == 0) { + int periodMS = Math.max (1, (int)Math.ceil (period / 2.0)); + int count = Math.max (1, (int)Math.ceil ((duration / (double) period) * 2)); + long[] pattern = new long[count]; - vibrator.vibrate (duration); + for (int i = 0; i < count; i++) { + + pattern[i] = periodMS; + + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + + vibrator.vibrate (VibrationEffect.createWaveform (pattern, -1)); } else { - int periodMS = (int)Math.ceil (period / 2); - int count = (int)Math.ceil ((duration / period) * 2); - long[] pattern = new long[count]; - - for (int i = 0; i < count; i++) { - - pattern[i] = periodMS; - - } - vibrator.vibrate (pattern, -1); } From 1e6fdee508fe54d452441411821440876cf85bce Mon Sep 17 00:00:00 2001 From: player-03 Date: Sun, 7 Jul 2024 13:53:16 -0400 Subject: [PATCH 08/10] Simplify and document vibration pattern logic. --- .../app/src/main/java/org/haxe/lime/GameActivity.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index b5b0c78f8..f4d47572e 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -380,7 +380,7 @@ public class GameActivity extends SDLActivity { public static void vibrate (int period, int duration) { - if (vibrator == null || !vibrator.hasVibrator ()) { + if (vibrator == null || !vibrator.hasVibrator () || period < 0 || duration <= 0) { return; @@ -400,8 +400,9 @@ public class GameActivity extends SDLActivity { } else { - int periodMS = Math.max (1, (int)Math.ceil (period / 2.0)); - int count = Math.max (1, (int)Math.ceil ((duration / (double) period) * 2)); + // each period has two halves (vibrator off/vibrator on), and each half requires a separate entry in the array + int periodMS = (int)Math.ceil (period / 2.0); + int count = (int)Math.ceil (duration / (double) periodMS); long[] pattern = new long[count]; for (int i = 0; i < count; i++) { From f0ae60d1efcc1a0b86d5e4cd4b3cc29a266000e5 Mon Sep 17 00:00:00 2001 From: player-03 Date: Sun, 7 Jul 2024 14:34:09 -0400 Subject: [PATCH 09/10] Remove log message. `GameActivity` doesn't print any other messages, so this seems out of place. Plus, it would happen every time even if there's no vibration ongoing. --- .../template/app/src/main/java/org/haxe/lime/GameActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index f4d47572e..c6dbe2307 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -179,8 +179,6 @@ public class GameActivity extends SDLActivity { @Override protected void onPause () { if (vibrator != null) { - - Log.d ("GameActivity", "Cancelling vibration"); vibrator.cancel (); From c85c50c4bfbe9392e24b02e913afa8a69a68d423 Mon Sep 17 00:00:00 2001 From: player-03 Date: Sun, 7 Jul 2024 16:17:05 -0400 Subject: [PATCH 10/10] Remove delay before vibration begins. --- .../template/app/src/main/java/org/haxe/lime/GameActivity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java index c6dbe2307..3c28d7a6c 100644 --- a/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java +++ b/templates/android/template/app/src/main/java/org/haxe/lime/GameActivity.java @@ -403,7 +403,8 @@ public class GameActivity extends SDLActivity { int count = (int)Math.ceil (duration / (double) periodMS); long[] pattern = new long[count]; - for (int i = 0; i < count; i++) { + // the first entry is the delay before vibration starts, so leave it as 0 + for (int i = 1; i < count; i++) { pattern[i] = periodMS;