blob: c2d73a02a5d9d325fc134ac1d0b5a6b68bd29126 [file] [log] [blame]
# 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'