1998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler/* 2998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * Copyright (C) 2015 The Android Open Source Project 3998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * 4998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * in compliance with the License. You may obtain a copy of the License at 6998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * 7998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * http://www.apache.org/licenses/LICENSE-2.0 8998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * 9998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * Unless required by applicable law or agreed to in writing, software distributed under the License 10998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * or implied. See the License for the specific language governing permissions and limitations under 12998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler * the License. 13998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler */ 14998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 15c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roospackage com.android.tests.accessibilityeventlogger; 16998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 17998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport android.accessibilityservice.AccessibilityService; 18998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport android.accessibilityservice.AccessibilityServiceInfo; 19998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport android.util.Log; 20998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport android.view.accessibility.AccessibilityEvent; 21998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport android.widget.Toast; 22998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 23998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerimport java.util.Locale; 24998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 25998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandlerpublic class AELogger extends AccessibilityService { 26c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roos private static final String TAG = AELogger.class.getSimpleName(); 27998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 28998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler private static final int TOAST_EVENT_TYPES = 29998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler AccessibilityEvent.TYPE_VIEW_CLICKED | AccessibilityEvent.TYPE_VIEW_LONG_CLICKED; 30998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 31998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler @Override 32998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler public void onServiceConnected() { 33998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler super.onServiceConnected(); 34998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler Log.v(TAG, "Service connected."); 35998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler } 36998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 37998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 38998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler @Override 39998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler public void onInterrupt() { 40998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler // Do nothing 41998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler } 42998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 43998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler @Override 44998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler public void onAccessibilityEvent(AccessibilityEvent event) { 45c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roos final String eventClass = event.getClassName() != null 46c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roos ? event.getClassName().toString() : null; 47c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roos final String eventText = event.getText() != null 48c7652a82774f7587b7dacd2f9a38e7f428533855Adrian Roos ? String.valueOf(event.getText()).toLowerCase(Locale.getDefault()) : null; 49998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler final String eventType = AccessibilityEvent.eventTypeToString(event.getEventType()); 50998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 51998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler Log.d(TAG, String.format( 52998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler "typ=%s cls=%s pkg=%s txt=%s dsc=%s", 53998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler eventType, 54998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler eventClass, 55998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler event.getPackageName(), 56998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler eventText, 57998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler event.getContentDescription() 58998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler )); 59998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler 60998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler // Show selected event types 61998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler if (0 != (TOAST_EVENT_TYPES & event.getEventType())) { 62998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler final Toast toast = Toast.makeText(this, 63998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler eventType + ": " + eventClass, Toast.LENGTH_SHORT); 64998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler toast.show(); 65998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler } 66998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler } 67998e32db1f5aaf6bdb42c44029f5b44a31dc48d5Dan Sandler} 68