ProgressScreen.java

/*
 * Copyright © 2012 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.bcexchanger.ui;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Item;
import com.nokia.example.bcexchanger.*;

/**
 * 
 * This class implements the screen which indicates that some
 * operation is in progress. For example when inquiry, service
 * discovery, business card sending and receiving is running this
 * screen is displayed. Using this screen user can cancel the process
 * 
 * The class is extending an example.BCExchanger.ui.Screen class
 * 
 * @see example.BCExchanger.ui.Screen Design patterns: State
 */
public class ProgressScreen extends Screen {

    private Command cancelCommand;
    private Gauge gauge;
    private Form progressBar;

    /**
     * Constructor
     * 
     * @param _midlet -
     *          the parent class which keeps the current UI state
     * @param message -
     *          text message to be displayed
     */
    public ProgressScreen(BCExchangerMIDlet _midlet, String message) {
        super(_midlet);

        progressBar = new Form("Please wait");

        gauge = new Gauge(message, false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING);
        gauge.setLayout(Item.LAYOUT_CENTER);
        gauge.setLayout(Item.LAYOUT_VCENTER);
        progressBar.append(gauge);

        cancelCommand = new Command("Cancel", Command.CANCEL, 1);
        progressBar.addCommand(cancelCommand);

        progressBar.setCommandListener(this);

        displayable = progressBar;

    }

    public void commandAction(Command command, Displayable _displayable) {

        if (_displayable != progressBar) {
            // wrong displayable
            throw new RuntimeException("Internal error #21");
        }

        if (command == cancelCommand) {
            midlet.getExchanger().cancelSending();
        } else {
            // unknown command
            throw new RuntimeException("Internal error #22");
        }
    }
}