Newer
Older
Import / projects / LGN-IP3870 / t / orig / phonesetting.py
import basemodel
import baseui
import os
import runtime, uiconfig, config, status, utils
from setting import setting
from profile import profile, lan_profile, wifi_profile, dns_profile
import time, ntptime
from roxiadebug import *
from runtime import mmiDebug as MD 
from menu import VoIPSettingNotifyStage, VoIPEditor
import model

cur_profile = lan_profile


class PhoneSettingNotifyStage(basemodel.NotifyStage):
	icon = uiconfig.profile_icon
	def __init__(self, message,cb=None):
		icon = uiconfig.baloon_phone_setting_icon
		basemodel.NotifyStage.__init__(self, message, icon, cb)

class RingerStage(basemodel.ListStage):
	title = _('RINGING')
#Roxia Begin jhbang 06.03.29
	#choice = _('Melody'), _('Ringing mode'), _('Private number filter'), _('VIP filter')
#Roxia End jhbang
	name = 'ringing setting'
	icon = uiconfig.setting_audio_icon

#Roxia Begin jhbang 06.03.29
	def __init__(self):
		if profile.get_profile() == 0: # pstn
			self.choice = _('Melody'), _('Ringing mode'), _('Private number filter'), _('VIP filter')
		else:
			self.choice = _('Melody'), _('Ringing mode'), _('VIP filter')
		basemodel.ListStage.__init__(self, self.choice)
#Roxia End jhbang

	def activate(self, index):
		import ringer
#Roxia Begin jhbang 06.03.29
		if profile.get_profile() == 0: # pstn
			stage = ringer.get_stage(index)
		else:
			stage = (ringer.MelodyChoiceStage, ringer.RingingModeStage, ringer.VIPFilterStage)[index]
#Roxia End jhbang
		runtime.manager.stack_stage(stage)

class HandsetVolumeStage(basemodel.GaugeStage):
	name = 'handset volume'
	title = _('HANDSET VOLUME')
	#titleimage = '6_tit_sound_1.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.handset_volume
		basemodel.GaugeStage.__init__(self, setting.handset_volume)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				self.change_volume = self.ui.get_value()
		elif key in (config.Red, config.Menu2):
			pass
		return ret

	def activate(self, value):
		utils.player.play_effect(config.SETTING_SUCCEEDED)

		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_HS_OFFHK_LPLAY)
			setting.set_master_volume(value, 0)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
			
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class SpeakerVolumeStage(basemodel.GaugeStage):
	name = 'speaker volume'
	title = _('SPEAKER VOLUME')
	#titleimage = 'tit_s_speaker.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.speaker_volume
		basemodel.GaugeStage.__init__(self, setting.speaker_volume)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				#setting.set_volume(self.ui.get_value())
				self.change_volume = self.ui.get_value()
		elif key in (config.Red, config.Menu2):
			pass
			#if self.org_volume != self.change_volume:
			#	setting.set_master_volume(self.org_volume, 2)
		return ret

	def activate(self, value):
		utils.player.play_effect(config.SETTING_SUCCEEDED)
		
		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_SPK_OFFHK_LPLAY)
			setting.set_master_volume(value, 1)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
			
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class StereoVolumeStage(basemodel.GaugeStage):
	name = 'stereo volume'
	title = _('STEREO VOLUME')
	#titleimage = 'tit_s_stereo.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.stereo_volume
		basemodel.GaugeStage.__init__(self, setting.stereo_volume)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				self.change_volume = self.ui.get_value()
		elif key in (config.Red, config.Menu2):
			pass
		return ret

	def activate(self, value):
		utils.player.play_effect(config.SETTING_SUCCEEDED)
		
		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_SPK_OFFHK_LPLAY)
			setting.set_master_volume(value, 3)
#			setting.set_volume(value, 3)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
			
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class KeytoneVolumeStage(basemodel.GaugeStage):
	name = 'keytone volume'
	title = _('KEYTONE VOLUME')
	#titleimage = '6_tit_sound_2.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.keytone_volume
		basemodel.GaugeStage.__init__(self, setting.keytone_volume)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				self.change_volume = self.ui.get_value()
			utils.player.play_keytone(key, vol_index = self.ui.get_value())
		elif key in (config.Red, config.Menu2):
			pass
		return ret

	def activate(self, value):
		utils.player.play_effect(config.SETTING_SUCCEEDED)
		
		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_SPK_OFFHK_LPLAY)
			setting.set_master_volume(value, 4)
#			setting.set_volume(value, 4)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
			
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class EffectVolumeStage(basemodel.GaugeStage):
	name = 'effect volume'
	title = _('EFFECT VOLUME')
	#titleimage = 'tit_s_effect.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.effect_volume
		basemodel.GaugeStage.__init__(self, setting.effect_volume)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				self.change_volume = self.ui.get_value()
			utils.player.play_effect(config.SETTING_SUCCEEDED, vol_index = self.ui.get_value())
		elif key in (config.Red, config.Menu2):
			pass
		return ret

	def activate(self, value):
		utils.player.play_effect(config.SETTING_SUCCEEDED)
		
		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_SPK_OFFHK_LPLAY)
			setting.set_master_volume(value, 5)
#			setting.set_volume(value, 4)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
			
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class AlarmVolumeStage(basemodel.GaugeStage):
	name = 'alarm volume'
	title = _('ALARM VOLUME')
	#titleimage = '6_tit_sound_3.png'
	def __init__(self):
		self.org_volume = self.change_volume = setting.alarm_volume
		basemodel.GaugeStage.__init__(self, setting.alarm_volume)
		import sounds
		dirname, full_lists = sounds.get_audio_gallery_list('effect')
		if len(full_lists) > 0:
			self.default_alarm_ring = '/usr/local/lgvp/audios/ring/EffectBell/'+full_lists[0][0]
		else:
			self.default_alarm_ring = setting.external_ring

	def destroy(self):
		utils.player.stop_ring()
		basemodel.GaugeStage.destroy(self)

	def play_current_ring(self):
		melody = setting.external_ring or config.def_melody
		utils.player.play_alarm(self.default_alarm_ring, vol_index = self.ui.get_value())
		
	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				self.change_volume = self.ui.get_value()
			utils.player.stop_ring()
			self.ringplay_timer = utils.Timer(500, self.play_current_ring)
		elif key in (config.Red, config.Menu4, 'CLR'):
			utils.player.stop_ring()
		return ret

	def show(self):
		basemodel.GaugeStage.show(self)
		self.play_current_ring()

	def activate(self, value):

		if self.org_volume == value:
			pass
		else:
#			runtime.dspg.set_state(runtime.dspg.ST_V_SPK_OFFHK_LPLAY)
			setting.set_master_volume(value, 6)
#			setting.set_volume(value, 4)
#			runtime.dspg.set_state(runtime.dspg.ST_IDLE)
				
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)
		utils.player.play_effect(config.SETTING_SUCCEEDED)


class ReactionToneStage(basemodel.ListStage):
	title = _('REACTION TONE')
	icon = uiconfig.setting_phone_icon

	def __init__(self):
		if setting.reaction_tone == 1:
			choice = _('Disable'),
		else:
			choice = _('Enable'),
		basemodel.ListStage.__init__(self, choice)

	def activate(self, index):
		if setting.reaction_tone == 1:
			setting.set_reaction_tone(0)
			stage = basemodel.NotifyStage(_('Reaction tone disabled.'), uiconfig.baloon_setting_phone_icon, None, 2000)
		else:
			setting.set_reaction_tone(1)
			stage = basemodel.NotifyStage(_('Reaction tone enabled.'), uiconfig.baloon_setting_phone_icon, None, 2000)
		runtime.manager.stack_stage(stage)

	def show(self):
		if setting.reaction_tone == 1:
			basemodel.ListStage.change_choice(self,  (_('Disable'), ))
		else:
			basemodel.ListStage.change_choice(self,  (_('Enable'), ))
		basemodel.ListStage.show(self)



class AudioVolumeStage(basemodel.GaugeStage):
	name = 'audio volume'
	def __init__(self):
		self.dual = 0 # 0: only audio vol., 1: handset vol. 2: speaker vol.

		devices = runtime.SP_context.getCurrentDevice()
		for device in devices:
			print 'ka...####### device=', device
			from mmiSoundPath import SP_State
			if device == SP_State.DEVICE_HS:
				cur_vol = setting.handset_volume
				title = _('HANDSET VOLUME')
			elif device == SP_State.DEVICE_SPK:
				cur_vol = setting.speaker_volume
				title = _('SPEAKER VOLUME')
			self.device = device
		
		self.org_volume = self.change_volume = cur_vol
		basemodel.GaugeStage.__init__(self, self.org_volume, title)

	def handle_key(self, key):
		ret = basemodel.GaugeStage.handle_key(self, key)
		if key in ('Up', 'Down', 'Right', 'Left'):
			if self.change_volume != self.ui.get_value():
				setting.set_volume(self.ui.get_value(), self.device)
				self.change_volume = self.ui.get_value()
		elif key in (config.Red, config.Menu2):
			if self.org_volume != self.change_volume:
				setting.set_master_volume(self.org_volume, self.device)
		return ret

	def activate(self, value):
		if self.org_volume == value:
			msg = _('No change')
			utils.player.play_effect(config.SETTING_FAILED)
		else:
			if self.device == 0:
				msg = _('Set is saved') # _('Handset volume set')
			elif self.device == 1:
				msg = _('Set is saved') # _('Speaker volume set')

			setting.set_master_volume(value, self.device)
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			
		stage = basemodel.NotifyStage(msg, uiconfig.baloon_setting_audio_icon)
		runtime.manager.change_stage(stage)

class DisplayColorStage(basemodel.ListStage):
	title = _('MENU COLOR')
	choice = (_('Default'), _('Nature'), _('Flower'), _('Purple'))
	icon = uiconfig.setting_phone_icon
	def __init__(self):
		basemodel.ListStage.__init__(self)
		self.ui.set_focus(setting.menu_color)
		self.orig_menu_color = setting.menu_color
		self.ui.set_focus(setting.menu_color)
		self.old_save_callback = status.save_callback_other
		status.save_callback_other = self.save_callback

	def save_callback(self):
		setting.set_menu_color(self.orig_menu_color)
		return None, None

	def destroy(self):
		status.save_callback_other = self.old_save_callback
		basemodel.ListStage.destroy(self)

	def handle_key(self, keyname):
		basemodel.ListStage.handle_key(self, keyname)
		if keyname in ('Up', 'Down'):
			setting.set_menu_color(self.ui.get_focus())
			return True
		elif keyname in (config.Menu2,):
			setting.set_menu_color(self.orig_menu_color)
			return True
		elif keyname in (config.Red,):
			setting.set_menu_color(self.orig_menu_color)
			return False
		return False

	def activate(self, index):
		setting.set_menu_color(index)
		stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_phone_icon)
		runtime.manager.change_stage(stage)


# eicho 06.09.08 from LVP-2890.
#def BackgroundGalleryStage(photo_type, title):
def BackgroundGalleryStage(photo_type, title, filename=None):

	dirname, lists = utils.get_image_gallery_list(photo_type)
	if len(lists) == 0:
		return basemodel.NotifyStage(_('Gallery empty!'), uiconfig.baloon_photo_icon)#uiconfig.baloon_phone_setting_icon)
	#return _BackgroundGalleryStage(photo_type, dirname, title, lists)
	return _BackgroundGalleryStage(photo_type, dirname, title, lists, filename)

class _BackgroundGalleryStage(basemodel.GalleryStage):
	#def __init__(self, photo_type, photo_dir, title, lists):
	def __init__(self, photo_type, photo_dir, title, lists, filename=None):
		self.base_dir = photo_dir
		self.image_lists = lists
		#assert len(self.image_lists) > 0
		name_list = [x[0] for x in self.image_lists]
#MMW            2006.09.08      bug fix 
		self.filename = filename 
		self.index = 0 
		
		if self.filename == None : 
			print 'BackgroundGallery No set_file\n' 
		else : 
			print 'BackgroundGallery set_file\n' 
			for i, f in enumerate(self.image_lists): 
				if f[0] == self.filename: 
					self.index = i 

		basemodel.GalleryStage.__init__(self, name_list, self.index, self.done_cb)
#end of MMW 
   

		#basemodel.GalleryStage.__init__(self, name_list, 0, self.done_cb)
		#self.ui.set_title(title)
		self.ui.set_left(_('SET'))
		time.sleep(0.1)

	def done_cb(self, index):
		tmp_image = runtime.evas.image(file=self.get_current_file())
		tmp_w, tmp_h = tmp_image.size_get()
		tmp_image.free()
		if tmp_w * tmp_h < 640 * 480:
			setting.bg_image_file = self.base_dir + self.image_lists[index][0]
			def cb():
				runtime.manager.back_stage('display')
			stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_photo_icon, cb)#uiconfig.baloon_setting_phone_icon, cb)
			runtime.manager.change_stage(stage)
			runtime.evas.render_now()
			baseui.change_bg(runtime.evas, setting.bg_image_file)
		else:
			stage = basemodel.NotifyStage(_('Size too big.'), uiconfig.baloon_photo_icon, cb)#uiconfig.baloon_setting_phone_icon, cb)
			runtime.manager.change_stage(stage)
	def set_file(self, file):
		for i, f in enumerate(self.image_lists):
			if f[0] == file:
				self.current = i
				self.ui.set_preview(self.get_current_file())
				return

class ReceivedImageStage(basemodel.ListStage):
	title = _('RECEIVED IMAGES')
	choice = _('Wallpapers'), _('Pictures')
	icon = uiconfig.image_image_sound_image_icon
	def activate(self, index):
		if index == 0:
			photo_type = 'wallpaper'
		else:
			photo_type = 'picture'
		title = (_('WALLPAPERS'), _('PICTURES'))[index]
		stage = BackgroundGalleryStage(photo_type, title)
		runtime.manager.stack_stage(stage)

class TakenBackgroundStage(basemodel.ListStage):
	title = _('TAKEN PHOTOS')
	choice = _('New'), _('Photo gallery')
	icon = uiconfig.image_image_sound_image_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)
		status.supervision_not_allowed = 1

	def activate(self, index):
		if index == 0:
			if not utils.check_free_storage():
				from model import StorageShortStage
				runtime.manager.stack_stage(StorageShortStage(uiconfig.baloon_photo_icon))
				return

			if config.snap_shot_max <= utils.get_file_count(config.image_taken_dir):
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Gallery is full!'), uiconfig.baloon_photo_icon))
				return

			import mmtools
			status.background_editing = True
			stage = mmtools.PhotoPreviewStage
			runtime.manager.stack_stage(stage)
		else:
			stage = BackgroundGalleryStage('taken', _('PHOTO GALLERY'))
			runtime.manager.stack_stage(stage)

	def destroy(self):
		basemodel.ListStage.destroy(self)
		status.background_editing = False
		status.supervision_not_allowed = 0

class BackgroundStage(basemodel.ListStage):
	title = _('BACKGROUND')
#ka...malaga 2007.04.10
#	choice = _('Taken photos'), _("Videophone's images"), _('Received images')
	choice = _('Taken photos'), _("Videophone images")
	icon = uiconfig.image_image_sound_image_icon
	def activate(self, index):
#		if index == 2:
#			stage = ReceivedImageStage
#			runtime.manager.stack_stage(stage)
#			return
		title = self.choice[index]
		if index == 0:
			photo_type = 'taken'
			stage = TakenBackgroundStage()
			runtime.manager.stack_stage(stage)
			return
		elif index == 1:
			photo_type = 'vdc'
		title = (_('TAKEN PHOTOS'), _("VIDEOPHONE'S IMAGES"))[index]
		stage = BackgroundGalleryStage(photo_type, title)
		runtime.manager.stack_stage(stage)

class ScreenSaverTimeStage(basemodel.Stage):
	def __init__(self):
		if setting.screen_saver_timeout < 0:
			mmss = (0, 10)
		else:
			mmss = divmod(setting.screen_saver_timeout, 60)
		import ui
		self.ui = ui.TimerEditUI(_('SCREEN SAVER'), _('Set timer'), mmss)

	def handle_key(self, key):
		if key == config.Menu1:
			self.done_cb(self.ui.time)
			return True
		else:
			return self.ui.handle_key(key)

	def done_cb(self, time):
		mmss = self.ui.get_text()
		setting.set_screen_saver_timeout(int(mmss[0:2]) * 60 + int(mmss[3:]))
		def back_cb():
			runtime.manager.back_stage()
			return False
		stage = basemodel.NotifyStage(_('Screen saver enabled.'), uiconfig.baloon_setting_phone_icon, back_cb)
		runtime.manager.change_stage(stage)

class ScreenSaverEnabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('Screen saver enabled.')+'\n'+_('Disable?')
		icon = uiconfig.baloon_setting_phone_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, '', icon)
	def yes_cb(self):
		setting.disable_screen_saver()
		stage = basemodel.NotifyStage(_('Screen saver disabled.'), uiconfig.baloon_setting_phone_icon)
		runtime.manager.change_stage(stage)

class ScreenSaverDisabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('Enable screen saver?')
		icon = uiconfig.baloon_setting_phone_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, '', icon)
	def yes_cb(self):
		stage = ScreenSaverTimeStage()
		runtime.manager.change_stage(stage)

def ScreenSaverStage(): # obselete
	if setting.screen_saver_enabled:
		return ScreenSaverEnabledStage()
	else:
		return ScreenSaverDisabledStage()

class DateStage(basemodel.SetDateStage):
	def __init__(self):
		date = time.localtime(ntptime.ntime())
		date = date[0], date[1], date[2]

		basemodel.SetDateStage.__init__(self, _('DATE AND TIME'), date, self.done_cb, uiconfig.baloon_phone_setting_icon)

	def done_cb(self, date):
		stage = TimeStage
		status.setting_date = date
		runtime.manager.stack_stage(stage)

class TimeStage(basemodel.SetTimeStage):
	def __init__(self):
		hourmin = time.localtime(ntptime.ntime())[3:5]
		basemodel.SetTimeStage.__init__(self, _('DATE AND TIME'), hourmin, self.done_cb)

	def done_cb(self, time):
		def back3():
			runtime.manager.queue_backward(2)
			return False
		setting.set_time(status.setting_date, time)
		if status.set_date_from_alarm:
			runtime.manager.queue_backward(2)
			status.set_date_from_alarm = False
		else:
			stage = basemodel.NotifyStage(_('Date and time set!'), uiconfig.baloon_setting_system_icon, back3)
			runtime.manager.change_stage(stage)

class LanguageStage(basemodel.ListStage):
	title = _('MENU LANGUAGE')
	choice = 'Espa\xc3\xb1ol', 'Euskera', 'Catal\xc3\xa1n', 'Gallego', _('English'), _('Korean')
	icon = uiconfig.setting_phone_icon

	def __init__(self):
		basemodel.ListStage.__init__(self)
		if setting.lang == 'Spain':
			self.ui.set_focus(0)
		elif setting.lang == 'Bask':
			self.ui.set_focus(1)
		elif setting.lang == 'Catalan':
			self.ui.set_focus(2)
		elif setting.lang == 'Gallego':
			self.ui.set_focus(3)
		elif setting.lang == 'English':
			self.ui.set_focus(4)
		else:
			self.ui.set_focus(5)
			
	def activate(self, index):
		if index == 0:
			lang = 'Spain'
		elif index == 1:
			lang = 'Bask'
		elif index == 2:
			lang = 'Catalan'
		elif index == 3:
			lang = 'Gallego'
		elif index == 4:
			lang = 'English'
		# KA: [20070809] hangul
		else:
			lang = 'Korean'
		setting.set_lang(lang)
		if index <= 3:
			message = '\xc2\xa1Seleccionado ' + self.choice[index] + '!' # no translate
		else:
			message = self.choice[index] + ' ' + 'selected!' # no translate

		#setting.lang = lang
		stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon)
		runtime.manager.change_stage(stage)

class DisplayStage(basemodel.ListStage):
	title = _('DISPLAY')
	choice = _('Background'), _('Menu color'), _('Screen saver')
	name = 'display'
	icon = uiconfig.setting_phone_icon

	def activate(self, index):
		stage = (BackgroundStage, DisplayColorStage, ScreenSaverStage)[index]
		runtime.manager.stack_stage(stage)

class PrefixSettingStage(basemodel.Stage):
	title = _('PREFIX SETTING')
	domonitor_forbidden = True
	#choice =  _('Seoul	02'), _('Gyunggi	031'), _('Inchon	032'), _('Gangwon	033'), _('Chongnam	041'), _('Daejon	042'), _('Choongbuk	043'), _('Pusan           051'), _('Ulsan           052'), _('Daegu           053'), _('Kyongbuk        054'), _('Kyongnam        055'), _('Jeonnam         061'), _('Guangju         062'), _('Jeonbuk         063'), _('Jeju            064')
	#prefix =   '02'              , '031'                 , '032'               , '033'                  , '041'                     , '042'                , '043'                     , '051'              , '052'             , '053'              , '054'                    , '055'                    , '061'                   , '062'                , '063'                  , '064'
	icon = uiconfig.setting_phone_icon
	def __init__(self, next_cb = None, noexit = False):
		self.next_cb = next_cb
		self.noexit = noexit
		
		region = _('Seoul'), _('Gyunggi'), _('Inchon'), _('Gangwon'), _('Chongnam'), _('Daejon'), _('Choongbuk'), _('Pusan'), _('Ulsan'), _('Daegu'), _('Kyongbuk'), _('Kyongnam'), _('Jeonnam'), _('Guangju'), _('Jeonbuk'), _('Jeju'), _('VOIP'), _('No prefix.') 
		self.prefix = '02'         , '031'           , '032'          , '033'             , '041'               , '042'          , '043'          , '051'        , '052'       , '053'         , '054'              , '055'               , '061'             , '062'           , '063'     , '064',      '070',          ''
		self.choice = []
		for i in range(len(region)):
			name = region[i] + ' ' + self.prefix[i]
			self.choice.append(name)
		if self.noexit:
			self.ui = CheckListUI(_('SAVE'),'', self.title,'','', titleimage=uiconfig.title_prefix_set, use_radio_style=True)
		else:
			self.ui = CheckListUI(_('SAVE'),'', self.title,'',_('BACK'), titleimage=uiconfig.title_prefix_set, use_radio_style=True)
		
		self.ui.set_list(self.choice)
		for i in range(len(self.choice)):
			if self.prefix[i] == setting.prefix:
				self.ui.set_focus(i)
				self.ui.list.set_choice(i)
	def cb(self):
		if self.next_cb:
			self.next_cb()
		else:
			runtime.manager.back_stage()
	
	def handle_key(self, key):
		if key == config.Menu1 or key == 'OK':
			focus = self.ui.get_focus()
			setting.prefix_set = 1
			setting.prefix = self.prefix[focus]
			setting.save()
			self.ui.list.set_choice(focus)
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			stage = basemodel.NotifyStage(_('Set is saved'), uiconfig.baloon_setting_phone_icon, self.cb)
			runtime.manager.change_stage(stage)
		elif key == config.Menu4 or key == config.CLEAR:
			if self.noexit:
				return True
			else:
				self.cb()
				#runtime.manager.back_stage()
		elif key in (config.Red, config.Green, config.Video) and  self.noexit:
			return True
					
		elif key in ('Up', 'Down'):
			self.ui.handle_key(key)
	
import baseui
#OutgoingRestrictStage, IncomingRestrictStage
class CheckListUI(baseui.ListUI):
	show_bg_depth = True
	def __init__(self,left,right,title,menu3,menu4, titleimage=None, use_radio_style=False, use_slide_icon=False):
		baseui.ListUI.__init__(self,left,right,title,menu3, menu4)

		#bg_image = utils.put_image(uiconfig.depth_bg_image,(0,0))
		#bg_image.hide()
		#self.add(bg_image)

		#name, pos = titleimage
		#title_image = utils.put_image(name, pos)
		#title_image.hide()
		#self.add(title_image)

		self.use_radio_style = use_radio_style
		self.use_slide_icon = use_slide_icon
		
	# shchun : introduce non-file type checklist to handle sim (esp. '/' in name)
	def set_list(self, labels):
		self.labels = labels
		import widget
		self.list = widget.CheckList(labels, self.use_radio_style, self.use_slide_icon)
		self.add(self.list)

	def toggle(self):
		self.list.toggle()
		if not self.use_radio_style:
			self.update_right()

	def change_choice(self):
		self.list.change_choice()
		
	def change_choice_up(self): # this routine is just for self.use_radio_style
		self.list.change_choice_up()
		
	def change_choice_down(self): # this routine is just for self.use_radio_style
		self.list.change_choice_down()
		
	def set_focus(self, focus):
		self.list.set_focus(focus)
		if not self.use_radio_style:
			self.update_right()

	def update_lists(self, labels):
		self.remove(self.list)
		self.list = widget.CheckList(labels)
		self.add(self.list)

	def update_right(self):
		focus = self.get_focus()
		checked = self.list.checked[focus]
		if self.labels[focus] == '/':
			self.set_right('')
		elif checked:
			self.set_right(_('DESELECT'))
		else:
			self.set_right(_('SELECT'))

	def handle_key(self, keyname):
		if keyname == 'Up':
			self.list.focus_up()
			if self.use_radio_style:
				#self.change_choice()
				self.change_choice_up() # speed-up in dialog-box list
			else:
				self.update_right()
			return True
		elif keyname == 'Down':
			self.list.focus_down()
			if self.use_radio_style:
				#self.change_choice()
				self.change_choice_down() # speed-up in dialog-box list
			else:
				self.update_right()
			return True
		return False
		
class OutgoingRestrictStage(basemodel.Stage):
	title = _('OUTGOING RESTRICT')
	choice = _('International call'), '060'
	def __init__(self):
		self.ui = CheckListUI(_('SAVE'),_('SELECT'), self.title, '', _('BACK'))
		self.ui.set_list(self.choice)

		out_intlcall_restrict_val = False
		if setting.out_intlcall_restrict == 1:
			out_intlcall_restrict_val = True

		out_060_restrict_val = False
		if setting.out_060_restrict == 1:
			out_060_restrict_val = True
		
		self.ui.list.set_check(0, out_intlcall_restrict_val)
		self.ui.list.set_check(1, out_060_restrict_val)

		self.ui.set_focus(0)

	def handle_key(self, key):
		if key == config.Menu2 or key == 'OK': # and self.mode != 'filetosdmmc2':	
			self.ui.toggle()
		elif key == config.Menu1:
			if self.ui.list.checked[0]:
				setting.out_intlcall_restrict = 1
			else:
				setting.out_intlcall_restrict = 0
			if self.ui.list.checked[1]:
				setting.out_060_restrict = 1
			else:	
				setting.out_060_restrict = 0
			setting.save()
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			stage = NotifyStage(_('Set is saved'), uiconfig.baloon_setting_phone_icon)
			runtime.manager.change_stage(stage)
			#runtime.manager.back_stage()
			return True
		elif key == config.Menu4 or key == config.CLEAR:
			runtime.manager.back_stage()
		elif key in ('Up', 'Down'):
			self.ui.handle_key(key)

import controls
class IncomingRestrictUI(baseui.BaseUI): # ListUI
	show_bg_depth = True
	def __init__(self, left, right, title, menu3, menu4, titleimage=None, icon=None, arg_enabled=False):		
		baseui.BaseUI.__init__(self, left, right, _('INCOMING RESTRICT'), menu3, menu4)
		self.list = None
		self.display_idx = 0

		# bg image
		#bg_image = utils.put_image(uiconfig.depth_bg_image, (0, 0))
		#bg_image.hide()
		#self.add(bg_image)

		# title image: 수신통화제한
		#name, pos = uiconfig.title_in_restrict
		#title_image = utils.put_image(name, pos)
		#title_image.hide()
		#self.add(title_image)	

		listidx = 1
		if arg_enabled:
			listidx = 0

		self.icon_cols = []
		self.icons = {}
		self.frame = []
		self.fixed_automata = False
		self.automata_icon = None
		self.automata_idx = 0

		# set
		icon_name = controls.Icon_Control(uiconfig.ico_in_restrict_set, (0,0))
		choose = [_('Enable'), _('Disable')]
		#ind_group = self.find_pos(item[1],choose)
		lbl_group = controls.Label_Control( _('Set'), font=uiconfig.pb_entry_font, pos=(0,0), color=uiconfig.list_text_color)
		group = controls.ListBox_Control(choose, listidx, font=uiconfig.pb_entry_font, pos=(0,0), color=uiconfig.list_text_color)
		self.frame.append((icon_name, lbl_group, group))

		# number 1-10
		self.ico_nums = []
		self.lbl_nums = []
		self.txt_nums = []
		input_box_size = uiconfig.pb_entry_size #246, 26

		for i in range(10):
			self.ico_nums.append(controls.Icon_Control(uiconfig.ico_in_restrict_tel[i], (0,0)))
			self.lbl_nums.append(controls.Label_Control('Number %d'%i, font=uiconfig.pb_entry_font, pos=(0,0), color=uiconfig.list_text_color))
			#self.txt_nums.append(controls.Input_Control(pos=(0,0), size=input_box_size))
			tel = controls.Input_Control(pos=(0,0), size=input_box_size)
			tel.set_max(uiconfig.MAX_INPUT_TEL)
			self.txt_nums.append(tel)
			self.frame.append((self.ico_nums[-1], self.lbl_nums[-1], self.txt_nums[-1]))

		unselbarpos = []
		self.set_list(self.frame, unselbarpos)
		
	def set_list(self, frame, unselbarpos=[]):
		roxia_trace('ListControlUI.set_list(), frame=', frame)
		self.list = IncomingRestrictWidget(frame, unselbarpos)
		self.add(self.list)
		
	def update_lists(self, labels, unselbarpos=[]):
		print '### IncomingRestrictUI. update_lists'
		self.list.free()
		self.widgets.remove(self.list)		
		self.add(self.list)

	def get_focus(self):
		return self.list.focus

	def set_focus(self, focus):
		pass
		#print 'ka...## call set focus'
		#self.list.set_focus(focus)

	def set_text(self, n, text):
		self.list.set_text(n, text)
	
	def change_language(self):
		self.list.change_language()
		baseui.BaseUI.change_language(self)

	def handle_key(self, key):	
		if key == 'Up':
			self.list.focus_up()			
			return True
		elif key == 'Down':
			self.list.focus_down()			
			return True	
		# KA: [20080412] change the ring list by directory path
		elif key in ('Left', 'Right'):
			ret = self.list.entrys[self.list.focus].handle_key(key) # 먼저 dir를 change
			if self.list.focus == 7: #dir 이 변한 경우 
				print 'ka...update list'
				self.update_ring_list()
			return ret
		# KA: [20080412] ==

		return False

	def destroy(self):
		if self.automata_icon: self.automata_icon.free()		
		baseui.BaseUI.destroy(self)

	def show(self):
		if self.automata_icon: self.automata_icon.show()
		baseui.BaseUI.show(self)
	
	def set_fixed_automata(self,entry, name, casemode, right_field='BACK'):
		if name:
			self.fixed_automata = True
			self.set_automata(entry,name, casemode)
		else:
			self.fixed_automata = False			
			self.set_automata(entry,*utils.get_def_automata())

	def set_automata(self,entry, name, casemode='lower'):
		entry.set_automata(name, casemode)
		if name != 'multitap_addword':
			self.automata_idx = utils.get_automata_idx(name,casemode)
		self.automata = name, casemode

	def update_automata_icon(self,entry):
		name = entry._automata.name()		
		casemode = entry._automata.case_mode()
		self.automata = name, casemode
		if name == '123':
			menu3 = '123'
# ka...hangul add 2007.01.23
		elif name == 'hangul':
			menu3 = _('KOR')
		else:
			if casemode == 'upper':
				menu3 = _('ABC')
			elif casemode == 'lower':
				menu3 = _('abc')
			elif casemode == 'first capital':
				menu3 = _('Abc')
		self.set_menu3(menu3)
	def get_text(self):
		return self.entry.get_text()	

import widget
class IncomingRestrictWidget(widget.Widget):
	def __init__(self, frame, unselbarpos=[]):
		self.unselbarpos = unselbarpos
		import status
		widget.Widget.__init__(self)
		self.icon_columns = []
		self.scroll_bg = None
		self.scroll_ball = None

		#self.choose = ( _('Set'), _('Number') + '1', _('Number') + '2')
		self.choose = []
		self.choose.append(_('Set'))
		for i in range(10):
			self.choose.append(_('Number') + str(i+1))
		self.icons = []
		self.labels = []
		self.entrys = []
		for lst in frame:
			self.icons.append(lst[0])
			self.labels.append(lst[1])
			self.entrys.append(lst[2])
		
		self.org_label = None
		self.scroll_text = None
		self.temp_text = None
		self.item_scroll_timer = None
		self.top_index = 0		
		self.focus = -1
		x = uiconfig.pb_entry_pos_x

		self.nrow = nrow = len(self.labels)
		if nrow == 0:		pos_y = []
		elif nrow == 1:	pos_y = uiconfig.pb_entry_pos_y1
		elif nrow == 2:	pos_y = uiconfig.pb_entry_pos_y2
		elif nrow == 3:	pos_y = uiconfig.pb_entry_pos_y3
		elif nrow == 4:	pos_y = uiconfig.pb_entry_pos_y4
		elif nrow == 5:	pos_y = uiconfig.pb_entry_pos_y5
		else:			pos_y = uiconfig.pb_entry_pos_y6
			
#		x = uiconfig.list_pos_x
		self.pos_y = pos_y
		
		i =0
		while i < len(self.labels):			
			self.children.append(self.icons[i])			
			self.children.append(self.labels[i])	
			self.children.append(self.entrys[i])			
			i += 1
			
		for i, y in enumerate(pos_y):	
			self.icons[i].setPosition(uiconfig.input6p_x1, y+4)
			self.labels[i].set_position(uiconfig.input6p_x2, y+16-uiconfig.input_font[1]/2-2)
			self.labels[i].set_text(self.choose[i])			
			self.labels[i].show()
			self.entrys[i].setPosition(uiconfig.input6p_x3, y)
			self.entrys[i].set_text(self.entrys[i].get_text()) # this is for text align refreshing
			self.entrys[i].show()
			
		if nrow > 6: # draw scroll arrow
			self.scroll_bg = utils.put_image('scroll_bg.png',(444,45),(4, 192))			
			self.scroll_bg.hide()
			self.scroll_ball = utils.put_image('scroll_ball.png',(444,47),(4,int(192/len(self.labels))))
			self.scroll_bg.hide()
			self.children.append(self.scroll_bg)
			self.children.append(self.scroll_ball)
		
		self.set_focus(0)
		
	def set_focus(self, focus):
		import status
		if self.nrow == 0:
			return

		if self.focus == -1:
			selected_olditem = False
		else:
			selected_olditem = True

		if focus < 0:
			focus = self.nrow + focus
		hi_index = focus - self.top_index
	
		if hi_index < 0 or len(self.pos_y) <= hi_index:
			if hi_index < 0:
				self.top_index += hi_index
			else:
				self.top_index += hi_index - len(uiconfig.list_pos_y6) + 1	
			i =0
			while i < len(self.labels):			
				self.icons[i].hide()
				self.labels[i].hide()
				self.entrys[i].hide()
				i += 1
			x = uiconfig.pb_entry_pos_x
			for i, y in enumerate(self.pos_y):	
				self.icons[i+self.top_index].setPosition(uiconfig.input6p_x1, y+4)
				self.icons[i+self.top_index].show()
				self.labels[i+self.top_index].set_position(uiconfig.input6p_x2, y+16-uiconfig.input_font[1]/2-2)
				self.labels[i+self.top_index].set_text(self.choose[i+self.top_index])
				self.labels[i+self.top_index].show()				
				self.entrys[i+self.top_index].setPosition(uiconfig.input6p_x3, y)
				self.entrys[i+self.top_index].set_text(self.entrys[i+self.top_index].get_text()) # this is for text align refreshing
				self.entrys[i+self.top_index].show()
				#print 'jun.............. i=%s, y=%s, self.top_index=%s' %(i, y, self.top_index)
				
		self.focus = focus
		if len(self.labels) > 6:
			self.scroll_ball.move(444, int(192/len(self.labels)) + self.focus * int(192/len(self.labels)) + 47 - int(192/len(self.labels)) )	
	
	def focus_up(self):
		if self.focus > 0:
			self.set_focus(self.focus - 1)
		else:
			self.set_focus(self.nrow - 1)
	
	def focus_down(self):
		if self.focus < len(self.labels) - 1:
			self.set_focus(self.focus + 1)
		else:
			self.set_focus(0)
			
	def show(self):
		#self.set_focus(self.focus)
		widget.Widget.show(self)
		i=6
		while i < len(self.labels):
			self.icons[i].hide()
			self.labels[i].hide()
			self.entrys[i].hide()
			i += 1
			
	def hide(self):
		#self.remove_item_scroll_timer()
		widget.Widget.hide(self)

	def free(self):
		#self.remove_item_scroll_timer()
		widget.Widget.free(self)
	#---------------------------------
	# List Item 이 선택되었음		
	
class IncomingRestrictStage(basemodel.Stage):
	title = _('INCOMING RESTRICT')
	choice = _('International call'), '060'
	def __init__(self):
		enabled = False
		if setting.in_restrict == 1:
			enabled = True

		self.ui = IncomingRestrictUI(_('SAVE'), '', self.title, '', _('BACK'), arg_enabled=enabled)
		#self.ui.set_fixed_automata(self.ui.list.entrys[0], '123', False)
		#self.ui.set_fixed_automata(self.ui.list.entrys[1], '123', False)
		#self.ui.set_fixed_automata(self.ui.list.entrys[2], '123', False)		
		for i in range(10):
			self.ui.set_fixed_automata(self.ui.list.entrys[i+1], '123', False)
		
		self.ui.automata = '123',0	
		#self.ui.show_bg = True

		ii = 0
		for item in setting.in_restrict_nums:
			self.ui.txt_nums[ii].set_text(item)
			ii +=1

		print '==>', self.ui.list.entrys[0].get_text(), setting.in_restrict
			
	def show(self):
		self.ui.show()
		for ent in self.ui.list.entrys:
			ent.lostFocus()			
		self.ui.list.entrys[0].showFocus()	

	def activate(self, index):
		print 'activate', index
		
	def handle_key(self,key):
		if key == config.Menu1 or key =='OK':
			setting.in_restrict_nums = []
			for i in range(10):
				txtbuf = self.ui.list.entrys[i+1].get_text()
				if len(txtbuf) > 0:
					setting.in_restrict_nums.append(txtbuf)

			if len(setting.in_restrict_nums) == 0:
				if self.ui.list.entrys[0].get_text() == _('Enable'):
					utils.player.play_effect(config.SETTING_FAILED)
					stage = NotifyStage(_('No telephone number available'), uiconfig.baloon_setting_phone_icon)
					runtime.manager.change_stage(stage)
					setting.in_restrict = 0
					setting.save()
					return False
			
			if self.ui.list.entrys[0].get_text() == _('Enable'):
				setting.in_restrict = 1
			else:
				setting.in_restrict = 0

			print '==>', self.ui.list.entrys[0].get_text(), setting.in_restrict
			setting.save()
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			stage = NotifyStage(_('Set is saved'), uiconfig.baloon_setting_phone_icon)
			runtime.manager.change_stage(stage)
			#runtime.manager.back_stage()
			
		elif key in ('Up', 'Down'):
			ret = self.ui.handle_key(key)			
			for ent in self.ui.list.entrys:
				ent.lostFocus()				
			self.ui.list.entrys[self.ui.list.focus].showFocus()
			return ret
			
		elif key in ('Left', 'Right'):
			ret = self.ui.handle_key(key)	
			return ret
			
		elif key == config.CLEAR:
			if self.ui.list.focus == 0:	
				runtime.manager.back_stage()
				return True
			self.ui.list.entrys[self.ui.list.focus].handle_key(key)
			if len(self.ui.list.entrys[self.ui.list.focus].get_text()) > 0:
				self.ui.list.entrys[self.ui.list.focus].backspace(1)
			else:
				runtime.manager.back_stage()
			return True
			
		elif key == config.Menu4:
			runtime.manager.back_stage()
			return True
			
		else:
			ret = self.ui.list.entrys[self.ui.list.focus].handle_key(key)
			return ret

class PINConfirmStage(basemodel.PINInputStage):
	def __init__(self):
		basemodel.PINInputStage.__init__(self, _('Confirm new PIN') + ':', '', _('Insert PIN'))
	def activate(self, pin):
		if status.editing_pin == pin:
			setting.pin = pin
			def cb():
				runtime.manager.queue_backward(2)
			stage = basemodel.NotifyStage(_('PIN modified'), uiconfig.baloon_setting_system_icon, cb)
			runtime.manager.change_stage(stage)
		else:
			stage = runtime.manager.find_stage('pin new')
			stage.ui.reset()
			stage = basemodel.NotifyStage(_('Wrong PIN!'), uiconfig.baloon_setting_system_icon)
			runtime.manager.change_stage(stage)

class PINNewStage(basemodel.PINInputStage):
	name = 'pin new'
	def __init__(self):
		basemodel.PINInputStage.__init__(self, _('New PIN') + ':', '', _('Insert PIN'))

	def activate(self, pin):
		status.editing_pin = pin
		stage = PINConfirmStage()
		runtime.manager.stack_stage(stage)

class PINChangeStage(basemodel.PINInputStage):
	def __init__(self):
		basemodel.PINInputStage.__init__(self, _('Old PIN') + ':', '', _('Insert PIN'))

	def activate(self, pin):
		if setting.pin == pin:
			stage = PINNewStage()
			runtime.manager.change_stage(stage)
		else:
			self.ui.reset()
			stage = basemodel.NotifyStage(_('Wrong PIN!'), uiconfig.baloon_setting_system_icon)
			runtime.manager.stack_stage(stage)

class CallBarringEditStage(basemodel.EntryStage):
	call_barring_message_types = _('Prefix 1'), _('Prefix 2'), \
		_('Prefix 3'), _('Prefix 4'), _('Prefix 5')
	def __init__(self):
		subtitle = self.call_barring_message_types[status.call_barring_edit_index] + ':'
		basemodel.EntryStage.__init__(self, subtitle, _('CALL BARRING'))
		self.ui.set_text(setting.get_call_barring(status.call_barring_edit_index))
		self.set_fixed_automata('123', False)
		self.ui.set_max(5)

	def activate_menu1(self):
		prefix = self.ui.get_text()
		setting.set_call_barring(status.call_barring_edit_index, prefix)
		if prefix:
			message = self.call_barring_message_types[status.call_barring_edit_index] + ' ' + _('set')
		else:
			message = self.call_barring_message_types[status.call_barring_edit_index] + ' ' + _('deleted')
		stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon)
		runtime.manager.change_stage(stage)


class CallBarringVoiceStage(basemodel.ListStage):
	title = _('VOICE CALL BARRING')
	icon = uiconfig.setting_phone_icon

	def __init__(self):
		if setting.barring_voice_enable == 1:
			choice = _('Disable'),
		else:
			choice = _('Enable'),
		basemodel.ListStage.__init__(self, choice)

	def activate(self, index):
		if setting.barring_voice_enable == 1:
			setting.set_voice_call_barring(0)
			stage = basemodel.NotifyStage(_('Voice call barring disabled.'), uiconfig.baloon_setting_phone_icon, None, 2000)
		else:
			setting.set_voice_call_barring(1)
			stage = basemodel.NotifyStage(_('Voice call barring enabled.'), uiconfig.baloon_setting_phone_icon, None, 2000)
		runtime.manager.stack_stage(stage)

	def show(self):
		if setting.barring_voice_enable == 1:
			basemodel.ListStage.change_choice(self,  (_('Disable'), ))
		else:
			basemodel.ListStage.change_choice(self,  (_('Enable'), ))
		basemodel.ListStage.show(self)


class CallBarringVideoStage(basemodel.ListStage):
	title = _('VIDEO CALL BARRING')
	icon = uiconfig.setting_phone_icon

	def __init__(self):
		if setting.barring_video_enable == 1:
			choice = _('Disable'),
		else:
			choice = _('Enable'),
		basemodel.ListStage.__init__(self, choice)

	def activate(self, index):
		if setting.barring_video_enable == 1:
			setting.set_video_call_barring(0)
			stage = basemodel.NotifyStage(_('Video call barring disabled'), uiconfig.baloon_setting_phone_icon, None, 2000)
		else:
			setting.set_video_call_barring(1)
			stage = basemodel.NotifyStage(_('Video call barring enabled'), uiconfig.baloon_setting_phone_icon, None, 2000)
		runtime.manager.stack_stage(stage)

	def show(self):
		if setting.barring_video_enable == 1:
			basemodel.ListStage.change_choice(self,  (_('Disable'), ))
		else:
			basemodel.ListStage.change_choice(self,  (_('Enable'), ))
		basemodel.ListStage.show(self)


class CallBarringPrefixStage(basemodel.ListStage):
	title = _('CALL BARRING PREFIX')
	choice = _('Prefix 1'), _('Prefix 2'), _('Prefix 3'), _('Prefix 4'), _('Prefix 5')
	icon = uiconfig.setting_phone_icon

	def __init__(self):
		self.old_edit_index = 0
		self.prefix, self.prefix_name = self.get_barring_prefix()
		basemodel.ListStage.__init__(self, self.prefix_name, self.title, self.icon)

	def get_barring_prefix(self):
		_prefix = (setting.call_barring_prefix1, setting.call_barring_prefix2, setting.call_barring_prefix3, setting.call_barring_prefix4, setting.call_barring_prefix5)
		_name = []

		for i, p in enumerate(_prefix):
			if p == '':
				index = ' %d' % (i + 1)
				_name.append(_('Prefix') + index)
			else:
				_name.append(p)

		return _prefix, _name

	def activate(self, index):
		status.call_barring_edit_index = index
		self.old_edit_index = index

		stage = CallBarringEditStage
		runtime.manager.stack_stage(stage)

	def show(self):
		self.prefix, self.prefix_name = self.get_barring_prefix()
		basemodel.ListStage.change_choice(self, self.prefix_name)
		basemodel.ListStage.show(self)
		self.ui.set_focus(self.old_edit_index)

class CallBarringStage(basemodel.ListStage):
	title = _('CALL BARRING')
	choice = _('Voice call'), _('Video call'), _('Prefix')
	icon = uiconfig.setting_phone_icon

	def activate(self, index):
		stage = (CallBarringVoiceStage, CallBarringVideoStage, CallBarringPrefixStage)[index]
		runtime.manager.stack_stage(stage)


class CallBarringPINCheckStage(basemodel.PINInputStage):
	def __init__(self):
		basemodel.PINInputStage.__init__(self, _('PIN') + ':', _('CALL BARRING'), _('Insert PIN'))

	def activate(self, pin):
		if setting.pin == pin:
			stage = CallBarringStage
			runtime.manager.change_stage(stage)
		else:
			self.ui.pin = ''
			self.ui.update()
			stage = basemodel.NotifyStage(_('Wrong PIN!'), uiconfig.baloon_setting_phone_icon)
			runtime.manager.stack_stage(stage)

class ResetStage(basemodel.ListStage):
	title = _('RESET')
	choice = _('Phonebook'), _('Settings'), _('System')
	icon = uiconfig.setting_system_reset_icon
	def activate(self, index):
		reset_action = None
		if index == 0: # phonebook
			from phonedb import phonedb
			reset_action = phonedb.reset
			confirm_message = _('Reset phonebook?')
			message = _('Phonebook reset!')

		elif index == 1: # setting
			reset_action = setting.reset
			confirm_message = _('Reset settings?')
			message = _('Settings reset!')

		elif index == 2: # system
			reset_action = utils.system_reset
			confirm_message = _('Reset system?')
			message = _('System reset!')

		else:
			pass
			#assert 0

		def yes_cb():
			def reset_cb():
				reset_action()
#Roxia Begin smyook 06.06.20
				if index == 0:
					runtime.manager.back_stage()
#Roxia End smyook
#Roxia Begin jhbang 06.03.30
			if index == 2: # system reset, asap
				reset_duration = 1
			else:
				reset_duration = 3000
			stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_system_reset_icon, reset_cb, duration=reset_duration)
#Roxia End jhbang
			runtime.manager.change_stage(stage)
		stage = basemodel.YesNoStage(confirm_message, yes_cb, Backstage_cb, '', uiconfig.baloon_setting_system_reset_icon)
		runtime.manager.stack_stage(stage)
		
from basemodel import NotifyStage
class DectSubscriptionNotifyStage(NotifyStage):
	def __init__(self, message,cb=None):
		icon = uiconfig.baloon_setting_voip_icon
		NotifyStage.__init__(self, message, icon, cb)

from basemodel import Stage
class DectSubscriptionStage(Stage):
	name = "dectSubscription"
	
	def __init__(self):
		status.supervision_not_allowed = 1

		import ui
		self.ui = ui.dectSubscribingUI(False)

		runtime.dectCallManager.readyToSubscribe()
		
		import dectConfig
		self.subscriptionTag = utils.Timer(dectConfig.SUBSCRIPTION_TIMEOUT, self.subscriptionFailed)

	def handle_key(self, key):
		if key in (config.Menu4, config.CLEAR) : # config.CANCEL
			MD.mmiTrace('DectSubscriptionStage : Menu2 / Red / CLEAR')

			runtime.dectCallManager.cancelSubscription()
			
			self.subscriptionTag = None
			message = _('Subscription cancelled')
			stage = DectSubscriptionNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True

		elif key == config.SUCCEED:
			MD.mmiTrace('DectSubscriptionStage : SUCCEED')
			utils.player.play_effect(config.SETTING_SUCCEEDED)
			runtime.dectCallManager.getSnmpInfo()	
			
			self.subscriptionTag = None
			message = _('Subscription succeeded')
			stage = DectSubscriptionNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True
			
		elif key == config.FAIL:
			MD.mmiTrace('DectSubscriptionStage : FAIL')
			utils.player.play_effect(config.SETTING_FAILED)

			self.subscriptionTag = None
			message = _('Subscription failed')
			stage = DectSubscriptionNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True

		return False

	def subscriptionFailed(self):
		MD.mmiTrace('EVENT :: DectSubscriptionStage : FAIL')

		self.subscriptionTag = None
		message = _('Subscription failed')
		stage = DectSubscriptionNotifyStage(message)
		runtime.manager.change_stage(stage)
	
	def destroy(self):
		self.subscriptionTag = None
		Stage.destroy(self)
		status.supervision_not_allowed = 0

from basemodel import NotifyStage
class DectPagingNotifyStage(NotifyStage):
	def __init__(self, message,cb=None):
		icon = uiconfig.baloon_setting_voip_icon
		NotifyStage.__init__(self, message, icon, cb)

class DectNotifyStage(NotifyStage):
	def __init__(self, message,cb=None):
		icon = uiconfig.baloon_setting_voip_icon
		NotifyStage.__init__(self, message, icon, cb)

from basemodel import Stage
class DectPagingStage(Stage):
	name = "dectPaging"
	
	def __init__(self):
		status.supervision_not_allowed = 1

		import ui
		self.ui = ui.dectPagingUI(False)

		runtime.dectCallManager.readyToPaging()
		
		import dectConfig
		self.pagingTag = utils.Timer(dectConfig.PAGING_TIMEOUT, self.pagingFailed)

	def handle_key(self, key):
		if key in (config.Menu4, config.Red, config.Transfer) : # config.CANCEL
			MD.mmiTrace('DectPagingStage : Menu4 / Red / Transfer')

			runtime.dectCallManager.cancelPaging()
			
			self.pagingTag = None
			message = _('Paging cancelled')
			stage = DectPagingNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True

		elif key in (config.Green, config.OffHook, config.Video):
			MD.mmiTrace('DectPagingStage : Menu4 / Red / Transfer')

			runtime.dectCallManager.cancelPaging()
			
			return False
		
		elif key == config.SUCCEED:
			MD.mmiTrace('DectPagingStage : SUCCEED')

			self.pagingTag = None
			message = _('Paging succeeded')
			stage = DectPagingNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True
			
		elif key == config.FAIL:
			MD.mmiTrace('DectPagingStage : FAIL')

			self.pagingTag = None
			message = _('Paging failed')
			stage = DectPagingNotifyStage(message)
			runtime.manager.change_stage(stage)

			return True

		return False

	def pagingFailed(self):
		MD.mmiTrace('EVENT :: DectPagingStage : FAIL')

		self.pagingTag = None
		message = _('Paging failed')
		stage = DectPagingNotifyStage(message)
		runtime.manager.change_stage(stage)
	
	def destroy(self):
		self.pagingTag = None
		Stage.destroy(self)
		status.supervision_not_allowed = 0

class WaitingResultNotifyStage(NotifyStage):
	def __init__(self, message,cb=None, duration=0):
		icon = uiconfig.baloon_setting_voip_icon
		NotifyStage.__init__(self, message, icon, cb, duration)

from basemodel import Stage
class WaitResultStage(Stage):
	name = "WaitResult"

	WAITING_RESULT_TIMEOUT = 60000
	
	def __init__(self, cancelKey=False, currentStatus=None):
		status.supervision_not_allowed = 1
		self.currentStatus = currentStatus
		
		import ui
		self.cancelKey = cancelKey
		self.ui = ui.WaitingResultUI(False, self.cancelKey)

		self.waitingResultTimer = utils.Timer(self.WAITING_RESULT_TIMEOUT, self.resultFailed)
		
	def handle_key(self, key):
		return True

	def showResult(self, RFPI):
		MD.mmiTrace('WaitResultStage : showResult()')

		self.waitingResultTimer = None
		rfpi = '0x%02X%02X%02X%02X%02X' % RFPI
		duration = 4000
		cb = None
		stage = WaitingResultNotifyStage('RFPI : ' + rfpi, cb, duration)
		runtime.manager.change_stage(stage)		

	def resultSucceed(self):
		MD.mmiTrace('WaitResultStage : SUCCEED')

		self.waitingResultTimer = None

		if self.currentStatus == 0:
			runtime.dectCallManager.cleardectInformationList()
			message = _('EEPROM reset succeeded')
			runtime.dectCallManager.getSnmpInfo()
		elif self.currentStatus == 1:
			message = _('TBR-06 reset succeeded')
		elif self.currentStatus == 2:
			message = _('TBR-10 reset succeeded')
		elif self.currentStatus == 3:
			message = _('Factory reset succeeded')

		try:
			import time
			dectVegaResetFile = open('/proc/sys/lvp3870/dect_reset', 'w')
			dectVegaResetFile.write('0')
			dectVegaResetFile.close()

			time.sleep(1)

			dectVegaResetFile = open('/proc/sys/lvp3870/dect_reset', 'w')
			dectVegaResetFile.write('1')
			dectVegaResetFile.close()

			time.sleep(1)

			stage = WaitingResultNotifyStage(message)
			runtime.manager.change_stage(stage)
		except:
			self.resultFailed()
		
	def resultFailed(self):
		MD.mmiTrace('WaitResultStage : FAIL')

		self.waitingResultTimer = None

		if self.currentStatus == 0:
			message = _('EEPROM reset Failed')
		elif self.currentStatus == 1:
			message = _('TBR-06 reset Failed')
		elif self.currentStatus == 2:
			message = _('TBR-10 reset Failed')
		elif self.currentStatus == 3:
			message = _('Factory reset Failed')
		elif self.currentStatus == 4:
			message = _('RFPI View Failed')
			
		stage = WaitingResultNotifyStage(message)
		runtime.manager.change_stage(stage)
	
	def destroy(self):
		self.waitingResultTimer = None
		Stage.destroy(self)
		status.supervision_not_allowed = 0

class DectResetStage(basemodel.ListStage):
	choice = _('Vega EEPROM reset'), _('TBR-6'), _('TBR-10'), _('Factory reset'), _('RFPI View')
	icon = uiconfig.setting_phone_icon
	title = _('Dect Reset')
	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		if index == 0:
			runtime.dectCallManager.send_VegaEepromReset()
		elif index == 1:
			runtime.dectCallManager.send_TBR_6()
		elif index == 2:
			runtime.dectCallManager.send_TBR_10()
		elif index == 3:
			runtime.dectCallManager.sendFactoryReset()
		elif index == 4:
			runtime.dectCallManager.sendRfpiView()
			
		runtime.manager.stack_stage(WaitResultStage(cancelKey=False, currentStatus=index))

class DectFunctions(basemodel.ListStage):
	choice = _('Paging'), _('Reset')
	icon = uiconfig.setting_phone_icon
	title = _('Dect Functions')
	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		if index == 0:
			runtime.manager.stack_stage(DectPagingStage)
		elif index == 1:
			runtime.dectCallManager.send_TBR_6()
		elif index == 2:
			runtime.dectCallManager.send_TBR_10()
			



class T9LanguageStage(basemodel.ListStage):
	choice = 'Espa\xc3\xb1ol', 'English'
	icon = uiconfig.setting_phone_icon
	def __init__(self, mode_index):
		self.mode_index = mode_index
		if setting.writing_mode == 0:
			title = _('DICTIONARY T9')
		else:
			title = _('DICTIONARY T9')
		basemodel.ListStage.__init__(self, self.choice, title)
		self.ui.set_focus(setting.t9_language)
	def activate(self, index):
		setting.writing_mode = self.mode_index
		setting.t9_language = index
		stage = basemodel.NotifyStage(_('Writing mode set'), uiconfig.baloon_setting_phone_icon)
		runtime.manager.change_stage(stage)

class WritingModeStage(basemodel.ListStage):
	title = _('WRITING MODE')
# KA: [20070831] hangul lvp-2000
#	choice = 'T9 abc', 'T9 Abc', 'T9 ABC', _('abc'), _('Abc'), _('ABC')
	if setting.lang == 'Korean':	
		choice = '\xe3\x84\xb1\xe3\x84\xb4\xe3\x84\xb7', _('abc'), _('Abc'), _('ABC')
	else:	
		choice = 'T9 abc', 'T9 Abc', 'T9 ABC', _('abc'), _('Abc'), _('ABC')
	icon = uiconfig.setting_phone_icon
		
	def __init__(self):
		basemodel.ListStage.__init__(self)
		self.ui.set_focus(setting.writing_mode)
	def activate(self, index):
		setting.writing_mode = index
# KA: [20070831] hangul lvp-2000
#		if index in (3, 4, 5):
#			stage = basemodel.NotifyStage(_('Writing mode set'), uiconfig.baloon_setting_phone_icon)
#		else:
#			stage = T9LanguageStage(index)
		if setting.lang == 'Korean':	
			stage = basemodel.NotifyStage(_('Writing mode set'), uiconfig.baloon_setting_phone_icon)
		else:				
			if index in (3, 4, 5):			
				stage = basemodel.NotifyStage(_('Writing mode set'), uiconfig.baloon_setting_phone_icon)	
			else:			
				stage = T9LanguageStage(index)
# KA: [20070831] hangul lvp-2000 ==
		runtime.manager.stack_stage(stage)

# yylee added for SETTING>Phone Information
class PhoneInformationStage(basemodel.ListStage):
	name = 'phone information'
	title = _('PHONE INFORMATION')
	choice = _('System information'), _('Memory usage'), _('Version information')
	
	icon = uiconfig.phone_info_icon # need to change later
	#titleimage = uiconfig.title_phone_info

	def show(self):
		status.not_screen_saver = False
		setting.reset_screen_saver_timer()
		status.screensaver_activated = False
		basemodel.ListStage.show(self)

	def activate(self, index):
		if setting.screen_saver_enabled:
			status.not_screen_saver = True

		import update
		'''
 		if index ==1 and  profile.get_profile() == 1 and not status.LanConnected:
				# ka...show version 2006.10.24 (0:success 1:fail 2: cancel)
				setting.set_status_update(1)
 				stage = PhoneSettingNotifyStage(_('Connection fail.'))
		else:
				stage = (VersionInfomationStage, MemoryUsageStage)[index]
		'''
		stage = (SystemInformationStage, MemoryUsageStage, VersionInfomationStage)[index]
		runtime.manager.stack_stage(stage)
# yylee added for SETTING>Phone Information ==


class SystemInformationStage(basemodel.Stage):
	def __init__(self):
		global cur_profile

		msg_na = _('not available')

		if cur_profile == lan_profile:
			network_info = utils.get_address('eth')
		else:
			network_info = utils.get_address('wlan')

		if network_info:
			msg_mac = network_info[0][0]
		else:
			msg_mac = msg_na


		if cur_profile.get_dhcp() == 1:
			msg_dhcp = 'yes'
		else:
			msg_dhcp = 'no'

		if cur_profile.ipaddress:
			msg_ipaddress = cur_profile.ipaddress
		else:
			msg_ipaddress = msg_na

		if msg_dhcp == 'yes':
			try:
				get_prf = profile.get_profile()
				if get_prf == 1 and os.path.exists('/tmp/dhcpcd-eth0.info') == False:
					msg_ipaddress = msg_na
				elif get_prf == 2 and os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
					msg_ipaddress = msg_na
				else:
					if get_prf == 1:
						fp = open('/tmp/dhcpcd-eth0.info')
					else:
						fp = open('/tmp/dhcpcd-wlan0.info')
					dhcpinfo = fp.readlines()

					for z in dhcpinfo:
						if z.find('#') != -1:
							continue

						key, value = z.split('=')
						key = key.strip()

						if key == 'IPADDR':
							msg_ipaddress = value.strip()

			except:
				pass

		# serial no
		try:
			cmd = 'serialno > /tmp/sn.txt'
			os.system(cmd)

			serial = open('/tmp/sn.txt').read()
			serial = serial.split('\n')[0]
			print 'SERIAL : ', serial
		except:
			print 'serial number fetch error'
			pass
		
		
		from vdcisetting import vdci_setting
		self.ui = baseui.SystemInformationUI(_('OK'), '', None, '',  _('BACK'))

		name,pos = uiconfig.system_icon_ip
		icon_ip = utils.put_image(name,pos)
		self.ui.add(icon_ip)
		ip_address_text = runtime.evas.text(text=_('IP address'),font=uiconfig.phoneinfo_font,pos=(117-10,92-20),color=uiconfig.list_text_color)
		self.ui.add(ip_address_text)
		ip_address_value = runtime.evas.text(text=msg_ipaddress, font=uiconfig.phoneinfo_font,pos=(215+30,92-20),color=uiconfig.list_text_color)
		self.ui.add(ip_address_value)
		
		name,pos = uiconfig.system_icon_mac
		icon_mac = utils.put_image(name,pos)
		self.ui.add(icon_mac)
		mac_address_text = runtime.evas.text(text=_('MAC address'),font=uiconfig.phoneinfo_font,pos=(117-10,124-20),color=uiconfig.list_text_color)
		self.ui.add(mac_address_text )
		mac_address_value = runtime.evas.text(text=msg_mac, font=uiconfig.phoneinfo_font,pos=(215+30,124-20),color=uiconfig.list_text_color)
		self.ui.add(mac_address_value)

		name,pos = uiconfig.system_icon_tel_number
		icon_tel_number = utils.put_image(name,pos)
		self.ui.add(icon_tel_number)
		tel_number_text = runtime.evas.text(text=_('Telephone number'),font=uiconfig.phoneinfo_font,pos=(117-10,157-20),color=uiconfig.list_text_color)
		self.ui.add(tel_number_text )
		tel_number_value = runtime.evas.text(text=vdci_setting.tel_num, font=uiconfig.phoneinfo_font,pos=(215+30,157-20),color=uiconfig.list_text_color)
		self.ui.add(tel_number_value)

		name,pos = uiconfig.system_icon_serial_number
		icon_serial_number = utils.put_image(name,pos)
		self.ui.add(icon_serial_number)
		serial_number_text = runtime.evas.text(text=_('Serial number'),font=uiconfig.phoneinfo_font,pos=(117-10,190-20),color=uiconfig.list_text_color)
		self.ui.add(serial_number_text )
		serial_number_value = runtime.evas.text(text=serial, font=uiconfig.phoneinfo_font,pos=(215+30,190-20),color=uiconfig.list_text_color)
		self.ui.add(serial_number_value)	
		
	def handle_key(self, key):
		if key == config.Menu1 or key == 'OK' or key == config.Menu4 or key == config.CLEAR:
			runtime.manager.back_stage()
			return True
		return False


# yylee added for SETTING>Phone Information>Version Information
class VersionInfomationStage(basemodel.Stage):
	def __init__(self):
		try:
			p = file("config.cfg",'r')
			t = p.read()
			p.close()

			import re
			t = t.replace(' ','')
			#ka...3800 Malaga 2007.04.02
			#swver = re.search("firmware_version=([0-9.]+)",t).group(1)
			swver = re.search("firmware_version=([0-9.A-Za-z]+)",t).group(1)
			hwver = re.search("hardware_version=([0-9.]+)",t).group(1)

			p = file("./var/product_model.info",'r')
			t = p.read()
			p.close()
			sharp = t.rfind('#')
			swver_temp = t[sharp+1:]
			sharp = swver_temp.rfind('\x0a')
			if sharp == -1:
				swver = swver_temp
			else:
				swver = swver_temp[:sharp]
			
		except:
			hwver = swver = 'not available'

		import ui
		#telion no manual update		
		self.ui = baseui.VersionInformationUI(' ', ' ', None, ' ',  _('BACK'))

		name,pos = uiconfig.version_icon_hw
		icon_hw = utils.put_image(name,pos)
		self.ui.add(icon_hw)
		hw_version_text = runtime.evas.text(text=_('Hardware Version'),font=uiconfig.phoneinfo_font,pos=(117,102),color=uiconfig.list_text_color)
		self.ui.add(hw_version_text)
		hw_version_value = runtime.evas.text(text=hwver, font=uiconfig.phoneinfo_font,pos=(295,102),color=uiconfig.list_text_color)
		self.ui.add(hw_version_value)
		
		name,pos = uiconfig.version_icon_sw
		icon_sw = utils.put_image(name,pos)
		self.ui.add(icon_sw)
		sw_version_text = runtime.evas.text(text=_('Software Version'),font=uiconfig.phoneinfo_font,pos=(117,135),color=uiconfig.list_text_color)
		self.ui.add(sw_version_text )
		sw_version_value = runtime.evas.text(text=swver, font=uiconfig.phoneinfo_font,pos=(295,135),color=uiconfig.list_text_color)
		self.ui.add(sw_version_value)
				
	def handle_key(self, key):
		#telion no manual update
		if key == config.Menu4 or key == config.CLEAR: #BACK
			runtime.manager.back_stage()
			return True

		"""
		if key == config.Menu1 or key == 'OK': #V_CHECK
			#import update
			#stage = update.ConfirmManualDownloadYesNo
			#runtime.manager.stack_stage(stage)
			return True
		elif key == config.Menu4 or key == config.CLEAR: #BACK
			runtime.manager.back_stage()
			return True
		"""
		return False
# yylee added for SETTING>Phone Information>Version Information ==


# yylee added for SETTING>Phone Information>Memory Usage
class MemoryUsageStage(basemodel.Stage):
	def __init__(self):
#		try:
		df=os.popen('df -k | grep /dev/stl0/6').readlines()
		mem_info = df[0].split()
		total_memory = self.translate_to_KB_string(mem_info[1])
		total_memory = total_memory.rjust(15)
		used_memory = self.translate_to_KB_string(mem_info[2])
		used_memory = used_memory.rjust(15)
		free_memory = self.translate_to_KB_string(mem_info[3])
		free_memory = free_memory.rjust(15)

		img_du = os.popen('du -hsk /usr/local/lgvp/photos').readlines()
		img_info = img_du[0].split()
		image_used = self.translate_to_KB_string(img_info[0])
		image_used = image_used.rjust(15)

		audio_du = os.popen('du -hsk /usr/local/lgvp/audios').readlines()
		audio_info = audio_du[0].split()
		audio_used = self.translate_to_KB_string(audio_info[0])
		audio_used = audio_used.rjust(15)

		video_du = os.popen('du -hsk /usr/local/lgvp/videos').readlines()
		video_info = video_du[0].split()
		video_used = self.translate_to_KB_string(video_info[0])
		video_used = video_used.rjust(15)

#		except:
#			total_memory = 'not available'
#			used_memory = 'not available'
#			free_memory = 'not available'
#			image_used = 'not available'
#			audio_used ='not available'
#			video_used ='not available'

		import ui
		self.ui = baseui.MemoryUsageUI(_('OK'), ' ', None, ' ',  _('BACK'))
		
		# Total Memory
		name,pos = uiconfig.mem_info_icon_total_memory
		icon_tm = utils.put_image(name,pos)
		self.ui.add(icon_tm)
		tm_text = runtime.evas.text(text=_('Total memory'),font=uiconfig.phoneinfo_font,pos=(112,52),color=uiconfig.list_text_color)
		self.ui.add(tm_text)
		tm_value = runtime.evas.text(text=total_memory, font=uiconfig.phoneinfo_font,pos=(250,53),color=uiconfig.list_text_color)
		self.ui.add(tm_value)

		# Used Memory
		name,pos = uiconfig.mem_info_icon_used_memory
		icon_um = utils.put_image(name,pos)
		self.ui.add(icon_um)
		um_text = runtime.evas.text(text=_('Used memory'),font=uiconfig.phoneinfo_font,pos=(112,85),color=uiconfig.list_text_color)
		self.ui.add(um_text)
		um_value = runtime.evas.text(text=used_memory, font=uiconfig.phoneinfo_font,pos=(250,85),color=uiconfig.list_text_color)
		self.ui.add(um_value)

		# Free Memory
		name,pos = uiconfig.mem_info_icon_free_memory
		icon_fm = utils.put_image(name,pos)
		self.ui.add(icon_fm)
		fm_text = runtime.evas.text(text=_('Free memory'),font=uiconfig.phoneinfo_font,pos=(112,117),color=uiconfig.list_text_color)
		self.ui.add(fm_text)
		fm_value = runtime.evas.text(text=free_memory, font=uiconfig.phoneinfo_font,pos=(250,117),color=uiconfig.list_text_color)
		self.ui.add(fm_value)

		# Image Used
		name,pos = uiconfig.mem_info_icon_image
		icon_image = utils.put_image(name,pos)
		self.ui.add(icon_image)
		img_text = runtime.evas.text(text=_('Images'),font=uiconfig.phoneinfo_font,pos=(112,151),color=uiconfig.list_text_color)
		self.ui.add(img_text)
		img_value = runtime.evas.text(text=image_used, font=uiconfig.phoneinfo_font,pos=(250,151),color=uiconfig.list_text_color)
		self.ui.add(img_value)
		
		# Audio Used
		name,pos = uiconfig.mem_info_icon_audio
		icon_audio = utils.put_image(name,pos)
		self.ui.add(icon_audio)
		audio_text = runtime.evas.text(text=_('Audio'),font=uiconfig.phoneinfo_font,pos=(112,184),color=uiconfig.list_text_color)
		self.ui.add(audio_text)
		audio_value = runtime.evas.text(text=audio_used, font=uiconfig.phoneinfo_font,pos=(250,184),color=uiconfig.list_text_color)
		self.ui.add(audio_value)

		# Video Used
		name,pos = uiconfig.mem_info_icon_video
		icon_video = utils.put_image(name,pos)
		self.ui.add(icon_video)
		video_text = runtime.evas.text(text=_('Videos'),font=uiconfig.phoneinfo_font,pos=(112,217),color=uiconfig.list_text_color)
		self.ui.add(video_text)
		video_value = runtime.evas.text(text=video_used, font=uiconfig.phoneinfo_font,pos=(250,217),color=uiconfig.list_text_color)
		self.ui.add(video_value)

	def translate_to_KB_string(self, val):
		return self.comma_number(val)+' KB'

	def comma_number(self, str_val): 
        	x = str_val
		if x[0] in ['+', '-']: 
			sign_mark, x = x[0], x[1:] 
		else:
			sign_mark = '' 
		try:  
			tmp = string.split(x, '.')
			x = tmp[0]; decimal = '.' + tmp[1] 
		except:  
			decimal = '' 
		l = [] 
		while x: 
			l.append(x[-3:]) 
			x = x[:-3] 
		y = '' 
		for part in l: 
			y = part + ',' + y 
		y = y[:-1] 
		return sign_mark + y + decimal 
				
	def handle_key(self, key):
		if key == config.Menu1 or key == 'OK' or key == config.Menu4 or key == config.CLEAR:
			runtime.manager.back_stage()
			return True
		return False

# yylee added for SETTING>Phone Information>Memory Usage ==


class TechnicalFeatureStage(basemodel.ListStage):
	name = 'technical option'
	title = _('TECHNICAL FEATURES')
	choice = _('Show hw/sw version'), _('Update software manually'), _('Configure') # manual download by shchun
	icon = uiconfig.setting_system_technical_icon
	def show(self):
		status.not_screen_saver = False
		setting.reset_screen_saver_timer()
		status.screensaver_activated = False
		basemodel.ListStage.show(self)

	def activate(self, index):
		if setting.screen_saver_enabled:
			status.not_screen_saver = True

		import update
 		if index ==1 and  profile.get_profile() == 1 and not status.LanConnected:
			# ka...show version 2006.10.24 (0:success 1:fail 2: cancel)
			setting.set_status_update(1)
 			stage = PhoneSettingNotifyStage(_('Connection fail.'))
		else:
			stage = (ShowVersionStage, update.ConfirmManualDownloadYesNo, update.ConfigManualDownload)[index]

		runtime.manager.stack_stage(stage)

class ShowVersionStage(basemodel.Stage):
	def __init__(self):
		try:
			p = file("config.cfg",'r')
			t=p.read()
			p.close()

			import re
			t = t.replace(' ','')
			#ka...3800 Malaga 2007.04.02
			#swver = re.search("firmware_version=([0-9.]+)",t).group(1)
			swver = re.search("firmware_version=([0-9.A-Za-z]+)",t).group(1)
			
			hwver = re.search("hardware_version=([0-9.]+)",t).group(1)
		except:
			hwver = swver = 'not available'

		#ka...show version 2006.10.24
		state = ''
		auto_provision = state
		
		if setting.status_autoconfig == 0:
			state = _('Success')
		else:
			state = _('Pending')
		auto_config = state

#ka...malaga update time 2007.04.22
		if setting.status_update == 0:
			state = _('Success')
#			cycle = _('Next retry will be 15days later.')
		elif setting.status_update ==1:
			state = _('Fail')
#			if runtime.retry_update == 0:
#				cycle = _('Next retry will be 30min later.')
#			elif runtime.retry_update == 1:
#				cycle = _('Next retry will be 60min later.')
#			elif runtime.retry_update == 2:
#				cycle = _('Next retry will be 240min later.')
#			else:
#				cycle = _('Next retry will be 15days later.')
		else:
			state = _('Cancelled.')
#			cycle = _('Next retry will be 15days later.')
		upgrade_state = state

#ka...malaga update time 2007.04.22 
		import time
		next_update_time = setting.next_update_time
		t = time.localtime(next_update_time)

		t_date = '%02d/%02d/%03d' % (t[2], t[1], t[0])
		t_time = '%02d:%02d'%(t[3], t[4])

		#ka...show version 2006.11.01   
#		if setting.status_autoconfig != 0:   
#			cycle = _('Next retry will be 15min later.') 
		cycle = _('Next update')+ ': ' + t_time + ' ' + t_date		
		import ui
		self.ui = ui.ShowVersionUI(swver, hwver, auto_provision, auto_config, upgrade_state, cycle)
		self.ui.set_left('')
		self.ui.set_right(_('BACK'))

	def handle_key(self, key):
		if key == config.Menu2:
			runtime.manager.back_stage()
			return True
		return False


class ESSIDStage(basemodel.EntryStage):
	def __init__(self):
		basemodel.EntryStage.__init__(self, _('ESSID'), _('ESSID'))
		self.ui.set_automata('multitap', 'lower')
		self.automata_idx = 3
		self.ui.set_max(32)

		if wifi_profile.essid:
			self.ui.set_text(wifi_profile.essid)

	def activate_menu1(self):
		old_essid = wifi_profile.essid
		str_domain = self.ui.get_text()
		wifi_profile.set_essid(str_domain)
		if str_domain:
			message = _('ESSID set')
		else:
			wifi_profile.set_essid('Telefonica')
			message = _('ESSID empty')

		stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon)
		runtime.manager.change_stage(stage)
		if old_essid != str_domain:
			status.profile_detail_changed = True
		return True
# KA: [20070831] hangul lvp-2000
	def handle_key(self, key):	
		if key == 'SOFT4':		
			# vpark 2007.08.28 automata		
			self.automata_idx = (self.automata_idx + 1) % len(config.automata_list)	
			self.ui.automata = config.automata_list[self.automata_idx]				
			self.ui.set_automata(*self.ui.automata)		
			return True	
		else:		
			return self.ui.handle_key(key)		
		return True
# KA: [20070831] hangul lvp-2000 ==

class WEPEnabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('WEP enabled.')+'\n'+_('Disable?')
		icon = uiconfig.baloon_phone_setting_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, '', icon)
	def yes_cb(self):
		setting.set_wep_enable(0)
		stage = PhoneSettingNotifyStage(_('WEP disabled.'))
		runtime.manager.change_stage(stage)

class WEPDisabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('WEP disabled.')+'\n'+_('Enable?')
		icon = uiconfig.baloon_phone_setting_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, '', icon)
	def yes_cb(self):
		setting.set_wep_enable(1)
		stage = PhoneSettingNotifyStage(_('WEP enabled.'))
		runtime.manager.change_stage(stage)

class WMMStage(basemodel.ListStage):
	def __init__(self):
		self.org_wmm = wifi_profile.wmm
		if wifi_profile.wmm == 'yes':
			self.choice = _('Disable'),
		else:
			self.choice = _('Enable'),
		basemodel.ListStage.__init__(self, self.choice)

	def activate(self, index):
		if self.choice[index] == _('Enable'):
			wifi_profile.set_wmm(True)
			msg = _('WMM enabled')
		elif self.choice[index] == _('Disable'):
			wifi_profile.set_wmm(False)
			msg = _('WMM disabled')
		new_wmm = wifi_profile.wmm
		stage = PhoneSettingNotifyStage(msg)
		runtime.manager.change_stage(stage)
		print 'ka....org_wmm=%s, new_wmm=%s'%(self.org_wmm, new_wmm)
		if self.org_wmm != new_wmm:
			status.profile_detail_changed = True


def WfScan(num = 1):
	def info_get(fname):
		wifi_info = []
		info = ['','','1','','', '']
		firstget = True
		
#ka...3800 wifi 2007.04.25
		for tline in fname: #.readlines():
			maxc = 0
#SSID	# For seperate BSSID
			if tline.find('SSID') >= 0 and tline.find('\"') >= 0:	
				if firstget == False:
					#if info[6] == '':
					#	info.pop()
					wifi_info.append(info)
				firstget = False
				info = ['','','1','','', '']
				a,b = tline.split(':')
				b = b.strip()
				info[1] = b[1:len(b)-1]
			elif tline.find('Mode') >= 0:
#RSSI
				if tline.find('RSSI'):
					ti = tline.find('RSSI')
					info[3] = (tline[ti+6:tline.find('dBm')])
#Channel
				if tline.find('Channel') >= 0:
					ti = tline.find('Channel')
					info[2] = (tline[ti+9:].strip())

#BSSID --> MAC
			elif tline.find('BSSID') >= 0:
				info[0] = tline[tline.find(':')+2:24].strip()
#Capability
				if tline.find('WEP') >= 0:
					encryption = 'on'
				else:
					encryption = 'off'
				info[4] = encryption
#Bit rate
			elif tline.find('Supported Rates') >= 0:
				ti = tline.find(']')
				if tline[ti-2] == ')': # b-mode: 11(b)
					rate = (tline[ti-6:ti-4])
				else:
					rate = (tline[ti-3:ti-1])
				#if len(info) == 6: ######### 이건 모지,,,
				#	info.pop()
				info[5] = (str(rate)+'Mbps')
#WPA			
			# KA: [20080402] NEW WIFI AP
			#elif tline.find('WPA') >= 0:
			#	info[6] = 'wpa_ie'
# TKIP
			elif tline.find('multicast') >= 0:
				# 좌우 공백을 없앤 후
				tline = tline.strip()
				key, value = tline.split(':')
				value = value[1:]
				info.append(value)
# WPA-PSK
			elif tline.find('AKM') >= 0:
				# 좌우 공백을 없앤 후
				tline = tline.strip()
				key, value = tline.split(':')
				value = value[1:]
				info.append(value)
			# KA: [20080402] NEW WIFI AP ==
		else:
		#if info[7] == '':
		#	info.pop()
		#if info[6] == '':
		#	info.pop()
			wifi_info.append(info)

		length = len(wifi_info) -1
		for z in range(length,-1,-1):
			if wifi_info[z] == []:
				del wifi_info[z]
			elif wifi_info[z][1].strip() == '':
				del wifi_info[z]
		return wifi_info

	try:
		if profile.profile != 'WIRELESS':
			return basemodel.NotifyStage(_('WiFi profile is not enabled.'), uiconfig.baloon_wifi_icon)
		if not num in (1,6):
			os.system('wlstop')
			os.system('wlstart')
#ka...3800 wifi 2007.04.25
#		os.system('iwlist wlan0 scan > /tmp/wifiscan.tmp')
		os.system('wlscan')
		fp = open('/tmp/wifiscan.tmp')
		scan_info = info_get(fp)
		#print 'ka........scan_info=', scan_info
		if scan_info != []:
			cwifi = len(scan_info)
			lists = []
			for z in range(cwifi):
				if len(scan_info[z]) == 8: #길이가 8 -- WPA-PSK / WPA-PSK2
					if scan_info[z][7] == 'WPA-PSK':				
						list_value = scan_info[z][1] + '('+_('Channel')+': ' + scan_info[z][2] + ', ' + _('WPA-PSK') + ')'
					else:
						list_value = scan_info[z][1] + '('+_('Channel')+': ' + scan_info[z][2] + ', ' + _('WPA2-PSK') + ')'
				elif scan_info[z][4] == 'on':
					list_value = scan_info[z][1] + '('+_('Channel')+': ' + scan_info[z][2] + ', ' + _('Encrypted') + ')'
				else:
					list_value = scan_info[z][1] + '('+_('Channel')+': ' + scan_info[z][2] + ')'

				lists.append(list_value)
			
			return WiFiInfoStage(lists, scan_info, num)
		else:
			return basemodel.NotifyStage(_('No AP found.'), uiconfig.baloon_wifi_icon)

	except:
		return basemodel.NotifyStage(_('WiFi profile is not enabled.'), uiconfig.baloon_wifi_icon)

class WiFiStage(basemodel.ListStage):
	title = _('WIRELESS SETTINGS')
#ka...malaga 2007.04.11
#	choice = _('Details'), _('WiFi scanning'), _('ESSID'), _('Channel ID'), _('Encryption'), _('Authentication')
	choice = _('Details'), _('WiFi scanning'), _('ESSID'),  _('Encryption'), _('Authentication'), _('WMM')
	icon = uiconfig.wifi_icon
	icon = uiconfig.wifi_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)
		status.save_callback_other = save_callback

	def destroy(self):
		status.save_callback_other = None
#ka...3800 2007.05.22
		if os.path.exists('/tmp/console_scan_inuse'):
			os.unlink('/tmp/console_scan_inuse')
		basemodel.ListStage.destroy(self)

		
	def activate(self, index):
		if index == 0:
			stage = InfoShowStage(wifi_profile.get_wifi(), 1)
		elif index == 1:
# eicho 06.07.07
			#cur_profile.copy_old_values()
			
			def cb():
				runtime.manager.change_stage(WfScan())
			stage = basemodel.NotifyStage(_('Scanning available APs.')+'\n'+_('Please wait for a moment.'), uiconfig.baloon_wifi_icon, cb, 500)
		else:
# eicho 06.07.07
			#cur_profile.copy_old_values()
			stage = ( None, None, ESSIDStage, EncryptionStage, AuthenticationStage, WMMStage)[index]
		runtime.manager.stack_stage(stage)


def do_autoregister():
#Roxia Begin smyook 06.06.25
# eicho change~ 06.07.05
	#print 'ka...status.on_profile_changing=', status.on_profile_changing
	
	from vdcisetting import vdci_setting
	if profile.get_profile() == 2 and wifi_profile.dhcp == 'yes' and os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
#ka....3800 malaga 2007.04.09
		if runtime.manager.find_stage('wifiprofile setting'):
			runtime.manager.back_stage('wifiprofile setting')
		elif runtime.manager.find_stage('wifisetting menu'):
			runtime.manager.back_stage('wifisetting menu')
		else:
			import model
			runtime.manager.change_stage(model.IdleStage, True)
		stage = basemodel.NotifyStage(_('Network disconnected'), icon = uiconfig.video_call_connect_icon)
		runtime.manager.stack_stage(stage)
		# start shchun: remove status.on_profile_changing
		#status.on_profile_changing = False
	elif not vdci_setting.tel_num:
## eicho add. 06.07.09
		runtime.manager.start_vdciapp()
		
		if runtime.manager.find_stage('wifiprofile setting'):
			runtime.manager.back_stage('wifiprofile setting')
		elif runtime.manager.find_stage('wifisetting menu'):
			runtime.manager.back_stage('wifisetting menu')
		else:
			import model
			runtime.manager.change_stage(model.IdleStage, True)

		stage = basemodel.NotifyStage(_('The telephone number of VoIP is not formed.'), icon = uiconfig.video_call_connect_icon)
		runtime.manager.stack_stage(stage)
		# start shchun: remove status.on_profile_changing
		#status.on_profile_changing = False
	else: 
		roxia_trace('**** do_autoregister ****')
		stage = AutoRegisteringStage
		#0707 ka stage = AutoRegisteringStage(dereg_first=False)
		runtime.manager.change_stage(stage)
	#runtime.manager.change_stage(AutoRegisteringStage)
#Roxia End smyook
#Roxia Begin smyook 06.06.23
#	status.profile_changing = False
#	status.on_profile_changing = False
#Roxia End smyook


# pstn->ip profile변경시에만 불려져야 함
def do_autoregister_wo_unregister():
# eicho change~ 06.07.05
#Roxia Begin smyook 06.06.25
	from vdcisetting import vdci_setting
	if profile.get_profile() == 1 and lan_profile.dhcp == 'yes' and os.path.exists('/tmp/dhcpcd-eth0.info') == False or \
		profile.get_profile() == 2 and wifi_profile.dhcp == 'yes' and os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
		roxia_trace('**** do_autoregister_wo_unregister ****')
		stage = basemodel.NotifyStage(_('Network disconnected'), icon = uiconfig.video_call_connect_icon)
#Roxia Begin smyook 06.06.26
		if profile.get_profile() == 1:
			status.LanConnected = False
#Roxia End smyook
		runtime.manager.change_stage(stage)
		
## eicho add. 06.07.09
	elif not vdci_setting.tel_num:
		
		if runtime.manager.find_stage('wifiprofile setting'):
			runtime.manager.back_stage('wifiprofile setting')
		else:
			import model
			runtime.manager.change_stage(model.IdleStage, True)
		stage = basemodel.NotifyStage(_('The telephone number of VoIP is not formed.'), icon = uiconfig.video_call_connect_icon)
		runtime.manager.stack_stage(stage)
		
	else:
		stage = AutoRegisteringStage(dereg_first=False)
		runtime.manager.change_stage(stage)
		runtime.evas.render_now()
#Roxia End smyook

#Roxia Begin smyook 06.06.23
	# start shchun: remove status.on_profile_changing
	#status.profile_changing = False
	# start shchun: remove status.on_profile_changing
	#status.on_profile_changing = False
#Roxia End smyook

# KA: [20071105] TI IMS subscriber
def ServerNotiToSubscriber(event):
	'''
	1 - Registered
	2 - Created
	3 - Refreshed
	4 - Shortened
	5 - Expired
	6 - Deactivated
	7 - Probation
	8 - unregistered
	9 - Rejected
	'''

	if event in ('1', '3', '4'):
		if status.get_regstatus() == 0:
			runtime.vdciapp.set_register_status(True)
	elif event in ('5', '6', '7', '8', '9'):
		if status.get_regstatus() == 1:
			runtime.vdciapp.set_register_status(False)
	else:
		pass

	if event == '9':
		message = _('Server rejects the call') + '\n' +_('Please contact manager')
		import menu
		stage = menu.VoIPSettingNotifyStage(message)
		runtime.manager.stack_stage(stage)
# KA: [20071105] TI IMS subscriber ==


# KA: [20071013] TI IMS Setting
class DeRegisteringStage(basemodel.Stage):
	name = "DeRegistering"
	def __init__(self, dereg_first=True):
		status.supervision_not_allowed = 1
		import ui
		from vdcisetting import vdci_setting

		self.try_register = True
		self.reg_message = _('De-registering.')+'\n'+_('Please wait for a moment.')

		prof_current = profile.get_profile()
		if  prof_current == 1:
			runtime.check_lanlink()

		status.set_register_mode(status.Registered)

		self.ui = ui.VideoCallRegisteringUI(False, reg=self.try_register, msg=self.reg_message)
		self.tag_register = None
		self.back_timer = None
		status.videocall_dimension = setting.video_dimension
		#self.request_deregister()
		self.req_desubscriber()	
# 20080630 Desubscruber
	def req_desubscriber(self):
		if runtime.vdciapp.subscriber_success:	
			runtime.vdciapp.req_desubscriber()
			self.tag_subscriber = utils.Timer(config.timeoutSubscriber, self.desubscriber_failed)
		else:
			self.request_deregister()
			
	def desubscriber_failed(self):
		self.tag_subscriber = None
		#message = _('Release subscription failed')
		#stage = VoIPSettingNotifyStage(message, self.go_deregistering)
		#runtime.manager.change_stage(stage)
		self.request_deregister()

	def desubscriber_sucessed(self):
		self.tag_subscriber = None
		status.subscriber = False
		#message = _('Release subscription success')
		#stage = VoIPSettingNotifyStage(message, self.go_deregistering)
		#runtime.manager.change_stage(stage)
		self.request_deregister()
# 20080630 Desubscruber

	def request_deregister(self):
		if runtime.vdciapp:
			runtime.vdciapp.req_deregister()
		self.tag_register = utils.Timer(config.timeoutDeregister, self.deregister_sucessed)
		return False

	def deregister_sucessed(self):
		self.tag_register = None
		
		status.set_register_mode(status.NotRegistered)
		status.set_regstatus(0)

#MMW	2006.10.2	end transaction after deregister success
		print 'deregister success\n'
		from vdcisetting import vdci_setting
		vdci_setting.end_transaction()
#end of MMW	

		#if runtime.vdciapp:
		#	runtime.vdciapp.kill_vdciapp()
		#	del(runtime.vdciapp)
		#	runtime.vdciapp = None
			
		message = _('De-registration succeeded')
		import menu
		stage = menu.VoIPSettingNotifyStage(message)
		runtime.manager.change_stage(stage)
		
	def handle_key(self, key):
		if key == config.Menu2:
			if self.try_register == False:
				return False
			if status.get_register_mode() != status.Registering:
				return False

			self.deregister_cancel()
			return True
		elif key == config.OnHook:
			if status.get_register_mode() != status.Registering:
				return False

			if status.modem_audio_state == status.HS:
				self.deregister_cancel()
			else:
				pass

		elif key == config.Red:
			if self.try_register == False:
				return False
			#if status.registered_status != status.Registering:
			if status.get_register_mode() != status.Registering:
			
				return False

			if status.modem_audio_state == status.SPK:
				self.deregister_cancel()
			else:
				pass

		return False
	
	def destroy(self):
		self.tag_register = None
		basemodel.Stage.destroy(self)
		status.supervision_not_allowed = 0
# KA: [20071013] TI IMS Setting ==


class AutoRegisteringStage(basemodel.Stage):
	name = 'autoregistering'
	domonitor_forbidden = True
	def __init__(self, dereg_first=True):
		status.supervision_not_allowed = 1
		import ui
		from vdcisetting import vdci_setting

		self.try_register = True
		self.reg_message = _('Registering.')+'\n'+_('Please wait for a moment.')

		# network connection check
		prof_current = profile.get_profile()
		if (prof_current == 1 and status.LanConnected == False) or \
			(prof_current == 2 and status.wifi_connected == False):
			self.try_register = True # LAN out 인 경우에도 vdci를 reload한다. (for new setting)
			self.reg_message = _('Check network connection')	

		# vdci setting check
		if not runtime.manager.check_settings():
			self.try_register = False
			self.reg_message = _('Please, subscribe first')

			# shchun : set idle mesg
			import errorcode
			errorcode.set_idle_errmsg(_('Please, subscribe first'))
			runtime.manager.linkmonitor.update_idlemsg()	
			# end shchun
		
#		status.set_register_mode(status.Registering)

		self.ui = ui.VideoCallRegisteringUI(False, reg=self.try_register, msg=self.reg_message)
		self.tag_register = None
		self.back_timer = None
		self.tag_subscriber = None
		status.videocall_dimension = setting.video_dimension
		self.dereg_first = dereg_first
		
		self.regi_timer = utils.Timer(1000, self.post_init)
		#self.post_init()
		
	def post_init(self):
		if self.dereg_first:
			self.request_autoregister()
		else:
			self.automatic_register()

	def handle_key(self, key):
		if key == config.Menu4:
			if self.try_register == False:
				return False
			#if status.get_register_mode() != status.Registering:
			#	return False

			self.deregister_cancel()
			return True
		elif key == config.OnHook:
			#if status.get_register_mode() != status.Registering:
			#	return False

			#if status.modem_audio_state == status.HS:
			self.deregister_cancel()
			#else:
			#	pass

		elif key == config.Red:
			if self.try_register == False:
				return False
			#if status.registered_status != status.Registering:
			#if status.get_register_mode() != status.Registering:
			#	return False

			#if status.modem_audio_state == status.SPK:
			self.deregister_cancel()
			#else:
			#	pass

		return False

	# automatic register..  after de-registered
	def automatic_register(self):
		roxia_trace('[R] automatic register. after de-registered')
		self.tag_register = None

		if self.try_register == False:
			# ka...2008.06.24:
			#vdci_reload()
			status.set_regstatus(0)
			def back_stage():
				runtime.manager.back_stage()
				return True
			self.back_timer = utils.Timer(2000, back_stage)
			return
		# ka...2008.06.24
		#runtime.manager.start_vdciapp()
		self.tag_register = utils.Timer(config.timeoutRegister, self.register_failed)
		vdci_reload()
		#import menu
		#runtime.manager.change_stage(menu.RegisteringStage)

	# deregi first
	def request_autoregister(self):
		#print 'ka....######### status.get_register_mode()=', status.get_register_mode()
		#print 'ka....######### status.get_regstatus()=', status.get_regstatus()
		if runtime.vdciapp and status.get_register_mode() == status.Registered:
			# KA: [20071121] TI IMS subscriber
			self.req_desubscriber()
			#runtime.vdciapp.req_desubscriber()
			# KA: [20071121] TI IMS subscriber ==
			#runtime.vdciapp.req_deregister()
			#self.tag_register = utils.Timer(config.timeoutDeregister, self.deregister_failed)
		else:
			self.automatic_register()
		return False

	def deregister_sucessed(self):
		roxia_trace('[R] AutoRegisteringStage.deregister_sucessed()')
		self.tag_register = None
		
		status.set_register_mode(status.NotRegistered)
		status.set_regstatus(0)
		self.automatic_register()

	def register_sucessed(self):
		roxia_trace('[R] AutoRegisteringStage.register_sucessed()')
		self.tag_register = None
		
		status.set_register_mode(status.Registered)
		if profile.get_profile() == 1: # lan
			status.LanConnected = True
		
		status.set_regstatus(1)

		utils.player.play_effect(config.SETTING_SUCCEEDED)

		message = _('Registration succeeded')
		stage = VoIPSettingNotifyStage(message)
		runtime.manager.change_stage(stage)


	def register_failed(self, msg=None):
		roxia_trace('[R] AutoRegisteringStage.register_failed()')
		self.tag_register = None

		status.set_register_mode(status.NotRegistered)

		status.set_regstatus(0)
		#RegistrationStage.ch_choice
		if not msg:
			msg = _('Registration failed')
		status.critical_entered = True
		stage = VoIPSettingNotifyStage(msg)
		runtime.manager.change_stage(stage)


	def deregister_failed(self):
		roxia_trace('[R] AutoRegisteringStage.deregister_failed()')
		self.tag_register = None

		#if status.get_register_mode() != status.Registering:
		#	return

		status.set_register_mode(status.NotRegistered)
		status.set_regstatus(0)
		self.automatic_register()

	def deregister_cancel(self):
		roxia_trace('[R] AutoRegisteringStage.deregister_cancel()')
		self.tag_register = None

		#if status.get_register_mode() != status.Registering:
		#	return

		#message = _('Registration cancelled')
		#import menu
		#stage = menu.VoIPSettingNotifyStage(message)
		import model
		runtime.manager.change_stage(model.IdleStage, True)

	def deregister_error(self):
		roxia_trace('[R] AutoRegisteringStage.deregister_error()')
		temp_mode = status.get_register_mode()
		self.tag_register = None

		status.set_register_mode(status.NotRegistered)
		status.set_regstatus(0)

		#if temp_mode != status.Registering:
		#	return

		message = _('Registration failed')

		import menu
		stage = menu.VoIPSettingNotifyStage(message)
		runtime.manager.change_stage(stage)
		
# 20080630 Desubscruber
	def req_desubscriber(self):
		if runtime.vdciapp.subscriber_success:
			runtime.vdciapp.req_desubscriber()
			self.tag_subscriber = utils.Timer(config.timeoutDeregister, self.desubscriber_failed)
		else:
			self.req_deregister()
			
	def desubscriber_failed(self):
		self.tag_subscriber = None
		self.req_deregister()

	def desubscriber_sucessed(self):
		self.tag_subscriber = None
		status.subscriber = False
		self.req_deregister()
		
	def req_deregister(self):	
		runtime.vdciapp.req_deregister()
		self.tag_register = utils.Timer(config.timeoutDeregister, self.deregister_failed)		
# 20080630 Desubscruber

	def destroy(self):
		self.tag_register = None
		basemodel.Stage.destroy(self)
		status.supervision_not_allowed = 0

		# start shchun: remove status.on_profile_changing
		#status.profile_changing = False
		# start shchun: remove status.on_profile_changing
		#status.on_profile_changing = False
	def show(self):
		basemodel.Stage.show(self)


# auto de-register.
# VoIP settings 에서 수정후 메뉴빠져나올때 수행됨
# 등록하라는 메세지만 출력하도록 수정함.
def do_autoderegister():
	import menu
	stage = menu.VoIPSettingNotifyStage(_('Please register to activate new setting'))
	runtime.manager.change_stage(stage)
		

class ApplyStage(basemodel.YesNoStage):

	def __init__(self, title):
		global cur_profile

		if cur_profile == lan_profile:
			message = _('Do you want to restart Ethernet interface?')
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			message = _('Do you want to restart wireless interface?')
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, title, self._icon)

	def yes_cb(self):

		# profile이 변경되면 , save 해줘야 한다. 06.07.08
		
		if status.profile_detail_changed == True:
			cur_profile.save()
			dns_profile.save()
		
		profile_setting = profile.get_profile()
			
		def cb():
			runtime.manager.dhcp_timer_kill()
			#runtime.manager.kill_check_dhcp_res()
# eicho add 06.09.08
#			runtime.manager.set_dhcp_renewal_time(0)
# end.
			if profile.get_profile() == 1:
				message = _('Ethernet profile applied.')
				status.profile_detail_changed = False
				os.system('eth0_stop')
				#time.sleep(1)
				###
				runtime.manager.release_change_profile_tmr()
				
				# start shchun: remove status.on_profile_changing
				#status.on_profile_changing = True	#아래 eth0_start에 의해 발생한 LINK_UP 이벤트 무시하기 위해서.
				if lan_profile.dhcp == 'yes':
					message = _('Determining IP information...')
					runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, isred=False))
					runtime.evas.render_now()
					
				os.system('eth0_start')

				if lan_profile.dhcp == 'yes':
					if os.path.exists('/tmp/dhcpcd-eth0.info') == False:
						# KA: [20080326] NEW DHCP 
#						runtime.manager.start_dhcpclient_LAN()
						message = _('IP determining failed')
						
						# register로 가면 안된다.
						runtime.manager.show_lan_disconnected = True
						runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon))
					else:
						runtime.manager.network_initialized = True
						status.LanConnected = True	# for change icon.
						#runtime.manager.after_dhcp_succ()
				else:
					status.LanConnected = True
					dns_profile.save()
					#runtime.manager.after_dhcp_succ()
			else:
				status.profile_detail_changed = False
				message = _('WiFi profile applied.')
				os.system('wlstop')

				if wifi_profile.dhcp == 'yes':
					message = _('Determining IP information...')
					runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, isred=False))
					runtime.evas.render_now()
					
				runtime.manager.vdci_deregister_kill()
				runtime.manager.release_change_profile_tmr()
				# WIFI 에서는 필요없다. 
				# start shchun: remove status.on_profile_changing
				#status.on_profile_changing = True	#아래 wlstart에 의해 발생한 LINK_UP 이벤트 무시하기 위해서.
				
				os.system('wlstart')
#Roxia Begin smyook 06.07.05
				status.wifi_connected = True
				if wifi_profile.dhcp == 'yes':
					os.system('wifi_dhcp')
					time.sleep(1)
					if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
						# start shchun: remove status.on_profile_changing
						#status.profile_changing = True
						# KA: [20080326] NEW DHCP 
						#runtime.manager.dhcp_timer = utils.Timer(config.dhcp_min, dhcp_client2)
#						runtime.manager.start_dhcpclient_WIFI()
						message = _('IP determining failed')
#Roxia Begin smyook 06.07.06
						runtime.manager.show_lan_disconnected = True
#Roxia End smyook
						#runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon))
#					else:
						#runtime.manager.ifconfig_run('wifi')
						#status.wifi_connected = True
						#dns_profile.dhcp_save()
						#runtime.manager.start_vdciapp()
						#0707 ka runtime.manager.init_vdciapp()
						#runtime.manager.after_dhcp_succ()
#Roxia End smyook
				#	else:
					#dns_profile.save()
					#runtime.manager.start_vdciapp()
					#0707 ka runtime.manager.start_vdciapp()
				roxia_trace('********* automatic register...(wifi) **********')
				# start shchun: remove status.on_profile_changing
				#print 'ka...status.on_profile_changing=', status.on_profile_changing
				runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, do_autoregister))
				
		def end_cb():
			def reset_cb():	
				import utils, time
				if runtime.vdciapp:
					runtime.vdciapp.req_deregister()
				time.sleep(1)				
				utils.releaseDhcp()
#MMW 2008.06.25 when reboot is called, reset vega and DCP related GPIO pin				
				utils.vega_reset_together()
#end of MMW	
#MMW	2008.07.07	when reboot send disassoc to AP and then unload the driver
				os.system('wlstop')
#end of MMW
				time.sleep(1)			

				os.system('reboot')			
			stage = basemodel.NotifyStage( _('The phone will be reboot shortly'), uiconfig.baloon_setting_system_reset_icon, reset_cb)
			runtime.manager.stack_stage(stage)

		def cb_lan():
			#message = _('Determining IP information...')
			message = _('Ethernet profile applied.')
			#runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, cb, 500))
			runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, end_cb, 500))

		def cb_wifi():
			#message = _('Determining IP information...')
			message = _('WiFi profile applied.')
			#runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, cb, 500))
			runtime.manager.change_stage(basemodel.NotifyStage(message, self._icon, end_cb, 500))
			
#Roxia Begin smyook 06.06.23
#		status.profile_changing = True
#Roxia End smyook
		runtime.manager.dhcp_timer_kill()
		#runtime.manager.kill_check_dhcp_res()
		runtime.manager.vdci_deregister_kill()
#Roxia Begin smyook 06.07.07
		status.set_regstatus(0)
#Roxia End smyook
		'''
		if runtime.vdciapp:
			runtime.vdciapp.req_deregister()
			time.sleep(1)
		'''
		
		if profile.get_profile() == 1:
			message = _('Restarting Ethernet network device')
			stage = basemodel.NotifyStage(message, self._icon, cb_lan)
			'''
			if lan_profile.dhcp == 'yes':
				stage = basemodel.NotifyStage(message, self._icon, cb2)
			else:
				stage = basemodel.NotifyStage(message, self._icon, cb)
			'''

		else:
			message = _('Restarting wireless network device')
			stage = basemodel.NotifyStage(message, self._icon, cb_wifi)
			'''
			if wifi_profile.dhcp == 'yes':
				stage = basemodel.NotifyStage(message, self._icon, cb2)
			else:
				stage = basemodel.NotifyStage(message, self._icon, cb)
			'''
		runtime.manager.change_stage(stage)


def Backstage_cb():
	runtime.manager.back_stage()


class AuthenticationStage(basemodel.ListStage):
	name = 'authenticationstage'
	title = _('AUTHENTICATION')

	def __init__(self):
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True :
			self.choice = ( _('Type'), _('WPA-PSK'),_('WPA2-PSK'))
		else :
			self.choice = ( _('Type'), _('WPA-PSK'))
#end of MMW	
		icon = uiconfig.wifi_icon

		basemodel.ListStage.__init__(self, self.choice, self.title)

	def show(self):
		basemodel.ListStage.show(self)
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True : 
			if wifi_profile.authentication == 'WPA-PSK':
				self.ui.set_focus(1)
			elif wifi_profile.authentication == 'WPA2-PSK':
				self.ui.set_focus(2)
			else :
				wifi_profile.authentication == 'OPEN'
				self.ui.set_focus(0)

		else :
			if wifi_profile.authentication == 'WPA-PSK':
				self.ui.set_focus(1)
			else:
				wifi_profile.authentication == 'OPEN'
				self.ui.set_focus(0)
#end of MMW
	def activate(self, index):
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True : 
			if index == 0:
				runtime.manager.stack_stage(AuthenticationTypeSelectStage)
			else :
				runtime.manager.stack_stage(EncryptionInputLargeStage(index))
		else :
			if index == 0:
				runtime.manager.stack_stage(AuthenticationTypeSelectStage)
			elif index == 1:
				runtime.manager.stack_stage(EncryptionInputLargeStage(index))
#end of MMW


class AuthenticationTypeSelectStage(basemodel.ListStage):
	title = _('SELECT AUTHENTICATION TYPE')
	def __init__(self):
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True : 	
			self.choice = ( _('Do not use authentication'),  _('Use WPA-PSK'),  _('Use WPA2-PSK'))
		else :
			self.choice = ( _('Do not use authentication'),  _('Use WPA-PSK'))
#end of MMW
		icon = uiconfig.wifi_icon
#MMW
		basemodel.ListStage.__init__(self, self.choice)
#		basemodel.ListStage.__init__(self)
#end of MMW

	def show(self):
		basemodel.ListStage.show(self)
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True :
			if wifi_profile.authentication == 'WPA-PSK':
				self.ui.set_focus(1)
			elif wifi_profile.authentication == 'WPA2-PSK':
				self.ui.set_focus(2)
			else:
				wifi_profile.authentication == 'OPEN'
				self.ui.set_focus(0)
		else :
			if wifi_profile.authentication == 'WPA-PSK':
				self.ui.set_focus(1)
			else:
				wifi_profile.authentication == 'OPEN'
				self.ui.set_focus(0)
#end of MMW
	def activate(self, index):
#MMW	//2007.04.28 WPA2-PSK
		if status.debug_mode == True :	
			if index == 0:
				if wifi_profile.authentication != 'OPEN':
					status.profile_detail_changed = True
				wifi_profile.authentication = 'OPEN'
			elif index ==1 :
				if wifi_profile.encryption != 'NONE':
					runtime.manager.stack_stage(basemodel.NotifyStage(_('Please disable WEP encryption first.'), uiconfig.baloon_wifi_icon))
					return True

				if wifi_profile.authentication != 'WPA-PSK':
					status.profile_detail_changed = True
				wifi_profile.authentication = 'WPA-PSK'
			else:
				if wifi_profile.encryption != 'NONE':
					runtime.manager.stack_stage(basemodel.NotifyStage(_('Please disable WEP encryption first.'), uiconfig.baloon_wifi_icon))
					return True

				if wifi_profile.authentication != 'WPA2-PSK':
					status.profile_detail_changed = True
				wifi_profile.authentication = 'WPA2-PSK'
		else :
			if index == 0:
				if wifi_profile.authentication != 'OPEN':
					status.profile_detail_changed = True
				wifi_profile.authentication = 'OPEN'
			else:
				if wifi_profile.encryption != 'NONE':
					runtime.manager.stack_stage(basemodel.NotifyStage(_('Please disable WEP encryption first.'), uiconfig.baloon_wifi_icon))
					return True

				if wifi_profile.authentication != 'WPA-PSK':
					status.profile_detail_changed = True
				wifi_profile.authentication = 'WPA-PSK'
#end of MMW
		# 07.08 wifi_profile.save()
		status.profile_detail_changed = True
		runtime.manager.change_stage(basemodel.NotifyStage(_('Authentication set'), uiconfig.baloon_wifi_icon))


class EncryptionStage(basemodel.ListStage):
	name = 'encryptionstage'
	title = _('ENCRYPTION')
	choice = ( _('Type'), _('WEP 64 bits'), _('WEP 128 bits'))
	icon = uiconfig.wifi_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def show(self):
		basemodel.ListStage.show(self)
		if wifi_profile.encryption == 'WEP64BIT':
			self.ui.set_focus(1)
		elif wifi_profile.encryption == 'WEP128BIT':
			self.ui.set_focus(2)
		else:
			wifi_profile.encryption == 'NONE'
			self.ui.set_focus(0)

	def activate(self, index):
		if index == 0:
			runtime.manager.stack_stage(EncryptionTypeSelectStage)
		else:
#ka...malaga 2007.04.11
# KA: [20080421] wifi index
			runtime.manager.stack_stage(EncryptionSeleteStage(index-1))
#			runtime.manager.stack_stage(EncryptionInputSmallStage(index-1))


class EncryptionTypeSelectStage(basemodel.ListStage):
	title = _('SELECT ENCYPTION TYPE')
	choice = ( _('Do not use encryption'), _('Use WEP 64 bits encryption'), _('Use WEP 128 bits encryption'))
	icon = uiconfig.wifi_icon
	def __init__(self):
		basemodel.ListStage.__init__(self)
		self.ui.set_focus(self.ui.get_focus())

	def show(self):
		basemodel.ListStage.show(self)
		if wifi_profile.encryption == 'WEP64BIT':
			self.ui.set_focus(1)
		elif wifi_profile.encryption == 'WEP128BIT':
			self.ui.set_focus(2)
		else:
			wifi_profile.encryption == 'NONE'
			self.ui.set_focus(0)

	def activate(self, index):
		if index == 0:
			if wifi_profile.encryption != 'NONE':
				status.profile_detail_changed = True
			wifi_profile.encryption = 'NONE'
		else:
			if wifi_profile.authentication != 'OPEN':
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Please disable WPA-PSK first.'), uiconfig.baloon_wifi_icon))
				return True

			if index == 1:
				if wifi_profile.encryption != 'WEP64BIT':
					wifi_profile.encryption = 'WEP64BIT'
					#status.profile_detail_changed = True
			else:
				if wifi_profile.encryption != 'WEP128BIT':
					wifi_profile.encryption = 'WEP128BIT'
					#status.profile_detail_changed = True
		# 07.08 wifi_profile.save()
		status.profile_detail_changed = True
		runtime.manager.change_stage(basemodel.NotifyStage(_('Encryption set'), uiconfig.baloon_wifi_icon))


class EncryptionSeleteStage(basemodel.ListStage):
	icon = uiconfig.wifi_icon
	def __init__(self, mode):
		self.mode = mode
		_title = _('SELECT KEY INDEX')
		self.old_choice = self.makelist()
		self.new_choice = None
		basemodel.ListStage.__init__(self, self.old_choice, _title)

	def show(self):
		self.new_choice = self.makelist()
		if self.new_choice != self.old_choice:
			self.old_choice = self.new_choice[:]
			basemodel.ListStage.change_choice(self, self.old_choice)
		basemodel.ListStage.show(self)

	def makelist(self):
		choice = []
		if self.mode == 0:
			choice = [_('Select key index: ')+unicode(wifi_profile.wepkeyno_64)]
		else:
			choice = [_('Select key index: ')+unicode(wifi_profile.wepkeyno_128)]
		choice.extend([_('Enter key 1 value'), _('Enter key 2 value'), _('Enter key 3 value'), _('Enter key 4 value')])
		return tuple(choice)

	def activate(self, index):
		if index == 0:
			runtime.manager.stack_stage(EncryptionSeleteKeyStage(self.mode))
		else:
			runtime.manager.stack_stage(EncryptionInputSmallStage(self.mode, index))

class EncryptionSeleteKeyStage(basemodel.ListStage):
	icon = uiconfig.wifi_icon
	def __init__(self, mode):
		self.mode = mode
		if self.mode == 0:
			_title  = _('WEP 64 BITS')
		else:
			_title  = _('WEP 128 BITS')
		choice = (_('Key 1'), _('Key 2'), _('Key 3'), _('Key 4'))
		basemodel.ListStage.__init__(self, choice, _title)

	def activate(self, index):
		isset = False
		if self.mode==0:
			if index == 0 and wifi_profile.wepkey1_64 or index == 1 and wifi_profile.wepkey2_64 or \
				index == 2 and wifi_profile.wepkey3_64 or index == 3 and wifi_profile.wepkey4_64:
				wifi_profile.encryption = 'WEP64BIT'
				wifi_profile.wepkeyno_64 = repr(index+1)
				isset =True
		else:
			if index == 0 and wifi_profile.wepkey1_128 or index == 1 and wifi_profile.wepkey2_128 or \
				index == 2 and wifi_profile.wepkey3_128 or index == 3 and wifi_profile.wepkey4_128:
				wifi_profile.encryption = 'WEP128BIT'
				wifi_profile.wepkeyno_128 = repr(index+1)
				isset = True
		if isset:
			if self.mode == 0:
				wifi_profile.encryption = 'WEP64BIT'
			else:
				wifi_profile.encryption == 'WEP128BIT'
			# 07.08 wifi_profile.save()
			runtime.manager.change_stage(basemodel.NotifyStage(_('Encryption set'), uiconfig.baloon_wifi_icon, Backstage_cb))
			status.profile_detail_changed = True
		else:
			runtime.manager.stack_stage(basemodel.NotifyStage(_('Key')+' '+repr(index+1)+' '+_('empty'), uiconfig.baloon_wifi_icon))

#ka...3800 wifi malaga 2007.04.06 added
class EncryptionInputStage(basemodel.Stage):
	def __init__(self, mode, wifi_info, num, mac_mode):
		self.mode = mode
		self.wifi_info = wifi_info
		self.num = num
		self.mac_mode = mac_mode

		if self.mode == 0:
			_title = _('WEP 64 BITS')
		else:
			_title = _('WEP 128 BITS')

		keyvalue = '' 
		if self.mode == 0:
			key = int(wifi_profile.wepkeyno_64)
			if key == 1:
				keyvalue =  wifi_profile.wepkey1_64
			elif key == 2:
				keyvalue =  wifi_profile.wepkey2_64
			elif key == 3:
				keyvalue =  wifi_profile.wepkey3_64
			elif key == 4:
				keyvalue =  wifi_profile.wepkey4_64
			if keyvalue:
				#ka...3800 wifi 2007.05.01
				if len(keyvalue) > 5:
					keyvalue = keyvalue[2:]
				#self.ui.set_max(10)
				#keyvalue = wifi_profile.wepkey1_64.replace('-','')
				#self.ui.set_text(keyvalue)
				max = 10
		else:
			key = int(wifi_profile.wepkeyno_128)
			if key == 1:
				keyvalue =  wifi_profile.wepkey1_128
			elif key == 2:
				keyvalue =  wifi_profile.wepkey2_128
			elif key == 3:
				keyvalue =  wifi_profile.wepkey3_128
			elif key == 4:
				keyvalue =  wifi_profile.wepkey4_128
			if keyvalue:
				#ka...3800 wifi 2007.05.01
				if len(keyvalue) > 13:
					keyvalue = keyvalue[2:]
				#self.ui.set_max(26)
				#keyvalue = wifi_profile.wepkey1_128.replace('-','')
				#self.ui.set_text(keyvalue)
				max = 26
 		self.key = key
		#self.ui = baseui.EntryUI( _('OK'),'', _title, _('Enter wireless key'), menu4=_('BACK'))
		self.ui = baseui.EntryUI( _('OK'),'', _title, _('Enter wireless')+' '+_('Key ')+unicode(repr(key)), menu4=_('BACK'))
		self.ui.set_automata('multitap', 'lower') #*utils.get_def_automata())			#입력 방식 설정
		self.ui.set_max(max)
		self.ui.set_text(keyvalue)

	def show(self):
		status.password_style = True
		basemodel.Stage.show(self)

	def hide(self):
		status.password_style = False
		basemodel.Stage.hide(self)

	def destroy(self):
		status.password_style = False
		basemodel.Stage.destroy(self)

	def activate(self):
		if wifi_profile.essid != self.wifi_info[1] or wifi_profile.channelid != self.wifi_info[2] or wifi_profile.security != self.wifi_info[3] or wifi_profile.signallevel != self.wifi_info[4] or wifi_profile.bitrate != self.wifi_info[5]:
			status.profile_detail_changed = True
		wifi_profile.set_scaninfo(self.wifi_info, self.mac_mode)
		if self.num == 0:
			def cb2():
				try_register = True
				message = _('WiFi profile enabled.')

				if wifi_profile.dhcp == 'yes':
					# KA: [20080402] NEW WIFI
					os.system('wlstart')
					time.sleep(1)
					# KA: [20080402] NEW WIFI ==
					if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
						runtime.manager.vdci_deregister_kill()
						runtime.manager.dhcp_timer_kill()
						#runtime.manager.dhcp_timer = utils.Timer(config.dhcp_min, dhcp_client2)
						message = _('IP determining failed')
						try_register = False
					else:
#						runtime.manager.ifconfig_run('wifi')
						runtime.manager.start_vdciapp()
						#dns_profile.dhcp_save()
				else:
					dns_profile.save()
					runtime.manager.start_vdciapp()

#ka...3007.04.10 history 에 X면....
				if runtime.manager.find_stage('wifiprofile setting'):
					runtime.manager.back_stage('wifiprofile setting')
				elif runtime.manager.find_stage('wifisetting menu'):
					runtime.manager.back_stage('wifisetting menu')
				else:
					import model
					runtime.manager.change_stage(model.IdleStage, True)

				if try_register:
					stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon, cb=do_autoregister, isred=False)
				else:
					stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon)
				runtime.manager.stack_stage(stage)

			def cb():
				os.system('wlstop')
				os.system('wlstart')
				cb2()

			runtime.manager.dhcp_timer_kill()
			runtime.manager.change_stage(basemodel.NotifyStage(_('Determining IP information...'), uiconfig.baloon_wifi_icon, cb, 500))
		else:
			if runtime.manager.find_stage('wifiprofile setting'):
				runtime.manager.back_stage('wifiprofile setting')
			elif runtime.manager.find_stage('wifisetting menu'):
				runtime.manager.back_stage('wifisetting menu')
			else:
				import model
				runtime.manager.change_stage(model.IdleStage, True)
			stage = ApplyStage(_('WiFi SETTING'))
			runtime.manager.stack_stage(stage)
#			runtime.manager.change_stage(basemodel.NotifyStage(_('WiFi Set.'), uiconfig.baloon_wifi_icon))


	def activate_menu1(self):
		text = self.ui.get_text()
		if self.mode == 0:
			if len(text) == 5 or len(text) == 10 or len(text) == 12:
				if len(text) == 10 or len(text) == 12:
					for i in text:
						if '0123456789abcdefABCDEF'.find(i) == -1:
							runtime.manager.stack_stage(basemodel.NotifyStage(_('Invalid input value.')+'\n'+_('Please use hexadecimal input value.'), uiconfig.baloon_wifi_icon))
							return
				if len(text) == 12:
					if text[:2].lower() != '0x':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
						return
#ka...3800 wifi 2007.05.01
# KA: [20080421] wifi index
				if len(text) == 5:
					text = text
				else:
					text =  '0x' + text
				if self.key == 1:
					wifi_profile.wepkey1_64 = text
				elif self.key == 2:
					wifi_profile.wepkey2_64 = text
				elif self.key == 3:
					wifi_profile.wepkey3_64 = text
				elif self.key == 4:
					wifi_profile.wepkey4_64 = text
# KA: [20080421] wifi index
#				if self.key == 1:
				#wifi_profile.wepkey1_64 = text
				# 07.08 wifi_profile.save()
				status.profile_detail_changed = True
#				runtime.manager.change_stage(basemodel.NotifyStage(_('Key 1 saved'), uiconfig.baloon_wifi_icon))	
#				InfoShowStage.activate(num2=0)
				self.activate()

			else:
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
				return
		elif self.mode == 1:
			if len(text) == 28 or len(text) == 13 or len(text) == 26:
				if len(text) == 26 or len(text) == 28:
					for i in text:
						if '0123456789abcdefABCDEF'.find(i) == -1:
							runtime.manager.stack_stage(basemodel.NotifyStage(_('Invalid input value.')+'\n'+_('Please use hexadecimal input value.'), uiconfig.baloon_wifi_icon))
							return
				if len(text) == 28:
					if text[:2].lower() != '0x':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
						return
# eicho modify to fix wording problem. 06.06.22
#				if self.key == 1:

#ka...3800 wifi 2007.05.01
# KA: [20080421] wifi index
				if len(text) == 13:
					text = text
				else:
					text =  '0x' + text
				if self.key == 1:
					wifi_profile.wepkey1_128 = text
				elif self.key == 2:
					wifi_profile.wepkey2_128 = text
				elif self.key == 3:
					wifi_profile.wepkey3_128 = text
				elif self.key == 4:
					wifi_profile.wepkey4_128 = text
# KA: [20080421] wifi index ==
				#wifi_profile.wepkey1_128 = text
				# 07.08 wifi_profile.save()
				status.profile_detail_changed = True
#				runtime.manager.change_stage(basemodel.NotifyStage(_('Key 1 saved'), uiconfig.baloon_wifi_icon))				
#				InfoShowStage.activate(num2=0)
				self.activate()
			else:
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
				return

	def insert_symbol(self, s):
		before_text = self.ui.get_text()
		self.ui.insert_text(s)
		after_text = self.ui.get_text()
		if before_text == after_text:
			runtime.manager.change_stage(basemodel.NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
		else:
			runtime.manager.back_stage()

	def handle_key(self, key):
		if key == config.Menu1:	#options Menu(left key)
			self.ui.reset_automata()
			self.activate_menu1()
		elif key == config.Menu2:
			if self.ui.handle_key(key):
				return True
			runtime.manager.back_stage()
		elif key == '#':
			self.automata_idx = utils.get_automata_idx(*self.ui.automata)
			self.automata_idx += 1
			if self.automata_idx >= len(config.automata_list):
				self.automata_idx = 3
			name, casemode = config.automata_list[self.automata_idx]
			self.ui.set_automata(name, casemode)
		elif key == '*':
			self.ui.reset_automata()
			runtime.manager.stack_stage(basemodel.SymbolSelectionStage(self, True))

		else:
			return self.ui.handle_key(key)
		return True



#mode : 0_64, 1_128, 2_wpa, key : key
class EncryptionInputSmallStage(basemodel.Stage):
	def __init__(self, mode, index):
#ka...malaga 2007.04.11
#	def __init__(self, mode, key):
		self.mode = mode
		#self.key=1
		self.key = index
		
		if self.mode == 0:
			_title = _('WEP 64 BITS')
		else:
			_title = _('WEP 128 BITS')

		#self.ui = baseui.EntryUI( _('OK'), _('BACK'), _title, _('Enter wireless key'))
		self.ui = baseui.EntryUI( _('OK'), _('BACK'), _title,  _('Key ')+unicode(repr(self.key)))
		self.ui.set_automata('multitap', 'lower') #*utils.get_def_automata())			#입력 방식 설정
		self.automata_idx = 3
# KA: [20080421] wifi index
		keyvalue =''
		if self.mode == 0:
			self.ui.set_max(10)
			if self.key == 1 and wifi_profile.wepkey1_64:
				keyvalue = wifi_profile.wepkey1_64
			elif self.key == 2 and wifi_profile.wepkey2_64:
				keyvalue = wifi_profile.wepkey2_64
			elif self.key == 3 and wifi_profile.wepkey3_64:
				keyvalue = wifi_profile.wepkey3_64
			elif self.key == 4 and wifi_profile.wepkey4_64:
				keyvalue = wifi_profile.wepkey4_64
			if keyvalue:
				if len(keyvalue) > 5:
					keyvalue = keyvalue[2:]			
				self.ui.set_text(keyvalue)
		else:
			self.ui.set_max(26)
			if self.key == 1 and wifi_profile.wepkey1_128:
				keyvalue = wifi_profile.wepkey1_128
			elif self.key == 2 and wifi_profile.wepkey2_128:
				keyvalue = wifi_profile.wepkey2_128
			elif self.key == 3 and wifi_profile.wepkey3_128:
				keyvalue = wifi_profile.wepkey3_128
			elif self.key == 4 and wifi_profile.wepkey4_128:
				keyvalue = wifi_profile.wepkey4_128
			if keyvalue:
				if len(keyvalue) > 13:
					keyvalue = keyvalue[2:]		
				self.ui.set_text(keyvalue)
		
		'''
		if self.mode == 0:
			self.ui.set_max(10)
			if self.key == 1 and wifi_profile.wepkey1_64:
				#ka..3800 wifi 2007.05.01
				keyvalue = wifi_profile.wepkey1_64
				if len(keyvalue) > 5:
					keyvalue = keyvalue[2:]			
				#keyvalue = wifi_profile.wepkey1_64.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 2 and wifi_profile.wepkey2_64:
				keyvalue = wifi_profile.wepkey2_64.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 3 and wifi_profile.wepkey3_64:
				keyvalue = wifi_profile.wepkey3_64.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 4 and wifi_profile.wepkey4_64:
				keyvalue = wifi_profile.wepkey4_64.replace('-','')
				self.ui.set_text(keyvalue)
		else:
			self.ui.set_max(26)
			if self.key == 1 and wifi_profile.wepkey1_128:
				#ka..3800 wifi 2007.05.01
				keyvalue = wifi_profile.wepkey1_128
				if len(keyvalue) > 13:
					keyvalue = keyvalue[2:]		
				#keyvalue = wifi_profile.wepkey1_128.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 2 and wifi_profile.wepkey2_128:
				keyvalue = wifi_profile.wepkey2_128.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 3 and wifi_profile.wepkey3_128:
				keyvalue = wifi_profile.wepkey3_128.replace('-','')
				self.ui.set_text(keyvalue)
			elif self.key == 4 and wifi_profile.wepkey4_128:
				keyvalue = wifi_profile.wepkey4_128.replace('-','')
				self.ui.set_text(keyvalue)
		'''
# KA: [20080421] wifi index ==
	def show(self):
		status.password_style = True
		basemodel.Stage.show(self)

	def hide(self):
		status.password_style = False
		basemodel.Stage.hide(self)

	def destroy(self):
		status.password_style = False
		basemodel.Stage.destroy(self)

	def activate_menu1(self):
		text = self.ui.get_text()
		if self.mode == 0:
			if len(text) == 5 or len(text) == 10 or len(text) == 12:
				if len(text) == 10 or len(text) == 12:
					for i in text:
						if '0123456789abcdefABCDEF'.find(i) == -1:
							runtime.manager.stack_stage(basemodel.NotifyStage(_('Invalid input value.')+'\n'+_('Please use hexadecimal input value.'), uiconfig.baloon_wifi_icon))
							return

				if len(text) == 12:
					if text[:2].lower() != '0x':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
						return
# eicho modify to fix wording problem. 06.06.22

				if self.key == 1:
#ka...3800 wifi 2007.05.01
					if len(text) == 5:
						wifi_profile.wepkey1_64 = text
					else:
						wifi_profile.wepkey1_64 =  '0x' + text
					#wifi_profile.wepkey1_64 = text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key')+' 1 '+_('saved'), uiconfig.baloon_wifi_icon))	
					#runtime.manager.change_stage(basemodel.NotifyStage(_('Key  saved'), uiconfig.baloon_wifi_icon))	
				elif self.key == 2:
					if len(text) == 5:
						wifi_profile.wepkey2_64 = text
					else:
						wifi_profile.wepkey2_64 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 2 saved'), uiconfig.baloon_wifi_icon))
				elif self.key == 3:
					if len(text) == 5:
						wifi_profile.wepkey3_64 = text
					else:
						wifi_profile.wepkey3_64 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 3 saved'), uiconfig.baloon_wifi_icon))
				elif self.key == 4:
					if len(text) == 5:
						wifi_profile.wepkey4_64 = text
					else:
						wifi_profile.wepkey4_64 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 4 saved'), uiconfig.baloon_wifi_icon))
				### removed
				'''
				else:
					wifi_profile.wepkey4_64 = text
				wifi_profile.save()
				runtime.manager.change_stage(_('Key')+' '+repr(self.key)+' '+_('saved'), uiconfig.baloon_wifi_icon))
				'''
			else:
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
				return
		elif self.mode == 1:
			if len(text) == 28 or len(text) == 13 or len(text) == 26:
				if len(text) == 26 or len(text) == 28:
					for i in text:
						if '0123456789abcdefABCDEF'.find(i) == -1:
							runtime.manager.stack_stage(basemodel.NotifyStage(_('Invalid input value.')+'\n'+_('Please use hexadecimal input value.'), uiconfig.baloon_wifi_icon))
							return
				if len(text) == 28:
					if text[:2].lower() != '0x':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
						return
# eicho modify to fix wording problem. 06.06.22
				if self.key == 1:
#ka...3800 wifi 2007.05.01
					if len(text) == 13:
						wifi_profile.wepkey1_128 = text
					else:
						wifi_profile.wepkey1_128 =  '0x' + text
					#wifi_profile.wepkey1_128 = text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key')+' 1 '+_('saved'), uiconfig.baloon_wifi_icon))				
				elif self.key == 2:
					if len(text) == 13:
						wifi_profile.wepkey2_128 = text
					else:
						wifi_profile.wepkey2_128 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 2 saved'), uiconfig.baloon_wifi_icon))
				elif self.key == 3:
					if len(text) == 13:
						wifi_profile.wepkey3_128 = text
					else:
						wifi_profile.wepkey3_128 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 3 saved'), uiconfig.baloon_wifi_icon))
				elif self.key == 4:
					if len(text) == 13:
						wifi_profile.wepkey4_128 = text
					else:
						wifi_profile.wepkey4_128 =  '0x' + text
					# 07.08 wifi_profile.save()
					status.profile_detail_changed = True
					runtime.manager.change_stage(basemodel.NotifyStage(_('Key 4 saved'), uiconfig.baloon_wifi_icon))
				### removed
				'''
				wifi_profile.save()
				status.profile_detail_changed = True
				runtime.manager.change_stage(basemodel.NotifyStage(_('Key')+' '+repr(self.key)+' '+_('saved'), uiconfig.baloon_wifi_icon))
				'''
			else:
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Input valid characters'), uiconfig.baloon_wifi_icon))
				return

	def insert_symbol(self, s):
		before_text = self.ui.get_text()
		self.ui.insert_text(s)
		after_text = self.ui.get_text()
		if before_text == after_text:
			runtime.manager.change_stage(basemodel.NotifyStage(_('Max length exceeded'), uiconfig.baloon_message_icon))
		else:
			runtime.manager.back_stage()

	def handle_key(self, key):
		if key == config.Menu1:	#options Menu(left key)
			self.ui.reset_automata()
			self.activate_menu1()
		elif key == config.Menu2:
			if self.ui.handle_key(key):
				return True
			runtime.manager.back_stage()
			
		elif key == 'SOFT4':	
			# vpark 2007.08.28 automata		
			self.automata_idx = (self.automata_idx + 1) % len(config.automata_list)	
			self.ui.automata = config.automata_list[self.automata_idx]				
			self.ui.set_automata(*self.ui.automata)		
			return True
		else:
			return self.ui.handle_key(key)
		return True

#ka..malaga 2007.04.10
class AuthenticationInputStage(basemodel.Stage):
	def __init__(self, wifi_info, num, mac_mode):
		self.wifi_info = wifi_info
		self.num = num
		self.mac_mode = mac_mode
		self.ui = baseui.EntryUI( _('OK'), _('BACK'), _('WPA-PSK(TKIP)'), _('Enter passphrase'))
		self.ui.set_max(63)
		self.ui.set_automata('multitap', 'lower')
#ka...3800 wifi 2007.04.25
		if wifi_profile.wpa_psk_tkip:
			self.ui.set_text(wifi_profile.wpa_psk_tkip)
#Roxia End smyook

	def show(self):
		status.password_style = True
		basemodel.Stage.show(self)

	def hide(self):
		status.password_style = False
		basemodel.Stage.hide(self)

	def destroy(self):
		status.password_style = False
		basemodel.Stage.destroy(self)

	def activate_menu1(self):
		text = self.ui.get_text()
		if len(text)>=8 and len(text)<=63:
#ka... 3800 wifi 2007.04.25
			wifi_profile.wpa_psk_tkip = text
			status.profile_detail_changed = True
			runtime.manager.change_stage(basemodel.NotifyStage(_('Passphrase set'), uiconfig.baloon_wifi_icon, Backstage_cb))

#		if wifi_profile.essid != self.wifi_info[1] or wifi_profile.channelid != self.wifi_info[2] or wifi_profile.security != self.wifi_info[3] or wifi_profile.signallevel != self.wifi_info[4] or wifi_profile.bitrate != self.wifi_info[5]:
#			status.profile_detail_changed = True
			wifi_profile.set_scaninfo(self.wifi_info, self.mac_mode)
			if self.num == 0:
				def cb2():
					try_register = True
					message = _('WiFi profile enabled.')

					if wifi_profile.dhcp == 'yes':
						if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
							runtime.manager.vdci_deregister_kill()
							runtime.manager.dhcp_timer_kill()
							#runtime.manager.dhcp_timer = utils.Timer(config.dhcp_min, dhcp_client2)
							message = _('IP determining failed')
							try_register = False
						else:
#							runtime.manager.ifconfig_run('wifi')
							runtime.manager.start_vdciapp()
							#dns_profile.dhcp_save()
					else:
						dns_profile.save()
						runtime.manager.start_vdciapp()

#ka...3007.04.10 history 에 X면....
					if runtime.manager.find_stage('wifiprofile setting'):
						runtime.manager.back_stage('wifiprofile setting')
					elif runtime.manager.find_stage('wifisetting menu'):
						runtime.manager.back_stage('wifisetting menu')
					else:
						import model
						runtime.manager.change_stage(model.IdleStage, True)
					
					if try_register:
						stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon, cb=do_autoregister, isred=False)
					else:
						stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon)
					runtime.manager.stack_stage(stage)

				def cb():
					os.system('wlstop')
					os.system('wlstart')
					cb2()

				runtime.manager.dhcp_timer_kill()
				runtime.manager.change_stage(basemodel.NotifyStage(_('Determining IP information...'), uiconfig.baloon_wifi_icon, cb, 500))
			else:
				if runtime.manager.find_stage('wifiprofile setting'):
					runtime.manager.back_stage('wifiprofile setting')
				elif runtime.manager.find_stage('wifisetting menu'):
					runtime.manager.back_stage('wifisetting menu')
				else:
					import model
					runtime.manager.change_stage(model.IdleStage, True)
				stage = ApplyStage(_('WiFi SETTING'))
				runtime.manager.stack_stage(stage)
#			runtime.manager.change_stage(basemodel.NotifyStage(_('WiFi Set.'), uiconfig.baloon_wifi_icon))
		else:
			runtime.manager.stack_stage(basemodel.NotifyStage(_('Input 8~63 characters'), uiconfig.baloon_wifi_icon))

	def insert_symbol(self, s):
		self.ui.insert_text(s)
		runtime.manager.back_stage()

	def handle_key(self, key):
		if key in '1234567890*' and self.ui.entry.full() and not self.ui.entry._automata._last_ch:
			runtime.manager.stack_stage(basemodel.NotifyStage(_('Maximum Passphrase Size is 63.'), uiconfig.baloon_wifi_icon))
		elif key == config.Menu1:	#options Menu(left key)
			self.ui.reset_automata()
			self.activate_menu1()
		elif key == config.Menu2:
			if self.ui.handle_key(key):
				return True
			runtime.manager.back_stage()

		elif key == '#':
			self.automata_idx = utils.get_automata_idx(*self.ui.automata)
			self.automata_idx += 1
			if self.automata_idx >= len(config.automata_list):
				self.automata_idx = 3
			name, casemode = config.automata_list[self.automata_idx]
			self.ui.set_automata(name, casemode)

		elif key == '*':
			self.ui.reset_automata()
			runtime.manager.stack_stage(basemodel.SymbolSelectionStage(self, True))
		else:
			return self.ui.handle_key(key)
		return True



class EncryptionInputLargeStage(basemodel.Stage):
#MMW 2007.04.28
	def __init__(self, index):
#	def __init__(self):
#end of MMW
#MMW 2007.04.28
		self.index = index
		if self.index == 2 : 
			self.ui = baseui.EntryUI( _('OK'), _('BACK'), _('WPA2-PSK(AES)'), _('Enter passphrase'))
		else  :
			self.ui = baseui.EntryUI( _('OK'), _('BACK'), _('WPA-PSK(TKIP)'), _('Enter passphrase'))
#end of MMW
		self.ui.set_max(63)
		# English only	
		self.ui.set_automata('multitap', 'lower')	
		self.automata_idx = 3
		
#ka...3800 wifi 2007.04.25
#MMW 2007.04.28
		if self.index == 2 : 
			if wifi_profile.wpa2_psk_ccmp:
				self.ui.set_text(wifi_profile.wpa2_psk_ccmp)
		else :
			if wifi_profile.wpa_psk_tkip:
				self.ui.set_text(wifi_profile.wpa_psk_tkip)
#Roxia End smyook

	def show(self):
		status.password_style = True
		basemodel.Stage.show(self)

	def hide(self):
		status.password_style = False
		basemodel.Stage.hide(self)

	def destroy(self):
		status.password_style = False
		basemodel.Stage.destroy(self)

	def activate_menu1(self):
		text = self.ui.get_text()
		if len(text)>=8 and len(text)<=63:
#Roxia Begin smyook 06.06.09
# ka... 3800 wifi 2007.04.25
#MMW 2007.04.28
			if self.index == 2 : 
				wifi_profile.wpa2_psk_ccmp = text
			else :	
				wifi_profile.wpa_psk_tkip = text
#end of MMW
#Roxia End smyook
			# 07.08 wifi_profile.save()
			status.profile_detail_changed = True
			runtime.manager.change_stage(basemodel.NotifyStage(_('Passphrase set'), uiconfig.baloon_wifi_icon, Backstage_cb))
		else:
			runtime.manager.stack_stage(basemodel.NotifyStage(_('Input 8~63 characters'), uiconfig.baloon_wifi_icon))

	def insert_symbol(self, s):
		self.ui.insert_text(s)
		runtime.manager.back_stage()

	def handle_key(self, key):
		if key in '1234567890*' and self.ui.entry.full() and not self.ui.entry._automata._last_ch:
			runtime.manager.stack_stage(basemodel.NotifyStage(_('Maximum Passphrase Size is 63.'), uiconfig.baloon_wifi_icon))
		elif key == config.Menu1:	#options Menu(left key)
			self.ui.reset_automata()
			self.activate_menu1()
		elif key == config.Menu2:
			if self.ui.handle_key(key):
				return True
			runtime.manager.back_stage()
		elif key == 'SOFT4':	
			# vpark 2007.08.28 automata		
			self.automata_idx = (self.automata_idx + 1) % len(config.automata_list)	
			self.ui.automata = config.automata_list[self.automata_idx]				
			self.ui.set_automata(*self.ui.automata)		
			return True

		else:
			return self.ui.handle_key(key)
		return True


class ChannelIdStage(basemodel.ListStage):
	title = _('Channel ID')
	choice = (_('Channel 01'), _('Channel 02'), _('Channel 03'), _('Channel 04'), _('Channel 05'), _('Channel 06'),
		_('Channel 07'), _('Channel 08'), _('Channel 09'), _('Channel 10'), _('Channel 11'), _('Channel 12'), _('Channel 13'))
	icon = uiconfig.wifi_icon

	def __init__(self):
		basemodel.ListStage.__init__(self)
		self.ui.set_focus(int(wifi_profile.channelid)-1)

	def activate(self, index):
		old_channelid = wifi_profile.channelid
		wifi_profile.set_chid(index+1)
		runtime.manager.change_stage(basemodel.NotifyStage(_('Channel ID Set'), uiconfig.baloon_wifi_icon))
		if old_channelid != index + 1:
			status.profile_detail_changed = True

class LANSettingsStage(basemodel.ListStage):
	title = _('LAN SETTINGS')
	choice = (_('Network settings'), _('Apply'))
	icon = uiconfig.setting_system_network_icon

#eicho 06.07.07
	global cur_profile
	cur_profile = lan_profile

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)
		status.save_callback_other = save_callback

	def destroy(self):
		status.save_callback_other = None
		basemodel.ListStage.destroy(self)

	def activate(self, index):
		if index == 0: # Network settings
			stage = LANSettingStage
			runtime.manager.stack_stage(stage)
		else:
			stage = ApplyStage(_('LAN'))
			runtime.manager.stack_stage(stage)
	def handle_key(self, key):
		if key == config.Menu2 or key == config.Red:
			if status.profile_detail_changed == True:
				'''
				cur_profile.not_changed(True)
				dns_profile.not_changed(True)
				'''
				cur_profile.except_apply(True)
				dns_profile.except_apply(True)
				status.profile_detail_changed = False
				runtime.manager.change_stage(basemodel.NotifyStage(_('Changed settings will be cancelled'), uiconfig.baloon_profile_setting_icon))
				#runtime.manager.change_stage(basemodel.NotifyStage(_('Select apply option to activate new setting'), uiconfig.baloon_profile_setting_icon))
				
				return True
		return basemodel.ListStage.handle_key(self, key)

class PPPoEStage(basemodel.ListStage):
	title = _('PPPoE')
	name = 'PPPoE setting'
	profile_setting = 0
	icon = uiconfig.setting_system_network_icon

	def __init__(self):
		# check pppoe state
		self.info=[]
		self.user=''
		self.user_index= 0 
		self.ID = '' 
		self.PWD = '' 
		if self.check_pppoe():
			self.choice = (_('Disable'), _('Settings'))
		else:
			self.choice = (_('Enable'),)
	
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def check_pppoe(self):
		# loading file/check info
		fp = open('/usr/local/ppp/options')
		index = 0
		for line in fp.readlines():
			self.info.append(line)
			if line.startswith('user'):
				self.user_index= index
				self.user = line
			index += 1
			
		if self.user[4] == '\n':
			print 'ka...PPPoE disabled'
			return False
		else:
			print 'ka...PPPoE enabled'
			self.ID = self.user.split(' ')[1]
			return True
		fp.close()
		
		# check pwd
		fp = open('/usr/local/ppp/pap-secrets')
		for line in fp.readlines():
			if len(line):
				info = line.split('\t')
				self.PWD = info[2]
		fp.close()

	def activate(self, index):
		if self.choice[index] == _('Enable') or self.choice[index] == _('Settings') :
			#message = _('PPPoE enabled.')
			#self.set_pppoe()
			stage = PPPoeSetStage(self.info, self.user_index, self.ID, self.PWD)
			runtime.manager.stack_stage(stage)
			
		elif self.choice[index] == _('Disable'):
			message = _('PPPoE disabled.')
			self.set_pppoe_disable()
			runtime.manager.change_stage(basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon))

	def set_pppoe_disable(self):
		# username
		self.info[self.user_index] = 'user' + '\n'
		fp = open('/usr/local/ppp/options', 'w')
		for item in self.info:
			fp.write(item)
		fp.close()
		# password
		fp = open('/usr/local/ppp/pap-secrets', 'w')
		info = ''
		fp.write(info)
		fp.close()
	

class PPPoeSetStage(basemodel.ListStage):
	title = _('PPPoE SET')
	name = 'PPPoE setting'
	profile_setting = 0
	icon = uiconfig.setting_system_network_icon

	def __init__(self, info, index, id, pwd):
		self.info = info
		self.user_index = index
		self.choice = (_('ID'), _('PWD'), _('Apply'))
		basemodel.ListStage.__init__(self, self.choice, self.title)
		self.ID = id
		self.PWD = pwd

	def ID_cb(self, ui):
		self.ID = ui.get_text()
		if len(self.ID) == 0:
			runtime.manager.stack_stage(VoIPSettingNotifyStage(_('Please insert ID')))
		else:
			runtime.manager.change_stage(VoIPSettingNotifyStage(_('PPoE ID set')))

	def PWD_cb(self, ui):
		self.PWD = ui.get_text()
		if len(self.PWD) == 0:
			runtime.manager.stack_stage(VoIPSettingNotifyStage(_('Please insert password')))
		else:
			runtime.manager.change_stage(VoIPSettingNotifyStage(_('PPoE PWD set')))
			
	def apply(self):
		if self.ID and self.PWD:
			self.set_pppoe()
			def cb():
				runtime.manager.back_stage()
				runtime.manager.back_stage()
			runtime.manager.change_stage(VoIPSettingNotifyStage(_('PPPoE informtaion set'), cb))
		else:
			runtime.manager.stack_stage(VoIPSettingNotifyStage(_('Please insert ID/PWD informtaion')))

	def set_pppoe(self):
		# username
		print 'ka.....org_user info =', self.info[self.user_index]
		self.info[self.user_index] = 'user' + ' ' + self.ID + '\n'
		print 'ka.....new_user info =', self.info[self.user_index]
		print 'ka....self.info=', self.info
		fp = open('/usr/local/ppp/options', 'w')
		for item in self.info:
			fp.write(item)
		fp.close()
		# password
		fp = open('/usr/local/ppp/pap-secrets', 'w')
		info = self.ID + '\t' + '*' + '\t'   + self.PWD + '\t' + '*'
		fp.write(info)
		fp.close()

	def set_pppoe_disable(self):
		# username
		self.info[self.user_index] = 'user' + '\n'
		fp = open('/usr/local/ppp/options', 'w')
		for item in self.info:
			fp.write(item)
		fp.close()
		# password
		fp = open('/usr/local/ppp/pap-secrets', 'w')
		info = ''
		fp.write(info)
		fp.close()
	
	def activate(self, index):
		if index == 0:
			stage = VoIPEditor(_('ID'), _('ID'), self.ID_cb, text=self.ID, textmax=50)
		elif index == 1:
			stage = VoIPEditor(_('PWD'), _('PWD'), self.PWD_cb, text=self.PWD, textmax=50)
		elif index == 2:
			self.apply()
			return
		runtime.manager.stack_stage(stage)

	def handle_key(self, key):
		if key in (config.Menu4, config.CLEAR):
			runtime.manager.change_stage(VoIPSettingNotifyStage(_('PPPoE disabled')))
			self.set_pppoe_disable()
			return True
		else:
			return basemodel.ListStage.handle_key(self, key)
			

class LANProfileStage(basemodel.ListStage):
	title = _('LAN')

	name = 'lanprofile setting'
	profile_setting = 0
	icon = uiconfig.setting_system_network_icon

	def __init__(self):
		self.index = 0
		if profile.get_profile() == 1:
			self.choice = (_('Enable'), _('Settings'))
		else:
			self.choice = _('Enable'),
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def show(self):
		if profile.get_profile() == 1:
			self.choice = (_('Enable'), _('Settings'))
		else:
			self.choice = _('Enable'),

		self.change_choice(self.choice)
		basemodel.ListStage.show(self)
		self.ui.set_focus(self.index)

	def activate(self, index):
		self.index = index
		self.profile_setting = profile.get_profile()
		old_profile_name = (_('PSTN'), _('LAN'), _('WiFi'))[self.profile_setting]
		new_profile_name = _('LAN')
		roxia_tracef('old_profile=%s, new_profile=%s', old_profile_name, new_profile_name)

		if index == 0: # LAN
			if self.profile_setting == 1:
				message = _('LAN profile already enabled.')
				runtime.manager.stack_stage(basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon))
			else:
				runtime.manager.stack_stage(ProfileChangeStage(old_profile_name, 1, new_profile_name))
		else:
			runtime.manager.stack_stage(LANSettingsStage)

		

class  WiFiInfoStage(basemodel.ListStage):
	title = _('WiFi SCANNING')
	icon = uiconfig.wifi_icon
	def __init__(self, lists, wifi_info, num):
		basemodel.ListStage.__init__(self, lists, left=_('SELECT'), right=_('BACK'))
		self.wifi_info = wifi_info
		self.num = num

	def destroy(self):
		basemodel.ListStage.destroy(self)

	def activate(self, index):
		# KA: [20080411] check SSID 중복 이름 검색시 MAC_MODE_ON yes / BSSID set
		select_info = self.wifi_info[index]
		print 'ka......select_info=', select_info
		mac_mode = 'no'
		for z in range(len(self.wifi_info)):
			if index != z and self.wifi_info[z][0] == select_info[0]:
				mac_mode = 'yes'
		# KA: [20080411] check SSID 중복 이름 검색시 MAC_MODE_ON yes / BSSID set ==
		stage = InfoShowStage(select_info, num = self.num, mac_mode = mac_mode)
		runtime.manager.stack_stage(stage)

class InfoShowStage(basemodel.Stage):
	def __init__(self, lists, mode = 0, num = 1, mac_mode = 'no'):
		self.ui = baseui.InfoUI(lists, mode)
		self.wifi_info = lists
		self.mode = mode
		self.num = num
		self.mac_mode = mac_mode

	def activate(self):
		if wifi_profile.essid != self.wifi_info[1] or wifi_profile.channelid != self.wifi_info[2] or wifi_profile.security != self.wifi_info[3] or wifi_profile.signallevel != self.wifi_info[4] or wifi_profile.bitrate != self.wifi_info[5]:
			status.profile_detail_changed = True
		wifi_profile.set_scaninfo(self.wifi_info, self.mac_mode)
		if self.num == 0:
			def cb2():
				try_register = True
				message = _('WiFi profile enabled.')

				if wifi_profile.dhcp == 'yes':
					if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
						runtime.manager.vdci_deregister_kill()
#						runtime.manager.start_dhcpclient_WIFI()
						#runtime.manager.dhcp_timer_kill()
						#runtime.manager.dhcp_timer = utils.Timer(config.dhcp_min, dhcp_client2)
						message = _('IP determining failed')
						try_register = False
					else:
						#runtime.manager.ifconfig_run('wifi')
						runtime.manager.start_vdciapp()
						#dns_profile.dhcp_save()
				else:
					dns_profile.save()
					runtime.manager.start_vdciapp()

#ka...3007.04.10 history 에 X면....
				if runtime.manager.find_stage('wifiprofile setting'):
					runtime.manager.back_stage('wifiprofile setting')
				elif runtime.manager.find_stage('wifisetting menu'):
					runtime.manager.back_stage('wifisetting menu')
				else:
					import model
					runtime.manager.change_stage(model.IdleStage, True)
					
				if try_register:
					stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon, cb=do_autoregister, isred=False)
				else:
					stage = basemodel.NotifyStage(message, uiconfig.baloon_wifi_icon)
				runtime.manager.stack_stage(stage)

			def cb():
				os.system('wlstop')
				os.system('wlstart')
				cb2()

			runtime.manager.dhcp_timer_kill()

			runtime.manager.change_stage(basemodel.NotifyStage(_('Determining IP information...'), uiconfig.baloon_wifi_icon, cb, 500))
		else:
			if runtime.manager.find_stage('wifiprofile setting'):
				runtime.manager.back_stage('wifiprofile setting')
			elif runtime.manager.find_stage('wifisetting menu'):
				runtime.manager.back_stage('wifisetting menu')
			else:
				import model
				runtime.manager.change_stage(model.IdleStage, True)
#			runtime.manager.back_stage('wifisetting menu')
#			runtime.manager.back_stage('wifiprofile setting')
			stage = ApplyStage(_('WiFi SETTING'))
			runtime.manager.stack_stage(stage)
#			runtime.manager.change_stage(basemodel.NotifyStage(_('WiFi Set.'), uiconfig.baloon_wifi_icon))

#ka...malaga 2007.04.06
	def changing_cb1(self):
		#AP(off)SET(on)-Authentication
		wifi_profile.authentication = 'OPEN'
		self.activate()
	def changing_cb2(self):
		#AP(off)SET(on)-Encryption
		wifi_profile.encryption = 'NONE'
		self.activate()
	def changing_cb3(self):
		#AP(on)SET(on/off)-Authentication
		#wifi_profile.encryption = 'NONE'
		#wifi_profile.authentication = 'WPA-PSK'
		if self.wifi_info[6] == 'TKIP':
			wifi_profile.encryption = 'TKIP'
		else:
			wifi_profile.encryption = 'AES'
		if self.wifi_info[7] == 'WPA-PSK':
			wifi_profile.authentication = 'WPA-PSK'
		else:
			wifi_profile.authentication = 'WPA2-PSK'
		runtime.manager.change_stage(AuthenticationInputStage(self.wifi_info, self.num, self.mac_mode))
	def changing_cb4(self, notify=True):
		# AP(on)SET(on/off) -Encryption
		wifi_profile.authentication = 'OPEN'
		runtime.manager.change_stage(EncryptionSelectStage(self.wifi_info, self.num, notify, self.mac_mode))
	def changing_cb5(self):
		# AP(off)SET(off)
		wifi_profile.authentication = 'OPEN'
		wifi_profile.encryption = 'NONE'
		self.activate()


	def handle_key(self, key):
#['00:13:C3:9B:F9:B0', 'LVP-3800-CISCO', '1', '-60 ', 'on', '11Mbps', ' TKIP', 'WPA-PSK']
		if key == config.Menu1 and self.mode == 0:
			print 'ka...............wifi_profile.authentication=', wifi_profile.authentication
			if wifi_profile.authentication != 'OPEN' and len(self.wifi_info) != 8:
# Case 1. AP(off)SET(on)-Authentication
#				runtime.manager.stack_stage(basemodel.NotifyStage(_('WPA-PSK is not enabled.'), uiconfig.baloon_wifi_icon))
				if wifi_profile.authentication == 'WPA-PSK':
					if self.wifi_info[4] != 'on':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('WPA-PSK is disabled.'), uiconfig.baloon_wifi_icon, self.changing_cb1))
					else:
						runtime.manager.stack_stage(basemodel.NotifyStage(_('WPA-PSK is disabled.')+'\n'+_('Encryption is enabled.'), uiconfig.baloon_wifi_icon, self.changing_cb4))
				else:
					if self.wifi_info[4] != 'on':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('WPA2-PSK is disabled.'), uiconfig.baloon_wifi_icon, self.changing_cb1))
					else:
						runtime.manager.stack_stage(basemodel.NotifyStage(_('WPA2-PSK is disabled.')+'\n'+_('Encryption is enabled.'), uiconfig.baloon_wifi_icon, self.changing_cb4))
			elif wifi_profile.encryption != 'NONE' and self.wifi_info[4] != 'on':
# Case 2. AP(off)SET(on)-Encryption
#				runtime.manager.stack_stage(basemodel.NotifyStage(_('Encryption is not enabled.'), uiconfig.baloon_wifi_icon))
				runtime.manager.stack_stage(basemodel.NotifyStage(_('Encryption is disabled.'), uiconfig.baloon_wifi_icon, self.changing_cb2))
			elif len(self.wifi_info) == 8:
				if wifi_profile.authentication == 'OPEN':
# Case 3. AP(on)SET(off)-Authentication
					if self.wifi_info[7] == 'WPA-PSK':
						runtime.manager.stack_stage(basemodel.NotifyStage(_('This AP is using WPA-PSK.')+'\n'+_('WPA-PSK is enabled.'), uiconfig.baloon_wifi_icon, self.changing_cb3))
					else:
						runtime.manager.stack_stage(basemodel.NotifyStage(_('This AP is using WPA2-PSK.')+'\n'+_('WPA2-PSK is enabled.'), uiconfig.baloon_wifi_icon, self.changing_cb3))
				else:
# Case 4. AP(on)SET(on)-Authentication
#					self.activate()
					self.changing_cb3()
			elif self.wifi_info[4] == 'on':
				if wifi_profile.encryption == 'NONE':
# Case5. AP(on)SET(off)-Encryption
#					runtime.manager.stack_stage(basemodel.NotifyStage(_('This AP is using Encryption.')+'\n'+_('Configure encryption option first.'), uiconfig.baloon_wifi_icon))
					runtime.manager.stack_stage(basemodel.NotifyStage(_('This AP is using Encryption.')+'\n'+_('Encryption is enabled.'), uiconfig.baloon_wifi_icon, self.changing_cb4))
				else:		
# Case6. AP(on)SET(on)-Encryption
#					self.activate()
					self.changing_cb4(notify=False)
			else:
# Case7. OFF OFF
#				self.activate()
				self.changing_cb5()

		elif key == config.Menu2 or key == config.Red:
			runtime.manager.back_stage()
		else:
			return False
		return True

			
# ka...malaga 2007.04.11 added
class EncryptionSelectStage(basemodel.ListStage):
	name = 'encryption select'
	title = _('ENCRYPTION TYPE')
	choice = (_('WEP 64 bits'), _('WEP 128 bits'))
	icon = uiconfig.wifi_icon

	def __init__(self, wifi_info, num, notify, mac_mode):
		self.wifi_info = wifi_info
		self.num = num
		self.notify = notify
		self.mac_mode = mac_mode
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def show(self):
		basemodel.ListStage.show(self)
		if wifi_profile.encryption == 'WEP128BIT':
			self.ui.set_focus(1)
		else:
			self.ui.set_focus(0)

	def activate(self, index):
		if index == 0:
			wifi_profile.encryption = 'WEP64BIT'
		else:
			wifi_profile.encryption = 'WEP128BIT'
		runtime.manager.stack_stage(EncryptionInputStage(index, self.wifi_info, self.num, self.mac_mode))

	def handle_key(self, key):
		if key == config.Menu2 or key == config.Red:
			if wifi_profile.encryption == 'NONE':
				def back_cb():
					runtime.manager.back_stage()
					return True
				runtime.manager.change_stage(basemodel.NotifyStage(_('Encryption is disabled.'), uiconfig.baloon_wifi_icon, back_cb))
				return True
				
		return basemodel.ListStage.handle_key(self, key)



class WiFiSettingsStage(basemodel.ListStage):
	title = _('WiFi SETTINGS')
	name = 'wifisetting menu'
	choice = ( _('Network settings'), _('Wireless settings'), _('Apply'))
	icon = uiconfig.setting_system_network_wireless_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)
		status.save_callback_other = save_callback
		global cur_profile
		cur_profile = wifi_profile

	def destroy(self):
		status.save_callback_other = None
		basemodel.ListStage.destroy(self)
	def activate(self, index):
		if index == 0: # Lan
			stage = LANSettingStage
			runtime.manager.stack_stage(stage)
		elif index == 1: # WiFi settings
			stage = WiFiStage
			runtime.manager.stack_stage(stage)
		else:
			stage = ApplyStage(_('WiFi SETTING'))
			runtime.manager.stack_stage(stage)
	def handle_key(self, key):
		if key == config.Menu2 or key == config.Red:
			if status.profile_detail_changed == True:
# eicho add 06.07.07
				#cur_profile.except_apply(True)
				'''
				if not cur_profile.is_not_changed():
					cur_profile.not_changed(True)
				if not dns_profile.is_not_changed():
					dns_profile.not_changed(True)
				'''
				cur_profile.except_apply(True)
				dns_profile.except_apply(True)
				status.profile_detail_changed = False
				runtime.manager.change_stage(basemodel.NotifyStage(_('Changed settings will be cancelled'), uiconfig.baloon_profile_setting_icon))
				return True
				
		return basemodel.ListStage.handle_key(self, key)

class WiFiProfileStage(basemodel.ListStage):
	title = _('WiFi SETTINGS')
	name = 'wifiprofile setting'
	profile_setting = 0
	icon = uiconfig.setting_system_network_wireless_icon

	def __init__(self):
		self.index = 0
		if profile.get_profile() == 2:
			self.choice = (_('Enable'), _('Settings'))
		else:
			self.choice = _('Enable'),
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def show(self):
		if profile.get_profile() == 2:
			self.choice = (_('Enable'), _('Settings'))
		else:
			self.choice = _('Enable'),

		self.change_choice(self.choice)
		basemodel.ListStage.show(self)
		self.ui.set_focus(self.index)

	def activate(self, index):
		self.index = index
		if index == 0:
			#self.profile_setting = profile.get_profile()
			#old_profile_name = (_('PSTN'), _('LAN'), _('WiFi'))[self.profile_setting]
			#new_profile_name = _('WiFi')
			#if self.profile_setting == 2:
			#	#Don't set profile
			#	message = _('WiFi profile already enabled.')
			#	runtime.manager.stack_stage(basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon))
			#else:
			#	runtime.manager.stack_stage(ProfileChangeStage(old_profile_name, 2, new_profile_name))
			runtime.manager.stack_stage(WiFiConfigStage)
		else:
			runtime.manager.stack_stage(WiFiSettingsStage)
			
class WiFiConfigStage(basemodel.ListStage):
	title = _('WiFi CONFIG SETTINGS')
	name = 'wifiprofile config setting'
	profile_setting = 0
	icon = uiconfig.setting_system_network_wireless_icon

	def __init__(self):
		self.choice = (_('Default configuration'), _('User configuration'))
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		if index == 0:
			# KT default value 사용
			os.system('cp /usr/etc/wireless.cfg /usr/etc/wireless_general.cfg')
			os.system('cp /usr/etc/wireless_kt_default.cfg /usr/etc/wireless.cfg')
			print 'ka.....KT default'
		else:
			# 사용자 setting값 사용
			#os.system('cp /usr/etc/wireless_general.cfg /usr/etc/wireless.cfg')
			print 'ka.....wireless_general'
			pass
			
		self.profile_setting = profile.get_profile()
		old_profile_name = (_('PSTN'), _('LAN'), _('WiFi'))[self.profile_setting]
		new_profile_name = _('WiFi')
		runtime.manager.stack_stage(ProfileChangeStage(old_profile_name, 2, new_profile_name))

		
class ProfileChangeStage(basemodel.YesNoStage):
	profile = 0
	profile_name = ''
	def __init__(self, old_profile_name, new_profile, new_profile_name):
		self.profile = new_profile
		self.profile_name = new_profile_name
		self.reloading = False
		if old_profile_name == new_profile_name:
			self.reloading = True
			message = _('WiFi profile enabled.')+'\n'+_('Reloading?')
		elif old_profile_name == _('PSTN'):
			message = _('PSTN profile enabled.')+'\n'+_('Change?')
		elif old_profile_name == _('LAN'):
			message = _('LAN profile enabled.')+'\n'+_('Change?')
		else:
			message = _('WiFi profile enabled.')+'\n'+_('Change?')
		self.old_profile_name = old_profile_name
		icon = uiconfig.baloon_profile_setting_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, _('PROFILE'), icon)

	def yes_cb(self):
#		status.profile_changing = True
		# start shchun: remove status.on_profile_changing
		#status.on_profile_changing = True
		roxia_trace('>> status.profile_changing = True >>,old_profile_name=', self.old_profile_name)
		roxia_trace('## status.telnum_visible = False')
		status.telnum_visible = False
		
		runtime.manager.change_stage(basemodel.NotifyStage(_('Profile changing...'), uiconfig.baloon_profile_setting_icon,isred=False)) 
		runtime.evas.render_now()

		status.telnum = '' # profile변경을 시작하면 무조건 번호초기화함
		profile.set_profile(self.profile)
		if self.reloading:
			self.reloading_wifi()
		else:
			self.change_profile_cb()

	def show_determinigIP(self):
		if os.path.exists('/tmp/dhcpcd-eth0.info') == False:
			runtime.manager.change_stage(basemodel.NotifyStage(_('Determining IP information...'), uiconfig.baloon_profile_setting_icon, isred=True, duration=15000))
			runtime.evas.render_now()
		else:
			return
			
	def reloading_wifi(self):
		roxia_trace( '### profile change: WiFi --> WiFi ###')
		runtime.manager.vdci_deregister_kill()		
		os.system('wlstop')
		os.system('wlstart')
		if wifi_profile.essid == '':
			#runtime.manager.run_scanning_AP()
			# start shchun: remove status.on_profile_changing
			#status.on_profile_changing = False
			return
		elif wifi_profile.dhcp == 'yes':
			message = _('Determining IP information...')
			stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
			runtime.manager.change_stage(stage)
			runtime.evas.render_now()
			
			os.system('wifi_dhcp')
			if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
				message =  _('IP determining failed')
				stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
				runtime.manager.change_stage(stage)
				runtime.evas.render_now()
#				runtime.manager.start_dhcpclient_WIFI()
				# start shchun: remove status.on_profile_changing
				#status.on_profile_changing = False
				return
			else:
				roxia_trace('## wifi dhcp success')

		status.wifi_connected = True
		stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, cb=do_autoregister, isred=False)
		runtime.manager.change_stage(stage)	




	
	def change_profile_cb(self):
		
		global cur_profile
		if self.profile_name == _('PSTN'):
			message = _('PSTN profile enabled.')
		elif self.profile_name == _('LAN'):
			cur_profile = lan_profile
			message = _('LAN profile enabled.')
			runtime.manager.show_lan_disconnected = False
		else:
			cur_profile = wifi_profile
			message = _('WiFi profile enabled.')
			runtime.manager.show_lan_disconnected = False

		status.profile_detail_changed = False
		runtime.manager.dhcp_timer_kill()
		#runtime.manager.kill_check_dhcp_res()
		
		# WiFi -> LAN
		if self.profile == 1:
			roxia_trace( '### profile change: WiFi --> LAN ###')
			runtime.manager.vdci_deregister_kill()
			os.system('wlstop')
			
			if wifi_profile.dhcp == 'yes':
				message = _('Determining IP information...')
			stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
			runtime.manager.change_stage(stage)
			runtime.evas.render_now()

			os.system('eth0_start')

			if os.path.exists('/tmp/dhcpcd-eth0.info') == False:
				message =  _('IP determining failed')
				stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
				runtime.manager.change_stage(stage)
				runtime.evas.render_now()
#				runtime.manager.start_dhcpclient_LAN()
				# start shchun: remove status.on_profile_changing
				#status.on_profile_changing = False
				return
			else:
				roxia_trace('## eth0 dhcp success')

			status.LanConnected  = True
			stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, cb=do_autoregister, isred=False)
			runtime.manager.change_stage(stage)
			
		# LAN -> WiFi		
		elif self.profile == 2:
			roxia_trace( '### profile change: LAN --> WiFi ###')
			runtime.manager.vdci_deregister_kill()		
			os.system('eth0_stop')
			os.system('wlstart')
			if wifi_profile.essid == '':
				#runtime.manager.run_scanning_AP()
				# start shchun: remove status.on_profile_changing
				#status.on_profile_changing = False
				return
			elif wifi_profile.dhcp == 'yes':
				message = _('Determining IP information...')
				stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
				runtime.manager.change_stage(stage)
				runtime.evas.render_now()
				
				os.system('wifi_dhcp')
				if os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
					message =  _('IP determining failed')
					stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, isred=False)
					runtime.manager.change_stage(stage)
					runtime.evas.render_now()
#					runtime.manager.start_dhcpclient_WIFI()
					# start shchun: remove status.on_profile_changing
					#status.on_profile_changing = False
					return
				else:
					roxia_trace('## wifi dhcp success')

			status.wifi_connected = True
			stage = basemodel.NotifyStage(message, uiconfig.baloon_profile_setting_icon, cb=do_autoregister, isred=False)
			runtime.manager.change_stage(stage)

class ProfileStage(basemodel.ListStage):
	title = _('PROFILE')
#ka...3800 2007.03.26
#	choice = (_('PSTN'),_('LAN'), _('WiFi'))
#ka...setup wizard 2007.04.28
	#choice = (_('LAN'),_('WiFi'), _('PPPoE')) # _('Config assistant'))
	choice = (_('LAN'),_('WiFi')) # _('Config assistant')) # remove pppoc by shchun
	
	icon = uiconfig.profile_icon
	name = 'profile'
	profile_setting = 0 # default=PSTN
	
	def __init__(self):
		basemodel.ListStage.__init__(self)
		profile_setting = profile.get_profile()-1
		roxia_tracef('get profile=%d', profile_setting)
		self.ui.set_focus(profile_setting) # update to setting.profile
		
	def activate(self, index):
		if index < 2:
			self.profile_setting = profile.get_profile()-1
			old_profile_name = (_('LAN'), _('WiFi'))[self.profile_setting]
			new_profile_name = (_('LAN'), _('WiFi'))[index]
			roxia_tracef('old_profile=%s, new_profile=%s', old_profile_name, new_profile_name)

#MMW	0406 delete later
			#temporary
			from vdcisetting import vdci_setting
			roxia_trace('VDCI setting loading!!!!!!!!!!!!!!!!!!!!!!!')
			vdci_setting.load()

		if index == 0: # LAN
			stage = LANProfileStage
		elif index == 1: # WiFi
			stage = WiFiProfileStage
		else:
			#import configuration
			#stage = configuration.ConfigAssistantStage
			stage = PPPoEStage


		runtime.manager.stack_stage(stage)



class DHCPEnabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('DHCP enabled.')+'\n'+_('Disable?')
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, _('DHCP'), self._icon)
	def yes_cb(self):
		runtime.manager.dhcp_timer_kill()
# 06.07.05
		#runtime.manager.kill_check_dhcp_res()
		
		status.profile_detail_changed = True
		global cur_profile
# eicho 06.07.08
		#cur_profile.copy_old_values()
		cur_profile.set_dhcp(False)		
		stage = basemodel.NotifyStage(_('DHCP disabled.'), self._icon)
		runtime.manager.change_stage(stage)

class DHCPDisabledStage(basemodel.YesNoStage):
	def __init__(self):
		message = _('DHCP disabled.')+'\n'+_('Enable?')
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, _('DHCP'), self._icon)
	def yes_cb(self):
		status.profile_detail_changed = True
		global cur_profile
# eicho 06.07.08
		#cur_profile.copy_old_values()
		cur_profile.set_dhcp(True)		
		stage = basemodel.NotifyStage(_('DHCP enabled.'), self._icon)
		runtime.manager.change_stage(stage)

def DHCPSettingStage():
	global cur_profile
	# default: enable
	if cur_profile.get_dhcp():
		return DHCPEnabledStage()
	else:
		return DHCPDisabledStage()

class NetworkDetailStage(basemodel.Stage):
	domonitor_forbidden = True
	def __init__(self):
		global cur_profile
		msg_na = _('not available')
		msg_status = _('Not connected') #_('disconnected')
		if cur_profile == lan_profile:
			#os.system('wlstart')
			#os.system('wifi_driver_loading')
			network_info = utils.get_address('eth')
			#network_info2 = utils.get_address('wlan')
			if runtime.peek_lanlink():
				msg_status = _('LAN Connection') # _('wired connected')
			#os.system('wlstop &')
			#os.system('rmmod wl')
		else:
			#network_info = utils.get_address('eth')
			network_info = utils.get_address('wlan')
			if runtime.peek_wifilink():
				msg_status = _('WIFI Connection') # _('wireless connected')
		
		if network_info:				msg_mac = network_info[0][0]
		else:						msg_mac = msg_na

		#if network_info2:				msg_mac2 = network_info2[0][0]
		#else:						msg_mac2 = msg_na

		if cur_profile.get_dhcp() == 1:	msg_dhcp = _('Yes')
		else:						msg_dhcp = _('No')

		if cur_profile.ipaddress:		msg_ipaddress = cur_profile.ipaddress
		else:						msg_ipaddress = msg_na

		if cur_profile.netmask:			msg_netmask = cur_profile.netmask
		else:						msg_netmask = msg_na

		if cur_profile.gateway:			msg_gateway = cur_profile.gateway
		else:						msg_gateway = msg_na

		# KA: [20080415]
		#if cur_profile.get_dhcp() == 1:
		#	msg_dns = dns_profile.dhcp_dns1
		#	msg_dns2 = dns_profile.dhcp_dns2
		#else:
		#	msg_dns = dns_profile.dns1
		#	msg_dns2 = dns_profile.dns2
		fp = open(config.dns_file, 'r')
		msg_dns = msg_dns2 = ''
		for z in fp.readlines():
			tmp_dns = z.split(' ')
			if tmp_dns[0] == 'nameserver':
				if msg_dns == '':
					msg_dns = tmp_dns[1].split()[0]
				else:
					msg_dns2 = tmp_dns[1].split()[0]
		fp.close()
		# KA: [20080415] ==

		if not msg_dns :
			msg_dns = msg_na
		if not msg_dns2 :
			msg_dns2 = msg_na

		if msg_dhcp == _('Yes'):
			try:
				get_prf = profile.get_profile()
				if get_prf == 1 and os.path.exists('/tmp/dhcpcd-eth0.info') == False:
					msg_ipaddress = msg_na
					msg_netmask = msg_na
					msg_gateway = msg_na
					msg_dns = msg_na
					msg_dns2 = msg_na
				elif get_prf == 2 and os.path.exists('/tmp/dhcpcd-wlan0.info') == False:
					msg_ipaddress = msg_na
					msg_netmask = msg_na
					msg_gateway = msg_na
					msg_dns = msg_na
					msg_dns2 = msg_na
				else:
					if get_prf == 1:
						fp = open('/tmp/dhcpcd-eth0.info')
					else:
						fp = open('/tmp/dhcpcd-wlan0.info')
					dhcpinfo = fp.readlines()

					for z in dhcpinfo:						
						if z.find('#') != -1:
							continue

						key, value = z.split('=')
						key = key.strip()

						if key == 'IPADDR':
							msg_ipaddress = value.strip()
						elif key == 'INTERFACE':
							value = value.replace("'",'')
							interface = value.strip()
						elif key == 'NETMASK':
							msg_netmask = value.strip()
						elif key == 'GATEWAY':
							msg_gateway = value.strip()

			except:
				print '!!! warning exception !!!'
				pass
				#print '/tmp/dhcpcd-eth0.info or /tmp/dhcpcd-wlan0.info not found'

		import ui
		#self.ui = ui.NetworkDetailUI( msg_status, msg_mac, msg_mac2, msg_dhcp, msg_ipaddress, msg_netmask, msg_gateway, msg_dns, msg_dns2)
		self.ui = ui.NetworkDetailUI( msg_status, msg_mac, msg_dhcp, msg_ipaddress, msg_netmask, msg_gateway, msg_dns, msg_dns2)
		#self.ui.set_right(_('BACK'))
		#self.ui.set_left(_('Wireless info'))

	def handle_key(self, key):
		if key == config.Menu4 or key == config.CLEAR: # config.Red:
			runtime.manager.back_stage()
			return True

		#elif key == config.Menu1:
		#	import profile, newprof
		#	is_kt_ap = False
		#	print '###' ,profile.wifi_profile._name, profile.wifi_profile.essid
		#	#if profile.wifi_profile.essid == 'KT_SoIP':
		#	if profile.wifi_profile._name == 'MegaAP':
		#		is_kt_ap = True
		#	stage = newprof.DynInfoShowStage(profile.wifi_profile.get_wifi(), is_kt_ap=is_kt_ap)
		#	runtime.manager.change_stage(stage)
		#	return True
		else:
			return False


class VoipDetailStage(basemodel.Stage):
	domonitor_forbidden = True
	def __init__(self):
		self.ui = baseui.LargeWindowUI(menu4=_('BACK'))
		
		from vdcisetting import vdci_setting

#from vdcisetting import vdci_setting
# number = vdci_setting.tel_num
# ID = vdci_setting.auth_name
# PWD =  vdci_setting.auth_pwd

# cscf1_addr = vdci_setting.proxy_addr
# cscf1_port = vdci_setting.proxy_port
# cscf2_addr =  vdci_setting.backup_proxy_addr
# cscf2_port = vdci_setting.backup_proxy_port

# sbc1_addr = vdci_setting.primary_sbc_addr
# sbc1_port =  vdci_setting.primary_sbc_port

# sbc2_addr = vdci_setting.secondary_sbc_addr
# sbc2_port =  vdci_setting.secondary_sbc_port
		def getStarString(str):
			ret = ''
			for i in range(len(str)):
				ret += '*'
			return ret
		#msg_na = _('not available')
		msg_na = _('not configured')
		if len(vdci_setting.tel_num) > 0:	number = vdci_setting.tel_num
		else:							number = msg_na
		if len(vdci_setting.auth_name) > 0:	ID = vdci_setting.auth_name
		else:							ID = msg_na
		if len(vdci_setting.auth_pwd) > 0:	
			if vdci_setting.auth_pwd.find('HASH')>=0:
				PWD =  getStarString(vdci_setting.auth_pwd[5:]) + ' (Hexa)'
			else:
				PWD =  getStarString(vdci_setting.auth_pwd) + ' (Plain Text)'
		else:							
			PWD = msg_na
		if len(vdci_setting.domain) > 0:		domain =  vdci_setting.domain
		else:							domain = msg_na
		if len(vdci_setting.sip_uri) > 0:		sip_uri = vdci_setting.sip_uri
		else:							sip_uri = msg_na
		if len(vdci_setting.proxy_addr) > 0:	cscf1_addr = vdci_setting.proxy_addr
		else:							cscf1_addr = msg_na
		if len(vdci_setting.proxy_port) > 0:	cscf1_port = vdci_setting.proxy_port
		else:							cscf1_port = msg_na
		if len(vdci_setting.backup_proxy_addr) > 0:	cscf2_addr =  vdci_setting.backup_proxy_addr
		else:									cscf2_addr = msg_na
		if len(vdci_setting.backup_proxy_port) > 0:	cscf2_port = vdci_setting.backup_proxy_port
		else:									cscf2_port = msg_na
		if len(vdci_setting.primary_sbc_addr) > 0:	sbc1_addr = vdci_setting.primary_sbc_addr
		else:									sbc1_addr = msg_na
		if len(vdci_setting.primary_sbc_port) > 0:	sbc1_port =  vdci_setting.primary_sbc_port
		else:									sbc1_port = msg_na
		if len(vdci_setting.secondary_sbc_addr) > 0:	sbc2_addr = vdci_setting.secondary_sbc_addr
		else:									sbc2_addr = msg_na
		if len(vdci_setting.secondary_sbc_port) > 0:	sbc2_port =  vdci_setting.secondary_sbc_port
		else:									sbc2_port = msg_na

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('Phone number') +': ' + number
		t.pos = (105, 66 - 18) # uiconfig.networkdetail_text_pos[0]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('Auth ID') +': '+ ID
		t.pos = uiconfig.networkdetail_text_pos[0]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('Password.') +': ' + PWD
		t.pos = uiconfig.networkdetail_text_pos[1]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('SIP Domain: ') + domain
		t.pos = uiconfig.networkdetail_text_pos[3]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('SIP URI: ') + sip_uri
		t.pos = uiconfig.networkdetail_text_pos[2]
		self.ui.add(t)
		
		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('CSCF Domain 1: ') + cscf1_addr + ' : ' + cscf1_port
		t.pos = uiconfig.networkdetail_text_pos[4]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('CSCF Domain 2: ') + cscf2_addr + ' : ' + cscf2_port
		t.pos = uiconfig.networkdetail_text_pos[5]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('SBC Domain 1: ') + sbc1_addr + ' : ' + sbc1_port
		t.pos = uiconfig.networkdetail_text_pos[6]
		self.ui.add(t)

		t = runtime.evas.text()
		t.font=uiconfig.details_font
		t.color=uiconfig.swver_details_color
		t.text= _('SBC Domain 2: ') + sbc2_addr + ' : ' + sbc2_port
		t.pos = uiconfig.networkdetail_text_pos[7]
		self.ui.add(t)

	def handle_key(self, key):
		if key == config.Menu4 or key == config.CLEAR:
			runtime.manager.back_stage()
			return True
		else:
			return False


class SubnetmaskStage(basemodel.Stage):
	def __init__(self):
		global cur_profile
		import ui
		self.ui = ui.NormalDigitEditUI('', _('SUBNET MASK'),  _('Subnet mask'), 15)
		if cur_profile.netmask:
			self.ui.set_text(cur_profile.netmask)
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

	def handle_key(self, key):
		global cur_profile
		if key == config.Menu1 or key == 'OK':
			iserror = False
			str_mask = self.ui.get_text()

			ipadd = str_mask.split('.') #coming number > 255
			if len(ipadd) == 4:
				for z in range(len(ipadd)):
					if not ipadd[z]:
						iserror = True
						break
					if int(ipadd[z].strip())>255:
						iserror = True
						break
			else:
				iserror = True

			if iserror:
				stage = basemodel.NotifyStage(_('Invalid address'), self._icon)
				runtime.manager.stack_stage(stage)
				return True

			for z in range(len(ipadd)):
				ipadd[z] = int(ipadd[z].strip())
			str_mask = '%d.%d.%d.%d' % (ipadd[0], ipadd[1], ipadd[2], ipadd[3])

			old_netmask = cur_profile.netmask
			cur_profile.set_netmask(str_mask)
			if str_mask:
				message = _('Subnet mask set')
			else:
				message = _('Subnet mask deleted')
			stage = basemodel.NotifyStage(message, self._icon)
			runtime.manager.change_stage(stage)
			if old_netmask != str_mask:
				status.profile_detail_changed = True
			return True
		else:
			return self.ui.handle_key(key)

class IPAddressStage(basemodel.Stage):
	def __init__(self):
		global cur_profile
		import ui
		self.ui = ui.NormalDigitEditUI('', _('IP ADDRESS'), _('IP address'), 15)
		if cur_profile.ipaddress:
			self.ui.set_text(cur_profile.ipaddress)
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

	def handle_key(self, key):
		global cur_profile
		if key == config.Menu1 or key == 'OK':
			iserror = False
			str_ip = self.ui.get_text()

			ipadd = str_ip.split('.') #coming number > 255
			if len(ipadd) == 4:
				for z in range(len(ipadd)):
					if not ipadd[z]:
						iserror = True
						break
					if int(ipadd[z].strip())>255:
						iserror = True
						break
			else:
				iserror = True

			if iserror:
				stage = basemodel.NotifyStage(_('Invalid address'), self._icon)
				runtime.manager.stack_stage(stage)
				return True

			for z in range(len(ipadd)):
				ipadd[z] = int(ipadd[z].strip())
			str_ip = '%d.%d.%d.%d' % (ipadd[0], ipadd[1], ipadd[2], ipadd[3])

			old_ip = cur_profile.ipaddress
# eicho 06.07.08
			#cur_profile.copy_old_values()
			cur_profile.set_ipaddress(str_ip)
			if str_ip:
				message = _('IP address set')
			else:
				message = _('IP address deleted')
			stage = basemodel.NotifyStage(message, self._icon)
			runtime.manager.change_stage(stage)
			if old_ip != str_ip:
				status.profile_detail_changed = True
			return True
		else:
			return self.ui.handle_key(key)

class GatewayStage(basemodel.Stage):
	def __init__(self):
		global cur_profile
		import ui
		self.ui = ui.NormalDigitEditUI('', _('GATEWAY'),  _('Gateway'), 15)
		if cur_profile.gateway:
			self.ui.set_text(cur_profile.gateway)
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

	def handle_key(self, key):
		global cur_profile
		if key == config.Menu1 or key == 'OK':
			iserror = False
			str_gateway = self.ui.get_text()

			ipadd = str_gateway.split('.') #coming number > 255
			if len(ipadd) == 4:
				for z in range(len(ipadd)):
					if not ipadd[z]:
						iserror = True
						break
					if int(ipadd[z].strip())>255:
						iserror = True
						break
			else:
				iserror = True

			if iserror:
				stage = basemodel.NotifyStage(_('Invalid address'), self._icon)
				runtime.manager.stack_stage(stage)
				return True

			for z in range(len(ipadd)):
				ipadd[z] = int(ipadd[z].strip())
			str_gateway = '%d.%d.%d.%d' % (ipadd[0], ipadd[1], ipadd[2], ipadd[3])

			old_gw = cur_profile.gateway
			cur_profile.set_gateway(str_gateway)
			if str_gateway:
				message = _('Gateway set')
			else:
				message = _('Gateway deleted')
			stage = basemodel.NotifyStage(message, self._icon)
			runtime.manager.change_stage(stage)
			if old_gw != str_gateway:
				status.profile_detail_changed = True
			return True
		else:
			return self.ui.handle_key(key)

class DNS2Stage(basemodel.Stage):
	def __init__(self):
		import ui
		self.ui = ui.NormalDigitEditUI('', _('DNS'),  _('DNS2'), 15)
#dwcho 06.06.29
		'''
		fp = open('/etc/resolv.conf')
		dnsinfo = fp.readlines()

		dns_profile.dns1 = dns_profile.dns2 = ''
		
		for z in dnsinfo:
			tmp_dns = z.split(' ')
			if tmp_dns[0] == 'nameserver':

				if dns_profile.dns1 == '':
					if tmp_dns[1].split()[0] != '0.0.0.0':
						dns_profile.dns1 = tmp_dns[1].split()[0]

				else:
					if tmp_dns[1].split()[0] != '0.0.0.0':
						dns_profile.dns2 = tmp_dns[1].split()[0]
		fp.close()
		'''

#end of dwcho
		self.ui.set_text(dns_profile.dns2)
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

	def handle_key(self, key):

		if key == config.Menu1 or key == 'OK':
			iserror = False
			str_dns2 = self.ui.get_text()

			if str_dns2.strip() !='':
				ipadd = str_dns2.split('.') #coming number > 255
				if len(ipadd) == 4:
					for z in range(len(ipadd)):
						if not ipadd[z]:
							iserror = True
							break
						if int(ipadd[z].strip())>255:
							iserror = True
							break
				else:
					iserror = True

				if iserror:
					stage = basemodel.NotifyStage(_('Invalid address'), self._icon)
					runtime.manager.stack_stage(stage)
					return True

				for z in range(len(ipadd)):
					ipadd[z] = int(ipadd[z].strip())
				str_dns2 = '%d.%d.%d.%d' % (ipadd[0], ipadd[1], ipadd[2], ipadd[3])

			old_dns2 = dns_profile.dns2
			dns_profile.set_dns2(str_dns2)
			if str_dns2:
				message = _('DNS2 set')
			else:
				message = _('DNS2 deleted')
			stage = basemodel.NotifyStage(message, self._icon)
			runtime.manager.change_stage(stage)
			if old_dns2 != str_dns2:
				status.profile_detail_changed = True

			return True
		else:
			return self.ui.handle_key(key)


class DNSStage(basemodel.Stage):
	def __init__(self):
		import ui
		self.ui = ui.NormalDigitEditUI('', _('DNS'),  _('DNS1'), 15)

#dwcho 06.06.29
		'''
		fp = open('/etc/resolv.conf')
		dnsinfo = fp.readlines()

		dns_profile.dns1 = dns_profile.dns2 = ''
		
		for z in dnsinfo:
			tmp_dns = z.split(' ')
			if tmp_dns[0] == 'nameserver':

				if dns_profile.dns1 == '':
					if tmp_dns[1].split()[0] != "0.0.0.0":
						dns_profile.dns1 = tmp_dns[1].split()[0]

				else:
					if tmp_dns[1].split()[0] != "0.0.0.0":
						dns_profile.dns2 = tmp_dns[1].split()[0]
		fp.close()
		'''
#end of dwcho	
		
		self.ui.set_text(dns_profile.dns1)
		self._icon = None
		if cur_profile == lan_profile:
			self._icon = uiconfig.baloon_setting_system_network_icon
		else:
			self._icon = uiconfig.baloon_setting_system_network_wireless_icon

	def handle_key(self, key):
		if key == config.Menu1 or key == 'OK':
			iserror = False
			str_dns = self.ui.get_text()

			if str_dns.strip() !='':
				ipadd = str_dns.split('.') #coming number > 255
				if len(ipadd) == 4:
					for z in range(len(ipadd)):
						if not ipadd[z]:
							iserror = True
							break
						if int(ipadd[z].strip())>255:
							iserror = True
							break
				else:
					iserror = True

				if iserror:
					stage = basemodel.NotifyStage(_('Invalid address'), self._icon)
					runtime.manager.stack_stage(stage)
					return True

				for z in range(len(ipadd)):
					ipadd[z] = int(ipadd[z].strip())
				str_dns = '%d.%d.%d.%d' % (ipadd[0], ipadd[1], ipadd[2], ipadd[3])

			old_dns1 = dns_profile.dns1
			dns_profile.set_dns1(str_dns)
			if str_dns:
				message = _('DNS1 set')
			else:
				message = _('DNS1 deleted')
			stage = basemodel.NotifyStage(message, self._icon)
			runtime.manager.change_stage(stage)
			if old_dns1 != str_dns:
				status.profile_detail_changed = True
			return True
		else:
			return self.ui.handle_key(key)

def save_callback():
	if status.profile_detail_changed == True:
		cur_profile.except_apply(True)
		dns_profile.except_apply(True)
		return (_('Changed settings will be cancelled'), uiconfig.baloon_profile_setting_icon)
	else:
		return None, None

def dhcp_client1():
	print '######## dhcp_client1 (python) ####'
#Roxia Begin smyook 06.06.25
	if profile.get_profile() != 1 or lan_profile.dhcp != 'yes':
		config.dhcp_retry_count = 0
		runtime.manager.dhcp_timer_kill()
		return False
#Roxia End smyook

	if os.path.exists('/tmp/dhcpcd-eth0.info') == True:
		#runtime.manager.ifconfig_run()
#Roxia Begin smyook 06.05.24
		#dns_profile.dhcp_save()
#Roxia End smyook
		# 결국에 dhcp 세팅됨. register를 시도
		vdci_reload()
		runtime.manager.dhcp_timer_kill()
#Roxia Begin smyook 06.06.25
		config.dhcp_retry_count = 0
		status.LanConnected = True
#Roxia End smyook
		return False

	if config.dhcp_retry_count == 2:
		status.LanConnected = False
		if runtime.vdciapp:
			runtime.vdciapp.kill_vdciapp()

#Roxia Begin smyook 06.06.25
	config.dhcp_retry_count += 1
	print '######## dhcp_client1: dhcp_retry_count=', config.dhcp_retry_count
#Roxia End smyook

#ka...3800 dhcp가 2개 도는 문제 발견 wifi wizard 작업중... 2007.04.28
	os.system('killall dhcpcd')
	os.system('lan_dhcp&')
	return True


############################################### eicho 06.07.03
def dhcp_client1_eth0_up():	
	if lan_profile.dhcp == 'yes' :
		roxia_trace( '#### dhcp_client1_ex (python) (dhcp enabled)####')
		
		os.system('eth0_start&')
		runtime.manager.make_dhcp_try()
	else:
		print '#### dhcp_client1_ex (python) (dhcp disabled)####'
		runtime.manager.make_dhcp_try()

		os.system('eth0_start')

	print '#### end dhcp_client1_ex ####'
	
	
############################################### eicho 06.07.03


# KA: [20080328] NEW DHCP
def dhcp_client2():
	if profile.get_profile() != 2 or wifi_profile.dhcp != 'yes':
		config.dhcp_retry_count = 0
		runtime.manager.dhcp_timer_kill()
		return False
	roxia_trace( '#### dhcp_client2 (python) (dhcp enabled)####')
	os.system('wifi_dhcp&') #-- call start_dhclient


class LANSettingStage(basemodel.ListStage):
	title = _('NETWORK SETTINGS')
	name = 'network setting'

	def __init__(self, nettitle = None):
		if nettitle != None:
			self.title = nettitle
		self.choice = self.ch_list()
		self.index = 0
		if cur_profile == lan_profile:
			self.icon = uiconfig.setting_system_network_icon
		else:
			self.icon = uiconfig.setting_system_network_wireless_icon

		basemodel.ListStage.__init__(self, self.choice, self.title)
		status.save_callback_other = save_callback

	def ch_list(self):
		global cur_profile

		if cur_profile.get_dhcp() == False:
			return  (_('Details'),_('DHCP'), _('IP address'), _('Subnet mask'), _('Gateway'), _('DNS1'), _('DNS2'))
		else:
			return  (_('Details'),_('DHCP'))

	def show(self):
		basemodel.ListStage.change_choice(self, self.ch_list())
		basemodel.ListStage.show(self)
		self.ui.set_focus(self.index)
	def destroy(self):
		status.save_callback_other = None
		basemodel.ListStage.destroy(self)
	def activate(self, index):
		if index == 0: #Details
			self.index = index
			stage = NetworkDetailStage
		elif index == 1: # DHCP
			self.index = index
			stage = DHCPSettingStage
# eicho 06.07.07	
		elif index == 2: # IP address
			self.index = index
			stage = IPAddressStage
			#cur_profile.copy_old_values()
		elif index == 3: # Subnet mask
			self.index = index
			stage = SubnetmaskStage
			#cur_profile.copy_old_values()
		elif index == 4: # Gateway
			self.index = index
			stage = GatewayStage
			#cur_profile.copy_old_values()
		elif index == 5:
			self.index = index
			stage = DNSStage
			#dns_profile.copy_old_values()
		elif index == 6:
			self.index = index
			stage = DNS2Stage
			#dns_profile.copy_old_values()

		runtime.manager.stack_stage(stage)

class BluetoothSetting:
	def __init__(self):
		self.bt_name = 'Videotel DA 610'
		self.bt_passkey = ''
		self.bt_visibility = 'true'
		self.bt_timeout = '10'

	def load(self):
		fp = open('/usr/local/lgvp/bluetooth.cfg')
		for cfgline in  fp.readlines():
			cfgline = cfgline.strip()
			if cfgline.find('bt_name') != -1:
				tmp, self.bt_name = cfgline.split('=', 1)
			elif cfgline.find('bt_passkey') != -1:
				tmp, self.bt_passkey = cfgline.split('=', 1)
			elif cfgline.find('bt_visibility') != -1:
				tmp, self.bt_visibility = cfgline.split('=', 1)
			elif cfgline.find('bt_timeout') != -1:
				tmp, self.bt_timeout = cfgline.split('=', 1)
		fp.close()

	def set_btname(self, value):
		self.bt_name = value

	def set_passkey(self, value):
		self.bt_passkey = value

	def set_visibility(self, value):
		self.bt_visibility = value

	def set_timeout(self, value):
		self.bt_timeout = value

	def save(self):
		name = '/usr/local/lgvp/bluetooth.cfg'
		fp = open(name, 'w')
		for key, value in self.__dict__.items():
			if key[0] != '_' and (type(value) in (type(''), type(0))):
				fp.write("%s=%s\n" % (key, value))

btset = BluetoothSetting()
btset.load()

class BluetoothSettingNotifyStage(basemodel.NotifyStage):
	def __init__(self, message,cb=None, icon=uiconfig.baloon_bluetooth_icon):
		basemodel.NotifyStage.__init__(self, message, icon, cb)

#Roxia Begin smyook 06.03.15
'''
class BluetoothRegistrationStage(basemodel.ListStage):
	title = _('REGISTRATION')
	choice = (_('New search'),_('Show list'))
	name = 'bluetooth registration'
	icon = uiconfig.bluetooth_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		runtime.btapp.set_default()
		if index == 0:
			runtime.btapp.send_message('20|i')
			runtime.manager.stack_stage(BluetoothSearchStage)
		else:
			try:
				fp = open('bluetooth.txt')
				showlist = []
				for line in fp.readlines():
					showlist.append(line)
				fp.close()

				if len(showlist) != 0:
					runtime.manager.stack_stage(BluetoothShowListStage(showlist, _('SHOW LIST'), 1))
					return
			except:
				pass
				#print 'file error'
			runtime.manager.stack_stage(BluetoothSettingNotifyStage(_('No Bluetooth find.')))
'''
#Roxia End smyook

class BtYesNoUI(baseui.BaloonMessageUI):
	def __init__(self, title, message,icon, menu2 = _('CANCEL')):
		baseui.BaloonMessageUI.__init__(self, '', menu2, title,icon, message)

class BluetoothSearchStage(basemodel.Stage):
	name = 'btsearchstage'
	def __init__(self, mode = 0, des_dir = None, checklist = None, chk_choice = None):
		self.get_listt = 0
		self.bluetooths = []
		self.mode = mode
		self.des_dir = des_dir
		self.checklist = checklist
		self.chk_choice = chk_choice
		status.supervision_not_allowed = 1

		if mode == 3:
			title = _('COPY FROM BLUETOOTH')
		elif mode == 2 or mode == 4:  #4 : images & sound copy
			title = _('COPY TO BLUETOOTH')
		else:
			title = _('SEARCH')

		message = _('Searching...')

		self.ui = BtYesNoUI(title, message, uiconfig.baloon_bluetooth_icon)

		self.bt_restart = utils.Timer(30000, self.restart_bt)
		self.get_list()

	def restart_bt(self):
		Restart_btapp()
		runtime.btapp.send_message('20|i')

	def get_list(self):
		if self.mode == 0:
			nxt_title = _('REGISTRATION')
		elif self.mode == 3:
			nxt_title = _('COPY FROM BLUETOOTH')
		else:
			nxt_title = _('COPY TO BLUETOOTH')

		if runtime.btapp.dEnd == 'done':
			choice = runtime.btapp.bt_list

			if len(choice) == 0:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('No bluetooth find.')))
			else:
				runtime.manager.change_stage(BluetoothShowListStage(choice, nxt_title, self.mode, self.des_dir, self.checklist, self.chk_choice))

		else:
			self.get_listt = utils.Timer(1000, self.get_list)

	def destroy(self):
		status.supervision_not_allowed = 0
		self.no_cb()
		self.ui.destroy()

	def no_cb(self):
		self.bt_restart = None
		self.get_listt = None
		runtime.btapp.send_message('20|D')
		runtime.btapp.send_message('20|v')
		runtime.btapp.set_default()

	def handle_key(self, key):

		if key == config.Menu2:
			self.no_cb()
			runtime.manager.back_stage()
		elif key == config.Red:
			self.no_cb()
			return False
		elif key == config.Green or key == config.Video or key == config.OffHook:
			self.no_cb()
			runtime.manager.back_stage('idle')
			runtime.evas.render_now()
			return
		else: return False
		return True

class BluetoothListControlStage(basemodel.ListStage):
	icon = uiconfig.bluetooth_icon

	def __init__(self, lists, index):
		self.file_index = index
		btvalue = lists.split('<>')
		tmp, btaddr = btvalue[0].split('=', 1)
		tmp, btname = btvalue[1].split('=', 1)

		self.lists = [btaddr, btname]
		self.title = btname.strip()
		self.choice = _('Delete'), _('Details')
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		if index == 0:
			stage = BluetoothYesNo2Stage(self.file_index)
		else:
			stage = BluetoothInfoShowStage(self.lists)
		runtime.manager.stack_stage(stage)

class BluetoothInfoShowStage(basemodel.Stage):
	def __init__(self, lists = None):
		if lists == None:
			self.ui = BluetoothAddressShowStage(_('ADDRESS'), _('Address'))
		else:
			self.ui = BluetoothInfoUI(lists)
	def handle_key(self, key):
		if key == config.Menu2:
			runtime.manager.back_stage()
		return False

class BluetoothInfoUI(baseui.LargeWindowUI):
	def __init__(self, lists):
		self.lists = lists
		baseui.LargeWindowUI.__init__(self, '', _('BACK'), _('DETAILS'), _('DETAILS'))
		lt = runtime.evas.text(text=_('Name') + ' : ' + self.lists[1].strip(), font=uiconfig.details_font,
				pos=(20,65),
				color=uiconfig.list_text_color)
		self.add(lt)
		lt = runtime.evas.text(text=_('Address') + ' : ' + self.lists[0].strip(), font=uiconfig.details_font,
				pos=(20,90),
				color=uiconfig.list_text_color)
		self.add(lt)
		baseui.LargeWindowUI.show(self)

class BluetoothYesNo2Stage(basemodel.YesNoStage):
	def __init__(self, index):
		self.file_index = index
		message = _('Do you want to delete this device?')
		icon = uiconfig.baloon_bluetooth_icon
		basemodel.YesNoStage.__init__(self, message, self.yes_cb, Backstage_cb, _('DELETE'), icon)
	def yes_cb(self):
		fp = open('bluetooth.txt')
		file_line = fp.readlines()
		fp.close()

		del file_line[self.file_index]

		fp = open('bluetooth.txt', 'w')
		fp.write(''.join(file_line))
		fp.close()
		stage = BluetoothSettingNotifyStage(_('The device deleted'))
		runtime.manager.pop_stage()
		runtime.manager.change_stage(stage)

class BluetoothShowListStage(basemodel.ListStage):
	icon = uiconfig.bluetooth_icon
	name = 'btshowlist'

	def __init__(self, lists, title, mode, des_dir = None, chklist = None, chk_choice = None):
		self.mode = mode
		self.lists = lists
		self.des_dir = des_dir
		self.chklist = chklist
		self.chk_choice = chk_choice
		basemodel.ListStage.__init__(self, '', title)

	def show(self):
		if self.mode == 1:
			fp = open('bluetooth.txt')
			self.lists = fp.readlines()
			fp.close()

		tmp_list = []
		for z in self.lists:
			detail = z.split('<>')
			key, value = detail[1].split('=', 1)
			value = value.strip()

			tmp_list.append(value)

		if len(tmp_list) == 0:
			runtime.manager.change_stage(BluetoothSettingNotifyStage(_('No bluetooth find.')))
			return

		self.change_choice(tmp_list)
		basemodel.ListStage.show(self)
	def activate(self, index):
		if self.mode == 0:  # new search 로 들어와서...
			try:
				fp = open('bluetooth.txt')
				btlist = fp.readlines()
				fp.close()
			except:
				btlist = []
			sel_list = self.lists[index].split('<>')
			key1, value1 = sel_list[0].split('=', 1)
			value1 = value1.strip()

			bExist = False # exist in file?
			for bt in btlist:
				tmp = bt.split('<>')
				key2, value2 = tmp[0].split('=', 1)
				value2 = value2.strip()
				if value1 == value2:
					bExist = True

			if len(btlist) > 10:
				runtime.manager.stack_stage(BluetoothSettingNotifyStage(_('List is full')))
				return

			if bExist ==True:
				runtime.manager.stack_stage(BluetoothSettingNotifyStage(_('Already exists!')))
			else:
				def cb():
					runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Registration complete!')))

				fp = open('bluetooth.txt', 'a')
				fp.write(self.lists[index]+'\n')
				fp.close()
				runtime.manager.stack_stage(BluetoothSettingNotifyStage(_('Adding to the list...'), cb))
		elif self.mode == 1:  #show list 로 들어옴
			runtime.manager.stack_stage(BluetoothListControlStage(self.lists[index], index))

		elif self.mode == 2:
			runtime.manager.stack_stage(BluetoothEntriesStage(self.lists[index]))
		else:
			sel_list = self.lists[index].split('<>')
			key1, value1 = sel_list[0].split('=', 1)
			value1 = value1.strip()
			runtime.btapp.send_message('20|F|'+value1)
			runtime.btapp.fEnd = '2'
			import sdmmc
			sdmmc.bt_depth = 0
			if self.mode == 3:  #copy from bluetooth
				runtime.manager.stack_stage(BluetoothWaitStage(self.des_dir, 3))
			elif self.mode ==4:
				runtime.manager.stack_stage(BluetoothWaitStage(self.des_dir, 4, self.chklist, self.chk_choice))
	def handle_key(self, key):
		if key == config.Menu2:
			runtime.btapp.send_message('20|D')
			runtime.btapp.set_default()
			runtime.manager.back_stage()
			return
		basemodel.ListStage.handle_key(self, key)

class BluetoothEntriesStage(basemodel.ListStage):
	icon = uiconfig.bluetooth_icon
	def __init__(self, btlist):
		title = _('COPY TO BLUETOOTH')
		choice = _('All entries'), _('Some entries')
		self.btlist = btlist
		basemodel.ListStage.__init__(self, choice, title)

	def activate(self, index):
		if index == 0:
			runtime.manager.stack_stage(BluetoothCopyStage(self.btlist))
		else:
			import sdmmc
			runtime.manager.stack_stage(sdmmc.CopyToPbBTStage(self.btlist))

class BluetoothWaitStage(basemodel.Stage):
	def __init__(self, des_dir = None, mode = 3, chklist = None, chk_choice = None):

		self.mode = mode
		self.des_dir = des_dir
		self.chklist = chklist
		self.chk_choice = chk_choice

		message = _('Waiting...')
		if mode == 3:
			title = _('COPY FROM BLUETOOTH')
		else:
			title = _('COPY TO BLUETOOTH')
		self.ui = BtYesNoUI(title, message, uiconfig.baloon_bluetooth_icon, '')

	def show(self):
 		status.supervision_not_allowed = 1
		self.ui.show()
		self.wait_ftp()

	def destroy(self):
 		status.supervision_not_allowed = 0

		self.waitt = 0
		self.ui.destroy()

	def wait_ftp(self):
		if runtime.btapp.fEnd[0] == '0':
			if runtime.btapp.fEnd.find('operation aborted') != -1:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Operation Aborted')))
			else:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Disconnected')))
			runtime.btapp.set_default()
			runtime.btapp.send_message('20|v')
			return

		elif runtime.btapp.fEnd == 'done':
			choice = runtime.btapp.bt_flist

			import sdmmc
			if self.mode == 3:
				runtime.manager.change_stage(sdmmc.FileSelectStage('filefrombluetooth', choice, self.des_dir))
			else:
				runtime.manager.change_stage(sdmmc.FileSelectStage('filetobluetooth2', choice, self.des_dir, self.chklist, self.chk_choice))

		else:
			self.waitt = utils.Timer(500, self.wait_ftp)

	def no_cb(self):
		self.waitt = None
		runtime.btapp.set_default()
		runtime.btapp.send_message('20|v')
		runtime.manager.back_stage()

	def handle_key(self, key):
		if key == config.Red:
			return True
		elif key == config.Green or key == config.Video or key == config.OffHook:
			self.no_cb()
			runtime.manager.back_stage('idle')
			runtime.evas.render_now()
			return
		else: return False

class BluetoothCopyStage(basemodel.Stage):
	def __init__(self, selectedbt, selectedfname = None):
		self.rst = 0
		message = _('Copying...')
		self.ui = BtYesNoUI(_('COPY'), message, uiconfig.baloon_bluetooth_icon)
		self.selectedbt = selectedbt
		import sdmmc
		if selectedfname:
			self.selectedfname = sdmmc.make_vcard(selectedfname)
		else:
			self.selectedfname = sdmmc.make_vcard()
		self.brespond = -1

		self.index = 0
		self.cp = 0
		self.all_cp = 0

		status.supervision_not_allowed = 1

		status.save_callback = self.save_callback
		self.start_com()

	def save_callback(self):
		runtime.manager.back_stage("copyfilestage")
		runtime.btapp.send_message('20|D')
		runtime.btapp.set_default()
		self.brespond = -1
		self.rst = None
		return None, None

	def destroy(self):
		status.supervision_not_allowed = 0
		self.brespond = -1
		runtime.btapp.set_default()
		os.system('rm *.vcf')
		self.rst = None
		self.ui.destroy()

	def start_com(self):
		def backstage():
			runtime.manager.back_stage('btshowlist')

		def recv_send_meg():
			if runtime.btapp.fEnd[0] == '0':
				if runtime.btapp.fEnd.find('operation aborted') != -1:
					runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Operation Aborted')))
				else:
					runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Disconnected')))
				runtime.btapp.send_message('20|v')
				return

			if runtime.btapp.bt_p != -1 :
				import sdmmc
				pbitem = sdmmc.vcard_parse(self.selectedfname[self.index-1])
				if runtime.btapp.bt_p == 1:
					self.cp += 1
					runtime.manager.stack_stage(BluetoothSettingNotifyStage(pbitem.name + '`s vcf\n' +_('Copy complete')))
				else:
					runtime.manager.stack_stage(BluetoothSettingNotifyStage(pbitem.name + '`s vcf\n' +_('Copy incomplete')))
				self.all_cp += 1
				if self.index == len(self.selectedfname):
					runtime.manager.back_stage("copyfilestage")
					runtime.manager.stack_stage(BluetoothSettingNotifyStage( str(self.all_cp)+ ' '+_('selected.') + '\n' + str(self.cp) +' '+_('entries copied.')))
					runtime.btapp.send_message('20|D')
					runtime.btapp.set_default()
					os.system('rm *.vcf')
					return
				else:
					runtime.btapp.bt_p = -1
					self.brespond = 0


			elif runtime.btapp.bt_o == 1 and self.brespond == 0:
				runtime.btapp.send_message('20|P|' + self.selectedfname[self.index])
				self.index += 1
				self.brespond = 1

			elif runtime.btapp.bt_o == 0:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Copy failed'), backstage))
				runtime.btapp.set_default()
				return

			elif runtime.btapp.bt_c == 1 and self.brespond == -1:
				runtime.btapp.send_message('20|O')
				runtime.btapp.bt_c = -1 #set_c()
				self.brespond = 0

			elif runtime.btapp.bt_c == 0:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Copy failed'), backstage))
				runtime.btapp.set_default()
				return

			elif runtime.btapp.bt_s == 1 and self.brespond == -1:
				runtime.btapp.send_message('20|C')
				runtime.btapp.bt_s = -1 #set_s()

			elif runtime.btapp.bt_s == 0:
				runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Copy failed'), backstage))
				runtime.btapp.set_default()
				return

			self.rst = utils.Timer(500, recv_send_meg)
		bt_list = self.selectedbt.split('<>')
		key, value = bt_list[0].split('=', 1) # address
		runtime.btapp.send_message('20|s|'+ value.strip())
		recv_send_meg()

	def no_cb(self):
		self.brespond = -1
		self.rst = None
		runtime.btapp.set_default()
		runtime.btapp.send_message('20|D')
		runtime.manager.back_stage('copyfilestage')
	def handle_key(self, key):

		if key == config.Menu2: self.no_cb()
		elif key == config.Red:
			self.no_cb()
		elif key == config.Green or key == config.Video or key == config.OffHook:
			self.no_cb()
			runtime.manager.back_stage('idle')
			runtime.evas.render_now()
			return
		else: return False
		return True

def Restart_btapp():
	try:
		os.system('killall -9 ipc-pxa270-merge.out')


		import signal
		def hdl_sigchld(signum, frame):  # clean a zombie
			try:
			    	while 1:
				        if os.waitpid(0, os.WNOHANG): raise OSError
			except OSError:
			   	pass

		signal.signal(signal.SIGCHLD, hdl_sigchld)
		time.sleep(2)
		os.system('ipc-pxa270-merge.out&')
	except:
		os._exit(1)
	time.sleep(4)
	import bluetoothapp
	runtime.btapp = bluetoothapp.BTApp()
	runtime.btapp.run_btapp()

class BluetoothMyprofileStage(basemodel.ListStage):
	title = _('MY PROFILE')
	choice = (_('Name'), _('Passkey'), _('Address'))
	name = 'bluetooth registration'
	icon = uiconfig.bluetooth_icon

	def __init__(self):
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
		import menu
		if index == 0:
			stage = BluetoothInputStage(_('NAME'), _('Enter the name'))
		elif index == 1:
			stage = BluetoothEnterPassStage( '', _('PASSKEY'), _('Enter the passkey ') + '(4~16)')
		else:
			stage = BluetoothInfoShowStage

		runtime.manager.stack_stage(stage)

def get_btaddress():
	fp = open('/dev/mtd/1')
	mac_add = fp.read(40)
	maddress = ''
	for z in range(34,40):
		mac_e = '%02X' %int(ord(mac_add[z]))
		if z != 39:
			maddress += mac_e + ':'
		else:
			maddress += mac_e
	return maddress

class BluetoothAddressShowStage(baseui.SmallWindowUI):
	def __init__(self, title, subtitle):
		baseui.SmallWindowUI.__init__(self, '', _('BACK'), title, subtitle)

		self.btadd = runtime.evas.text(text=get_btaddress(), pos = (50, 110), font=(uiconfig.def_font, 15), color = uiconfig.list_text_color)
		self.add(self.btadd)

class BluetoothInputStage(basemodel.Stage):
	def __init__(self, title, subtitle):

		self.ui = baseui.EntryUI( _('OK'), _('BACK'), title, subtitle)
		self.ui.set_automata('multitap', 'lower')			#입력 방식 설정

		self.ui.set_text(btset.bt_name)
		self.ui.set_max(16)
	def activate_menu1(self):
		btset.bt_name = self.ui.get_text()
		def cb():
			btset.save()
			Restart_btapp()
			runtime.manager.back_stage()

		runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Saved!'), cb))
	def insert_symbol(self, s):
		before_text = self.ui.get_text()
		self.ui.insert_text(s)
		after_text = self.ui.get_text()
		if before_text == after_text:
			runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Max length exceeded')))
		else:
			runtime.manager.back_stage()

	def handle_key(self, key):
		if key == config.Menu1:	#options Menu(left key)
			self.ui.reset_automata()
			self.activate_menu1()
		elif key == config.Menu2:
			if self.ui.handle_key(key):
				return True
			runtime.manager.back_stage()
#ka...hangul 2007.02.05 modify
#		elif key == '#':
#			self.automata_idx = utils.get_automata_idx(*self.ui.automata)
#			self.automata_idx += 1
#			if self.automata_idx >= len(config.automata_list):
#				self.automata_idx = 3
#			name, casemode = config.automata_list[self.automata_idx]
#			self.ui.set_automata(name, casemode)
		elif key == 'SOFT4':
			self.automata_idx = utils.get_automata_idx(*self.ui.automata)
			self.automata_idx += 1
			if setting.lang == 'Korean':
				if self.automata_idx >=len(config.automata_list_hangul):
					self.automata_idx = 0
				name, casemode = config.automata_list_hangul[self.automata_idx]
			else:
				if self.automata_idx >=len(config.automata_list):
					self.automata_idx = 3	
				name, casemode = config.automata_list[self.automata_idx]	
			self.ui.set_automata(name, casemode)
#		elif key == '*':
#			runtime.manager.stack_stage(basemodel.SymbolSelectionStage(self, True, case = 3))
#			return True
# --- End of Adding
		else:
			return self.ui.handle_key(key)
		return True


class BluetoothEnterPassStage(basemodel.Stage):
	def __init__(self, prefix, title, subtitle, mode = 0):
		status.bluetooth_activated = True
		self.mode = mode

		import ui
		self.ui = BluetoothPINInputUI('', title, subtitle, mode)

	def show(self):
		if setting.screen_saver_enabled:
			setting.reset_screen_saver_timer()
			status.screensaver_activated = False
		self.ui.show()

	def activate(self, pin):
		btset.bt_passkey = pin
		def cb():
			btset.save()
			Restart_btapp()
			runtime.manager.back_stage()

		runtime.manager.change_stage(BluetoothSettingNotifyStage(_('Saved!'), cb))

	def handle_key(self, key):
		if key == config.Menu1 and self.mode == 1:
			status.bluetooth_activated = False
			runtime.btapp.send_message('20|E|'+self.ui.pin)
			runtime.manager.back_stage()
			return
		if key == config.Menu1:
			if len(self.ui.pin) < 4:
				runtime.manager.stack_stage(BluetoothSettingNotifyStage(_('Input 4~16 passkey')))
				return
			self.activate(self.ui.pin)
		elif key == config.Menu2:
			if len(self.ui.pin) > 0:
				self.ui.delete_backward()
			else:
				runtime.manager.back_stage()
		elif key == config.LongMenu2:
			self.ui.reset()
		else:
			self.ui.handle_key(key)

class BluetoothPINInputUI(baseui.SmallWindowUI):
	def __init__(self, prefix, title, subtitle, mode = 0):
		baseui.SmallWindowUI.__init__(self, _('OK'), _('BACK'), title, subtitle)
		self.cursor_pos = 0
		self.digits = ''
		self.prefix = prefix

		prefix_label = runtime.evas.text(text=self.prefix + self.digits,font=uiconfig.pin_prefix_font)
		prefix_label.color = uiconfig.pin_edit_color
		prefix_label.pos = uiconfig.pin_edit_pos
		self.add(prefix_label)

		x,y = prefix_label.geometry_get()[:2]
		edit_pos = x+prefix_label.horiz_advance_get(), y

		self.label = runtime.evas.text(text=self.digits,font=uiconfig.pin_edit_font)
		self.label.color = uiconfig.pin_edit_color
		self.label.pos = edit_pos
		self.add(self.label)

		self.underline = runtime.evas.text(text='_', font=uiconfig.date_edit_font)
		self.underline.color = uiconfig.date_edit_entry_color
		self.add(self.underline)
		if mode == 1:
			self.update_underline()
			self.pin = ''
		else:
			self.pin = btset.bt_passkey
			self.update()
	def update_underline(self):
		self.label.text = self.digits
		font_width = uiconfig.pin_edit_char_width
		font_height = uiconfig.pin_edit_underline_y
		pos = self.label.geometry_get()[:2]
		xpos = (0, 1, 3, 4, 5, 7, 8, 9, 11, 13, 14, 15, 17, 18, 19, 21, 22)[self.cursor_pos]
		x = pos[0] + xpos * font_width
		self.underline.pos = x, pos[1] + font_height
		if len(self.digits) == 0:
			self.set_right(_('BACK'))
		else:
			self.set_right(_('DELETE'))

		self.set_left(_('OK'))

	def update(self):
		self.digits = '*' * len(self.pin)
		self.cursor_pos = len(self.pin)
		self.update_underline()

	def reset(self):
		self.pin = ''
		self.set_right(_('BACK'))
		self.update()

	def delete_backward(self):
		if len(self.pin) >= 1:
			self.pin = self.pin[:-1]
			if len(self.pin) == 0:
				self.set_right(_('BACK'))
			else:
				self.set_right(_('DELETE'))
			self.update()

	def handle_key(self, key):
		if key.isdigit():
			if len(self.pin) >= 16:
				return True
			self.pin += key
			self.update()
			if len(self.pin) >= 1:
				self.set_right(_('DELETE'))

class BluetoothSettingStage(basemodel.ListStage):
	title = _('BLUETOOTH SETTING')
	icon = uiconfig.bluetooth_icon
	name = 'bluetooth setting'

	def __init__(self):
		if status.debug_mode:
#Roxia Begin smyook 06.03.15
			self.choice = (_('My profile'), _('Test mode'))
			#self.choice = (_('Registration'), _('My profile'), _('Test mode'))
#Roxia End smyook
		else:
#Roxia Begin smyook 06.03.15
			self.choice = _('My profile'),
			#self.choice = (_('Registration'), _('My profile'))
#Roxia End smyook
		basemodel.ListStage.__init__(self, self.choice, self.title)

	def activate(self, index):
#Roxia Begin smyook 06.03.15
		#if index == 0: # Registration
		#	stage = BluetoothRegistrationStage
		if index == 0: # My profile
			stage = BluetoothMyprofileStage
		elif index == 1:
#Roxia End smyook
			runtime.btapp.send_message('20|r')
			stage = BluetoothTestmodeStage

		runtime.manager.stack_stage(stage)

class BluetoothTestmodeStage(basemodel.Stage):
	def __init__(self):
		title = _('TEST MODE')
		message = _('Bluetooth testing...')
		self.ui = BtYesNoUI(title, message, uiconfig.baloon_bluetooth_icon)

	def no_cb(self):
		runtime.btapp.send_message('20|D')
		runtime.btapp.set_default()
		runtime.manager.back_stage()

	def handle_key(self, key):
		if key == config.Menu2: self.no_cb()
		elif key == config.Red:
			self.rst = 0
			runtime.btapp.send_message('20|D')
			runtime.btapp.set_default()
			return False
		elif key == config.Green or key == config.Video or key == config.OffHook:
			self.no_cb()
			runtime.manager.back_stage('idle')
			runtime.evas.render_now()
			return
		else: return False
		return True

#Roxia Begin jhbang 06.03.16 <ntp>
#removed NetworkTimeAddressStage class
#Roxia End jhbang

class NetworkTimeUpdateStage(basemodel.Stage): # obselete
	name = 'networktimeupdatestage'
	def __init__(self):
		message = _('Update time')
		icon = uiconfig.baloon_setting_system_icon
		self.ui = baseui.NotifyUI(message, icon)
		self.timer_tag = None
		self.ret = False
		self.job = utils.Idle(self.job_cb)

	def job_cb(self):
		if config.NTP_CODE_ENABLE:
			runtime.manager.ntp_kill_apptimer()
#Roxia Begin jhbang 06.03.16 <ntp>
		self.ret = runtime.manager.ntp_update()
		#pid, self.ret = os.waitpid(runtime.manager.ntp_pid, 0)
#Roxia End jhbang

		if profile.get_profile():
			runtime.manager.ntp_dayrun()
		import utils
		self.timer_tag = utils.Timer(3000, self.end_cb)
	def end_cb(self):
		if self.timer_tag:
			runtime.evas.timeout_remove(self.timer_tag)
			self.timer_tag = None
#Roxia Begin jhbang 06.03.16 <ntp>
		stage = NetworkTimeNotifyStage('update', self.ret)
#Roxia End jhbang
		runtime.manager.change_stage(stage)

	def handle_key(self, key):
		if key == config.Red:
			return True
		else:
			return basemodel.Stage.handle_key(self, key)

class NetworkTimeNotifyStage(basemodel.NotifyStage):
	name = 'networktimenotifystage'
	def __init__(self, mode='', value=None, cb=None):
		self.mode = mode
		self.value = value
		icon = uiconfig.baloon_setting_system_icon
#Roxia Begin jhbang 06.03.16 <ntp>
		#if 'ntp_server' == self.mode:
		#	message = _('Ntp address set')
#Roxia End jhbang
		if 'update' == self.mode:
			if self.value:
				message = _('Update succeeded')
			else:
				message = _('Update failed')
		elif 'enalbe/disable' == self.mode:
			if self.value:
				message = _('Network time enable')
			else:
				message = _('Network time disable')
		elif 'timezone' == self.mode:
			message = _('Timezone set')
		elif 'summertime' == self.mode:
			if self.value:
				message = _('Summer time disable')
			else:
				message = _('Summer time enable')
		basemodel.NotifyStage.__init__(self, message, icon, self.quit_cb, 3000)

		basemodel.NotifyStage.show(self)
		self.job = utils.Idle(self.job_cb)

	def quit_cb(self):
		if 'timezone' == self.mode or 'summertime' == self.mode:
			runtime.manager.back_stage('networktimestage')
		else:
			runtime.manager.back_stage()

	def time_change(self):
		if setting.ntp_enable:
			runtime.manager.ntp_update()

	def handle_key(self, key):
		if config.Red == key:
			return True
		return basemodel.NotifyStage.handle_key(self, key)

	def destroy(self):
		self.job = None
		basemodel.NotifyStage.destroy(self)

	def job_cb(self):
#Roxia Begin jhbang 06.03.16 <ntp>
		#if 'ntp_server' == self.mode:
		#	setting.set_ntpsever(self.value)
#Roxia End jhbang
		if 'update' == self.mode:
			if config.NTP_CODE_ENABLE:
				runtime.manager.ntp_restart_apptimer()
			if self.value:
				status.date_time_ready = True
			pass
		elif 'enalbe/disable' == self.mode:
			if self.value:
				setting.enable_ntp()
			else:
				setting.disable_ntp()
		elif 'timezone' == self.mode:
			setting.set_ntptimezone(config.GMT_diff[self.value])
			self.time_change()
			'''
			if 0 == self.value:
				setting.set_ntptimezone()
			elif 1 == self.value:
				setting.set_ntptimezone('Canarias (GMT)')
			else:
				setting.set_ntptimezone()
			self.time_change()
			'''

		elif 'summertime' == self.mode:
			if self.value:
				setting.set_ntpsummertime(0)
			else:
				setting.set_ntpsummertime(1)
			self.time_change()


class NetworkTimeTimezone(basemodel.ListStage):
	name = 'networktimetimezone'
	title = _('TIME ZONE')
	icon = uiconfig.setting_system_icon

	def __init__(self):
		choice = [_('(GMT+01:00) Central Europe Time'), _('(GMT) Greenwich Mean Time'), _('(GMT+09:00) Korea Standard Time')]
		basemodel.ListStage.__init__(self, choice)

	def activate(self, index):
		stage = NetworkTimeNotifyStage('timezone', index)
		runtime.manager.stack_stage(stage)

	def show(self):
		basemodel.ListStage.show(self)
		self.ui.set_focus(config.GMT_diff.index(setting.ntp_timezone))

class NetworkTimeSummer(basemodel.ListStage):
	name = 'networktimesummer'
	title = _('SUMMER TIME')
	icon = uiconfig.setting_system_icon

	def __init__(self):
		choice = [_('Enable'), _('Disable')]
		basemodel.ListStage.__init__(self, choice)

	def activate(self, index):
		stage = NetworkTimeNotifyStage('summertime', index)
		runtime.manager.stack_stage(stage)

	def show(self):
		basemodel.ListStage.show(self)
		if setting.ntp_summertime:
			self.ui.set_focus(0)
		else:
			self.ui.set_focus(1)


class NetworkTimeStage(basemodel.ListStage):
	name = 'networktimestage'
	title = _('NETWORK TIME')
	icon = uiconfig.setting_system_icon
	def __init__(self):
		basemodel.ListStage.__init__(self)

	def show(self):
		self.update_addlist()
		basemodel.ListStage.show(self)

	def update_addlist(self):
		self.choice = []
		if setting.ntp_enable:
			self.choice = [_('Disable')]
		else:
			self.choice = [_('Enable')]
		self.choice += [_('Timezone'), _('Summer time')]

		self.change_choice(self.choice)

	def activate(self, index):
		if _('Disable') == self.choice[index]:
			stage = NetworkTimeNotifyStage('enalbe/disable', False)
		elif _('Enable') == self.choice[index]:
			stage = NetworkTimeNotifyStage('enalbe/disable', True)
#Roxia Begin jhbang 06.03.16
		#elif _('Server address') == self.choice[index]:
		#	stage = NetworkTimeAddressStage
#Roxia End jhbang
		elif _('Update') == self.choice[index]:
			if not config.NTP_CODE_ENABLE:
				return
			stage = NetworkTimeUpdateStage
		elif _('Timezone') == self.choice[index]:
			stage = NetworkTimeTimezone
		elif _('Summer time') == self.choice[index]:
			stage = NetworkTimeSummer
		runtime.manager.stack_stage(stage)
_stages_pstn_systemsetting = DateStage, BluetoothSettingStage, PINChangeStage, TechnicalFeatureStage, ResetStage
#_stages_lan_systemsetting = DateStage, NetworkTimeStage, LANSettingsStage, PINChangeStage, TechnicalFeatureStage, ResetStage, DectSubscriptionStage, DectResetStage, DectFunctions
#_stages_wifi_systemsetting = DateStage, NetworkTimeStage, WiFiSettingsStage, PINChangeStage, TechnicalFeatureStage, ResetStage, DectSubscriptionStage, DectResetStage, DectFunctions
_stages_lan_systemsetting = DateStage, NetworkTimeStage, LANSettingsStage, PINChangeStage, PhoneInformationStage, ResetStage, DectSubscriptionStage, DectResetStage, DectFunctions
_stages_wifi_systemsetting = DateStage, NetworkTimeStage, WiFiSettingsStage, PINChangeStage, PhoneInformationStage, ResetStage, DectSubscriptionStage, DectResetStage, DectFunctions

_stages_phonesetting_ip = CallBarringPINCheckStage, DisplayStage, LanguageStage, WritingModeStage, PrefixSettingStage, OutgoingRestrictStage, IncomingRestrictStage

def get_stage_system(cprofile, index):
	if cprofile == 0:
		return _stages_pstn_systemsetting[index]
	elif cprofile == 1:
		return _stages_lan_systemsetting[index]
	else:
		return _stages_wifi_systemsetting[index]

def get_stage_phone(index):
	import profile
	if profile.ip_mode == 0:
		return _stages_phonesetting_ip[index]
	else:
		return _stages_phonesetting_ip[index]

def vdci_reload():
	import vdciapp

	if runtime.vdciapp:
		runtime.vdciapp.kill_vdciapp()
		del(runtime.vdciapp)
		runtime.vdciapp = None

	runtime.vdciapp = vdciapp.VDCIApp()
	runtime.vdciapp.run_vdciapp()
	# [WARN] 현재 profile 설정에 따라 video fluency값이 다르다..
	import profile
	if profile.ip_mode == 0: # pstn
		runtime.vdci_startup(ip_profile=False)
	else:
		runtime.vdci_startup(ip_profile=True)

def getIpAddress():
	global cur_profile
	if cur_profile.get_dhcp() == 1:
		if cur_profile == lan_profile:
			if os.path.exists('/tmp/dhcpcd-eth0.info'):
				fp = open('/tmp/dhcpcd-eth0.info')
			else:
				return None
		else:
			if os.path.exists('/tmp/dhcpcd-wlan0.info'):
				fp = open('/tmp/dhcpcd-wlan0.info')
			else:
				return None
		dhcpinfo = fp.readlines()
		for z in dhcpinfo:
			if z.find('#') != -1:
				continue

			key, value = z.split('=')
			key = key.strip()

			if key == 'IPADDR':
				return (value.strip(), True)
		fp.close()
		
	else:
		if cur_profile.ipaddress:
			return (cur_profile.ipaddress, False)

	return None

def getDNS():
	firstdns = "0.0.0.0"
	seconddns = "0.0.0.0"
	try:
		f = file(config.dns_file, "r")
		for line in f:
			list = line.split()
			if firstdns == "0.0.0.0":
				firstdns = list[1]
			elif seconddns == "0.0.0.0":
				seconddns = list[1]
		f.close()
		return firstdns, seconddns
	except:
		return "0.0.0.0", "0.0.0.0"

def getNetworkInfo():
	global cur_profile

	ipaddress	= "0.0.0.0"
	netmask	= "0.0.0.0"
	gateway	= "0.0.0.0"
	dnsaddr1	= "0.0.0.0"
	dnsaddr2	= "0.0.0.0"

	result = (ipaddress, netmask, gateway, dnsaddr1, dnsaddr2)
	
	if cur_profile.get_dhcp() == 1:
		if cur_profile == lan_profile:
			if os.path.exists('/tmp/dhcpcd-eth0.info'):
				fp = open('/tmp/dhcpcd-eth0.info')
			else:
				return result
		else:
			if os.path.exists('/tmp/dhcpcd-wlan0.info'):
				fp = open('/tmp/dhcpcd-wlan0.info')
			else:
				return result
				
		dhcpinfo = fp.readlines()
		for item in dhcpinfo:
			if item.find('#') != -1:
				continue

			key, value = item.split('=')
			key = key.strip()

			if key == 'IPADDR':
				if value:
					ipaddress = value.strip()
			elif key == 'NETMASK':
				if value:
					netmask = value.strip()
			elif key == 'GATEWAY':
				if value:
					gateway = value.strip()
			elif key == 'DNS':
				if value:
					try:
						dnsaddr1 = value.strip().split(',')[0]
					except:
						pass
					try:
						dnsaddr2 = value.strip().split(',')[1]
					except:
						pass
				
		fp.close()
		
	else:
		ipaddress = cur_profile.ipaddress
		netmask = cur_profile.netmask
		gateway = cur_profile.gateway
		dnsaddr1, dnsaddr2 = getDNS()

	result = (ipaddress, netmask, gateway, dnsaddr1, dnsaddr2)
	return result

def getSerialNumber():
	try:
		os.system('serialno > /tmp/serial.txt')
	       	fp = open('/tmp/serial.txt')
		serialnumber = fp.readline().strip()
		serialnumber = serialnumber[:14]
		fp.close()
	except:
		serialnumber = ''
	return serialnumber

def getMACNumber():
	try:
		os.system('serialno mac > /tmp/mac.txt')
		fp = open('/tmp/mac.txt')
		macaddress = fp.read()
		macaddress = macaddress.strip()
		fp.close()
	except:
		macaddress = ''
	return macaddress
	
def getWiFiMAC():
	msg_mac = 'FF:FF:FF:FF:FF:FF:FF'

	if not os.access('/usr/etc/wmac', os.R_OK) :
		print '#########xxx'
		os.system('/usr/local/bin/wltest')
		
	try:
		fp = open('/usr/etc/wmac')
		print '$$$$$$$$$$$$$yyy'
		msg_mac = fp.readline().strip()
		fp.close()
	except :
		msg_mac = 'FF:FF:FF:FF:FF:FF:FF'

	return msg_mac

def getVersion():
	try:
		p = file("config.cfg",'r')
		t=p.read()
		p.close()
		import re
		t = t.replace(' ','')
		#swver = re.search("firmware_version=([0-9.A-Za-z]+)",t).group(1)
		hwver = re.search("hardware_version=([0-9.]+)",t).group(1)
	except:
		hwver = ''
	try:
		# --- S/W version & Model name
		p = file('/usr/local/lgvp/var/product_model.info','r')
		t=p.read()
		p.close()
		data = t.split('#')
		model = data[1].strip()
		swver = data[2].strip()
	except:
		model = ''
		swver = ''
	return model, hwver, swver

class LanguageStage(basemodel.ListStage):
	title = _('MENU LANGUAGE')
#	choice = _('English'),  _('French'),  _('Spanish'), \
#			 _('German'), _('Portuguese'), _('Korean'), _('Turkish')

	choice = _('English'), _('Norwegian')
	#icon = uiconfig.setting_phone_icon

	def __init__(self):
		basemodel.ListStage.__init__(self)
		if setting.lang == 'English':
			self.ui.set_focus(0)
		elif setting.lang == 'Norwegian':
			self.ui.set_focus(1)		
		elif setting.lang == 'Korean':
			self.ui.set_focus(2)		
		self.old_lang = setting.lang 

	def activate(self, index):

		if index == 0:
			lang = 'English'
			t9_language = 0
			message = _('English selected')		
		elif index == 1:
			lang = 'Norwegian'
			t9_language = 6
			message= _('Norwegian selected')
		elif index == 2:
			lang = 'Korean'
			t9_language = 0
			message= _('Korean selected')
			
			
		#setting.set_lang(lang, chg_lang = True)
		#setting.lang = lang
		
		def need_reinit():
			# for IP3870
			print '### NEED REINIT', lang, self.old_lang
			if (lang == 'Korean' or self.old_lang == 'Korean') and (lang != self.old_lang):
				return True
			return False
			
		def cb():

			if need_reinit():
				def reinit_cb():
					setting.set_lang(lang, chg_lang = True)
					setting.lang = lang
					setting.t9_language = t9_language
					setting._save()
					os.system('sync')
					print '#####killall ########'
					os._exit(-1)
					#os.system('killall python')
				#if runtime.vdciapp:
				#	runtime.vdciapp.req_deregister()
				message = _('Initializing...')

				#message = 'Initializing...'
				stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon, reinit_cb)
				runtime.manager.change_stage(stage)
					
				#reinit_cb()
			else:
				setting.set_lang(lang, chg_lang = True)
				setting.lang = lang
				setting.t9_language = t9_language
				setting.save()
				#os.system('sync')
				#runtime.manager.back_stage()

				# shchun : TT QA to change idlestage settings
				runtime.manager.change_stage_org(model.IdleStage, True)
		#if need_reinit():
		#	message = utils.remove_translation_mark(message)
		stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon, cb)
		runtime.manager.change_stage(stage)
		
class LanguageTestStage(basemodel.ListStage):
	title = _('MENU LANGUAGE')
	choice = _('English'),  _('French'),  _('Spanish'), \
			 _('German'), _('Portuguese'), _('Korean'), _('Turkish'), _('Norwegian')


	def __init__(self):
		basemodel.ListStage.__init__(self)
		if setting.lang == 'English':
			self.ui.set_focus(0)
		elif setting.lang == 'Francais':
			self.ui.set_focus(1)
		elif setting.lang == 'Spain':
			self.ui.set_focus(2)
		elif setting.lang == 'Deutsch':
			self.ui.set_focus(3)		
		elif setting.lang == 'Portuguese':
			self.ui.set_focus(4)	
		elif setting.lang == 'Korean':
			self.ui.set_focus(5)		
		elif setting.lang == 'Turkish':
			self.ui.set_focus(6)	
		elif setting.lang == 'Norwegian':
			self.ui.set_focus(6)		
		self.old_lang = setting.lang 

	def activate(self, index):
		if index == 0:
			lang = 'English'
			message = _('English selected')
		elif index == 1:
			lang = 'Francais'
			message = _('French selected')
		elif index == 2:
			lang = 'Spain'
			message = _('Spanish selected')
		elif index == 3:
			lang = 'Deutsch'
			message= _('German selected')
		elif index == 4:
			lang = 'Portuguese'
			message= _('Portuguese selected')
		elif index == 5:
			lang = 'Korean'
			message= _('Korean selected')	
		elif index == 6:
			lang = 'Turkish'
			message= _('Turkish selected')	
		elif index == 7:
			lang = 'Norwegian'
			message= _('Norwegian selected')	
				
		#setting.set_lang(lang, chg_lang = True)
		#setting.lang = lang
		
		def need_reinit():
			# for IP3870
			#print '### NEED REINIT', lang, self.old_lang
			#if (lang == 'Korean' or self.old_lang == 'Korean') and (lang != self.old_lang):
			#	return True
			return False
			
		def cb():

			if need_reinit():
				def reinit_cb():
					setting.set_lang(lang, chg_lang = True)
					setting.lang = lang
					setting._save()
					os.system('sync')
					print '#####killall ########'
					os._exit(-1)
					#os.system('killall python')
				#if runtime.vdciapp:
				#	runtime.vdciapp.req_deregister()
				message = _('Initializing...')

				#message = 'Initializing...'
				stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon, reinit_cb)
				runtime.manager.change_stage(stage)
					
				#reinit_cb()
			else:
				setting.set_lang(lang, chg_lang = True)
				setting.lang = lang
				setting.save()
				#os.system('sync')
				#runtime.manager.back_stage()

				# shchun : TT QA to change idlestage settings
				runtime.manager.change_stage(model.IdleStage, True)
		#if need_reinit():
		#	message = utils.remove_translation_mark(message)
		stage = basemodel.NotifyStage(message, uiconfig.baloon_setting_phone_icon, cb)
		runtime.manager.change_stage(stage)