• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 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 
17 package com.android.server.input
18 
19 import android.hardware.input.InputGestureData
20 import android.hardware.input.InputManager
21 import android.hardware.input.KeyGestureEvent
22 import android.platform.test.annotations.Presubmit
23 import android.view.KeyEvent
24 import androidx.test.core.app.ApplicationProvider
25 import org.junit.Assert.assertEquals
26 import org.junit.Before
27 import org.junit.Test
28 
29 /**
30  * Tests for custom keyboard glyph map configuration.
31  *
32  * Build/Install/Run: atest InputTests:CustomInputGestureManagerTests
33  */
34 @Presubmit
35 class InputGestureManagerTests {
36 
37     companion object {
38         const val USER_ID = 1
39     }
40 
41     private lateinit var inputGestureManager: InputGestureManager
42 
43     @Before
setupnull44     fun setup() {
45         inputGestureManager = InputGestureManager(ApplicationProvider.getApplicationContext())
46     }
47 
48     @Test
addRemoveCustomGesturenull49     fun addRemoveCustomGesture() {
50         val customGesture =
51             InputGestureData.Builder()
52                 .setTrigger(
53                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
54                 )
55                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME)
56                 .build()
57         val result = inputGestureManager.addCustomInputGesture(USER_ID, customGesture)
58         assertEquals(InputManager.CUSTOM_INPUT_GESTURE_RESULT_SUCCESS, result)
59         assertEquals(
60             listOf(customGesture),
61             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
62         )
63 
64         inputGestureManager.removeCustomInputGesture(USER_ID, customGesture)
65         assertEquals(
66             listOf<InputGestureData>(),
67             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
68         )
69     }
70 
71     @Test
removeNonExistentGesturenull72     fun removeNonExistentGesture() {
73         val customGesture =
74             InputGestureData.Builder()
75                 .setTrigger(
76                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
77                 )
78                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME)
79                 .build()
80         val result = inputGestureManager.removeCustomInputGesture(USER_ID, customGesture)
81         assertEquals(InputManager.CUSTOM_INPUT_GESTURE_RESULT_ERROR_DOES_NOT_EXIST, result)
82         assertEquals(
83             listOf<InputGestureData>(),
84             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
85         )
86     }
87 
88     @Test
addAlreadyExistentGesturenull89     fun addAlreadyExistentGesture() {
90         val customGesture =
91             InputGestureData.Builder()
92                 .setTrigger(
93                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
94                 )
95                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME)
96                 .build()
97         inputGestureManager.addCustomInputGesture(USER_ID, customGesture)
98         val customGesture2 =
99             InputGestureData.Builder()
100                 .setTrigger(
101                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
102                 )
103                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_BACK)
104                 .build()
105         val result = inputGestureManager.addCustomInputGesture(USER_ID, customGesture2)
106         assertEquals(InputManager.CUSTOM_INPUT_GESTURE_RESULT_ERROR_ALREADY_EXISTS, result)
107         assertEquals(
108             listOf(customGesture),
109             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
110         )
111     }
112 
113     @Test
addRemoveAllExistentGesturesnull114     fun addRemoveAllExistentGestures() {
115         val customGesture =
116             InputGestureData.Builder()
117                 .setTrigger(
118                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
119                 )
120                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME)
121                 .build()
122         inputGestureManager.addCustomInputGesture(USER_ID, customGesture)
123         val customGesture2 =
124             InputGestureData.Builder()
125                 .setTrigger(
126                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_DEL, KeyEvent.META_META_ON)
127                 )
128                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_BACK)
129                 .build()
130         inputGestureManager.addCustomInputGesture(USER_ID, customGesture2)
131 
132         assertEquals(
133             listOf(customGesture, customGesture2),
134             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
135         )
136 
137         inputGestureManager.removeAllCustomInputGestures(USER_ID, /* filter= */ null)
138         assertEquals(
139             listOf<InputGestureData>(),
140             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
141         )
142     }
143 
144     @Test
filteringBasedOnTouchpadOrKeyGesturesnull145     fun filteringBasedOnTouchpadOrKeyGestures() {
146         val customKeyGesture =
147             InputGestureData.Builder()
148                 .setTrigger(
149                     InputGestureData.createKeyTrigger(KeyEvent.KEYCODE_H, KeyEvent.META_META_ON)
150                 )
151                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_HOME)
152                 .build()
153         inputGestureManager.addCustomInputGesture(USER_ID, customKeyGesture)
154         val customTouchpadGesture =
155             InputGestureData.Builder()
156                 .setTrigger(
157                     InputGestureData.createTouchpadTrigger(
158                         InputGestureData.TOUCHPAD_GESTURE_TYPE_THREE_FINGER_TAP
159                     )
160                 )
161                 .setKeyGestureType(KeyGestureEvent.KEY_GESTURE_TYPE_BACK)
162                 .build()
163         inputGestureManager.addCustomInputGesture(USER_ID, customTouchpadGesture)
164 
165         assertEquals(
166             listOf(customTouchpadGesture, customKeyGesture),
167             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
168         )
169         assertEquals(
170             listOf(customKeyGesture),
171             inputGestureManager.getCustomInputGestures(USER_ID, InputGestureData.Filter.KEY),
172         )
173         assertEquals(
174             listOf(customTouchpadGesture),
175             inputGestureManager.getCustomInputGestures(USER_ID, InputGestureData.Filter.TOUCHPAD),
176         )
177 
178         inputGestureManager.removeAllCustomInputGestures(USER_ID, InputGestureData.Filter.KEY)
179         assertEquals(
180             listOf(customTouchpadGesture),
181             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
182         )
183 
184         inputGestureManager.removeAllCustomInputGestures(USER_ID, InputGestureData.Filter.TOUCHPAD)
185         assertEquals(
186             listOf<InputGestureData>(),
187             inputGestureManager.getCustomInputGestures(USER_ID, /* filter= */ null),
188         )
189     }
190 }
191