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