from basemodel import Stage, ListStage, YesNoStage, NotifyStage
import runtime, config, uiconfig
from setting import setting
import baseui, ui
import utils
from sounds import AudioGalleryStage
from model import StorageShortStage
import os, status
class PhotoQualityStage(ListStage):
# Phase2 136
icon = uiconfig.image_image_sound_image_icon
# eicho add 06.11.14
name = 'photorelatedstage'
def __init__(self):
self.title = _('QUALITY')
self.choice = _('High'), _('Low')
ListStage.__init__(self)
self.ui.set_focus(1 - setting.photo_quality)
def activate(self, index):
setting.photo_quality = 1 - index
def cb():
runtime.manager.queue_backward(2)
stage = NotifyStage(_('Quality set'), uiconfig.baloon_photo_icon, cb)
runtime.manager.change_stage(stage)
class PhotoOptionStage(ListStage):
name = 'photorelatedstage'
icon=uiconfig.ico_mm_recorder
titleimage=uiconfig.Third_title_mm_recorder
def __init__(self, preview_stage):
self.title = _('OPTIONS')
self.choice = _('Camera timer'), _('Camera setting')
status.supervision_not_allowed = 0
self.preview_stage = preview_stage
ListStage.__init__(self)
def activate(self, index):
if index == 0:
def start_capture():
self.preview_stage.start_timer()
runtime.manager.queue_backward(1)
stage = NotifyStage(_('Camera timer set'), uiconfig.baloon_photo_icon, start_capture)
runtime.manager.change_stage(stage)
elif index == 1:
import menu
stage = menu.NewCameraSettingStage
#stage = menu.CameraBrightnessSettingStage
runtime.manager.stack_stage(stage)
'''
elif index == 2:
import menu
stage = menu.WhiteBalanceSettingStage
runtime.manager.stack_stage(stage)
'''
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.ui.get_focus() >= 0:
self.activate(self.ui.get_focus())
return True
# yylee modified to add new soft key
# elif key == config.Menu2:
elif key == config.Menu4 or key == 'CLR':
#stage = PhotoPreviewStage
#runtime.manager.change_stage(stage)
runtime.manager.back_stage()
return True
elif key in ('Up', 'Down'):
return self.ui.handle_key(key)
elif key == '1':
self.activate(0)
return True
elif key == '2':
self.activate(1)
return True
'''
elif key == '3':
self.activate(2)
return True
'''
return False
# eicho recover 06.10.16 as revision 1.3
# revision 1.4 failed.
class PhotoCaptureStage(Stage):
agenda_forbidden = True
# eicho add 06.11.14
name = 'photorelatedstage'
def __init__(self, mms_mode=0):
self.mms_mode = mms_mode
self.filename = self.make_image_name()
# convert dump image to png image
self.fullname = config.image_taken_dir + self.filename
#MMW
self.captured = utils.player.picture_capture(self.fullname)
#end of MMW
# camera stop, close
#utils.player.preview_stop()
title = "%s[%dKB]" % (self.filename[:-4], utils.get_size_kb(self.fullname))
self.ui = baseui.PreviewUI(_('SAVE'), '', title, '', _('BACK'))
self.image = None
# # 알 수 없는 이유로 인한 capture 실패시(파일이 생성 안되었을 시)
# if not os.access(self.fullname, os.R_OK):
# def back_cb():
# utils.player.preview_stop()
# utils.player.play_effect(config.SETTING_FAILED)
# stage = NotifyStage(_('No taken photos available'), uiconfig.baloon_photo_icon)
# runtime.manager.pop_stage().destroy()
# runtime.manager.change_stage(stage)
# return False
# runtime.evas.idle_add(back_cb)
# return
color = uiconfig.cam_subtitle_color
font = uiconfig.cam_subtitle_font
self.pic_info = runtime.evas.text(pos=(0,0),color=color,font=font)
self.pic_info.text = title
self.align_center(self.pic_info, uiconfig.cam_cap_style_name_center_pos)
self.ui.add(self.pic_info)
def align_center(self, l, pos):
x, y = pos
width,height = l.size
l.move(x - width/2, y)
def make_image_name(self):
filename = ''
if 0:
import time, ntptime
year, mon, day = time.localtime(ntptime.ntime())[:3]
date = "%02d%02d%02d" % (year%1000, mon, day)
if date != setting.photo_serial_day:
setting.photo_serial_day = date
setting.photo_serial = 0
else:
date = "photo"
findex = setting.photo_serial
while 1:
#ka...3800 Temporary 2007.04.02
filename = date + "%03d.jpg" % findex
#filename = date + "%03d.png" % findex
if not os.access(config.image_taken_dir + filename, os.R_OK):
break
findex = (findex + 1) % 1000
return filename
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
utils.player.clip_disable()
utils.player.preview_stop()
#print 'FIXME: save photo capture here!!!'
# flash memory full check
free_flash = utils.get_free_flash_memory()
#print "[yylee debug] free_flash", free_flash
if free_flash < config.media_min_free_storage:
utils.remove(config.image_taken_dir + self.filename)
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return False
def saved_cb():
if status.background_editing:
from phonesetting import BackgroundGalleryStage
stage = BackgroundGalleryStage('taken', _('PHOTO GALLERY'))
else:
#Phase2 137
from images import PhotoGalleryStage
stage = PhotoGalleryStage('taken', self.mms_mode, isshow=False)
pop = runtime.manager.pop_stage()
pop.destroy()
runtime.manager.change_stage(stage)
stage.set_file(self.filename)
#MMW
utils.file_time_adaptation(self.captured)
#end of MMW
try:
filenum = self.filename[-3:]
filenum = filenum.replace('.jpg', '')
setting.photo_serial = int(filenum)+1
except:
setting.photo_serial += 1
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Photo saved'), uiconfig.baloon_photo_icon, saved_cb)
runtime.manager.change_stage(stage)
elif key == config.Menu4 or key == 'CLR':
utils.player.clip_disable()
utils.player.preview_stop()
#ka...3800 MMI를 위로 2007.05.04
##os.system('fb0top 1')
def yes():
#def cb():
# runtime.manager.queue_backward(2)
#utils.player.play_effect(config.SETTING_SUCCEEDED)
#stage = NotifyStage(_('Photo deleted'), uiconfig.baloon_photo_icon, cb)
#runtime.manager.change_stage(stage)
utils.remove(config.image_taken_dir + self.filename)
runtime.manager.queue_backward(2)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Save will cancel, continue?'), yes, no, '', uiconfig.baloon_photo_icon)
runtime.manager.stack_stage(stage)
elif key in (config.Red, config.OffHook):
utils.player.clip_disable()
utils.remove(config.image_taken_dir + self.filename)
return False
else:
return False
return True
#ka...3800 2007.06.06 Capture후 Delete NO후 BackStage돌아온경우
def show(self):
#print "[yylee debug] PhotoCaptureStage::show() -", self.fullname
Stage.show(self)
##os.system('fb0top 0')
#runtime.evas.set_clip()
#utils.player.clip_enable()
if self.image:
self.image.free()
# 알 수 없는 이유로 인한 capture 실패시(파일이 생성 안되었을 시)
if not os.access(self.fullname, os.R_OK):
def back_cb():
utils.player.preview_stop()
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('No taken photos available'), uiconfig.baloon_photo_icon)
runtime.manager.pop_stage().destroy()
runtime.manager.change_stage(stage)
return False
runtime.evas.idle_add(back_cb)
return
self.image = utils.put_image(self.fullname, uiconfig.picture_preview_pos)
utils.image_sized(self.image, uiconfig.picture_preview_pos, uiconfig.picture_preview_size)
#ka...3800 2007.05.10 S|W 받고 stage 변경시에 media 정리를 위해
def destroy(self):
Stage.destroy(self)
#utils.player.preview_stop()
####### answer delay
##os.system('fb0top 1')
status.not_screen_saver = False
if self.image:
self.image.free()
class PhotoPreviewStage(Stage):
agenda_forbidden = True
# eicho add 06.11.14
name = 'photorelatedstage'
def __init__(self, mms_mode=0):
status.supervision_not_allowed = 1
self.mms_mode = mms_mode
#self.ui = baseui.PreviewUI( _('MENU'),'', _('PHOTO CAMERA'), _('SIZE'), _('BACK'))
self.ui = baseui.PreviewUI( _('MENU'),'', '', _('SIZE'), _('BACK')) # to fix clip error
self.capture_ok_timer = 0
self.counter = 0
self.capture_ready = False
self.interrupted_by_sms = False
self.timer = 0
self.timer_img = utils.put_image('time%02d.png'%10, uiconfig.camera_preview_timer_pos)
self.ui.add(self.timer_img)
if setting.screen_saver_enabled:
status.not_screen_saver = True
color = uiconfig.cam_subtitle_color
font = uiconfig.cam_subtitle_font
self.res_info = runtime.evas.text(pos=(0,0),color=color,font=font)
self.res_info.text = uiconfig.cam_cap_style_name[setting.photo_quality]
self.align_center(self.res_info, uiconfig.cam_cap_style_name_center_pos)
self.ui.add(self.res_info)
def align_center(self, l, pos):
x, y = pos
width,height = l.size
l.move(x - width/2, y)
def handle_key(self, key):
'''
if key == config.Menu1:
if self.timer:
self.timer = 0
self.capture_ok_timer = 0
self.capture_ready = False
self.ui.set_right('')
utils.player.preview_stop()
stage = PhotoOptionStage(self)
runtime.manager.stack_stage(stage)
return True
'''
if key == config.Menu1:
utils.player.clip_disable()
if self.timer:
self.timer = 0
self.capture_ok_timer = 0
self.capture_ready = False
utils.player.preview_stop()
stage = PhotoOptionStage(self)
runtime.manager.stack_stage(stage)
return True
'''
self.start_timer()
return True
'''
'''
def start_capture():
self.start_timer()
runtime.manager.back_stage()
stage = NotifyStage(_('Camera timer set'), uiconfig.baloon_photo_icon, start_capture)
runtime.manager.change_stage(stage)
'''
if key == config.Menu2 or key == 'OK':
if not self.capture_ready:
return True
if self.timer:
self.timer = 0
self.timer_img.hide()
self.ui.set_right(_('CAPTURE'))
return True
utils.player.clip_disable()
# eicho 06.08.18 INCOMING call이 들어온 상태
# if status.call_status == status.IncomingCall :
# print '\n### STOP CAPTURE for INCOMING call!'
# return True
self.capture_ok_timer = 0
self.capture_ready = False
# camera stop, make temp image
utils.player.preview_pause()
stage = PhotoCaptureStage(self.mms_mode)
runtime.manager.stack_stage(stage)
return True
if key == config.Menu3:
utils.player.clip_disable()
utils.player.preview_stop()
setting.photo_quality = (setting.photo_quality + 1) % 5
self.res_info.text = uiconfig.cam_cap_style_name[setting.photo_quality]
self.align_center(self.res_info, uiconfig.cam_cap_style_name_center_pos)
self.show()
elif key == config.Menu4 or key == 'CLR':
utils.player.clip_disable()
runtime.manager.back_stage()
return True
return False
def start_timer(self):
self.counter = 11
self.timer = utils.Timer(1000, self.decrease_counter)
#self.timer_img.pos = uiconfig.camera_preview_timer_pos[setting.photo_quality]
self.timer_img.pos = uiconfig.camera_preview_timer_pos
def decrease_counter(self):
self.counter -= 1
if self.counter >= 0:
self.timer_img.file = uiconfig.image_dir+'time%02d.png'%self.counter
self.timer_img.show()
runtime.evas.render_now()
return True
self.timer = 0
self.capture()
setting.reset_screen_saver_timer()
status.screensaver_activated = False
return False
def capture(self):
self.timer_img.hide()
runtime.evas.render_now()
# camera stop, make temp image
utils.player.preview_pause()
stage = PhotoCaptureStage(self.mms_mode)
runtime.manager.stack_stage(stage)
def show(self):
if setting.screen_saver_enabled:
status.not_screen_saver = True
Stage.show(self)
runtime.evas.render_now()
utils.player.preview_start()
runtime.evas.render_now()
if not self.timer:
self.timer_img.hide()
else:
#self.ui.set_right(_('TIMER CANCEL'))
self.ui.set_right(_('Cancel timer'))
self.capture_ready = True
return
if self.interrupted_by_sms:
self.interrupted_by_sms = False
# utils에 run camera에서 수행
# if setting.photo_quality == 0:
# #runtime.evas.set_clip(72, 40, 176, 144)
# runtime.evas.set_clip(0, 0, 480, 272)
# else:
# runtime.evas.set_clip(80, 52, 160, 120)
self.ui.set_right(_('CAPTURE'))
self.capture_ready = True
return
def check_ok():
# KA: [20070711] ci-capture
if os.access('/var/run/vengine.id', os.R_OK):
self.ui.set_right(_('CAPTURE'))
self.capture_ready = True
runtime.evas.render_now()
return False
self.ui.set_right('')
return True
if check_ok():
self.capture_ok_timer = utils.Timer(20, check_ok)
runtime.evas.render_now()
def hide(self):
status.not_screen_saver = False
setting.reset_screen_saver_timer()
self.timer = 0
self.capture_ok_timer = 0
self.timer_img.file = uiconfig.image_dir+'time%02d.png'%10
# self.timer_img.file = 'time%02d.png'%10
if status.incoming_sms:# or status.bluetooth_activated:
if config.mm_debug:
print '>>> incoming sms, clip disable'
self.interrupted_by_sms = True
runtime.evas.set_clip()
# KA: [20070711] ci-capture
# else:
# utils.player.preview_stop()
# print 'debug fb0top ----- hide() -1)'
#os.system('fb0top 0')
utils.player.clip_disable()
Stage.hide(self)
def destroy(self):
Stage.destroy(self)
self.timer = 0
self.capture_ok_timer = 0
utils.player.preview_stop()
utils.player.clip_disable()
print 'debug fb0top ----- destroy() -2)'
####### answer delay
##os.system('fb0top 1')
status.supervision_not_allowed = 0
status.not_screen_saver = False
class AudioRecordDoneStage(Stage):
def __init__(self, duration, filename, mmsmessage=None):
self.mmsmessage = mmsmessage
self.duration = duration
self.filename = filename
#utils.player.record_stop()
#file_size = utils.get_size_kb('/usr/local/lgvp/arec.3gp')
#file_size = utils.get_size_kb('/usr/local/lgvp/arec.mp4')
file_size = utils.get_size_kb('/usr/local/lgvp/arec.amr')
title = "%s[%dKB]" % (self.filename[:-4], file_size)
if config.mm_debug:
print title
self.ui = ui.AudioRecordUI(_('SAVE'),'', _('AUDIO RECORDER'), title,'', _('BACK'))
# self.ui.duration.text = _('Duration: ') + ('%02d:%02d' % divmod(self.duration, 60))
self.ui.duration.text = ('%02d:%02d' % divmod(self.duration, 60))
self.ui.set_max_duration(config.audio_record_duration)
self.ui.set_value(self.duration)
audio_recording_done = uiconfig.mmp_recording_done
name, pos = audio_recording_done
self.audio_recording_done_icon = utils.put_image(name, pos)
self.audio_recording_done_icon.hide()
self.ui.add(self.audio_recording_done_icon)
pos = uiconfig.audio_rec_subtitle_pos
color = uiconfig.audio_rec_subtitle_color
font = uiconfig.audio_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
#self.subtitle.text = _('Recording done') + title
self.subtitle.text = title
self.ui.add(self.subtitle)
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
from mmsutils import MMS_filemove
# flash memory full check
free_flash = utils.get_free_flash_memory()
#print "[yylee debug] free_flash", free_flash
if free_flash < config.media_min_free_storage:
MMS_filemove('/usr/local/lgvp/arec.amr', config.audio_recorded_dir + self.filename)
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return False
def cb():
# after audio save, change to AudioGalleryStage
runtime.manager.back_stage(name='', isshow=False)
stage = AudioGalleryStage('recorded', self.mmsmessage)
if stage.name != 'audio gallery':
return
stage.set_focus_item(self.filename)
runtime.manager.change_stage(stage)
#MMW
recorded_file_name = '/usr/local/lgvp/audios/audios/recorded/'+ self.filename
utils.file_time_adaptation(recorded_file_name)
#end of MMW
try:
filenum = self.filename[-3:]
filenum = filenum.replace('.amr', '')
setting.audio_serial = int(filenum)+1
except:
setting.audio_serial += 1
try:
#MMS_filemove('/usr/local/lgvp/arec.3gp', config.audio_recorded_dir + self.filename)
#MMS_filemove('/usr/local/lgvp/arec.mp4', config.audio_recorded_dir + self.filename)
MMS_filemove('/usr/local/lgvp/arec.amr', config.audio_recorded_dir + self.filename)
except:
def cb_full():
runtime.manager.back_stage('audioreadystage')
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(NotifyStage(_('Save failed'), uiconfig.baloon_record_icon, cb_full))
return
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Voice saved'), uiconfig.baloon_record_icon, cb)
runtime.manager.change_stage(stage)
return True
elif key == config.Menu4 or key == 'CLR':
def yes():
#utils.remove('/usr/local/lgvp/arec.3gp')
#utils.remove('/usr/local/lgvp/arec.mp4')
utils.remove('/usr/local/lgvp/arec.amr')
runtime.manager.back_stage('audioreadystage')
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Save will cancel, continue?'), yes, no, '', uiconfig.baloon_record_icon)
runtime.manager.stack_stage(stage)
return True
class AudioRecordStage(Stage):
agenda_forbidden = True
# eicho add 06.11.14
name = 'audiorelatedstage'
def __init__(self, audiopid, filename, mmsmessage=None):
self.audiopid = audiopid
self.mmsmessage = mmsmessage
if setting.lang == 'Korean':
self.ui = ui.AudioRecordUI(_('STOP'), '', _('AUDIO RECORDER'), _('Audio recording'))
else:
self.ui = ui.AudioRecordUI(_('STOP'), '', _('AUDIO RECORDER'), _('Recording...'))
self.timer = utils.Timer(1000, self.update_time)
self.duration = 0
self.max_duration = config.audio_record_duration
self.filename = filename
self.ui.set_max_duration(self.max_duration)
if config.mm_debug:
print 'audio filename:', self.filename
self.update_duration_display()
self.interrupted_by_sms = False
self.interrupted = True
utils.player.amr_record_start()
if setting.screen_saver_enabled:
status.not_screen_saver = True
audio_recording = uiconfig.mmp_recording
name, pos = audio_recording
self.audio_recording_icon = utils.put_image(name, pos)
self.audio_recording_icon.hide()
self.ui.add(self.audio_recording_icon)
pos = uiconfig.audio_rec_subtitle_pos
color = uiconfig.audio_rec_subtitle_color
font = uiconfig.audio_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
self.subtitle.text = _('Audio recording')
self.ui.add(self.subtitle)
def update_duration_display(self):
# self.ui.duration.text = _('Duration: ') + '%02d:%02d' % divmod(self.duration, 60)
self.ui.duration.text = '%02d:%02d' % divmod(self.duration, 60)
self.ui.set_value(self.duration)
def update_time(self):
if not self.timer:
return False
self.duration += 1
self.update_duration_display()
runtime.evas.render_now()
if self.duration >= self.max_duration:
utils.player.stop(self.audiopid)
self.audiopid = None
self.pid = 0
stage = AudioRecordDoneStage(self.duration, self.filename, self.mmsmessage)
runtime.manager.change_stage(stage)
setting.reset_screen_saver_timer()
status.screensaver_activated = False
return False
return True
def timer_stop(self):
self.timer = 0
def destroy(self):
self.timer = 0
self.ui.set_left('')
runtime.evas.render()
utils.player.stop(self.audiopid)
self.audiopid = None
Stage.destroy(self)
status.not_screen_saver = False
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def show(self):
if setting.screen_saver_enabled:
status.not_screen_saver = True
Stage.show(self)
if self.interrupted_by_sms:
runtime.manager.change_stage(AudioReadyStage)
def hide(self):
self.timer = 0
self.interrupted_by_sms = True
self.ui.set_left('')
Stage.hide(self)
runtime.evas.render()
utils.player.stop(self.audiopid)
self.audiopid = None
if self.filename:
utils.remove(config.audio_recorded_dir + self.filename)
status.not_screen_saver = False
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
utils.player.stop(self.audiopid)
self.audiopid = None
self.pid = 0
#self.audio_recording_icon.hide()
#self.subtitle.hide()
stage = AudioRecordDoneStage(self.duration, self.filename, self.mmsmessage)
runtime.manager.change_stage(stage)
return True
elif key == config.Red:
self.ui.set_left('')
runtime.evas.render()
utils.player.stop(self.audiopid)
self.audiopid = None
self.pid = 0
utils.remove(config.audio_recorded_dir + self.filename)
runtime.manager.back_stage()
return True
else:
return False
class AudioReadyStage(Stage):
name = 'audioreadystage'
def __init__(self, mmsmessage=None):
status.supervision_not_allowed = 1
self.mmsmessage = mmsmessage
#self.ui = ui.AudioRecordUI('', _('BACK'), _('AUDIO RECORDER'), '')
self.ui = ui.AudioRecordUI('', '', _('AUDIO RECORDER'), '', '', _('BACK'))
self.ui.set_max_duration(config.audio_record_duration)
self.filename = ''
self.recordstage_timer = None
self.go_recordstage = False
self.audiopid = None
audio_rec_standby = uiconfig.mmp_record_standby
name, pos = audio_rec_standby
self.audio_rec_standby_icon = utils.put_image(name, pos)
self.audio_rec_standby_icon.hide()
self.ui.add(self.audio_rec_standby_icon)
pos = uiconfig.audio_rec_subtitle_pos
color = uiconfig.audio_rec_subtitle_color
font = uiconfig.audio_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
self.subtitle.text = _('Standby')
self.ui.add(self.subtitle)
def show(self):
# KA: [20070730] video 화면을 가리기 위해
##os.system('fb0top 1')
self.go_recordstage = False
self.ui.set_left('')
Stage.show(self)
runtime.evas.render()
#utils.remove('/usr/local/lgvp/arec.3gp')
#utils.remove('/usr/local/lgvp/arec.mp4')
utils.remove('/usr/local/lgvp/arec.amr')
self.audiopid = utils.player.amr_record_ready()
self.recordstage_timer = utils.Timer(200, self.check_ok)
def check_ok(self):
#ka...Temporary 2007.07.23
# if os.access('/usr/local/lgvp/arec.3gp', os.R_OK):
self.recordstage_timer = None
#self.ui.set_left(_('AUDIO RECORD'))
self.ui.set_left(_('RECORD'))
return True
# else:
# return True
def hide(self):
if not self.go_recordstage:
# utils.remove('/usr/local/lgvp/arec.3gp')
#utils.remove('/usr/local/lgvp/arec.mp4')
utils.remove('/usr/local/lgvp/arec.amr')
utils.player.stop(self.audiopid)
self.audiopid = None
self.recordstage_timer = None
Stage.hide(self)
def destroy(self):
self.go_recordstage = False
#utils.remove('/usr/local/lgvp/arec.3gp')
#utils.remove('/usr/local/lgvp/arec.mp4')
utils.remove('/usr/local/lgvp/arec.amr')
utils.player.stop(self.audiopid)
self.audiopid = None
self.recordstage_timer = None
Stage.destroy(self)
status.supervision_not_allowed = 0
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.recordstage_timer:
return True
self.go_recordstage = True
self.filename = self.make_audio_name()
#self.audio_rec_standby_icon.hide()
#self.subtitle.hide()
stage = AudioRecordStage(self.audiopid, self.filename, self.mmsmessage)
runtime.manager.stack_stage(stage)
return True
elif key in (config.Menu4, 'CLR'):
runtime.manager.back_stage()
return True
def make_audio_name(self):
filename = ''
if 0:
import time, ntptime
year, mon, day = time.localtime(ntptime.ntime())[:3]
date = "%02d%02d%02d" % (year%1000, mon, day)
if date != setting.audio_serial_day:
setting.audio_serial_day = date
setting.audio_serial = 0
else:
date = "audio"
findex = setting.audio_serial
while 1:
#filename = date + "%03d.3gp" % findex
#filename = date + "%03d.mp4" % findex
filename = date + "%03d.amr" % findex
if not os.access(config.audio_recorded_dir + filename, os.R_OK):
break
findex = (findex + 1) % 1000
return filename
class VideoRecordDoneStage(Stage):
# eicho add 06.11.14
name = 'videorecorddonestage'
def __init__(self, duration, filename, mmsmessage=None):
self.mmsmessage = mmsmessage
self.filename = filename
if config.video_record_format == '3gp':
filesize = utils.get_size_kb('/usr/local/lgvp/avrec.3gp')
elif config.video_record_format == 'mp4':
filesize = utils.get_size_kb('/usr/local/lgvp/avrec.mp4')
else:
filesize = utils.get_size_kb('/usr/local/lgvp/avrec.3gp')
fname = self.filename.split('/')[-1]
dot = fname.rfind('.')
if dot >=0:
fname = fname[:dot]
sub_title = "%s [%dKB]" % (fname, filesize)
self.ui = ui.VideoPreviewUI(_('SAVE'), '', _('VIDEO RECORDER'), sub_title, '', _('BACK'))
self.duration = duration
self.ui.duration.text = '%02d:%02d' % divmod(self.duration, 60)
self.ui.set_max_duration(config.video_record_duration)
self.ui.set_value(self.duration)
if os.access('/usr/local/lgvp/avrec.png', os.R_OK):
self.image = utils.put_image('/usr/local/lgvp/avrec.png', uiconfig.gallery_pos)
else:
self.image = utils.put_image(uiconfig.image_dir+'icon_image_sound_video.png', uiconfig.gallery_pos)
#utils.image_center_sized(self.image, 24 + 176/2, 56 + 144/2, 176, 144)
#utils.image_center_sized(self.image, 22 + 220/2, 51 + 180/2, 220, 180)
utils.image_sized(self.image, uiconfig.video_rec_preview_pos, uiconfig.video_rec_preview_size)
self.ui.add(self.image)
audio_recording_done = uiconfig.mmp_recording_done
name, pos = audio_recording_done
self.audio_recording_done_icon = utils.put_image(name, pos)
self.audio_recording_done_icon.hide()
self.ui.add(self.audio_recording_done_icon)
pos = uiconfig.audio_rec_subtitle_pos
color = uiconfig.audio_rec_subtitle_color
font = uiconfig.audio_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
#self.subtitle.text = _('Recording done') + title
self.subtitle.text = sub_title
self.ui.add(self.subtitle)
pos = uiconfig.video_rec_res_info_pos
color = uiconfig.video_rec_res_info_color
ont = uiconfig.video_rec_res_info_font
self.res_info = runtime.evas.text(pos=pos,color=color,font=font)
if setting.video_record_res == 0:
self.res_info.text = 'QCIF: 176x144'
else:
self.res_info.text = 'CIF: 352x288'
self.ui.add(self.res_info)
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
# flash memory full check
free_flash = utils.get_free_flash_memory()
#print "[yylee debug] free_flash", free_flash
if free_flash < config.media_min_free_storage:
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
utils.player.play_effect(config.SETTING_FAILED)
stage = NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon)
runtime.manager.change_stage(stage)
return False
def cb():
from videos import VideoGalleryStage
runtime.manager.back_stage(name='', isshow=False)
stage = VideoGalleryStage('recorded', self.mmsmessage, isshow=False)
runtime.manager.change_stage(stage)
if config.video_record_format == '3gp':
stage.set_file(self.filename+'.3gp')
video_recorded_file_name = '/usr/local/lgvp/videos/recorded/'+ self.filename+'.3gp'
elif config.video_record_format == 'mp4':
stage.set_file(self.filename+'.mp4')
video_recorded_file_name = '/usr/local/lgvp/videos/recorded/'+ self.filename+'.mp4'
else:
stage.set_file(self.filename+'.3gp')
video_recorded_file_name = '/usr/local/lgvp/videos/recorded/'+ self.filename+'.3gp'
utils.file_time_adaptation(video_recorded_file_name)
try:
filenum = self.filename[-3:]
if config.video_record_format == '3gp':
filenum = filenum.replace('.3gp', '')
elif config.video_record_format == 'mp4':
filenum = filenum.replace('.mp4', '')
else:
filenum = filenum.replace('.3gp', '')
setting.video_serial = int(filenum)+1
except:
setting.video_serial += 1
from mmsutils import MMS_filemove
try:
if config.video_record_format == '3gp':
MMS_filemove('/usr/local/lgvp/avrec.3gp', config.video_recorded_dir + self.filename + '.3gp')
elif config.video_record_format == 'mp4':
MMS_filemove('/usr/local/lgvp/avrec.mp4', config.video_recorded_dir + self.filename + '.mp4')
else:
MMS_filemove('/usr/local/lgvp/avrec.3gp', config.video_recorded_dir + self.filename + '.3gp')
except:
def cb_full():
runtime.manager.back_stage('video preview')
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.mp4')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
utils.player.play_effect(config.SETTING_FAILED)
runtime.manager.change_stage(NotifyStage(_('Save failed'), uiconfig.baloon_video_icon, cb_full))
return
try:
MMS_filemove('/usr/local/lgvp/avrec.png', config.video_recorded_thumnail_dir + self.filename + '.png')
except:
pass
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
utils.player.play_effect(config.SETTING_SUCCEEDED)
stage = NotifyStage(_('Movie saved'), uiconfig.baloon_video_icon, cb)
runtime.manager.change_stage(stage)
elif key == config.Menu4 or key == 'CLR':
def yes():
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
runtime.manager.queue_backward(2)
def no():
runtime.manager.back_stage()
stage = YesNoStage(_('Save will cancel, continue?'), yes, no, '', uiconfig.baloon_video_icon)
runtime.manager.stack_stage(stage)
class VideoRecordStage(Stage):
agenda_forbidden = True
name = 'videorecordstage'
def __init__(self, mmsmessage=None):
self.mmsmessage = mmsmessage
self.interrupted_by_sms = False
if setting.lang == 'Korean':
self.ui = ui.VideoPreviewUI(_('STOP'), '', _('VIDEO RECORDER'), _('Video recording'))
else:
self.ui = ui.VideoPreviewUI(_('STOP'), '', _('VIDEO RECORDER'), _('Recording...'))
self.timer = utils.Timer(1000, self.update_time)
self.duration = 0
self.max_duration = config.video_record_duration
self.ui.set_max_duration(self.max_duration)
self.update_duration_display()
self.filename = ''
self.make_video_name()
utils.player.video_record_start()
if setting.screen_saver_enabled:
status.not_screen_saver = True
video_recording = uiconfig.mmp_recording
name, pos = video_recording
self.video_recording_icon = utils.put_image(name, pos)
self.video_recording_icon.hide()
self.ui.add(self.video_recording_icon)
pos = uiconfig.audio_rec_subtitle_pos
color = uiconfig.audio_rec_subtitle_color
font = uiconfig.audio_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
self.subtitle.text = _('Video recording')
self.ui.add(self.subtitle)
pos = uiconfig.video_rec_res_info_pos
color = uiconfig.video_rec_res_info_color
ont = uiconfig.video_rec_res_info_font
self.res_info = runtime.evas.text(pos=pos,color=color,font=font)
if setting.video_record_res == 0:
self.res_info.text = 'QCIF: 176x144'
else:
self.res_info.text = 'CIF: 352x288'
self.ui.add(self.res_info)
def show(self):
if setting.screen_saver_enabled:
status.not_screen_saver = True
Stage.show(self)
def make_video_name(self):
filename = ''
if 0:
import time, ntptime
year, mon, day = time.localtime(ntptime.ntime())[:3]
date = "%02d%02d%02d" % (year%1000, mon, day)
if date != setting.audio_serial_day:
setting.video_serial_day = date
setting.video_serial = 0
else:
date = "video"
findex = setting.video_serial
while 1:
filename = date + "%03d" % findex
if not os.access(config.video_recorded_dir + filename, os.R_OK):
break
findex = (findex + 1) % 1000
self.filename = filename
def update_duration_display(self):
self.ui.duration.text = '%02d:%02d' % divmod(self.duration, 60)
self.ui.set_value(self.duration)
def update_time(self):
if not self.timer:
return False
self.duration += 1
self.update_duration_display()
runtime.evas.render_now()
if self.duration >= self.max_duration:
##os.system('fb0top 1')
utils.player.video_end()
stage = VideoRecordDoneStage(self.duration, self.filename, self.mmsmessage)
runtime.manager.change_stage(stage)
setting.reset_screen_saver_timer()
status.screensaver_activated = False
return False
return True
def timer_stop(self):
self.timer = 0
def destroy(self):
self.timer = 0
self.ui.set_left('')
runtime.evas.render()
# CHECK MERGE 09.05
##os.system('fb0top 1')
utils.player.video_end(False)
Stage.destroy(self)
status.not_screen_saver = False
setting.reset_screen_saver_timer()
status.screensaver_activated = False
# eicho add 06.11.22
def stop_play(self):
self.timer = 0
##os.system('fb0top 1')
self.ui.set_left('')
runtime.evas.render()
utils.player.video_end(False)
if self.filename:
utils.remove(config.video_recorded_dir + self.filename)
utils.remove(config.video_recorded_thumnail_dir + self.filename)
if status.incoming_sms or status.bluetooth_activated:
if config.mm_debug:
print '>>> incoming sms, clip disable'
self.interrupted_by_sms = True
runtime.evas.set_clip()
status.not_screen_saver = False
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def hide(self):
self.timer = 0
##os.system('fb0top 1')
self.ui.set_left('')
runtime.evas.render()
utils.player.video_end(False)
if self.filename:
utils.remove(config.video_recorded_dir + self.filename)
utils.remove(config.video_recorded_thumnail_dir + self.filename)
if status.incoming_sms or status.bluetooth_activated:
if config.mm_debug:
print '>>> incoming sms, clip disable'
self.interrupted_by_sms = True
runtime.evas.set_clip()
Stage.hide(self)
status.not_screen_saver = False
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
##os.system('fb0top 1')
utils.player.video_end()
stage = VideoRecordDoneStage(self.duration, self.filename, self.mmsmessage)
runtime.manager.change_stage(stage)
return True
else:
return Stage.handle_key(self, key)
class VideoPreviewStage(Stage):
agenda_forbidden = True
name = 'video preview'
def __init__(self, mmsmessage=None):
status.supervision_not_allowed = 1
self.mmsmessage = mmsmessage
#self.ui = ui.VideoPreviewUI('', '', _('VIDEO RECORDER'), _('Stand by'))
self.ui = ui.VideoPreviewUI(_('RECORD'), ' ', _('VIDEO RECORDER'), _('Stand by'),_('SIZE'), _('BACK'))
self.ui.set_max_duration(config.video_record_duration)
self.interrupted_by_sms = False
self.recordstage_timer = None
self.go_recordstage = False
if setting.screen_saver_enabled:
status.not_screen_saver = True
video_rec_standby = uiconfig.mmp_record_standby
name, pos = video_rec_standby
self.video_rec_standby_icon = utils.put_image(name, pos)
self.video_rec_standby_icon.hide()
self.ui.add(self.video_rec_standby_icon)
pos = uiconfig.video_rec_subtitle_pos
color = uiconfig.video_rec_subtitle_color
font = uiconfig.video_rec_subtitle_font
self.subtitle = runtime.evas.text(pos=pos,color=color,font=font)
self.subtitle.text = _('Standby')
self.ui.add(self.subtitle)
pos = uiconfig.video_rec_res_info_pos
color = uiconfig.video_rec_res_info_color
ont = uiconfig.video_rec_res_info_font
self.res_info = runtime.evas.text(pos=pos,color=color,font=font)
self.res_info.text = ''
self.ui.add(self.res_info)
def handle_key(self, key):
if key == config.Menu1 or key == 'OK':
if self.recordstage_timer:
return True
self.go_recordstage = True
stage = VideoRecordStage(self.mmsmessage)
runtime.manager.stack_stage(stage)
return True
elif key == config.Menu3:
utils.player.video_end(False)
utils.remove_cmd('/tmp/*.3gp')
utils.remove_cmd('/tmp/*.png')
utils.remove_cmd('/tmp/*.yuv420')
setting.video_record_res = 1-setting.video_record_res
self.show()
pass
elif key in (config.Menu4, 'CLR'):
runtime.manager.back_stage()
return True
return False
def hide(self):
self.recordstage_timer = None
if status.incoming_sms or status.bluetooth_activated:
if config.mm_debug:
print '>>> incoming sms, clip disable'
self.interrupted_by_sms = True
runtime.evas.set_clip()
if not self.go_recordstage:
##os.system('fb0top 1')
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
utils.player.video_end(False)
Stage.hide(self)
status.not_screen_saver = False
if setting.screen_saver_enabled:
setting.reset_screen_saver_timer()
status.screensaver_activated = False
# eicho add 06.11.22
def stop_play(self):
self.recordstage_timer = None
if status.incoming_sms or status.bluetooth_activated:
if config.mm_debug:
print '>>> incoming sms, clip disable'
self.interrupted_by_sms = True
runtime.evas.set_clip()
if not self.go_recordstage:
##os.system('fb0top 1')
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
utils.player.video_end(False)
status.not_screen_saver = False
if setting.screen_saver_enabled:
setting.reset_screen_saver_timer()
status.screensaver_activated = False
def show(self):
self.ui.set_left('')
# self.ui.set_right(_('BACK'))
# eicho add 06.11.23
if status.flag_state_incoming_ss:
Stage.show(self)
if setting.screen_saver_enabled:
status.not_screen_saver = True
print '#### preview: status.flag_state_incoming_ss is TRUE!!! ####'
return
Stage.show(self)
runtime.evas.render()
self.go_recordstage = False
if setting.screen_saver_enabled:
status.not_screen_saver = True
if self.interrupted_by_sms:
self.interrupted_by_sms = False
#os.system('fb0top 0')
utils.remove_cmd('/usr/local/lgvp/*.3gp')
utils.remove_cmd('/usr/local/lgvp/*.png')
utils.remove_cmd('/usr/local/lgvp/*.yuv420')
if setting.video_record_res == 0:
self.res_info.text = 'QCIF: 176x144'
else:
self.res_info.text = 'CIF: 352x288'
# KA: [20070719] recply
# campos = (56, 24, 204, 256)
# top left bottom right
#campos = (56, 24, 200, 206)
#campos = (51, 22, 231, 242) # top, leftp, bottom, right => 220 x 180
campos = (uiconfig.video_rec_preview_pos[1], uiconfig.video_rec_preview_pos[0],\
uiconfig.video_rec_preview_pos[1]+uiconfig.video_rec_preview_size[1],\
uiconfig.video_rec_preview_pos[0]+uiconfig.video_rec_preview_size[0])
utils.player.video_record_ready(campos)
self.recordstage_timer = utils.Timer(200, self.check_ok)
def check_ok(self):
# eicho move. 06.11.23
##os.system('fb0top 0')
# KA: [200700713_2] video recording
if os.access('/var/run/vengine.id', os.R_OK):
self.recordstage_timer = None
#self.recordstage_timer = utils.Timer(200, self.check_ok2)
self.check_ok2()
return False
else:
return True
def check_ok2(self):
self.recordstage_timer = None
#self.ui.set_left(_('VIDEO RECORD'))
self.ui.set_left(_('RECORD'))
return False
def destroy(self):
self.recordstage_timer = None
##os.system('fb0top 1')
utils.player.video_end(False)
utils.remove_cmd('/tmp/*.3gp')
utils.remove_cmd('/tmp/*.png')
utils.remove_cmd('/tmp/*.yuv420')
Stage.destroy(self)
status.supervision_not_allowed = 0
status.not_screen_saver = False
if setting.screen_saver_enabled:
setting.reset_screen_saver_timer()
status.screensaver_activated = False
class MMToolsStage(ListStage):
# Phase2 135
name = 'MMToolsStage'
icon=uiconfig.ico_mm_recorder
#titleimage=uiconfig.Third_title_mm_recorder
def __init__(self):
self.title = _('MULTIMEDIA TOOLS')
self.choice = _('Photo capture'), _('Video record'), _('Voice record')
ListStage.__init__(self)
menu_icons = (uiconfig.list_icon_photo,\
uiconfig.list_icon_audio)
# uiconfig.list_icon_video)
# self.ui.create_icon_column(60, menu_icons)
#status.supervision_not_allowed = 1
def activate(self, index):
# 남은 공간 체크
if not utils.check_free_storage():
runtime.manager.stack_stage(StorageShortStage)
return
# max size 체크
if index == 0 and config.snap_shot_max <= utils.get_file_count(config.image_taken_dir):
runtime.manager.stack_stage(NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon))
return
elif index == 2 and config.audio_record_max <= utils.get_file_count(config.audio_recorded_dir):
runtime.manager.stack_stage(NotifyStage(_('Gallery is full!'), uiconfig.baloon_record_icon))
return
elif index == 1:
from videos import get_video_gallery_list
dirname, thumb_dirname, lists = get_video_gallery_list('recorded')
if config.video_record_max <= len(lists):
runtime.manager.stack_stage(NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon))
return
stage = (PhotoPreviewStage, VideoPreviewStage, AudioReadyStage)[index]
runtime.manager.stack_stage(stage)
def destroy(self):
ListStage.destroy(self)
status.supervision_not_allowed = 0