package com.rapidftr.screens;
import java.util.Vector;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.VerticalFieldManager;
import com.rapidftr.Main;
import com.rapidftr.controllers.HomeController;
import com.rapidftr.controls.Button;
import com.rapidftr.net.ConnectionFactory;
import com.rapidftr.screens.internal.CustomScreen;
import com.rapidftr.utilities.Settings;
public class HomeScreen extends CustomScreen {
private static final XYEdges PADDING = new XYEdges(10, 10, 10, 10);
private Button searchButton;
private Settings settings;
private ConnectionFactory connectionFactory;
public HomeScreen(Settings settings) {
this.settings = settings;
layoutScreen();
this.connectionFactory = new ConnectionFactory();
}
private void layoutScreen() {
setUserName(this.settings.getCurrentlyLoggedIn());
Button loginButton;
if (settings.isUserLoggedIn()) {
loginButton = new Button("Log Out");
loginButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onLogOutButtonClicked();
}
});
} else {
loginButton = new Button("Log In");
loginButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onLoginButtonClicked();
}
});
}
Button newChildButton = new Button("Register Child");
newChildButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onNewChildClicked();
}
});
Button viewChildrenButton = new Button("View All Children");
viewChildrenButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onViewChildrenClicked();
}
});
searchButton = new Button("Search for a Child");
searchButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onSearchClicked();
}
});
Button synchronizeButton = new Button("Synchronize");
synchronizeButton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
onSynchronizeClicked();
}
});
Vector buttonGroup = new Vector();
buttonGroup.addElement(loginButton);
buttonGroup.addElement(newChildButton);
buttonGroup.addElement(viewChildrenButton);
buttonGroup.addElement(searchButton);
buttonGroup.addElement(synchronizeButton);
Button.setOptimimWidthForButtonGroup(buttonGroup);
VerticalFieldManager manager = new VerticalFieldManager(FIELD_HCENTER);
manager.setPadding(PADDING);
loginButton.setPadding(PADDING);
manager.add(loginButton);
newChildButton.setPadding(PADDING);
manager.add(newChildButton);
viewChildrenButton.setPadding(PADDING);
manager.add(viewChildrenButton);
searchButton.setPadding(PADDING);
manager.add(searchButton);
synchronizeButton.setPadding(PADDING);
manager.add(synchronizeButton);
add(manager);
}
protected void onLogOutButtonClicked() {
int result = Dialog.ask(Dialog.D_YES_NO,
"Are you sure you want to Log Out ?");
if (result == Dialog.YES) {
settings.clearAuthenticationInfo();
Dialog.alert("Successfully Logged Out");
}
}
protected void onLoginButtonClicked() {
((HomeController) controller).logIn();
}
protected void onSynchronizeClicked() {
if (connectionFactory.isNotConnected()) {
Dialog.ask(Dialog.D_OK,
"Could not establish connection with host because all connectors are offline");
} else if (!settings.isUserLoggedIn()) {
int result = Dialog.ask(Dialog.D_OK_CANCEL,
"You are not logged in.\n Press ok to login.");
if (result == Dialog.OK) {
onLoginButtonClicked();
}
} else {
((HomeController) controller).synchronize();
}
}
private void onViewChildrenClicked() {
((HomeController) controller).viewChildren();
}
private void onSearchClicked() {
((HomeController) controller).showSearch();
}
private void onNewChildClicked() {
((HomeController) controller).newChild();
}
private void onCleanDeviceClicked() {
int result = Dialog
.ask(
Dialog.D_YES_NO,
"Do you want to clean the device? This will clear all the locally stored child records and login information");
if (result == Dialog.YES) {
((HomeController) controller).cleanAll();
Dialog.alert("Device successfully cleaned");
onLoginButtonClicked();
}
}
protected void makeMenu(Menu menu, int instance) {
int userOptions = 1;
int firstSeparator = 2;
int advancedOptions = 3;
MenuItem cleanDeviceMenuItem = new MenuItem("Clean Device", advancedOptions, 2) {
public void run() {
onCleanDeviceClicked();
}
};
MenuItem syncInfoItem = new MenuItem("Last Sync Info", userOptions, 2) {
public void run() {
Dialog.alert(settings.getLastSyncInfo());
}
};
MenuItem contactHelpItem = new MenuItem("Contact & Help", userOptions, 1) {
public void run() {
((HomeController) controller).showcontact();
}
};
MenuItem updateApplicationMenuItem = new MenuItem("Update RapidFTR", advancedOptions, 1) {
public void run() {
((HomeController) controller).updateApplication();
}
};
menu.add(contactHelpItem);
menu.add(updateApplicationMenuItem);
menu.add(MenuItem.separator(firstSeparator));
menu.add(cleanDeviceMenuItem);
menu.add(syncInfoItem);
}
protected void onExposed() {
clearFields();
layoutScreen();
super.onExposed();
if (!((Main)this.getApplication()).permissionsGranted) {
onClose();
System.exit(-1);
}
}
public boolean keyChar( char key, int status, int time )
{
return false;
}
public boolean keyDown(int keycode, int time)
{
return false;
}
}