diff --git a/Libraries/Vibration/VibrationIOS.android.js b/Libraries/Vibration/VibrationIOS.android.js index f52be6b7501b7c..c2a61a5c6ccae0 100644 --- a/Libraries/Vibration/VibrationIOS.android.js +++ b/Libraries/Vibration/VibrationIOS.android.js @@ -6,18 +6,28 @@ * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * Stub of VibrationIOS for Android. - * - * @providesModule VibrationIOS + * @providesModule VibrationAndroid */ + 'use strict'; -var warning = require('warning'); +var RCTVibrationAndroid = require('NativeModules').VibrationAndroid; + +/** + * This exposes the native VibrationAndroid module as a JS module. This has a function 'vibrate' + * which takes the following parameters: + * + * 1. int duration: The duration of the vibration in milliseconds. + */ + +var VibrationAndroid = { + + vibrate: function ( + duration: number + ): void { + RCTVibrationAndroid.vibrate(duration); + }, -var VibrationIOS = { - vibrate: function() { - warning('VibrationIOS is not supported on this platform!'); - } }; -module.exports = VibrationIOS; +module.exports = VibrationAndroid; diff --git a/Libraries/react-native/react-native.js b/Libraries/react-native/react-native.js index 7b2286782cefde..90a169671922b1 100644 --- a/Libraries/react-native/react-native.js +++ b/Libraries/react-native/react-native.js @@ -71,6 +71,7 @@ var ReactNative = Object.assign(Object.create(require('React')), { Settings: require('Settings'), StatusBarIOS: require('StatusBarIOS'), StyleSheet: require('StyleSheet'), + VibrationAndroid: require('VibrationAndroid'), VibrationIOS: require('VibrationIOS'), // Plugins diff --git a/ReactAndroid/src/main/AndroidManifest.xml b/ReactAndroid/src/main/AndroidManifest.xml index 900169cc7c5012..128bedb1ecdfa3 100644 --- a/ReactAndroid/src/main/AndroidManifest.xml +++ b/ReactAndroid/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java new file mode 100644 index 00000000000000..8abb48fe5a7156 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +package com.facebook.react.modules.vibration; + +import android.os.Vibrator; +import android.content.Context; + +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.common.MapBuilder; + +public class VibrationModule extends ReactContextBaseJavaModule { + + ReactApplicationContext reactContext; + + public VibrationModule(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + } + + @Override + public String getName() { + return "VibrationAndroid"; + } + + @ReactMethod + public void vibrate(int duration) { + Vibrator v = (Vibrator) reactContext.getSystemService(Context.VIBRATOR_SERVICE); + v.vibrate(duration); + } +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java index 65b7b38bcb530e..ed7198ce1cf26b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ b/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java @@ -21,6 +21,7 @@ import com.facebook.react.modules.network.NetworkingModule; import com.facebook.react.modules.storage.AsyncStorageModule; import com.facebook.react.modules.toast.ToastModule; +import com.facebook.react.modules.vibration.VibrationModule; import com.facebook.react.uimanager.ViewManager; import com.facebook.react.views.drawer.ReactDrawerLayoutManager; import com.facebook.react.views.image.ReactImageManager; @@ -47,6 +48,8 @@ public List createNativeModules(ReactApplicationContext reactConte new FrescoModule(reactContext), new NetworkingModule(reactContext), new ToastModule(reactContext)); + new VibrationModule(reactContext)); + } @Override