@@ -24,75 +24,59 @@ import android.os.Vibrator
2424import androidx.annotation.RequiresApi
2525import androidx.annotation.RequiresPermission
2626
27- @RequiresApi(api = Build .VERSION_CODES .M )
28- class CustomVibrationPatternsJava : Activity () {
29- val vibrator = applicationContext .getSystemService(Vibrator ::class .java) as Vibrator
27+ @RequiresApi(api = Build .VERSION_CODES .S )
28+ class CustomVibrationCompositions : Activity () {
29+ var vibrator: Vibrator = getApplicationContext() .getSystemService(Vibrator ::class .java)
3030
31- // [START android_ui_haptics_ramp_up]
32- @RequiresApi(Build .VERSION_CODES .O )
33- @RequiresPermission(Manifest .permission.VIBRATE )
34- fun rampUpPattern () {
35- val timings = longArrayOf(
36- 50 , 50 , 50 , 50 , 50 , 100 , 350 , 25 , 25 , 25 , 25 , 200
37- )
38- val amplitudes = intArrayOf(
39- 33 , 51 , 75 , 113 , 170 , 255 , 0 , 38 , 62 , 100 , 160 , 255
40- )
41- val repeatIndex = - 1 // Don't repeat.
42-
43- vibrator.vibrate(
44- VibrationEffect .createWaveform(
45- timings, amplitudes, repeatIndex
31+ @RequiresPermission(Manifest .permission.VIBRATE )
32+ // [START android_ui_haptics_composed_vibration_effect]
33+ fun createComposedVibrationEffect () {
34+ vibrator.vibrate(
35+ VibrationEffect .startComposition()
36+ .addPrimitive(VibrationEffect .Composition .PRIMITIVE_SLOW_RISE )
37+ .addPrimitive(VibrationEffect .Composition .PRIMITIVE_CLICK )
38+ .compose()
4639 )
47- )
48- }
49- // [END android_ui_haptics_ramp_up]
50-
51- @RequiresApi(api = Build .VERSION_CODES .O )
52- @RequiresPermission(Manifest .permission.VIBRATE )
53- // [START android_ui_haptics_repeat]
54- fun startVibrating () {
55- val timings = longArrayOf(50 , 50 , 100 , 50 , 50 )
56- val amplitudes = intArrayOf(64 , 128 , 255 , 128 , 64 )
57- val repeat = 1 // Repeat from the second entry, index = 1.
58- val repeatingEffect = VibrationEffect .createWaveform(
59- timings, amplitudes, repeat
60- )
61- // repeatingEffect can be used in multiple places.
62-
63- vibrator.vibrate(repeatingEffect)
64- }
65-
66- // [START_EXCLUDE]
67- @RequiresPermission(Manifest .permission.VIBRATE )
68- // [END_EXCLUDE]
69- fun stopVibrating () {
70- vibrator.cancel()
71- }
72- // [END android_ui_haptics_repeat]
73-
74- // [START android_ui_haptics_fallback]
75- @RequiresApi(api = Build .VERSION_CODES .O )
76- @RequiresPermission(Manifest .permission.VIBRATE )
77- fun patternWithFallback () {
78- val smoothTimings = longArrayOf(50 , 50 , 100 , 50 , 50 )
79- val onOffTimings = longArrayOf(50 , 100 )
80- val amplitudes = intArrayOf(64 , 128 , 255 , 128 , 64 )
81- val repeatIndex = - 1 // Don't repeat.
40+ }
41+ // [END android_ui_haptics_composed_vibration_effect]
8242
83- if (vibrator.hasAmplitudeControl()) {
43+ @RequiresPermission(Manifest .permission.VIBRATE )
44+ // [START android_ui_haptics_gap_between_primitives]
45+ fun gapBetweenPrimitives () {
46+ val delayMs: Int = 100
8447 vibrator.vibrate(
85- VibrationEffect .createWaveform(
86- smoothTimings, amplitudes, repeatIndex
87- )
48+ VibrationEffect .startComposition()
49+ .addPrimitive(VibrationEffect .Composition .PRIMITIVE_SPIN , 0.8f )
50+ .addPrimitive(VibrationEffect .Composition .PRIMITIVE_SPIN , 0.6f )
51+ .addPrimitive(
52+ VibrationEffect .Composition .PRIMITIVE_THUD , 1.0f , delayMs
53+ )
54+ .compose()
8855 )
89- } else {
90- vibrator.vibrate(
91- VibrationEffect .createWaveform(
92- onOffTimings, repeatIndex
56+ }
57+ // [END android_ui_haptics_gap_between_primitives]
58+
59+ @RequiresPermission(Manifest .permission.VIBRATE )
60+ private fun checkPrimitivesSupport () {
61+ // [START android_ui_haptics_check_single_primitive_support]
62+ val primitive: Int = VibrationEffect .Composition .PRIMITIVE_LOW_TICK
63+
64+ if (vibrator.areAllPrimitivesSupported(primitive)) {
65+ vibrator.vibrate(
66+ VibrationEffect .startComposition()
67+ .addPrimitive(primitive).compose()
9368 )
69+ } else {
70+ // Play a predefined effect or custom pattern as a fallback.
71+ }
72+ // [END android_ui_haptics_check_single_primitive_support]
73+
74+ // [START android_ui_haptics_check_multiple_primitives_support]
75+ val supported: BooleanArray = vibrator.arePrimitivesSupported(
76+ VibrationEffect .Composition .PRIMITIVE_LOW_TICK ,
77+ VibrationEffect .Composition .PRIMITIVE_TICK ,
78+ VibrationEffect .Composition .PRIMITIVE_CLICK
9479 )
80+ // [END android_ui_haptics_check_multiple_primitives_support]
9581 }
9682 }
97- // [END android_ui_haptics_fallback]
98- }
0 commit comments