Add support for vibration patterns
Summary:and "not supported" warnings for ios Closes https://github.com/facebook/react-native/pull/6400 Differential Revision: D3113988 fb-gh-sync-id: 169623f157ec59c38b4368cbc668c85201b67ed8 fbshipit-source-id: 169623f157ec59c38b4368cbc668c85201b67ed8
This commit is contained in:
parent
2bcf4bef2b
commit
e20e8a3cc8
|
@ -27,7 +27,8 @@ var {
|
||||||
exports.framework = 'React';
|
exports.framework = 'React';
|
||||||
exports.title = 'Vibration';
|
exports.title = 'Vibration';
|
||||||
exports.description = 'Vibration API';
|
exports.description = 'Vibration API';
|
||||||
exports.examples = [{
|
exports.examples = [
|
||||||
|
{
|
||||||
title: 'Vibration.vibrate()',
|
title: 'Vibration.vibrate()',
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
|
@ -40,7 +41,50 @@ exports.examples = [{
|
||||||
</TouchableHighlight>
|
</TouchableHighlight>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
}];
|
},
|
||||||
|
{
|
||||||
|
title: 'Vibration.vibrate([0, 500, 200, 500])',
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<TouchableHighlight
|
||||||
|
style={styles.wrapper}
|
||||||
|
onPress={() => Vibration.vibrate([0, 500, 200, 500])}>
|
||||||
|
<View style={styles.button}>
|
||||||
|
<Text>Vibrate once</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableHighlight>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Vibration.vibrate([0, 500, 200, 500], true)',
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<TouchableHighlight
|
||||||
|
style={styles.wrapper}
|
||||||
|
onPress={() => Vibration.vibrate([0, 500, 200, 500], true)}>
|
||||||
|
<View style={styles.button}>
|
||||||
|
<Text>Vibrate until cancel</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableHighlight>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Vibration.cancel()',
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<TouchableHighlight
|
||||||
|
style={styles.wrapper}
|
||||||
|
onPress={() => Vibration.cancel()}>
|
||||||
|
<View style={styles.button}>
|
||||||
|
<Text>Cancel</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableHighlight>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
var styles = StyleSheet.create({
|
var styles = StyleSheet.create({
|
||||||
wrapper: {
|
wrapper: {
|
||||||
|
|
|
@ -27,11 +27,35 @@ var Platform = require('Platform');
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var Vibration = {
|
var Vibration = {
|
||||||
vibrate: function(duration: number = 400) {
|
vibrate: function(pattern: number | Array<number> = 400, repeat: boolean = false) {
|
||||||
if (Platform.OS === 'android') {
|
if (Platform.OS === 'android') {
|
||||||
RCTVibration.vibrate(duration);
|
if (typeof pattern === 'number') {
|
||||||
|
RCTVibration.vibrate(pattern);
|
||||||
|
} else if (Array.isArray(pattern)) {
|
||||||
|
RCTVibration.vibrateByPattern(pattern, repeat ? 0 : -1);
|
||||||
} else {
|
} else {
|
||||||
|
throw new Error('Vibration pattern should be a number or array');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (typeof pattern === 'number') {
|
||||||
RCTVibration.vibrate();
|
RCTVibration.vibrate();
|
||||||
|
} else if (Array.isArray(pattern)) {
|
||||||
|
console.warn('Vibration patterns are not supported on iOS');
|
||||||
|
} else {
|
||||||
|
throw new Error('Vibration pattern should be a number or array');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Stop vibration
|
||||||
|
*
|
||||||
|
* @platform android
|
||||||
|
*/
|
||||||
|
cancel: function() {
|
||||||
|
if (Platform.OS === 'ios') {
|
||||||
|
console.warn('Vibration.cancel is not supported on iOS');
|
||||||
|
} else {
|
||||||
|
RCTVibration.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,6 +15,7 @@ import android.os.Vibrator;
|
||||||
import com.facebook.react.bridge.ReactApplicationContext;
|
import com.facebook.react.bridge.ReactApplicationContext;
|
||||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||||
import com.facebook.react.bridge.ReactMethod;
|
import com.facebook.react.bridge.ReactMethod;
|
||||||
|
import com.facebook.react.bridge.ReadableArray;
|
||||||
|
|
||||||
public class VibrationModule extends ReactContextBaseJavaModule {
|
public class VibrationModule extends ReactContextBaseJavaModule {
|
||||||
|
|
||||||
|
@ -34,4 +35,25 @@ public class VibrationModule extends ReactContextBaseJavaModule {
|
||||||
v.vibrate(duration);
|
v.vibrate(duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
public void vibrateByPattern(ReadableArray pattern, int repeat) {
|
||||||
|
long[] patternLong = new long[pattern.size()];
|
||||||
|
for (int i = 0; i < pattern.size(); i++) {
|
||||||
|
patternLong[i] = pattern.getInt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vibrator v = (Vibrator) getReactApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
|
||||||
|
if (v != null) {
|
||||||
|
v.vibrate(patternLong, repeat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ReactMethod
|
||||||
|
public void cancel() {
|
||||||
|
Vibrator v = (Vibrator) getReactApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
|
||||||
|
if (v != null) {
|
||||||
|
v.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue