@@ -24,75 +24,59 @@ import android.os.Vibrator
24
24
import androidx.annotation.RequiresApi
25
25
import androidx.annotation.RequiresPermission
26
26
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)
30
30
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()
46
39
)
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]
82
42
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
84
47
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()
88
55
)
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()
93
68
)
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
94
79
)
80
+ // [END android_ui_haptics_check_multiple_primitives_support]
95
81
}
96
82
}
97
- // [END android_ui_haptics_fallback]
98
- }
0 commit comments