1 /* 2 * Copyright (C) 2017 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.accessibility; 18 19 import static android.accessibilityservice.FingerprintGestureController 20 .FINGERPRINT_GESTURE_SWIPE_DOWN; 21 22 import static org.junit.Assert.assertFalse; 23 import static org.junit.Assert.assertTrue; 24 import static org.mockito.Mockito.reset; 25 import static org.mockito.Mockito.times; 26 import static org.mockito.Mockito.verify; 27 import static org.mockito.Mockito.verifyZeroInteractions; 28 import static org.mockito.Mockito.when; 29 30 import android.accessibilityservice.FingerprintGestureController; 31 import android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback; 32 import android.accessibilityservice.IAccessibilityServiceConnection; 33 34 import com.android.server.accessibility.test.MessageCapturingHandler; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 import org.mockito.Mock; 39 import org.mockito.MockitoAnnotations; 40 41 /** 42 * Tests for FingerprintGestureController. 43 * TODO: These tests aren't really for server code, so this isn't their ideal home. 44 */ 45 public class FingerprintGestureControllerTest { 46 @Mock IAccessibilityServiceConnection mMockAccessibilityServiceConnection; 47 @Mock FingerprintGestureCallback mMockFingerprintGestureCallback; 48 FingerprintGestureController mFingerprintGestureController; 49 50 @Before setUp()51 public void setUp() { 52 MockitoAnnotations.initMocks(this); 53 mFingerprintGestureController = 54 new FingerprintGestureController(mMockAccessibilityServiceConnection); 55 } 56 57 @Test testIsGestureDetectionActive_returnsValueFromServer()58 public void testIsGestureDetectionActive_returnsValueFromServer() throws Exception { 59 when(mMockAccessibilityServiceConnection.isFingerprintGestureDetectionAvailable()) 60 .thenReturn(true); 61 assertTrue(mFingerprintGestureController.isGestureDetectionAvailable()); 62 when(mMockAccessibilityServiceConnection.isFingerprintGestureDetectionAvailable()) 63 .thenReturn(false); 64 assertFalse(mFingerprintGestureController.isGestureDetectionAvailable()); 65 } 66 67 @Test testCallbacks_withNoListeners_shouldNotCrash()68 public void testCallbacks_withNoListeners_shouldNotCrash() { 69 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 70 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 71 } 72 73 @Test testDetectionActiveCallback_noHandler_shouldCallback()74 public void testDetectionActiveCallback_noHandler_shouldCallback() { 75 mFingerprintGestureController.registerFingerprintGestureCallback( 76 mMockFingerprintGestureCallback, null); 77 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 78 verify(mMockFingerprintGestureCallback, times(1)) 79 .onGestureDetectionAvailabilityChanged(true); 80 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 81 verify(mMockFingerprintGestureCallback, times(1)) 82 .onGestureDetectionAvailabilityChanged(false); 83 84 reset(mMockFingerprintGestureCallback); 85 mFingerprintGestureController.unregisterFingerprintGestureCallback( 86 mMockFingerprintGestureCallback); 87 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 88 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 89 verifyZeroInteractions(mMockFingerprintGestureCallback); 90 } 91 92 @Test testDetectionActiveCallback_withHandler_shouldPostRunnableToHandler()93 public void testDetectionActiveCallback_withHandler_shouldPostRunnableToHandler() { 94 MessageCapturingHandler messageCapturingHandler = new MessageCapturingHandler((message) -> { 95 message.getCallback().run(); 96 return true; 97 }); 98 99 mFingerprintGestureController.registerFingerprintGestureCallback( 100 mMockFingerprintGestureCallback, messageCapturingHandler); 101 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 102 verify(mMockFingerprintGestureCallback, times(0)) 103 .onGestureDetectionAvailabilityChanged(true); 104 messageCapturingHandler.sendLastMessage(); 105 verify(mMockFingerprintGestureCallback, times(1)) 106 .onGestureDetectionAvailabilityChanged(true); 107 108 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 109 verify(mMockFingerprintGestureCallback, times(0)) 110 .onGestureDetectionAvailabilityChanged(false); 111 messageCapturingHandler.sendLastMessage(); 112 verify(mMockFingerprintGestureCallback, times(1)) 113 .onGestureDetectionAvailabilityChanged(false); 114 115 reset(mMockFingerprintGestureCallback); 116 mFingerprintGestureController.unregisterFingerprintGestureCallback( 117 mMockFingerprintGestureCallback); 118 mFingerprintGestureController.onGestureDetectionActiveChanged(true); 119 mFingerprintGestureController.onGestureDetectionActiveChanged(false); 120 assertFalse(messageCapturingHandler.hasMessages()); 121 verifyZeroInteractions(mMockFingerprintGestureCallback); 122 123 messageCapturingHandler.removeAllMessages(); 124 } 125 126 @Test testGestureCallback_noHandler_shouldCallListener()127 public void testGestureCallback_noHandler_shouldCallListener() { 128 mFingerprintGestureController.registerFingerprintGestureCallback( 129 mMockFingerprintGestureCallback, null); 130 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 131 verify(mMockFingerprintGestureCallback, times(1)) 132 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN); 133 134 reset(mMockFingerprintGestureCallback); 135 mFingerprintGestureController.unregisterFingerprintGestureCallback( 136 mMockFingerprintGestureCallback); 137 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 138 verifyZeroInteractions(mMockFingerprintGestureCallback); 139 } 140 141 @Test testGestureCallback_withHandler_shouldPostRunnableToHandler()142 public void testGestureCallback_withHandler_shouldPostRunnableToHandler() { 143 MessageCapturingHandler messageCapturingHandler = new MessageCapturingHandler((message) -> { 144 message.getCallback().run(); 145 return true; 146 }); 147 148 mFingerprintGestureController.registerFingerprintGestureCallback( 149 mMockFingerprintGestureCallback, messageCapturingHandler); 150 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 151 verify(mMockFingerprintGestureCallback, times(0)) 152 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN); 153 messageCapturingHandler.sendLastMessage(); 154 verify(mMockFingerprintGestureCallback, times(1)) 155 .onGestureDetected(FINGERPRINT_GESTURE_SWIPE_DOWN); 156 157 reset(mMockFingerprintGestureCallback); 158 mFingerprintGestureController.unregisterFingerprintGestureCallback( 159 mMockFingerprintGestureCallback); 160 mFingerprintGestureController.onGesture(FINGERPRINT_GESTURE_SWIPE_DOWN); 161 assertFalse(messageCapturingHandler.hasMessages()); 162 verifyZeroInteractions(mMockFingerprintGestureCallback); 163 164 messageCapturingHandler.removeAllMessages(); 165 } 166 } 167