Loading msdllib/src/com/google/android/msdl/data/model/HapticComposition.kt +13 −4 Original line number Original line Diff line number Diff line Loading @@ -16,18 +16,27 @@ package com.google.android.msdl.data.model package com.google.android.msdl.data.model /** A haptic composition as a list of [HapticCompositionPrimitive] */ import android.os.VibrationEffect data class HapticComposition(val primitives: List<HapticCompositionPrimitive>? = null) /** * A haptic composition as a list of [HapticCompositionPrimitive] and a [android.os.VibrationEffect] * to use as a fallback. */ data class HapticComposition( val primitives: List<HapticCompositionPrimitive>, val fallbackEffect: VibrationEffect, ) /** /** * An abstraction of a haptic primitive in a composition that includes: * An abstraction of a haptic primitive in a composition that includes: * * * @param[primitiveId] The id of the primitive. * @param[primitiveId] The id of the primitive. * @param[scale] The scale of the primitive. * @param[scale] The scale of the primitive. * @param[delay] The delay of the primitive relative to the end of a previous primitive. * @param[delayMillis] The delay of the primitive relative to the end of a previous primitive. Given * in milliseconds. */ */ data class HapticCompositionPrimitive( data class HapticCompositionPrimitive( val primitiveId: Int, val primitiveId: Int, var scale: Float = 1f, var scale: Float = 1f, var delay: Int = 0, var delayMillis: Int = 0, ) ) msdllib/src/com/google/android/msdl/data/model/HapticToken.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ enum class HapticToken { POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, POSITIVE_CONFIRMATION_LOW_EMPHASIS, POSITIVE_CONFIRMATION_LOW_EMPHASIS, NEUTRAL_CONFIRMATION_HIGH_EMPHASIS, NEUTRAL_CONFIRMATION_HIGH_EMPHASIS, NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS, LONG_PRESS, LONG_PRESS, SWIPE_THRESHOLD_INDICATOR, SWIPE_THRESHOLD_INDICATOR, TAP_HIGH_EMPHASIS, TAP_HIGH_EMPHASIS, Loading msdllib/src/com/google/android/msdl/data/model/MSDLToken.kt +15 −9 Original line number Original line Diff line number Diff line Loading @@ -46,12 +46,24 @@ enum class MSDLToken( SoundToken.START, SoundToken.START, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that an ongoing activity has paused */ PAUSE( HapticToken.NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.PAUSE, FeedbackLevel.DEFAULT, ), /* Inform the user that their previously started activity has stopped SUCCESSFULLY */ /* Inform the user that their previously started activity has stopped SUCCESSFULLY */ STOP( STOP( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.STOP, SoundToken.STOP, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that their previously started activity has cancelled SUCCESSFULLY */ CANCEL( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.CANCEL, FeedbackLevel.DEFAULT, ), /* Inform the user that the state of an interactive component has been switched to on SUCCESSFULLY */ /* Inform the user that the state of an interactive component has been switched to on SUCCESSFULLY */ SWITCH_ON( SWITCH_ON( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, Loading Loading @@ -100,16 +112,10 @@ enum class MSDLToken( SoundToken.TAP_MEDIUM_EMPHASIS, SoundToken.TAP_MEDIUM_EMPHASIS, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Played when a users drag gesture reaches the maximum value */ /* Played when a users drag gesture reaches the maximum or minimum value */ DRAG_THRESHOLD_INDICATOR_CEILING( DRAG_THRESHOLD_INDICATOR_LIMIT( HapticToken.DRAG_THRESHOLD_INDICATOR, SoundToken.DRAG_THRESHOLD_INDICATOR_CEILING, FeedbackLevel.DEFAULT, ), /* Played when a users drag gesture reaches the minimum value */ DRAG_THRESHOLD_INDICATOR_FLOOR( HapticToken.DRAG_THRESHOLD_INDICATOR, HapticToken.DRAG_THRESHOLD_INDICATOR, SoundToken.DRAG_THRESHOLD_INDICATOR_FLOOR, SoundToken.DRAG_THRESHOLD_INDICATOR_LIMIT, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that their drag gesture has resulted in an incremental value change. /* Inform the user that their drag gesture has resulted in an incremental value change. Loading msdllib/src/com/google/android/msdl/data/model/SoundToken.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,9 @@ enum class SoundToken { FAILURE, FAILURE, SUCCESS, SUCCESS, START, START, PAUSE, STOP, STOP, CANCEL, SWITCH_ON, SWITCH_ON, SWITCH_OFF, SWITCH_OFF, UNLOCK, UNLOCK, Loading @@ -31,8 +33,7 @@ enum class SoundToken { SWIPE_THRESHOLD_INDICATOR, SWIPE_THRESHOLD_INDICATOR, TAP_HIGH_EMPHASIS, TAP_HIGH_EMPHASIS, TAP_MEDIUM_EMPHASIS, TAP_MEDIUM_EMPHASIS, DRAG_THRESHOLD_INDICATOR_CEILING, DRAG_THRESHOLD_INDICATOR_LIMIT, DRAG_THRESHOLD_INDICATOR_FLOOR, DRAG_INDICATOR, DRAG_INDICATOR, TAP_LOW_EMPHASIS, TAP_LOW_EMPHASIS, KEYPRESS_STANDARD, KEYPRESS_STANDARD, Loading msdllib/src/com/google/android/msdl/data/repository/MSDLRepositoryImpl.kt +140 −56 Original line number Original line Diff line number Diff line Loading @@ -33,29 +33,69 @@ class MSDLRepositoryImpl : MSDLRepository { override fun getHapticData(hapticToken: HapticToken): MSDLHapticData? = HAPTIC_DATA[hapticToken] override fun getHapticData(hapticToken: HapticToken): MSDLHapticData? = HAPTIC_DATA[hapticToken] companion object { companion object { // Timings and amplitudes that recreate a composition of three SPIN primitives as a waveform private val SPIN_TIMINGS = longArrayOf(20, 20, 3, 43, 20, 20, 3) private val SPIN_AMPLITUDES = intArrayOf(40, 80, 40, 0, 40, 80, 40) private const val SPIN_DELAY = 56L private const val SPIN_BREAK = 10 private val SPIN_WAVEFORM_TIMINGS = SPIN_TIMINGS + SPIN_DELAY + SPIN_TIMINGS + SPIN_DELAY + SPIN_TIMINGS private val SPIN_WAVEFORM_AMPLITUDES = SPIN_AMPLITUDES + SPIN_BREAK + SPIN_AMPLITUDES + SPIN_BREAK + SPIN_AMPLITUDES private val HAPTIC_DATA: Map<HapticToken, MSDLHapticData> = private val HAPTIC_DATA: Map<HapticToken, MSDLHapticData> = mapOf( mapOf( HapticToken.NEGATIVE_CONFIRMATION_HIGH_EMPHASIS to HapticToken.NEGATIVE_CONFIRMATION_HIGH_EMPHASIS to MSDLHapticData { HapticComposition(null) }, MSDLHapticData { HapticComposition( listOf( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = 0, ), HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = SPIN_DELAY.toInt(), ), HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = SPIN_DELAY.toInt(), ) ), VibrationEffect.createWaveform( SPIN_WAVEFORM_TIMINGS, SPIN_WAVEFORM_AMPLITUDES, -1, ) ) }, HapticToken.NEGATIVE_CONFIRMATION_MEDIUM_EMPHASIS to HapticToken.NEGATIVE_CONFIRMATION_MEDIUM_EMPHASIS to MSDLHapticData { MSDLHapticData { HapticComposition( HapticComposition( listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 114, 10, 10, 10, 114, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -65,14 +105,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 114, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -82,14 +127,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 52 delayMillis = 52 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 52, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -99,14 +149,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 52 delayMillis = 52 ) ) ), VibrationEffect.createWaveform( longArrayOf(5, 52, 10, 10, 10), intArrayOf(100, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -116,22 +171,41 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_THUD, VibrationEffect.Composition.PRIMITIVE_THUD, 1f, scale = 1f, 0 delayMillis = 0 ) ) ), VibrationEffect.createWaveform( longArrayOf(50, 100, 100, 50), intArrayOf(5, 50, 20, 10), -1 ) ) ) ) }, }, HapticToken.LONG_PRESS to HapticToken.NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS to MSDLHapticData { MSDLHapticData { HapticComposition( HapticComposition( listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0, ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) }, HapticToken.LONG_PRESS to MSDLHapticData { HapticComposition( listOf( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, scale = 1f, delayMillis = 0 ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.SWIPE_THRESHOLD_INDICATOR to HapticToken.SWIPE_THRESHOLD_INDICATOR to Loading @@ -140,10 +214,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.TAP_HIGH_EMPHASIS to HapticToken.TAP_HIGH_EMPHASIS to Loading @@ -152,10 +227,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.TAP_MEDIUM_EMPHASIS to HapticToken.TAP_MEDIUM_EMPHASIS to Loading @@ -164,10 +240,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, scale = 0.5f, 0 delayMillis = 0 ) ), ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.DRAG_THRESHOLD_INDICATOR to HapticToken.DRAG_THRESHOLD_INDICATOR to Loading @@ -176,10 +253,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 1f, scale = 1f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.DRAG_INDICATOR to HapticToken.DRAG_INDICATOR to Loading @@ -188,10 +266,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, scale = 0.5f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.TAP_LOW_EMPHASIS to HapticToken.TAP_LOW_EMPHASIS to Loading @@ -200,10 +279,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.3f, scale = 0.3f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_STANDARD to HapticToken.KEYPRESS_STANDARD to Loading @@ -212,10 +292,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ), ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.KEYPRESS_SPACEBAR to HapticToken.KEYPRESS_SPACEBAR to Loading @@ -224,10 +305,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_RETURN to HapticToken.KEYPRESS_RETURN to Loading @@ -236,10 +318,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_DELETE to HapticToken.KEYPRESS_DELETE to Loading @@ -248,10 +331,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.1f, scale = 1f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) } } ) ) Loading Loading
msdllib/src/com/google/android/msdl/data/model/HapticComposition.kt +13 −4 Original line number Original line Diff line number Diff line Loading @@ -16,18 +16,27 @@ package com.google.android.msdl.data.model package com.google.android.msdl.data.model /** A haptic composition as a list of [HapticCompositionPrimitive] */ import android.os.VibrationEffect data class HapticComposition(val primitives: List<HapticCompositionPrimitive>? = null) /** * A haptic composition as a list of [HapticCompositionPrimitive] and a [android.os.VibrationEffect] * to use as a fallback. */ data class HapticComposition( val primitives: List<HapticCompositionPrimitive>, val fallbackEffect: VibrationEffect, ) /** /** * An abstraction of a haptic primitive in a composition that includes: * An abstraction of a haptic primitive in a composition that includes: * * * @param[primitiveId] The id of the primitive. * @param[primitiveId] The id of the primitive. * @param[scale] The scale of the primitive. * @param[scale] The scale of the primitive. * @param[delay] The delay of the primitive relative to the end of a previous primitive. * @param[delayMillis] The delay of the primitive relative to the end of a previous primitive. Given * in milliseconds. */ */ data class HapticCompositionPrimitive( data class HapticCompositionPrimitive( val primitiveId: Int, val primitiveId: Int, var scale: Float = 1f, var scale: Float = 1f, var delay: Int = 0, var delayMillis: Int = 0, ) )
msdllib/src/com/google/android/msdl/data/model/HapticToken.kt +1 −0 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ enum class HapticToken { POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, POSITIVE_CONFIRMATION_LOW_EMPHASIS, POSITIVE_CONFIRMATION_LOW_EMPHASIS, NEUTRAL_CONFIRMATION_HIGH_EMPHASIS, NEUTRAL_CONFIRMATION_HIGH_EMPHASIS, NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS, LONG_PRESS, LONG_PRESS, SWIPE_THRESHOLD_INDICATOR, SWIPE_THRESHOLD_INDICATOR, TAP_HIGH_EMPHASIS, TAP_HIGH_EMPHASIS, Loading
msdllib/src/com/google/android/msdl/data/model/MSDLToken.kt +15 −9 Original line number Original line Diff line number Diff line Loading @@ -46,12 +46,24 @@ enum class MSDLToken( SoundToken.START, SoundToken.START, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that an ongoing activity has paused */ PAUSE( HapticToken.NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.PAUSE, FeedbackLevel.DEFAULT, ), /* Inform the user that their previously started activity has stopped SUCCESSFULLY */ /* Inform the user that their previously started activity has stopped SUCCESSFULLY */ STOP( STOP( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.STOP, SoundToken.STOP, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that their previously started activity has cancelled SUCCESSFULLY */ CANCEL( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, SoundToken.CANCEL, FeedbackLevel.DEFAULT, ), /* Inform the user that the state of an interactive component has been switched to on SUCCESSFULLY */ /* Inform the user that the state of an interactive component has been switched to on SUCCESSFULLY */ SWITCH_ON( SWITCH_ON( HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, HapticToken.POSITIVE_CONFIRMATION_MEDIUM_EMPHASIS, Loading Loading @@ -100,16 +112,10 @@ enum class MSDLToken( SoundToken.TAP_MEDIUM_EMPHASIS, SoundToken.TAP_MEDIUM_EMPHASIS, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Played when a users drag gesture reaches the maximum value */ /* Played when a users drag gesture reaches the maximum or minimum value */ DRAG_THRESHOLD_INDICATOR_CEILING( DRAG_THRESHOLD_INDICATOR_LIMIT( HapticToken.DRAG_THRESHOLD_INDICATOR, SoundToken.DRAG_THRESHOLD_INDICATOR_CEILING, FeedbackLevel.DEFAULT, ), /* Played when a users drag gesture reaches the minimum value */ DRAG_THRESHOLD_INDICATOR_FLOOR( HapticToken.DRAG_THRESHOLD_INDICATOR, HapticToken.DRAG_THRESHOLD_INDICATOR, SoundToken.DRAG_THRESHOLD_INDICATOR_FLOOR, SoundToken.DRAG_THRESHOLD_INDICATOR_LIMIT, FeedbackLevel.DEFAULT, FeedbackLevel.DEFAULT, ), ), /* Inform the user that their drag gesture has resulted in an incremental value change. /* Inform the user that their drag gesture has resulted in an incremental value change. Loading
msdllib/src/com/google/android/msdl/data/model/SoundToken.kt +3 −2 Original line number Original line Diff line number Diff line Loading @@ -22,7 +22,9 @@ enum class SoundToken { FAILURE, FAILURE, SUCCESS, SUCCESS, START, START, PAUSE, STOP, STOP, CANCEL, SWITCH_ON, SWITCH_ON, SWITCH_OFF, SWITCH_OFF, UNLOCK, UNLOCK, Loading @@ -31,8 +33,7 @@ enum class SoundToken { SWIPE_THRESHOLD_INDICATOR, SWIPE_THRESHOLD_INDICATOR, TAP_HIGH_EMPHASIS, TAP_HIGH_EMPHASIS, TAP_MEDIUM_EMPHASIS, TAP_MEDIUM_EMPHASIS, DRAG_THRESHOLD_INDICATOR_CEILING, DRAG_THRESHOLD_INDICATOR_LIMIT, DRAG_THRESHOLD_INDICATOR_FLOOR, DRAG_INDICATOR, DRAG_INDICATOR, TAP_LOW_EMPHASIS, TAP_LOW_EMPHASIS, KEYPRESS_STANDARD, KEYPRESS_STANDARD, Loading
msdllib/src/com/google/android/msdl/data/repository/MSDLRepositoryImpl.kt +140 −56 Original line number Original line Diff line number Diff line Loading @@ -33,29 +33,69 @@ class MSDLRepositoryImpl : MSDLRepository { override fun getHapticData(hapticToken: HapticToken): MSDLHapticData? = HAPTIC_DATA[hapticToken] override fun getHapticData(hapticToken: HapticToken): MSDLHapticData? = HAPTIC_DATA[hapticToken] companion object { companion object { // Timings and amplitudes that recreate a composition of three SPIN primitives as a waveform private val SPIN_TIMINGS = longArrayOf(20, 20, 3, 43, 20, 20, 3) private val SPIN_AMPLITUDES = intArrayOf(40, 80, 40, 0, 40, 80, 40) private const val SPIN_DELAY = 56L private const val SPIN_BREAK = 10 private val SPIN_WAVEFORM_TIMINGS = SPIN_TIMINGS + SPIN_DELAY + SPIN_TIMINGS + SPIN_DELAY + SPIN_TIMINGS private val SPIN_WAVEFORM_AMPLITUDES = SPIN_AMPLITUDES + SPIN_BREAK + SPIN_AMPLITUDES + SPIN_BREAK + SPIN_AMPLITUDES private val HAPTIC_DATA: Map<HapticToken, MSDLHapticData> = private val HAPTIC_DATA: Map<HapticToken, MSDLHapticData> = mapOf( mapOf( HapticToken.NEGATIVE_CONFIRMATION_HIGH_EMPHASIS to HapticToken.NEGATIVE_CONFIRMATION_HIGH_EMPHASIS to MSDLHapticData { HapticComposition(null) }, MSDLHapticData { HapticComposition( listOf( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = 0, ), HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = SPIN_DELAY.toInt(), ), HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_SPIN, scale = 1f, delayMillis = SPIN_DELAY.toInt(), ) ), VibrationEffect.createWaveform( SPIN_WAVEFORM_TIMINGS, SPIN_WAVEFORM_AMPLITUDES, -1, ) ) }, HapticToken.NEGATIVE_CONFIRMATION_MEDIUM_EMPHASIS to HapticToken.NEGATIVE_CONFIRMATION_MEDIUM_EMPHASIS to MSDLHapticData { MSDLHapticData { HapticComposition( HapticComposition( listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 114, 10, 10, 10, 114, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -65,14 +105,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 114 delayMillis = 114 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 114, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -82,14 +127,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 52 delayMillis = 52 ) ) ), VibrationEffect.createWaveform( longArrayOf(10, 10, 10, 52, 10, 10, 10), intArrayOf(10, 255, 20, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -99,14 +149,19 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 1f, scale = 1f, 0 delayMillis = 0 ), ), HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 52 delayMillis = 52 ) ) ), VibrationEffect.createWaveform( longArrayOf(5, 52, 10, 10, 10), intArrayOf(100, 0, 10, 255, 20), -1 ) ) ) ) }, }, Loading @@ -116,22 +171,41 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_THUD, VibrationEffect.Composition.PRIMITIVE_THUD, 1f, scale = 1f, 0 delayMillis = 0 ) ) ), VibrationEffect.createWaveform( longArrayOf(50, 100, 100, 50), intArrayOf(5, 50, 20, 10), -1 ) ) ) ) }, }, HapticToken.LONG_PRESS to HapticToken.NEUTRAL_CONFIRMATION_MEDIUM_EMPHASIS to MSDLHapticData { MSDLHapticData { HapticComposition( HapticComposition( listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 1f, scale = 1f, 0 delayMillis = 0, ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) }, HapticToken.LONG_PRESS to MSDLHapticData { HapticComposition( listOf( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, scale = 1f, delayMillis = 0 ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.SWIPE_THRESHOLD_INDICATOR to HapticToken.SWIPE_THRESHOLD_INDICATOR to Loading @@ -140,10 +214,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.TAP_HIGH_EMPHASIS to HapticToken.TAP_HIGH_EMPHASIS to Loading @@ -152,10 +227,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.TAP_MEDIUM_EMPHASIS to HapticToken.TAP_MEDIUM_EMPHASIS to Loading @@ -164,10 +240,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.5f, scale = 0.5f, 0 delayMillis = 0 ) ), ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.DRAG_THRESHOLD_INDICATOR to HapticToken.DRAG_THRESHOLD_INDICATOR to Loading @@ -176,10 +253,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 1f, scale = 1f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.DRAG_INDICATOR to HapticToken.DRAG_INDICATOR to Loading @@ -188,10 +266,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 0.5f, scale = 0.5f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.TAP_LOW_EMPHASIS to HapticToken.TAP_LOW_EMPHASIS to Loading @@ -200,10 +279,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.3f, scale = 0.3f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_STANDARD to HapticToken.KEYPRESS_STANDARD to Loading @@ -212,10 +292,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_TICK, VibrationEffect.Composition.PRIMITIVE_TICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ), ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK) ) ) }, }, HapticToken.KEYPRESS_SPACEBAR to HapticToken.KEYPRESS_SPACEBAR to Loading @@ -224,10 +305,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_RETURN to HapticToken.KEYPRESS_RETURN to Loading @@ -236,10 +318,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.7f, scale = 0.7f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) }, }, HapticToken.KEYPRESS_DELETE to HapticToken.KEYPRESS_DELETE to Loading @@ -248,10 +331,11 @@ class MSDLRepositoryImpl : MSDLRepository { listOf( listOf( HapticCompositionPrimitive( HapticCompositionPrimitive( VibrationEffect.Composition.PRIMITIVE_CLICK, VibrationEffect.Composition.PRIMITIVE_CLICK, 0.1f, scale = 1f, 0 delayMillis = 0 ) ) ) ), VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK) ) ) } } ) ) Loading