lib/fusuma/plugin/detectors/hold_detector.rb in fusuma-2.4.1 vs lib/fusuma/plugin/detectors/hold_detector.rb in fusuma-2.5.0
- old
+ new
@@ -1,17 +1,17 @@
# frozen_string_literal: true
-require_relative './detector'
+require_relative "./detector"
module Fusuma
module Plugin
module Detectors
# Detect Hold gesture
class HoldDetector < Detector
SOURCES = %w[gesture timer].freeze
- BUFFER_TYPE = 'gesture'
- GESTURE_RECORD_TYPE = 'hold'
+ BUFFER_TYPE = "gesture"
+ GESTURE_RECORD_TYPE = "hold"
BASE_THERESHOLD = 0.7
# @param buffers [Array<Buffers::Buffer>]
# @return [Events::Event] if event is detected
@@ -21,39 +21,39 @@
hold_buffer = find_hold_buffer(buffers)
return if hold_buffer.empty?
hold_events = hold_buffer.events
- timer_buffer = buffers.find { |b| b.type == 'timer' }
+ timer_buffer = buffers.find { |b| b.type == "timer" }
timer_events = timer_buffer.events
finger = hold_buffer.finger
holding_time = calc_holding_time(hold_events: hold_events, timer_events: timer_events)
@timeout ||= nil
status = case hold_events.last.record.status
- when 'begin'
- if holding_time.zero?
- 'begin'
- else
- 'timer'
- end
- when 'cancelled'
- 'cancelled'
- when 'end'
- 'end'
- else
- last_record = hold_events.last.record.status
- raise "Unexpected Status:#{last_record.status} in #{last_record}"
- end
+ when "begin"
+ if holding_time.zero?
+ "begin"
+ else
+ "timer"
+ end
+ when "cancelled"
+ "cancelled"
+ when "end"
+ "end"
+ else
+ last_record = hold_events.last.record.status
+ raise "Unexpected Status:#{last_record.status} in #{last_record}"
+ end
repeat_index = create_repeat_index(finger: finger, status: status)
oneshot_index = create_oneshot_index(finger: finger)
- @timeout = nil if status == 'begin'
+ @timeout = nil if status == "begin"
- if status == 'timer'
+ if status == "timer"
return if @timeout
return unless enough?(index: oneshot_index, holding_time: holding_time)
@timeout = holding_time
@@ -94,33 +94,33 @@
# @param buffers [Array<Buffers::Buffer>]
# @return [Buffers::GestureBuffer]
def find_hold_buffer(buffers)
buffers.find { |b| b.type == BUFFER_TYPE }
- .select_from_last_begin
- .select_by_events { |e| e.record.gesture == GESTURE_RECORD_TYPE }
+ .select_from_last_begin
+ .select_by_events { |e| e.record.gesture == GESTURE_RECORD_TYPE }
end
def calc_holding_time(hold_events:, timer_events:)
last_time = if !timer_events.empty? && (hold_events.last.time < timer_events.last.time)
- timer_events.last.time
- else
- hold_events.last.time
- end
+ timer_events.last.time
+ else
+ hold_events.last.time
+ end
last_time - hold_events.first.time
end
def enough?(index:, holding_time:)
holding_time > threshold(index: index)
end
def threshold(index:)
@threshold ||= {}
@threshold[index.cache_key] ||= begin
- keys_specific = Config::Index.new [*index.keys, 'threshold']
- keys_global = Config::Index.new ['threshold', type]
+ keys_specific = Config::Index.new [*index.keys, "threshold"]
+ keys_global = Config::Index.new ["threshold", type]
config_value = Config.search(keys_specific) ||
- Config.search(keys_global) || 1
+ Config.search(keys_global) || 1
BASE_THERESHOLD * config_value
end
end
end
end