/* Copyright (c) 2008 Bluendo S.r.L.
* See about.html for details about license.
*
* $Id: OptionsScreen.java 1601 2009-06-19 14:09:03Z luca $
*/
package lampiro.screens;
import java.util.Vector;
import it.yup.ui.UICanvas;
import it.yup.ui.UICheckbox;
import it.yup.ui.UICombobox;
import it.yup.ui.UIConfig;
import it.yup.ui.UIGauge;
import it.yup.ui.UIItem;
import it.yup.ui.UILabel;
import it.yup.ui.UILayout;
import it.yup.ui.UIMenu;
import it.yup.ui.UIScreen;
import it.yup.ui.UITextField;
import it.yup.util.ResourceIDs;
import it.yup.util.ResourceManager;
import it.yup.util.Utils;
import it.yup.xmpp.Config;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.TextField;
// #ifdef UI
import lampiro.LampiroMidlet;
// #endif
public class OptionsScreen extends UIScreen {
private static ResourceManager rm = ResourceManager.getManager("common",
"en");
private UILabel cmd_save = new UILabel(rm.getString(ResourceIDs.STR_SAVE));
private UILabel cmd_cancel = new UILabel(rm
.getString(ResourceIDs.STR_CANCEL));
private UILabel cmd_reset = new UILabel(rm
.getString(ResourceIDs.STR_RESET_OPTIONS));
private UICombobox ch_vibrate;
private UICombobox ch_tone;
public UICombobox color;
public UICombobox resolution;
public UICombobox font_size;
private UITextField tf_keepalive;
private UITextField history_size;
private UICheckbox qwerty;
private UIGauge g_volume;
public OptionsScreen() {
setTitle(rm.getString(ResourceIDs.STR_OPTIONS_SETUP));
boolean flags[] = new boolean[2];
Config cfg = Config.getInstance();
String selected_status = cfg.getProperty(
Config.VIBRATION_AND_TONE_SETTINGS, "1");
// prepare the form
// tone and vibration settings
append(new UILabel(rm.getString(ResourceIDs.STR_WHEN_NEW_MESSAGES)));
ch_vibrate = new UICombobox(rm.getString(ResourceIDs.STR_VIBRATE_IF),
true);
ch_vibrate.append(rm.getString(ResourceIDs.STR_HIDDEN));
ch_vibrate.append(rm.getString(ResourceIDs.STR_SHOW));
flags = Utils.str2flags(selected_status, 0, 2);
ch_vibrate.setSelectedFlags(flags);
append(ch_vibrate);
ch_tone = new UICombobox(rm.getString(ResourceIDs.STR_PLAY_TONE_IF),
true);
ch_tone.append(rm.getString(ResourceIDs.STR_HIDDEN));
ch_tone.append(rm.getString(ResourceIDs.STR_SHOW));
flags = Utils.str2flags(selected_status, 2, 2);
ch_tone.setSelectedFlags(flags);
append(ch_tone);
// XXX: append(new Spacer(100, 1));
color = new UICombobox(rm.getString(ResourceIDs.STR_COLOR), false);
color.setAnchorPoint(Graphics.RIGHT);
color.append(rm.getString(ResourceIDs.STR_COLOR_BLUE));
color.append(rm.getString(ResourceIDs.STR_COLOR_GREEN));
color.append(rm.getString(ResourceIDs.STR_COLOR_RED));
color.append(rm.getString(ResourceIDs.STR_COLOR_ALEF));
append(color);
String colorString = Config.getInstance()
.getProperty(Config.COLOR, "0");
int colorInt = Integer.parseInt(colorString);
color.setSelectedIndex(colorInt);
resolution = new UICombobox(rm.getString(ResourceIDs.STR_CAMERA_RESOLUTION), false);
resolution.setAnchorPoint(Graphics.RIGHT);
resolution.append(rm.getString(ResourceIDs.STR_RESOLUTION_DEFAULT));
resolution.append(rm.getString(ResourceIDs.STR_CAMERA_LOW));
resolution.append(rm.getString(ResourceIDs.STR_CAMERA_MEDIUM));
resolution.append(rm.getString(ResourceIDs.STR_CAMERA_HIGH));
resolution.append(rm.getString(ResourceIDs.STR_CAMERA_HUGE));
append(resolution);
String resolutionString = Config.getInstance()
.getProperty(Config.CAMERA_RESOLUTION, "0");
int resolutionInt = Integer.parseInt(resolutionString);
resolution.setSelectedIndex(resolutionInt);
String font_sizeString = rm.getString(ResourceIDs.STR_FONT_SIZE);
font_size = new UICombobox(font_sizeString, false);
font_size.setAnchorPoint(Graphics.RIGHT);
font_size.append(rm.getString(ResourceIDs.STR_FONT_SMALL));
font_size.append(rm.getString(ResourceIDs.STR_FONT_MEDIUM));
font_size.append(rm.getString(ResourceIDs.STR_FONT_BIG));
append(font_size);
font_sizeString = Config.getInstance().getProperty(Config.FONT_SIZE,
"0");
font_size.setSelectedIndex(font_sizeString.toCharArray()[0] - '0');
// XXX: append(new Spacer(100, 1));
// volume
int volume = Integer
.parseInt(cfg.getProperty(Config.TONE_VOLUME, "50")) / 10;
g_volume = new UIGauge(rm.getString(ResourceIDs.STR_VOLUME), true, 10,
volume);
append(g_volume);
// XXX: append(new Spacer(100, 1));
// keepalive
long ka = Long.parseLong(cfg.getProperty(Config.KEEP_ALIVE)) / 1000;
tf_keepalive = new UITextField(rm.getString(ResourceIDs.STR_KEEPALIVE),
String.valueOf(ka), 5, TextField.NUMERIC);
append(tf_keepalive);
short hs = Short.parseShort(cfg.getProperty(Config.HISTORY_SIZE, "30"));
history_size = new UITextField(rm
.getString(ResourceIDs.STR_HISTORY_SIZE), String.valueOf(hs),
5, TextField.NUMERIC);
append(history_size);
qwerty = new UICheckbox(rm
.getString(ResourceIDs.STR_QWERTY));
//qwerty.setAnchorPoint(Graphics.LEFT);
//qwerty.setFlip(true);
Font xFont = UICanvas.getInstance().getCurrentScreen().getGraphics().getFont();
Font lfont = Font.getFont(xFont.getFace(), Font.STYLE_BOLD, xFont
.getSize());
qwerty.setFont(lfont);
qwerty.setChecked(cfg.getProperty(Config.QWERTY, Config.FALSE).equals(Config.TRUE));
append(qwerty);
// add the commands
setMenu(new UIMenu(""));
UIMenu menu = getMenu();
menu.append(cmd_save);
menu.append(cmd_reset);
menu.append(cmd_cancel);
}
public void itemAction(UIItem item) {
if (item == this.color) {
int colorIndex = this.color.getSelectedIndex();
// #ifdef UI
LampiroMidlet.changeColor(colorIndex);
// #endif
Config cfg = Config.getInstance();
cfg.setProperty(Config.COLOR, this.color.getSelectedIndex() + "");
cfg.saveToStorage();
// to update menus and colors of myself
titleLabel.setBg_color(UIConfig.header_bg);
titleLabel.setFg_color(UIConfig.menu_title);
footerLeft.setBg_color(UIConfig.header_bg);
footerLeft.setFg_color(UIConfig.menu_title);
footerRight.setBg_color(UIConfig.header_bg);
footerRight.setFg_color(UIConfig.menu_title);
this.color.comboScreen.titleLabel.setBg_color(UIConfig.header_bg);
this.color.comboScreen.titleLabel.setFg_color(UIConfig.menu_title);
this.color.comboScreen.footerLeft.setBg_color(UIConfig.header_bg);
this.color.comboScreen.footerLeft.setFg_color(UIConfig.menu_title);
this.color.comboScreen.footerRight.setBg_color(UIConfig.header_bg);
this.color.comboScreen.footerRight.setFg_color(UIConfig.menu_title);
this.setDirty(true);
this.askRepaint();
}
else if (item == this.font_size) {
int fontIndex = this.font_size.getSelectedIndex();
// #ifdef UI
LampiroMidlet.changeFont(fontIndex);
// #endif
Config cfg = Config.getInstance();
cfg.setProperty(Config.FONT_SIZE, this.font_size.getSelectedIndex()
+ "");
cfg.saveToStorage();
this.setDirty(true);
this.askRepaint();
}
}
public void menuAction(UIMenu menu, UIItem cmd) {
// to update the colors of the rosterscreen
RosterScreen.getInstance().updateScreen();
if (cmd_save == cmd) {
saveOptions();
} else if (cmd_reset == cmd) {
Config cfg = Config.getInstance();
cfg.resetStorage(false);
// this *CAN* be set now instead of waiting reload
UICanvas.getInstance().close(this);
OptionsScreen os = new OptionsScreen();
UICanvas.getInstance().open(os, true);
os.itemAction(os.color);
os.itemAction(os.font_size);
os.saveOptions();
} else if (cmd_cancel == cmd) {
UICanvas.getInstance().close(this);
UICanvas.getInstance().show(RosterScreen.getInstance());
}
}
/**
*
*/
public void saveOptions() {
Config cfg = Config.getInstance();
boolean flags[] = new boolean[4];
flags[0] = ch_vibrate.isSelected(0);
flags[1] = ch_vibrate.isSelected(1);
flags[2] = ch_tone.isSelected(0);
flags[3] = ch_tone.isSelected(1);
cfg.setProperty(Config.VIBRATION_AND_TONE_SETTINGS, Utils.flags2str(
flags, 0));
cfg.setProperty(Config.TONE_VOLUME, String
.valueOf(g_volume.getValue() * 10));
cfg.setProperty(Config.KEEP_ALIVE, String.valueOf(Integer
.parseInt(tf_keepalive.getText()) * 1000));
cfg.setProperty(Config.HISTORY_SIZE, String.valueOf(Integer
.parseInt(history_size.getText())));
String qwertyValue= Config.FALSE;
if (qwerty.isChecked()){
qwertyValue = Config.TRUE;
UICanvas.getInstance().setQwerty(true);
}
else{
qwertyValue = Config.FALSE;
UICanvas.getInstance().setQwerty(false);
}
cfg.setProperty(Config.QWERTY, qwertyValue);
cfg.setProperty(Config.CAMERA_RESOLUTION, resolution.getSelectedIndex()+"");
cfg.saveToStorage();
RosterScreen.closeAndOpenRoster(this);
UICanvas.showAlert(AlertType.WARNING, rm
.getString(ResourceIDs.STR_WARNING), rm
.getString(ResourceIDs.STR_SETTINGS_EFFECT));
}
}