Screen.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.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;

import com.nokia.example.bcexchanger.*;

/**
 * 
 * This class is an abstract base class for all the UI screen in this
 * application. This class implements CommandListner interface.
 * 
 * @see example.BCExchanger.ui.Screen Design patterns: State
 * 
 */
public abstract class Screen implements CommandListener {

    protected BCExchangerMIDlet midlet;
    protected Displayable displayable;

    /**
     * Constructor
     * 
     * @param _midlet -
     *          the parent class which keeps the current UI state
     */
    public Screen(BCExchangerMIDlet _midlet) {
        midlet = _midlet;
    }

    /**
     * Makes current screen active
     * <p>
     * Each class inherited from Screen has a displayable associated.
     * When this method is called the displayable is made visible and
     * active
     * 
     */
    public void makeActive() {
        try {
            Display d = Display.getDisplay(midlet);

            if (d.getCurrent() != displayable) { // this prevents from
                // bringing application to
                // foreground in case is
                // application is in
                // background and the
                // current displayable is
                // the same as the one
                // made active
                d.setCurrent(displayable);
            }

        } catch (NullPointerException e) {
            throw new RuntimeException(
                    "Internal error #2: Screen.midlet == null");
        }
    }
}