| # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """An interface to access the local input facade.""" |
| |
| |
| import json |
| import logging |
| |
| from autotest_lib.client.bin.input import input_event_recorder |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.graphics import graphics_utils |
| |
| |
| class InputFacadeNativeError(Exception): |
| """Error in InputFacadeNative.""" |
| pass |
| |
| |
| class InputFacadeNative(object): |
| """Facade to access the record input events.""" |
| |
| def __init__(self): |
| """Initializes the input facade.""" |
| self.recorder = None |
| |
| |
| def initialize_input_recorder(self, device_name): |
| """Initialize an input event recorder object. |
| |
| @param device_name: the name of the input device to record. |
| |
| """ |
| self.recorder = input_event_recorder.InputEventRecorder(device_name) |
| logging.info('input event device: %s (%s)', |
| self.recorder.device_name, self.recorder.device_node) |
| |
| |
| def clear_input_events(self): |
| """Clear the event list.""" |
| if self.recorder is None: |
| raise error.TestError('input facade: input device name not given') |
| self.recorder.clear_events() |
| |
| |
| def start_input_recorder(self): |
| """Start the recording thread.""" |
| if self.recorder is None: |
| raise error.TestError('input facade: input device name not given') |
| self.recorder.start() |
| |
| |
| def stop_input_recorder(self): |
| """Stop the recording thread.""" |
| if self.recorder is None: |
| raise error.TestError('input facade: input device name not given') |
| self.recorder.stop() |
| |
| |
| def get_input_events(self): |
| """Get the bluetooth device input events. |
| |
| @returns: the recorded input events. |
| |
| """ |
| if self.recorder is None: |
| raise error.TestError('input facade: input device name not given') |
| events = self.recorder.get_events() |
| return json.dumps(events) |
| |
| |
| def press_keys(self, key_list): |
| """ Simulating key press |
| |
| @param key_list: A list of key strings, e.g. ['LEFTCTRL', 'F4'] |
| """ |
| graphics_utils.press_keys(key_list) |