---
-- @package   eg4-crank-ui
-- @file      back-control.lua
-- @brief     Functionality related to back control
--
-- @copyright Copyright 2020 Hanover Displays Limited.
-- @license   This program is the confidential and proprietary product of
--            Hanover Displays Limited. Any unauthorised use, reproduction or
--            transfer of this program is strictly prohibited. (Subject to 
--            limited distribution and restricted disclosure only.) All 
--            rights reserved.                                              
--
--

local HOLD_START = 250
local HOLD_TIME = 1000
local HOLD_INTERVAL = 50

local hold_control
local hold_width
local hold_max
local hold_prequel
local hold_timer

---
--- @brief  For hold button operation.
---
local function CBBackHoldTimer()
  if hold_prequel < HOLD_START then
    hold_prequel = hold_prequel + HOLD_INTERVAL
  else
    hold_width = hold_width + hold_max * HOLD_INTERVAL / HOLD_TIME
    if hold_width >= hold_max then
      hold_width = 0
      ScreenTransition("bd_home")
      gre.timer_clear_interval(hold_timer)
      hold_timer = nil
    end
  end
  gre.set_value(hold_control, hold_width)
end


----
--- @brief  
--- @param  gre#context mapargs
---
function CBBackHoldStart(mapargs)
  hold_control = mapargs.context_control..".hold_width"
  hold_width = 0
  hold_prequel = 0
  gre.set_value(hold_control, 0)
  hold_max = gre.get_control_attrs(mapargs.context_control, "width").width

  if hold_timer ~= nil then
    gre.timer_clear_interval(hold_timer)
  end
  hold_timer = gre.timer_set_interval(CBBackHoldTimer, HOLD_INTERVAL)
end

----
--- @brief  
--- @param  gre#context mapargs
---
function CBBackHoldStop(mapargs)
  gre.set_value(hold_control, 0)
  if hold_timer ~= nil then
    gre.timer_clear_interval(hold_timer)
    hold_timer = nil
  end
end

-- EOF --
