• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.systemui.unfold
17 
18 import android.os.VibrationAttributes
19 import android.os.VibrationEffect
20 import android.os.vibrator
21 import androidx.test.ext.junit.runners.AndroidJUnit4
22 import androidx.test.filters.SmallTest
23 import com.android.systemui.SysuiTestCase
24 import com.android.systemui.testKosmos
25 import com.android.systemui.util.mockito.any
26 import org.junit.Before
27 import org.junit.Test
28 import org.junit.runner.RunWith
29 import org.mockito.Mockito.clearInvocations
30 import org.mockito.Mockito.never
31 import org.mockito.Mockito.verify
32 
33 @RunWith(AndroidJUnit4::class)
34 @SmallTest
35 class UnfoldHapticsPlayerTest : SysuiTestCase() {
36 
37     private val kosmos = testKosmos()
38 
39     private val progressProvider = kosmos.fakeUnfoldTransitionProgressProvider
40     private val vibrator = kosmos.vibrator
41     private val transitionConfig = kosmos.unfoldTransitionConfig
42     private val testFoldProvider = kosmos.foldProvider
43 
44     private lateinit var player: UnfoldHapticsPlayer
45 
46     @Before
beforenull47     fun before() {
48         transitionConfig.isHapticsEnabled = true
49         player = UnfoldHapticsPlayer(progressProvider, testFoldProvider, transitionConfig,
50             Runnable::run, vibrator)
51     }
52 
53     @Test
testUnfoldingTransitionFinishingEarly_playsHapticsnull54     fun testUnfoldingTransitionFinishingEarly_playsHaptics() {
55         testFoldProvider.onFoldUpdate(isFolded = true)
56         testFoldProvider.onFoldUpdate(isFolded = false)
57         progressProvider.onTransitionStarted()
58         progressProvider.onTransitionProgress(0.5f)
59         progressProvider.onTransitionFinishing()
60 
61         verify(vibrator).vibrate(any<VibrationEffect>(), any<VibrationAttributes>())
62     }
63 
64     @Test
testHapticsDisabled_unfoldingTransitionFinishing_doesNotPlayHapticsnull65     fun testHapticsDisabled_unfoldingTransitionFinishing_doesNotPlayHaptics() {
66         transitionConfig.isHapticsEnabled = false
67         player = UnfoldHapticsPlayer(progressProvider, testFoldProvider, transitionConfig,
68                 Runnable::run, vibrator)
69 
70         testFoldProvider.onFoldUpdate(isFolded = true)
71         testFoldProvider.onFoldUpdate(isFolded = false)
72         progressProvider.onTransitionStarted()
73         progressProvider.onTransitionProgress(0.5f)
74         progressProvider.onTransitionFinishing()
75 
76         verify(vibrator).vibrate(any<VibrationEffect>(), any<VibrationAttributes>())
77     }
78 
79     @Test
testUnfoldingTransitionFinishingLate_doesNotPlayHapticsnull80     fun testUnfoldingTransitionFinishingLate_doesNotPlayHaptics() {
81         testFoldProvider.onFoldUpdate(isFolded = true)
82         testFoldProvider.onFoldUpdate(isFolded = false)
83         progressProvider.onTransitionStarted()
84         progressProvider.onTransitionProgress(0.99f)
85         progressProvider.onTransitionFinishing()
86 
87         verify(vibrator, never()).vibrate(any<VibrationEffect>(), any<VibrationAttributes>())
88     }
89 
90     @Test
testFoldingAfterUnfolding_doesNotPlayHapticsnull91     fun testFoldingAfterUnfolding_doesNotPlayHaptics() {
92         // Unfold
93         testFoldProvider.onFoldUpdate(isFolded = true)
94         testFoldProvider.onFoldUpdate(isFolded = false)
95         progressProvider.onTransitionStarted()
96         progressProvider.onTransitionProgress(0.5f)
97         progressProvider.onTransitionFinishing()
98         progressProvider.onTransitionFinished()
99         clearInvocations(vibrator)
100 
101         // Fold
102         progressProvider.onTransitionStarted()
103         progressProvider.onTransitionProgress(0.5f)
104         progressProvider.onTransitionFinished()
105         testFoldProvider.onFoldUpdate(isFolded = true)
106 
107         verify(vibrator, never()).vibrate(any<VibrationEffect>(), any<VibrationAttributes>())
108     }
109 
110     @Test
testUnfoldingAfterFoldingAndUnfolding_playsHapticsnull111     fun testUnfoldingAfterFoldingAndUnfolding_playsHaptics() {
112         // Unfold
113         testFoldProvider.onFoldUpdate(isFolded = true)
114         testFoldProvider.onFoldUpdate(isFolded = false)
115         progressProvider.onTransitionStarted()
116         progressProvider.onTransitionProgress(0.5f)
117         progressProvider.onTransitionFinishing()
118         progressProvider.onTransitionFinished()
119 
120         // Fold
121         progressProvider.onTransitionStarted()
122         progressProvider.onTransitionProgress(0.5f)
123         progressProvider.onTransitionFinished()
124         testFoldProvider.onFoldUpdate(isFolded = true)
125         clearInvocations(vibrator)
126 
127         // Unfold again
128         testFoldProvider.onFoldUpdate(isFolded = true)
129         testFoldProvider.onFoldUpdate(isFolded = false)
130         progressProvider.onTransitionStarted()
131         progressProvider.onTransitionProgress(0.5f)
132         progressProvider.onTransitionFinishing()
133         progressProvider.onTransitionFinished()
134 
135         verify(vibrator).vibrate(any<VibrationEffect>(), any<VibrationAttributes>())
136     }
137 }
138