# -*- coding: utf-8 -*-
from basemodel import Stage,ListStage, YesNoStage, NotifyStage, RichTextEditStage, ListCalendarStage
import baseui, utils
import runtime, uiconfig, config, status, config
from setting import setting
import time
from sounds import get_audio_gallery_list
from alarmdb import alarmdb
class AlarmListStage(ListCalendarStage):
def __init__(self):
self.alarmdb_indexes, self.choice = self.get_alarmlist()
ListCalendarStage.__init__(self, choice=self.choice, left=_('EDIT'), right=_('ADD'), title=_('ALARM'), menu3=_('DELETE'), title_image=uiconfig.Third_title_alarm, list_icon=uiconfig.alarm_list_icon)
dirname, lists = get_audio_gallery_list('ring')
self.audio_dir = dirname
self.lists = lists
if len(self.alarmdb_indexes) > 0 and status.editing_alarm_index==0:
ListCalendarStage.set_current_pos(self, 0)
def get_current_name(self):
name = self.lists[0][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
return name
def activate(self,index):
return
def show(self):
if alarm_valid():
setting.set_agenda_time(5*1000, alarm_activate)
self.alarmdb_indexes, self.choice = self.get_alarmlist()
if len(self.choice) == 0:
'''
def cb():
status.alarm_item = alarmdb.new_item()
status.alarm_item[0] = str(alarmdb.count())
status.editing_alarm_index = -1
status.alarm_item[11] = self.get_current_name()
item = status.alarm_item
runtime.manager.stack_stage(DisplayAlarmStage(item,1))
runtime.manager.change_stage(NotifyStage(_('Alarm empty'),icon = None, cb=cb))
'''
def yes():
status.alarm_item = alarmdb.new_item()
status.alarm_item[0] = str(alarmdb.count())
status.editing_alarm_index = -1
status.alarm_item[11] = self.get_current_name()
item = status.alarm_item
runtime.manager.stack_stage(DisplayAlarmStage(item,1))
def no():
runtime.manager.back_stage('service stage')
return
stage = YesNoStage(_('Alarm empty. Add alarm?'), yes, no, '', icon = None)
runtime.manager.change_stage(stage)
else:
if ListCalendarStage.get_current_pos(self) >= len(self.alarmdb_indexes) or \
ListCalendarStage.get_current_pos(self) == -1:
ListCalendarStage.set_current_pos(self, len(self.alarmdb_indexes)-1)
status.editing_alarm_index = ListCalendarStage.get_current_pos(self)
self.change_choice(self.choice)
ListCalendarStage.show(self)
def get_alarmlist(self):
return range(alarmdb.count()), alarmdb.get_names()
def handle_key(self,key):
ret = ListCalendarStage.handle_key(self,key)
if key == config.Menu1 or key == 'OK': # Edit
item = alarmdb.get_item(status.editing_alarm_index)
ListCalendarStage.set_current_pos(self, status.editing_calendar_index)
runtime.manager.stack_stage(DisplayAlarmStage(item,1))
elif key == config.Menu2: # Add
if alarmdb.count() >= config.max_alarm_count:
stage = NotifyStage(_('You can add no more'), uiconfig.baloon_agenda_icon)
runtime.manager.stack_stage(stage)
return True
else:
status.alarm_item = alarmdb.new_item()
status.alarm_item[0] = str(alarmdb.count())
status.alarm_item[11] = self.get_current_name()
status.editing_alarm_index = -1
ListCalendarStage.set_current_pos(self, -1)
item = status.alarm_item
runtime.manager.stack_stage(DisplayAlarmStage(item,1))
elif key == config.Menu3: # Delete
self.delete_item()
elif key == config.Menu4 or key == 'CLR': # Back
runtime.manager.back_stage('service stage')
elif key in ('Up', 'Down'):
status.editing_alarm_index = self.alarmdb_indexes[self.ui.get_focus()]
ListCalendarStage.set_current_pos(self, status.editing_alarm_index)
return ret
def delete_item(self):
def yes():
if not alarmdb.is_empty():
# Delete This Item
setting.agenda_disable()
alarmdb.remove(status.editing_alarm_index)
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Entry deleted'),icon = None)
runtime.manager.change_stage(stage)
else:
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Calendar empty'),icon = None)
runtime.manager.change_stage(stage)
return
def no():
runtime.manager.back_stage()
return
stage = YesNoStage(_('Delete this entry?'), yes, no, '', icon = None)
runtime.manager.stack_stage(stage)
deltay_alarm = uiconfig.alarm_font[1]/2+2
class DisplayAlarmStage(Stage):
name = 'display alarm stage'
#titleimage = uiconfig.title_agenda
def __init__(self,item,action = 0):
self._ready_to_save = False
self.ui = baseui.AlarmUI(_('SAVE'),'','',_('BACK'))
self.item = item
self.names = []
status.alarm_item = item
self.set_morning = (_('Disable'), _('Once'), _('Everyday'), _('Mon~Fri'), _('Mon~Sat'))
self.set_interval = (1,2,3,4,5,10)
self.set_count = (1,2,3,4,5,6,7,8,9,10)
dirname, lists = get_audio_gallery_list('ring')
self.audio_dir = dirname
self.player_pid = None
self.lists = lists
for item in self.lists:
name = self.get_list_label(item)
self.names.append(name)
name,pos = uiconfig.alarm_icon_morningset
morningset = utils.put_image(name,pos)
self.ui.add(morningset)
#morningset_text = runtime.evas.text(text=_('Set'),font=uiconfig.alarm_font,pos=(114,57-deltay_alarm),color=uiconfig.list_text_color)
morningset_text = runtime.evas.text(text=_('Set'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[0]), color=uiconfig.list_text_color)
self.ui.add(morningset_text)
name = uiconfig.alarm_icon_select
morningset_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[0]))
self.ui.add(morningset_sel)
#Thang[20080325 -2]
self.idx_morning = self.find_pos(self.item[1], self.set_morning)
self.idx_interval = self.find_pos(self.item[8], self.set_interval)
self.idx_count = self.find_pos(self.item[9], self.set_count)
self.audio_index = self.find_pos(self.item[11], self.names)
'''
self.check = self.item[5]
if self.item[5] == '1':
name,pos = uiconfig.alarm_icon_check
self.check = 1
else:
name,pos = uiconfig.alarm_icon_check_box
self.check = 0
self.holidayset = utils.put_image(name,pos)
self.ui.add(self.holidayset)
name = uiconfig.check_focus
self.check_focus = utils.put_image(name,pos)
self.ui.add(self.check_focus)
self.check_focus.hide()
holidayset_text = runtime.evas.text(text=_('Holiday'), font=uiconfig.alarm_font, pos=(287, 80), color=uiconfig.list_text_color)
self.ui.add(holidayset_text)
'''
name,pos = uiconfig.alarm_icon_timeset
timeset = utils.put_image(name,pos)
self.ui.add(timeset)
timeset_text = runtime.evas.text(text=_('Time'), font=uiconfig.alarm_font, pos=(uiconfig.input5_x2, uiconfig.input5_y2[1]), color=uiconfig.list_text_color)
self.ui.add(timeset_text)
hour = int(self.item[6])
min = int(self.item[7])
self.set_ap = 0 # dummy
if config.datetime_24hour:
self.editing_text = [(hour)/10, (hour)%10, min/10, min%10]
else:
if hour >= 12:
self.set_ap = 1
name,pos = uiconfig.alarm_icon_pm
else:
self.set_ap = 0
name,pos = uiconfig.alarm_icon_am
self.timeset_ap = utils.put_image(name,pos)
self.ui.add(self.timeset_ap)
if hour == 12: # 오후 12시 - 12:00
self.editing_text = [(hour)/10, (hour)%10, min/10, min%10]
elif hour == 0: # 오전 12시 - 00:00
self.editing_text = [1, 2, min/10, min%10]
else:
self.editing_text = [(hour%12)/10, (hour%12)%10, min/10, min%10]
self.timeset_values = runtime.evas.text(text=self.get_text(),font=uiconfig.date_edit_font,pos=(267,uiconfig.input5_y2[1]),color=uiconfig.list_text_color)
self.ui.add(self.timeset_values)
name,pos = uiconfig.alarm_icon_interval
interval = utils.put_image(name,pos)
self.ui.add(interval)
interval_text = runtime.evas.text(text=_('Interval'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[2]),color=uiconfig.list_text_color)
self.ui.add(interval_text)
name = uiconfig.alarm_icon_select
interval_sel = utils.put_image(name,(uiconfig.input5_x3,uiconfig.input5_y3[2]))
self.ui.add(interval_sel)
name,pos = uiconfig.alarm_icon_count
count = utils.put_image(name,pos)
self.ui.add(count)
count_text = runtime.evas.text(text=_('Count'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[3]),color=uiconfig.list_text_color)
self.ui.add(count_text)
name = uiconfig.alarm_icon_select
count_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[3]))
self.ui.add(count_sel)
name,pos = uiconfig.alarm_icon_bell
bell = utils.put_image(name,pos)
self.ui.add(bell)
bell_text = runtime.evas.text(text=_('Bell'),font=uiconfig.alarm_font,pos=(uiconfig.input5_x2, uiconfig.input5_y2[4]),color=uiconfig.list_text_color)
self.ui.add(bell_text)
name = uiconfig.alarm_icon_select
bell_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[4]))
self.ui.add(bell_sel)
self.index = 0
name = uiconfig.alarm_icon_select_r
self.alarm_sel = utils.put_image(name,(uiconfig.input5_x3, uiconfig.input5_y3[0]))
self.ui.add(self.alarm_sel)
self.alarm_sel.hide()
self.cursor_pos = 0
self.underline = runtime.evas.text(text='_', font=uiconfig.date_edit_font)
self.underline.color = uiconfig.date_edit_entry_color
self.ui.add(self.underline)
self.underline.hide()
self.update_time()
self.set_focus(self.index)
self.set_text(item)
self.play_audio_timer = None
def align_center(self, l, pos):
x, y = pos
width,height = l.size
l.move(x - width/2, y)
def find_pos(self,values,list):
i = 0
for chk in list:
if str(chk).lower() == str(values).lower():
return i
else:
i = i + 1
return 0
def save_ready(self):
self._ready_to_save = True
def show(self):
self.ui.show()
#self.check_focus.hide()
self.underline.hide()
self._ready_to_save = False
self.save_ready_timer = utils.Timer(500, self.save_ready)
def set_text(self,item):
self.date = runtime.evas.text(text=self.item[1],font=uiconfig.alarm_font,pos=(240,45),color=uiconfig.list_text_color)
self.ui.add(self.date)
self.align_center(self.date, (302, uiconfig.input5_y4[0]))
interval_text = self.item[8]+' '+_('Minutes')
self.interval = runtime.evas.text(text=interval_text, font=uiconfig.alarm_font,pos=(240,141), color=uiconfig.list_text_color)
self.ui.add(self.interval)
self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
count_text = self.item[9]+' '+_('Times')
self.count = runtime.evas.text(text=count_text,font=uiconfig.alarm_font,pos=(240,175),color=uiconfig.list_text_color)
self.ui.add(self.count)
self.align_center(self.count, (302, uiconfig.input5_y4[3]))
ring = self.item[11]
ring = unicode(ring, 'euc-kr').encode('utf-8')
self.ringname = runtime.evas.text(text=ring,font=uiconfig.alarm_font,pos=(240, 209),color=uiconfig.list_text_color)
self.ui.add(self.ringname)
self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
def get_list_label(self, item):
fullname = self.audio_dir + item[0]
name = item[0]
last_dot = name.rfind('.')
if last_dot > 0:
name = name[:last_dot]
return name
def update_underline(self):
font_width = 9
font_height = 7
pos = (267, uiconfig.input5_y2[1])
xpos = (0, 1, 3, 4)[self.cursor_pos]
x = pos[0] + xpos * font_width
self.underline.pos = x, pos[1] + font_height
def update_time(self):
hour = self.editing_text[0] * 10 + self.editing_text[1]
min = self.editing_text[2] * 10 + self.editing_text[3]
self.time = (hour, min)
self.timeset_values.text = self.get_text()
def get_text(self):
text = "%01d%01d:%01d%01d" % tuple(self.editing_text)
return text
def set_focus(self,index):
if index == 0:
self.stop_audio()
self.alarm_sel.show()
self.underline.hide()
#self.check_focus.hide()
self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[0])
self.ui.set_right('')
# elif index == 1:
# self.stop_audio()
# self.alarm_sel.hide()
# self.underline.hide()
# self.check_focus.show()
# self.ui.set_right(_('SELECT'))
elif index == 1:
self.stop_audio()
self.cursor_pos = 0
self.alarm_sel.hide()
#self.check_focus.hide()
self.underline.show()
self.update_underline()
if config.datetime_24hour:
self.ui.set_right('')
else:
if self.set_ap == 1:
self.ui.set_right(_('AM'))
else:
self.ui.set_right(_('PM'))
elif index == 2:
self.stop_audio()
self.alarm_sel.show()
self.underline.hide()
#self.check_focus.hide()
self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[2])
self.ui.set_right('')
elif index == 3:
self.stop_audio()
self.alarm_sel.show()
self.underline.hide()
#self.check_focus.hide()
self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[3])
self.ui.set_right('')
elif index == 4:
self.alarm_sel.show()
self.underline.hide()
#self.check_focus.hide()
self.alarm_sel.move(uiconfig.input5_x3, uiconfig.input5_y3[4])
self.ui.set_right('')
self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
else:
self.underline.hide()
self.alarm_sel.hide()
#self.check_focus.hide()
def get_current_file(self):
if config.mm_debug:
print '************** get current', self.audio_index
return self.audio_dir + self.lists[self.audio_index][0]
##############################################
def play_audio(self):
if status.phone_status != status.Disconnected:
return
if len(self.lists) == 0:
return
audio_file = self.get_current_file()
#self.player_pid = utils.player.play(audio_file)
self.player_pid = utils.player.play_alarm(audio_file)
def stop_audio(self):
if status.phone_status != status.Disconnected:
return
#utils.player.stop(self.player_pid)
utils.player.stop_alarm()
def get_current_name(self):
name = self.lists[self.audio_index][0]
dot = name.rfind('.')
if dot >= 0:
name = name[:dot]
return name
def destroy(self):
Stage.destroy(self)
self.stop_audio()
self.play_audio_timer = None
def handle_key(self,key):
if key == config.Menu4 or key == 'CLR': # Back
runtime.manager.back_stage()
return True
elif key == config.Menu1 or key =='OK': # Save
# 화면이 display 되기 전에 키입력 받으면, 무시 (QE 요청사항 - 28179)
if not self._ready_to_save:
return True
setting.agenda_disable()
import time,ntptime
year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
index = status.editing_alarm_index
status.alarm_item[1] = self.set_morning[self.idx_morning]
if self.set_morning[self.idx_morning] == _('Once'): #'Once':
status.alarm_item[2] = str(day)
status.alarm_item[3] = str(month)
status.alarm_item[4] = str(year)
#status.alarm_item[5] = str(self.check)
status.alarm_item[5] = '0'
if config.datetime_24hour:
status.alarm_item[6] = str(self.time[0])
status.alarm_item[7] = str(self.time[1])
else:
if self.set_ap == 1:
if self.time[0] == 12:
status.alarm_item[6] = str(self.time[0])
else:
status.alarm_item[6] = str(self.time[0] + 12)
status.alarm_item[7] = str(self.time[1])
else:
if self.time[0] == 12:
status.alarm_item[6] = '0'
else:
status.alarm_item[6] = str(self.time[0])
status.alarm_item[7] = str(self.time[1])
status.alarm_item[8] = str(self.set_interval[self.idx_interval])
status.alarm_item[9] = str(self.set_count[self.idx_count])
status.alarm_item[10] = self.get_current_file()
status.alarm_item[11] = self.get_current_name()
if index != -1:
alarmdb.remove(index)
alarmdb.insert_item(status.alarm_item)
self.item = status.alarm_item
#status.editing_alarm_index = -1
setting._alarm_tag = 0
#runtime.manager.back_stage()
def cb():
stage = AlarmListStage
runtime.manager.change_stage(stage)
stage = NotifyStage(_('Set is saved'), uiconfig.baloon_agenda_icon, cb = cb)
runtime.manager.change_stage(stage)
utils.player.play_effect(config.SETTING_SUCCEEDED)
return True
elif key == config.Menu2: # AM/PM
'''
if self.index == 1:
if self.check == 1:
self.check = 0
self.holidayset.file = uiconfig.image_dir + uiconfig.alarm_icon_check_box[0]
else:
self.check = 1
self.holidayset.file = uiconfig.image_dir + uiconfig.alarm_icon_check[0]
'''
if config.datetime_24hour:
self.ui.set_right('')
else:
if self.index == 1:
if self.set_ap == 1:
self.set_ap = 0
self.timeset_ap.file = uiconfig.image_dir + uiconfig.alarm_icon_am[0]
self.ui.set_right(_('PM'))
else:
self.set_ap = 1
self.timeset_ap.file = uiconfig.image_dir + uiconfig.alarm_icon_pm[0]
self.ui.set_right(_('AM'))
return True
elif key in "0123456789" and self.index == 1:
if config.datetime_24hour:
if self.cursor_pos == 0:
#hour 10
if not key in "012":
return True
if key == '2' and self.editing_text[1] > 3:
self.editing_text[1] = 3
elif self.cursor_pos == 1:
#hour 1
if self.editing_text[0] == 2 and key not in "0123": return True
hour = self.editing_text[0] * 10 + ord(key) - ord('0')
if hour > 23:
return True
elif self.cursor_pos == 2:
#min 10
if not key in "012345":
return True
elif self.cursor_pos == 3:
pass
else:
if self.cursor_pos == 0:
#hour 10
if not key in "01":
return True
if key == '1' and self.editing_text[1] > 2:
self.editing_text[1] = 2
elif self.cursor_pos == 1:
#hour 1
if self.editing_text[0] == 1 and key not in "012": return True
hour = self.editing_text[0] * 10 + ord(key) - ord('0')
if hour > 23:
return True
elif self.cursor_pos == 2:
#min 10
if not key in "012345":
return True
elif self.cursor_pos == 3:
pass
self.editing_text[self.cursor_pos] = ord(key) - ord('0')
self.update_time()
self.cursor_pos += 1
if self.cursor_pos > 3:
self.cursor_pos = 0
self.update_underline()
return True
##################################
elif key == 'Up':
self.play_audio_timer = None
self.index = self.index - 1
if self.index < 0: self.index = 4
self.set_focus(self.index)
return True
elif key == 'Down':
self.play_audio_timer = None
self.index = self.index + 1
if self.index > 4: self.index = 0
self.set_focus(self.index)
return True
elif key == 'Left':
self.play_audio_timer = None
if self.index == 1:
self.cursor_pos = self.cursor_pos - 1
if self.cursor_pos < 0: self.cursor_pos = 3
self.underline.show()
self.update_underline()
elif self.index == 0:
self.idx_morning = self.idx_morning - 1
if self.idx_morning < 0: self.idx_morning = 4
self.date.text_set(self.set_morning[self.idx_morning])
self.align_center(self.date, (302, uiconfig.input5_y4[0]))
elif self.index == 2:
self.idx_interval = self.idx_interval - 1
if self.idx_interval < 0: self.idx_interval = len(self.set_interval) - 1
interval_text = str(self.set_interval[self.idx_interval])+' '+_('Minutes')
self.interval.text_set(interval_text)
self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
elif self.index == 3:
self.idx_count = self.idx_count - 1
if self.idx_count < 0: self.idx_count = len(self.set_count) - 1
count_text = str(self.set_count[self.idx_count])+' '+_('Times')
self.count.text_set(count_text)
self.align_center(self.count, (302, uiconfig.input5_y4[3]))
elif self.index == 4:
self.audio_index = self.audio_index - 1
if self.audio_index < 0:
self.audio_index = len(self.names) - 1
ring =self.names[self.audio_index]
ring = unicode(ring, 'euc-kr').encode('utf-8')
self.ringname.text_set(ring)
self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
elif key == 'Right':
self.play_audio_timer = None
if self.index == 1:
self.cursor_pos = self.cursor_pos + 1
if self.cursor_pos > 3: self.cursor_pos = 0
self.underline.show()
self.update_underline()
elif self.index == 0:
self.idx_morning = self.idx_morning + 1
if self.idx_morning > 4: self.idx_morning = 0
self.date.text_set(self.set_morning[self.idx_morning])
self.align_center(self.date, (302, uiconfig.input5_y4[0]))
elif self.index == 2:
self.idx_interval = self.idx_interval + 1
if self.idx_interval > len(self.set_interval) - 1: self.idx_interval = 0
interval_text = str(self.set_interval[self.idx_interval]) + ' ' + _('Minutes')
self.interval.text_set(interval_text)
self.align_center(self.interval, (302, uiconfig.input5_y4[2]))
elif self.index == 3:
self.idx_count = self.idx_count + 1
if self.idx_count > len(self.set_count) - 1: self.idx_count = 0
count_text = str(self.set_count[self.idx_count]) + ' ' + _('Times')
self.count.text_set(count_text)
self.align_center(self.count, (302, uiconfig.input5_y4[3]))
elif self.index == 4:
self.audio_index = self.audio_index + 1
if self.audio_index > len(self.names) - 1:
self.audio_index = 0
ring =self.names[self.audio_index]
ring = unicode(ring, 'euc-kr').encode('utf-8')
self.ringname.text_set(ring)
self.align_center(self.ringname, (302, uiconfig.input5_y4[4]))
self.stop_audio()
self.play_audio_timer = utils.Timer(uiconfig.play_audio_delay, self.play_audio)
#self.play_audio()
return True
return Stage.handle_key(self,key)
################################################
def alarm_rotation():
if status.alarm_active_item == None:
return True
utils.Timer
#global item
#global cnt
#item = status.alarm_item_bak
item, cnt = status.alarm_active_item
#cnt = setting._agenda_snooze_cnt
#print 'ka...### alarm_rotation', status.alarm_active_item
#check the snoozed alarm is valid or not
alarm_deleted = True
if alarmdb.count() > 0:
#import time,ntptime
#year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
for a_item in alarmdb.db:
if item[0] == a_item[0]:
if a_item[1] == _('Disable'):
print "[alarm] snoozed alarm is disabled"
setting.agenda_disable()
setting.set_agenda_time(5 * 1000, alarm_activate)
return True
else:
alarm_deleted = False
if alarm_deleted:
print "[alarm] snoozed alarm is deleted"
setting.agenda_disable()
setting.set_agenda_time(5 * 1000, alarm_activate)
return True
else:
print "[alarm] snoozed alarm is not exist"
setting.agenda_disable()
setting.set_agenda_time(5 * 1000, alarm_activate)
return True
if cnt > 0:
if check_alarm_delay():
#setting.set_agenda_time(5*1000, alarm_delay)
#setting.set_agenda_snooze_time()
return True # RE: snoose
# VM
from eaHandler import EaNotifyStage
if runtime.eaHandler.isAppInUse():
currentName = runtime.eaHandler.getDestination().getName()
#print 'currentName = ', currentName
if currentName == 'MULTIMEDIA':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
elif currentName == 'BROWSER':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
elif currentName == 'MMSC':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
else: # bank
#print 'ka...############## 2 MMI UP !!!!!!!!!!!!!!'
return True
curr_stage_name = runtime.manager.stage.get_name()
if curr_stage_name == 'Calculator':
runtime.manager.stage.rollback_handle_key()
elif curr_stage_name == 'dectPaging':
runtime.manager.stage.handle_key(config.Menu4)
# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
setting.stop_slideshow()
stage = AlarmActivateStage(item,cnt)
# pause ack를 받은 후에 Stage를 전환하도록 한다.
if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
runtime.eaHandler.rcvPauseAckDoFunction(stage)
return False
runtime.manager.stack_stage(stage)
return False
def alarm_delay():
global item
global cnt
item, cnt = status.alarm_item_bak
#cnt = setting._agenda_snooze_cnt
#print 'ka...### alarm_delay', status.alarm_item_bak
from eaHandler import EaNotifyStage
if check_alarm_delay():
#setting.set_agenda_time(5*1000, alarm_delay)
return True
# VM
if runtime.eaHandler.isAppInUse():
currentName = runtime.eaHandler.getDestination().getName()
#print 'currentName = ', currentName
if currentName == 'MULTIMEDIA':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
elif currentName == 'BROWSER':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
elif currentName == 'MMSC':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
else: # bank
#print 'ka...############## 1 MMI UP !!!!!!!!!!!!!!'
return True
# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
setting.stop_slideshow()
stage = AlarmActivateStage(item,cnt)
# pause ack를 받은 후에 Stage를 전환하도록 한다.
if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
runtime.eaHandler.rcvPauseAckDoFunction(stage)
return False
runtime.manager.stack_stage(stage)
return False
def alarm_hold():
#global item
#global cnt
item, cnt = status.alarm_hold_item
#cnt = setting._agenda_snooze_cnt
#print 'ka...### alarm_hold', status.alarm_hold_item
if check_alarm_delay():
#setting.set_agenda_time(5*1000, alarm_delay)
return True
if runtime.eaHandler.isAppInUse():
currentName = runtime.eaHandler.getDestination().getName()
#print 'currentName = ', currentName
if currentName == 'MULTIMEDIA':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
elif currentName == 'BROWSER':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
elif currentName == 'MMSC':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
else: # bank
#print 'ka...############## 1 MMI UP !!!!!!!!!!!!!!'
return True
else:
# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
setting.stop_slideshow()
status.alarm_hold_item = None
stage = AlarmActivateStage(item,cnt)
# pause ack를 받은 후에 Stage를 전환하도록 한다.
if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
runtime.eaHandler.rcvPauseAckDoFunction(stage)
return False
runtime.manager.stack_stage(stage)
return False
def check_alarm_delay():
# exception 상황에서 Alarm이 울리면, snooze 됨.
#if runtime.myannapp and runtime.myannapp.is_running() == True or\
# runtime.browserapp and runtime.browserapp.is_running() == True or\
#if status.phone_status != status.Disconnected or\
if runtime.manager.stage.agenda_forbidden or\
'ipemailsendstage' == runtime.manager.stage.name or \
'smsreceivingstage' == runtime.manager.stage.name or \
'incoming_mms' == runtime.manager.stage.name or \
'mmsdownloadstage' == runtime.manager.stage.name or\
'enblock edit' == runtime.manager.stage.name or\
'H2B_Transfer' == runtime.manager.stage.name or\
'InUseByDect' == runtime.manager.stage.name or\
'alarmactivatestage' == runtime.manager.stage.name:
#status.first_video_mode != status.VideoIdle or \
#status.second_video_mode != status.VideoIdle:
return True
from mmiSoundPath import SP_Context
from dectHandler import DectCallManager
baseCallStatus, baseStatus, dectCallStatus, dectStatus = status.getCurrentCallStatus()
# Base가 in use...
if baseStatus != SP_Context.IDLE:
return True
return False
def alarm_valid():
global check
check = False
if alarmdb.count() > 0:
import time,ntptime
year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
for item in alarmdb.db:
if item[1] in (_('Mon~Fri'), _('Mon~Sat'), _('Everyday')):
check = True
elif item[1] == _('Once'):
if int(item[4]) > year:
check = True
elif int(item[4]) == year and int(item[3]) > month:
check = True
elif int(item[4]) == year and int(item[3]) == month and int(item[2]) > day:
check = True
elif int(item[4]) == year and int(item[3]) == month and int(item[2]) == day and int(item[6]) > h:
check = True
elif int(item[4]) == year and int(item[3]) == month and int(item[2]) == day and int(item[6]) == h and int(item[7]) > m:
check = True
return check
def warning_activate():
global chk
#setting._warning_tag = None
if False and runtime.manager.stage.name != 'idle':
# idle상태가 아니면 다음으로 미룬다
setting.set_warning_time(5 * 1000, warning_activate)
return False
if status.phone_status != status.Disconnected:
# Disconnected 상태가 아니면 다음으로 미룬다
setting.set_warning_time(5 * 1000, warning_activate)
return False
# vpark 06.02.10
if status.first_video_mode != status.VideoIdle or \
status.second_video_mode != status.VideoIdle:
setting.set_warning_time(5 * 1000, warning_activate)
return False
# vpark 06.02.10
if runtime.manager.stage.agenda_forbidden:
setting.set_warning_time(5 * 1000, warning_activate)
return False
#브라우저 실행중이면 다음으로 미룬다
if runtime.browserapp and runtime.browserapp.is_running() == True:
setting.set_warning_time(5 * 1000, warning_activate)
return False
if runtime.myannapp and runtime.myannapp.is_running() == True:
setting.set_warning_time(5 * 1000, warning_activate)
return False
if 'ipemailsendstage' == runtime.manager.stage.name or \
'smsreceivingstage' == runtime.manager.stage.name or \
'incoming_mms' == runtime.manager.stage.name or \
'mmsdownloadstage' == runtime.manager.stage.name:
setting.set_warning_time(5*1000, warning_activate)
return False
chk = 1
import time,ntptime
year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
if status.warning_item != None:
item = status.warning_item
chk = 1
if setting._warning_tag == None and item[0] <> _('Disable'):
if eval(item[3]) <> h or eval(item[4]) <> m:
chk = 0
else:
chk = 0
if chk == 1:
stage = WarningActivateStage(item)
runtime.manager.stack_stage(stage)
setting.set_warning_time(5*1000, warning_activate)
return False
def alarm_activate():
#print "[yylee debug] alarm_activate"
global chk
#print 'ka.................Time check'
# _agenda_tag 살아揚獵?상태
if setting._agenda_hold_tag != None or setting._agenda_snooze_tag != None:
#print 'ka........._agenda_hold_tag=', setting._agenda_hold_tag
#print 'ka........._agenda_snooze_tag=', setting._agenda_snooze_tag
#print "[yylee debug] alarm_activate #1"
return True
chk = 1
alarmList = []
import time,ntptime
year,month,day,h,m,ss,w = time.localtime(setting.current_time)[0:7]
#print 'ka....Now time=', year,month,day,h,m,ss,w
#print 'ka....setting.h/m=', setting._agenda_disable_hour, setting._agenda_disable_min
#print "[yylee debug] alarm_activate :", h, m
if h == setting._agenda_disable_hour and m == setting._agenda_disable_min:
#print "[yylee debug] alarm_activate #2"
pass
elif alarmdb.count()>0:
for item in alarmdb.db:
#print 'ka....check item=', item
chk = 1
#print 'ka...._alarm_tag=', setting._alarm_tag # 알람 울리는 중
if setting._alarm_tag == 0 and item[1] != _('Disable'):
if item[1] == _('Once'):
if eval(item[2]) != day or eval(item[3]) != month or eval(item[4]) != year or eval(item[6]) != h or eval(item[7]) != m:
chk = 0
elif item[1] == _('Mon~Fri'):
if w in [5,6] or eval(item[6]) != h or eval(item[7]) != m:
chk = 0
elif item[1] == _('Mon~Sat'):
if w == 6 or eval(item[6]) != h or eval(item[7]) != m:
chk = 0
elif item[1] == _('Everyday'):
#print 'ka...............eval(item[6]) /eval(item[7]) =', eval(item[6]) , eval(item[7])
#print 'ka................h/m=', h, m
if eval(item[6]) != h or eval(item[7]) != m:
chk = 0
else:
chk = 0
if chk == 0:
#print "[yylee debug] alarm_activate #3"
#print 'ka.....current time or stage is not valid'
continue
if chk == 1:
# exception 상황에서 Alarm이 울리면, snooze 됨.
if check_alarm_delay():
#print 'ka...#########3 delay'
#setting._alarm_tag = 1
#status.alarm_item_bak = item, eval(item[9])
#setting._agenda_snooze_cnt = eval(item[9])
#setting.set_agenda_time(5*1000, alarm_delay)
status.alarm_item_bak = item, eval(item[9])
setting.set_agenda_snooze_time(5*1000, alarm_delay)
return False
# for VM
from eaHandler import EaNotifyStage
if runtime.eaHandler.isAppInUse():
currentName = runtime.eaHandler.getDestination().getName()
print 'currentName = ', currentName
if currentName == 'MULTIMEDIA':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MULTIMEDIA'))
#runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
elif currentName == 'BROWSER':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By BROWSER'))
runtime.eaHandler.activateApplication(source=currentName, destination='MMI')
elif currentName == 'MMSC':
runtime.manager.stack_stage(EaNotifyStage('AudoCall : In Use By MMSC'))
runtime.eaHandler.activateApplicationByCall(source=currentName, destination='MMI')
else: # bank / MMI화면이 위로 올라온 경우
#print 'ka...############## MMI UP !!!!!!!!!!!!!!'
#setting._alarm_tag = 1
#status.alarm_item_bak = item
#setting._agenda_snooze_cnt = eval(item[9])
#setting.set_agenda_time(5*1000, alarm_delay)
status.alarm_item_bak = item, eval(item[9])
setting.set_agenda_snooze_time(5*1000, alarm_delay)
return False
curr_stage_name = runtime.manager.stage.get_name()
if curr_stage_name == 'Calculator':
runtime.manager.stage.rollback_handle_key()
elif curr_stage_name == 'dectPaging':
runtime.manager.stage.handle_key(config.Menu4)
#print 'ka...######### Valid alarm !!!--item=',item
alarmList.append(item)
#print "[yylee debug] alarm_activate #4", len(alarmList)
# 같은 시간대에 울려야할 알람이 한개 이상이면 내용 체크 - 동일하면 하나를 삭제
if len(alarmList) >=1:
def check_max_cnt():
index = 0
cnt = 1
for i in range(len(alarmList)):
if cnt < eval(alarmList[i][9]):
cnt = eval(alarmList[i][9])
index = i
for j in range(len(alarmList)):
if j != index:
if alarmList[j][1] == _('Once'):
delIndex = alarmdb.find_by_item(alarmList[j])
alarmdb.remove(delIndex)
return index
index = check_max_cnt()
# slide show 중 일 경우. <-- AlarmActivateStage로 전환하기 직전에만 수행할 것.
setting.stop_slideshow()
stage = AlarmActivateStage(alarmList[index],eval(alarmList[index][9]))
# pause ack를 받은 후에 Stage를 전환하도록 한다.
if runtime.eaHandler.isAppInUse() and currentName in ('MULTIMEDIA', 'MMSC'):
runtime.eaHandler.rcvPauseAckDoFunction(stage)
return
runtime.manager.stack_stage(stage)
'''
# 현재 울려야 할 알람이 한개 초과이면 one active / the others delay
for i in range(len(alarmList)):
print 'ka... check snoose=', status.alarm_active_item
if status.alarm_active_item: # snoose수행 중인 경우
item, cnt = status.alarm_active_item
if item == alarmList[i]:
continue
else:
print 'ka...############## alarmList NEW !!!!!!!!!!!!!!'
setting.agenda_disable()
#status.alarm_hold_item = (alarmList[i], eval(alarmList[i][9]))
#setting.set_agenda_hold_time(5*1000, alarm_hold)
stage = AlarmActivateStage(alarmList[i],eval(alarmList[i][9]))
runtime.manager.stack_stage(stage)
return True
if i == 0:
print 'ka...############## alarmList First !!!!!!!!!!!!!!'
stage = AlarmActivateStage(alarmList[i],eval(alarmList[i][9]))
runtime.manager.stack_stage(stage)
else:
#stage = AlarmActivateStage(alarmList[0],eval(alarmList[0][9]))
print 'ka...############## alarmList Later !!!!!!!!!!!!!!'
#setting._alarm_tag = 1
#status.alarm_item_bak = item[i]
#setting._agenda_snooze_cnt = eval(alarmList[i][9])
#status.alarm_hold_item = (alarmList[i], eval(alarmList[i][9]))
#setting.set_agenda_hold_time(5*1000, alarm_hold)
#setting._alarm_tag = 1
#status.alarm_item_bak = self.item
#setting._agenda_snooze_cnt = self.cnt
#agenda_time = self.interval * 60 * 1000
#setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
#stage = AlarmActivateStage(item,eval(item[9]))
#runtime.manager.stack_stage(stage)
'''
#setting.set_agenda_time(5*1000, alarm_activate)
return True
return True
class WarningActivateStage(Stage):
name = 'warningactivatestage'
def __init__(self, item):
self.item = item
status.supervision_not_allowed = 1
self.player_pid = None
message = _('<Attention>')
self.ui = baseui.AgendaActiveUI(message)
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def handle_key(self, keyname):
if keyname == config.Menu1:
stage = AlarmNotifyStage(_('5 minutes\nAlarm post-poned!'))
runtime.manager.change_stage(stage)
setting._warning_snooze_cnt = setting._warning_snooze_cnt + 1
setting.set_warning_time(5 * 60 * 1000, warning_activate)
elif keyname == config.Menu2:
setting.warning_disable()
runtime.manager.back_stage()
else:
return False
return True
def warning_stop(self):
### eicho 06.11.07
setting.warning_disable()
### end.
runtime.manager.back_stage()
return False
def show(self):
#self.player_pid = utils.player.play(self.item[5])
utils.player.play_alarm(self.item[5])
Stage.show(self)
self.warning_stop_timer = utils.Timer(5*60*1000, self.warning_stop)
def destroy(self):
self.warning_stop_timer = None
Stage.destroy(self)
#utils.player.stop(self.player_pid)
utils.player.stop_alarm()
status.supervision_not_allowed = 0
class AlarmActivateStage(Stage):
name = 'alarmactivatestage'
def __init__(self,item,cnt):
self.item = item
status.supervision_not_allowed = 1
self.player_pid = None
message =self.item[12]
#default alarm message
message = _('Wake up')
self.ui = baseui.AgendaActiveUI(message)
setting.reset_screen_saver_timer()
status.screensaver_activated = False
setting._alarm_tag = 1
self.cnt = cnt
self.cnt = self.cnt - 1
if self.cnt == 0:
self.ui.set_left('')
self.interval = eval(self.item[8])
status.alarm_active_item = self.item, self.cnt
def alarm_timeout_cb():
self.handle_key('CLR')
self._alarm_timeout_tag = None
self._alarm_timeout_tag = utils.Timer(50*1000, alarm_timeout_cb)
def handle_key(self, keyname):
'''
Menu4와 Red Key 입력 시 알람 종료
그 외의 다름 모든 key는 snooze 처리
'''
'''
if runtime.eaHandler.isAppInUse():
runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
if keyname in (config.Menu4, config.Red):
setting.agenda_disable()
stage = AlarmNotifyStage(_('Alarm stopped'))
runtime.manager.change_stage(stage)
else:
if self.cnt > 0:
stage = AlarmNotifyStage(_('Alarm snoozed'))
runtime.manager.change_stage(stage)
setting._alarm_tag = 1
status.alarm_item_bak = self.item
setting._agenda_snooze_cnt = self.cnt
agenda_time = self.interval * 60 * 1000
setting.set_agenda_time(agenda_time, alarm_rotation)
else:
setting.agenda_disable()
#runtime.eaHandler.deactivateApplication()
runtime.manager.back_stage()
runtime.eaHandler.endCall()
return True
'''
if keyname == config.Menu4 or keyname == config.Red:
if self.item[1] == _('Once'):
index = alarmdb.find_by_item(self.item)
alarmdb.remove(index)
if runtime.eaHandler.isAppInUse():
runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
#runtime.eaHandler.endCall()
setting.agenda_disable()
#runtime.eaHandler.deactivateApplication()
runtime.manager.back_stage()
runtime.eaHandler.endCall()
else:
setting.agenda_disable()
stage = AlarmNotifyStage(_('Alarm stopped'))
runtime.manager.change_stage(stage)
#runtime.manager.back_stage('idle')
else:
if self.cnt > 0:
#setting.agenda_disable(snooze=True)
if runtime.eaHandler.isAppInUse():
runtime.mmiDebug.mmiTrace('=============>>> START snooze Alarm()')
#runtime.eaHandler.endCall()
#runtime.eaHandler.deactivateApplication()
runtime.manager.back_stage()
runtime.eaHandler.endCall()
else:
stage = AlarmNotifyStage(_('Alarm snoozed'))
runtime.manager.change_stage(stage)
#setting._alarm_tag = 1
#status.alarm_item_bak = self.item
#setting._agenda_snooze_cnt = self.cnt
agenda_time = self.interval * 60 * 1000
setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
else:
if self.item[1] == _('Once'):
index = alarmdb.find_by_item(self.item)
alarmdb.remove(index)
if runtime.eaHandler.isAppInUse():
runtime.mmiDebug.mmiTrace('=============>>> START end Alarm()')
#runtime.eaHandler.endCall()
#runtime.eaHandler.deactivateApplication()
setting.agenda_disable()
runtime.manager.back_stage()
runtime.eaHandler.endCall()
else:
setting.agenda_disable()
runtime.manager.back_stage('idle')
return True
def alarm_stop(self):
setting.agenda_disable()
runtime.manager.back_stage()
return False
def show(self):
ring = self.item[10]
#self.player_pid = utils.player.play(ring)
utils.player.play_alarm(ring)
Stage.show(self)
self.agenda_stop_timer = utils.Timer(self.interval * 60 * 1000, self.alarm_stop)
def destroy(self):
calc_stage = runtime.manager.find_stage('Calculator')
if calc_stage:
calc_stage.change_handle_key()
self.agenda_stop_timer = None
Stage.destroy(self)
#utils.player.stop(self.player_pid)
utils.player.stop_alarm()
status.supervision_not_allowed = 0
setting._alarm_tag = 0
self._alarm_timeout_tag = None
print 'ka...############# destroy alarm'
if status.alarm_active_item:
# 외부 이벤트에 의해 destory되는 경우
print 'ka...###### auto snoose'
if self.cnt > 0:
agenda_time = self.interval * 60 * 1000
setting.set_agenda_snooze_time(agenda_time, alarm_rotation)
else:
setting.agenda_disable()
if self.item[1] == _('Once'):
index = alarmdb.find_by_item(self.item)
alarmdb.remove(index)
if alarm_valid():
setting.set_agenda_time(5 * 1000, alarm_activate)
class AlarmEditTextStage(RichTextEditStage):
def __init__(self,item,action):
self.item = item
self.action = action
mess = item[12]
if mess == '0':
mess = ''
RichTextEditStage.__init__(self, _('CALENDAR'), small_title=_('Write'), isenter=False)
self.ui.set_max(40)
#if setting._agenda_message != None:
self.ui.set_text(mess)
status.save_callback_other = self.save_callback
def activate_menu1(self):
if self.action == 1:
ind = status.editing_alarm_index
status.alarm_item[0] = str(ind)
status.alarm_item[12] = str(self.get_text())
alarmdb.remove(ind)
alarmdb.insert_item(status.alarm_item)
runtime.manager.back_stage()
runtime.manager.change_stage(DetailAlarmStage(status.alarm_item,self.action))
def save_callback(self):
if self.action == 1:
index = status.editing_alarm_index
status.alarm_item[0] = str(index)
status.alarm_item[12] = str(self.get_text())
alarmdb.remove(index)
alarmdb.insert_item(status.alarm_item)
return (_('Calendar saved.'), uiconfig.baloon_agenda_icon)
def destroy(self):
status.save_callback_other = None
RichTextEditStage.destroy(self)
class AlarmNotifyStage(NotifyStage):
def __init__(self, message, cb=None):
NotifyStage.__init__(self, message, uiconfig.baloon_agenda_icon, cb)