fix app layouts: remove style tags from content fragments, use component classes
This commit is contained in:
227
base-apps/com.mosis.dialer/calling.lua
Normal file
227
base-apps/com.mosis.dialer/calling.lua
Normal file
@@ -0,0 +1,227 @@
|
||||
-- calling.lua - In-call screen functionality
|
||||
-- Handles call state, duration timer, and call controls
|
||||
|
||||
local calling_doc = nil
|
||||
local call_state = "connecting" -- connecting, active, ended
|
||||
local call_start_time = 0
|
||||
local call_duration = 0
|
||||
local timer_id = nil
|
||||
local is_muted = false
|
||||
local is_speaker = false
|
||||
local is_on_hold = false
|
||||
|
||||
-- Call info
|
||||
local call_number = ""
|
||||
local call_name = ""
|
||||
|
||||
-- Initialize calling screen
|
||||
function initCalling(doc)
|
||||
print("[Calling] Initializing...")
|
||||
calling_doc = doc
|
||||
|
||||
-- Get call info from state or use defaults
|
||||
if mosis and mosis.state then
|
||||
local call_info = mosis.state.get("current_call")
|
||||
if call_info then
|
||||
call_number = call_info.number or ""
|
||||
call_name = call_info.name or call_number
|
||||
end
|
||||
end
|
||||
|
||||
-- Fallback test data
|
||||
if call_number == "" then
|
||||
call_number = "+1 555-0101"
|
||||
call_name = "Alice Johnson"
|
||||
end
|
||||
|
||||
-- Update UI
|
||||
updateCallInfo()
|
||||
|
||||
-- Simulate connection after delay
|
||||
if setTimeout then
|
||||
setTimeout(function()
|
||||
setCallState("active")
|
||||
end, 2000)
|
||||
else
|
||||
setCallState("active")
|
||||
end
|
||||
end
|
||||
|
||||
-- Update call info display
|
||||
function updateCallInfo()
|
||||
if not calling_doc then return end
|
||||
|
||||
local name_el = calling_doc:GetElementById("call-name")
|
||||
local number_el = calling_doc:GetElementById("call-number")
|
||||
local status_el = calling_doc:GetElementById("call-status")
|
||||
local avatar_el = calling_doc:GetElementById("call-avatar")
|
||||
|
||||
if name_el then
|
||||
name_el.inner_rml = call_name
|
||||
end
|
||||
|
||||
if number_el then
|
||||
number_el.inner_rml = call_number
|
||||
end
|
||||
|
||||
if avatar_el then
|
||||
-- Get first letter for avatar
|
||||
local initial = call_name:sub(1, 1):upper()
|
||||
avatar_el.inner_rml = initial
|
||||
end
|
||||
end
|
||||
|
||||
-- Set call state
|
||||
function setCallState(state)
|
||||
print("[Calling] State changed to: " .. state)
|
||||
call_state = state
|
||||
|
||||
local status_el = calling_doc:GetElementById("call-status")
|
||||
local timer_el = calling_doc:GetElementById("call-timer")
|
||||
|
||||
if state == "connecting" then
|
||||
if status_el then
|
||||
status_el.inner_rml = "Calling..."
|
||||
end
|
||||
if timer_el then
|
||||
timer_el.style.display = "none"
|
||||
end
|
||||
elseif state == "active" then
|
||||
if status_el then
|
||||
status_el.inner_rml = "Connected"
|
||||
end
|
||||
if timer_el then
|
||||
timer_el.style.display = "block"
|
||||
end
|
||||
-- Start duration timer
|
||||
startCallTimer()
|
||||
elseif state == "ended" then
|
||||
if status_el then
|
||||
status_el.inner_rml = "Call ended"
|
||||
end
|
||||
stopCallTimer()
|
||||
-- Return to dialer after delay
|
||||
if setTimeout then
|
||||
setTimeout(function()
|
||||
if goBack then
|
||||
goBack()
|
||||
end
|
||||
end, 1500)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Start call duration timer
|
||||
function startCallTimer()
|
||||
call_start_time = os.time and os.time() or 0
|
||||
call_duration = 0
|
||||
|
||||
if setInterval then
|
||||
timer_id = setInterval(function()
|
||||
call_duration = call_duration + 1
|
||||
updateTimerDisplay()
|
||||
end, 1000)
|
||||
end
|
||||
end
|
||||
|
||||
-- Stop call timer
|
||||
function stopCallTimer()
|
||||
if timer_id and clearInterval then
|
||||
clearInterval(timer_id)
|
||||
timer_id = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Update timer display
|
||||
function updateTimerDisplay()
|
||||
local timer_el = calling_doc:GetElementById("call-timer")
|
||||
if timer_el then
|
||||
local minutes = math.floor(call_duration / 60)
|
||||
local seconds = call_duration % 60
|
||||
timer_el.inner_rml = string.format("%02d:%02d", minutes, seconds)
|
||||
end
|
||||
end
|
||||
|
||||
-- Toggle mute
|
||||
function toggleMute()
|
||||
is_muted = not is_muted
|
||||
print("[Calling] Mute: " .. tostring(is_muted))
|
||||
|
||||
local mute_btn = calling_doc:GetElementById("btn-mute")
|
||||
if mute_btn then
|
||||
if is_muted then
|
||||
mute_btn:SetClass("active", true)
|
||||
else
|
||||
mute_btn:SetClass("active", false)
|
||||
end
|
||||
end
|
||||
|
||||
if showToast then
|
||||
showToast(is_muted and "Muted" or "Unmuted")
|
||||
end
|
||||
end
|
||||
|
||||
-- Toggle speaker
|
||||
function toggleSpeaker()
|
||||
is_speaker = not is_speaker
|
||||
print("[Calling] Speaker: " .. tostring(is_speaker))
|
||||
|
||||
local speaker_btn = calling_doc:GetElementById("btn-speaker")
|
||||
if speaker_btn then
|
||||
if is_speaker then
|
||||
speaker_btn:SetClass("active", true)
|
||||
else
|
||||
speaker_btn:SetClass("active", false)
|
||||
end
|
||||
end
|
||||
|
||||
if showToast then
|
||||
showToast(is_speaker and "Speaker on" or "Speaker off")
|
||||
end
|
||||
end
|
||||
|
||||
-- Toggle hold
|
||||
function toggleHold()
|
||||
is_on_hold = not is_on_hold
|
||||
print("[Calling] Hold: " .. tostring(is_on_hold))
|
||||
|
||||
local hold_btn = calling_doc:GetElementById("btn-hold")
|
||||
if hold_btn then
|
||||
if is_on_hold then
|
||||
hold_btn:SetClass("active", true)
|
||||
else
|
||||
hold_btn:SetClass("active", false)
|
||||
end
|
||||
end
|
||||
|
||||
local status_el = calling_doc:GetElementById("call-status")
|
||||
if status_el then
|
||||
if is_on_hold then
|
||||
status_el.inner_rml = "On hold"
|
||||
else
|
||||
status_el.inner_rml = "Connected"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Show dialpad
|
||||
function showDialpad()
|
||||
print("[Calling] Show dialpad")
|
||||
if showToast then
|
||||
showToast("Dialpad")
|
||||
end
|
||||
end
|
||||
|
||||
-- Add call (conference)
|
||||
function addCall()
|
||||
print("[Calling] Add call")
|
||||
if showToast then
|
||||
showToast("Add call")
|
||||
end
|
||||
end
|
||||
|
||||
-- End call
|
||||
function endCall()
|
||||
print("[Calling] Ending call")
|
||||
setCallState("ended")
|
||||
end
|
||||
Reference in New Issue
Block a user