/** * Copyright (c) 2012-2013 Nokia Corporation. All rights reserved. * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. * Oracle and Java are trademarks or registered trademarks of Oracle and/or its * affiliates. Other product and company names mentioned herein may be trademarks * or trade names of their respective owners. * See LICENSE.TXT for license information. */ package com.nokia.example.rlinks.view; import com.nokia.example.rlinks.Main; import com.nokia.example.rlinks.network.HttpOperation; import com.nokia.example.rlinks.network.operation.LoginOperation; import com.nokia.example.rlinks.network.operation.LoginOperation.LoginListener; import com.nokia.example.rlinks.view.item.AbstractCustomItem; import com.nokia.example.rlinks.view.item.LoaderItem; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Item; import javax.microedition.lcdui.ItemCommandListener; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; /** * View for logging in. */ public class LoginView extends BaseFormView implements LoginListener, ItemCommandListener { private final Command submitCommand = new Command("Submit", Command.SCREEN, 0); private final BackCommandListener backListener; private final LoginOperation.LoginListener loginListener; private final TextField username; private final TextField password; private final StringItem submit; private HttpOperation loginOperation; /** * Create a LoginView. * * @param loginListener Listener to signal of login events * @param backListener Listener to signal of back button presses */ public LoginView(LoginListener loginListener, BackCommandListener backListener) { super("Login", new Item[] {}); this.backListener = backListener; this.loginListener = loginListener; this.username = new TextField("Username", session.getUsername(), 20, TextField.NON_PREDICTIVE & ~TextField.INITIAL_CAPS_WORD); this.password = new TextField("Password", null, 40, TextField.PASSWORD); this.submit = new StringItem(null, "Submit", StringItem.BUTTON); submit.setDefaultCommand(submitCommand); submit.setItemCommandListener(this); setupCommands(); } protected final void setupCommands() { addCommand(backCommand); addCommand(submitCommand); } public void show() { deleteAll(); append(username); append(password); if (AbstractCustomItem.isFTDevice) { append(submit); } } public void commandAction(Command command, Displayable displayable) { if (command == backCommand) { backListener.backCommanded(); } else if (command == submitCommand) { submitLogin(); } } public void commandAction(Command command, Item item) { commandAction(command, (Displayable) null); } /** * Submit a login request. */ private void submitLogin() { if (loginOperation != null && !loginOperation.isFinished()) { return; } final String user = username.getString(); final String pass = password.getString(); if (user == null || pass == null) { return; } loginOperation = new LoginOperation(user.toLowerCase(), pass, this); loginOperation.start(); deleteAll(); append(new LoaderItem()); } /** * Handle and signal a successful login. */ public void loginSucceeded(String username, String modhash) { session.setLoggedIn(username, modhash); loginListener.loginSucceeded(username, modhash); } /** * Handle and signal a failed login. */ public void loginFailed(String reason) { // Show an error message and refresh the view final String message = "Login failed" + (reason != null ? " (" + reason + ")" : "") + ". Please try again."; Main.getInstance().showAlertMessage( "Login failed", message, AlertType.INFO ); show(); loginListener.loginFailed(reason); } }