| # Copyright (c) 2012 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. |
| from __future__ import absolute_import |
| from __future__ import division |
| from __future__ import print_function |
| |
| from fuzzy_check import FuzzyCheck |
| import mtlib.gesture_log |
| from validators import * |
| |
| # originally generated gestures: |
| # FlingStop |
| # Motion d=497 x=494 y=39 r=0.12 |
| # ButtonDown(1) |
| # ButtonUp(1) |
| # ButtonDown(1) |
| # ButtonUp(1) |
| # FlingStop |
| # Motion d=229 x=25 y=227 r=0.13 |
| # FlingStop |
| # Motion d=133 x=22 y=130 r=0.11 |
| # FlingStop |
| # Motion d=156 x=155 y=6 r=4.23 |
| # Pinch dz=88 r=0.00 |
| |
| def Validate(raw, events, gestures): |
| # We want to make sure that move gestures only occur when a non-thumb |
| # is on the pad |
| |
| # Compute start/end times of all non-thumb fingers |
| thumb_id = 104 |
| finger_times = {} |
| def noteFinger(finger_state, timestamp): |
| tr_id = finger_state['trackingId'] |
| if tr_id is thumb_id: |
| return |
| if tr_id not in finger_times: |
| finger_times[tr_id] = [timestamp, timestamp] |
| return |
| finger_times[tr_id][0] = min(finger_times[tr_id][0], timestamp) |
| finger_times[tr_id][1] = max(finger_times[tr_id][1], timestamp) |
| def isValidFingerTime(timestamp): |
| for finger in finger_times: |
| start = finger_times[finger][0] |
| end = finger_times[finger][1] |
| if timestamp >= start and timestamp <= end: |
| return True |
| return False |
| |
| for entry in raw['entries']: |
| if entry['type'] != 'hardwareState': |
| continue |
| for finger in entry['fingers']: |
| noteFinger(finger, entry['timestamp']) |
| |
| for gesture in events: |
| if not isinstance(gesture, mtlib.gesture_log.MotionGesture): |
| continue |
| if not (isValidFingerTime(gesture.start) and |
| isValidFingerTime(gesture.end)): |
| return False, 'Invalid finger time' |
| return True, 'Success' |