Skip to content

Commit 1158444

Browse files
authored
Merge pull request #523 from Franccisco/vibrator-fix
Fix vibrator, which was not working on Android devices.
2 parents fd561b5 + 4e20dcf commit 1158444

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

plyer/platforms/android/vibrator.py

+26-11
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,53 @@
1-
'''Implementation Vibrator for Android.'''
1+
"""Implementation Vibrator for Android."""
22

3-
from jnius import autoclass
3+
from jnius import autoclass, cast
44
from plyer.facades import Vibrator
55
from plyer.platforms.android import activity
66
from plyer.platforms.android import SDK_INT
77

8-
Context = autoclass('android.content.Context')
9-
vibrator = activity.getSystemService(Context.VIBRATOR_SERVICE)
8+
Context = autoclass("android.content.Context")
9+
vibrator_service = activity.getSystemService(Context.VIBRATOR_SERVICE)
10+
vibrator = cast("android.os.Vibrator", vibrator_service)
11+
if SDK_INT >= 26:
12+
VibrationEffect = autoclass("android.os.VibrationEffect")
1013

1114

1215
class AndroidVibrator(Vibrator):
13-
'''Android Vibrator class.
16+
"""Android Vibrator class.
1417
1518
Supported features:
1619
* vibrate for some period of time.
1720
* vibrate from given pattern.
1821
* cancel vibration.
1922
* check whether Vibrator exists.
20-
'''
23+
"""
2124

2225
def _vibrate(self, time=None, **kwargs):
2326
if vibrator:
24-
vibrator.vibrate(int(1000 * time))
27+
if SDK_INT >= 26:
28+
vibrator.vibrate(
29+
VibrationEffect.createOneShot(
30+
int(1000 * time), VibrationEffect.DEFAULT_AMPLITUDE
31+
)
32+
)
33+
else:
34+
vibrator.vibrate(int(1000 * time))
2535

2636
def _pattern(self, pattern=None, repeat=None, **kwargs):
2737
pattern = [int(1000 * time) for time in pattern]
2838

2939
if vibrator:
30-
vibrator.vibrate(pattern, repeat)
40+
if SDK_INT >= 26:
41+
vibrator.vibrate(
42+
VibrationEffect.createWaveform(pattern, repeat)
43+
)
44+
else:
45+
vibrator.vibrate(pattern, repeat)
3146

3247
def _exists(self, **kwargs):
3348
if SDK_INT >= 11:
3449
return vibrator.hasVibrator()
35-
elif activity.getSystemService(Context.VIBRATOR_SERVICE) is None:
50+
elif vibrator_service is None:
3651
raise NotImplementedError()
3752
return True
3853

@@ -41,8 +56,8 @@ def _cancel(self, **kwargs):
4156

4257

4358
def instance():
44-
'''Returns Vibrator with android features.
59+
"""Returns Vibrator with android features.
4560
4661
:return: instance of class AndroidVibrator
47-
'''
62+
"""
4863
return AndroidVibrator()

0 commit comments

Comments
 (0)