From d7648f80e50ba97df1e8b3f309ed859ed1998c37 Mon Sep 17 00:00:00 2001 From: ifsnow Date: Mon, 11 Sep 2023 18:24:55 +0900 Subject: [PATCH] Refactor: [Android] Optimize condition logic --- ...RNReactNativeHapticFeedbackModuleImpl.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/com/mkuczera/RNReactNativeHapticFeedbackModuleImpl.java b/android/src/main/java/com/mkuczera/RNReactNativeHapticFeedbackModuleImpl.java index 6485865..ac96cd7 100644 --- a/android/src/main/java/com/mkuczera/RNReactNativeHapticFeedbackModuleImpl.java +++ b/android/src/main/java/com/mkuczera/RNReactNativeHapticFeedbackModuleImpl.java @@ -18,33 +18,33 @@ public class RNReactNativeHapticFeedbackModuleImpl { public static final String NAME = "RNHapticFeedback"; - public static boolean isVibrationEnabled(Context context) { - Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); - AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); - + private static boolean isVibrationEnabled(Context context, Vibrator vibrator) { // 1. Check the vibration function of the user's device - boolean hasVibrator = vibrator != null && vibrator.hasVibrator(); + if (!vibrator.hasVibrator()) return false; + + AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + if (audioManager == null) return false; // 2. Check if the user has turned on the sound boolean isVolumeOn = audioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT; + if (isVolumeOn) return true; // 3. Check if the user has set the vibrate mode boolean isVibrateMode = audioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE; - - return hasVibrator && (isVolumeOn || isVibrateMode); + return isVibrateMode; } public static void trigger(ReactApplicationContext reactContext, String type, ReadableMap options) { + Vibrator vibrator = (Vibrator) reactContext.getSystemService(Context.VIBRATOR_SERVICE); + if (vibrator == null) return; + // Check system settings, if disabled and we're not explicitly ignoring then return immediatly boolean ignoreAndroidSystemSettings = options.getBoolean("ignoreAndroidSystemSettings"); - boolean isVibrationEnabled = isVibrationEnabled(reactContext); + if (ignoreAndroidSystemSettings == false && !isVibrationEnabled(reactContext, vibrator)) return; - if (ignoreAndroidSystemSettings == false && !isVibrationEnabled) return; - Vibrator v = (Vibrator) reactContext.getSystemService(Context.VIBRATOR_SERVICE); Vibrate targetVibration = VibrateFactory.getVibration(type); + if (targetVibration == null) return; - if (v == null || targetVibration == null) return; - - targetVibration.apply(v); + targetVibration.apply(vibrator); } }