FileDocCategorySizeDatePackage
HeadlessAlert.javaAPI DocphoneME MR2 API (J2ME)3835Wed May 02 18:00:06 BST 2007com.sun.midp.main

HeadlessAlert.java

/*
 *
 *
 * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt).
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions.
 */

package com.sun.midp.main;

import javax.microedition.lcdui.*;

import com.sun.midp.configurator.Constants;

import com.sun.midp.i18n.Resource;
import com.sun.midp.i18n.ResourceConstants;

/**
 * HeadlessAlert is shown when a user selects a MIDlet to bring to the
 * foreground that has not requested the foreground at least once by
 * call Display.setCurrent(Displayable).
 */
class HeadlessAlert extends Alert implements CommandListener {

    /** Cached reference to the MIDletControllerEventProducer. */
    private MIDletControllerEventProducer midletControllerEventProducer;

    /** ID of the parent display */
    private int displayId;

    /** Command to bring a headless midlet into the background */
    private Command backgroundCommand;

    /** Command to terminate a headless midlet */
    private Command exitCommand;

    /**
     * Initialize this headless alert.
     *
     * @param theDisplayId ID of the parent display
     * @param theMidletControllerEventProducer reference to an event producer
     */
    HeadlessAlert(int theDisplayId,
            MIDletControllerEventProducer theMidletControllerEventProducer) {
        super(null,
              Resource.getString(ResourceConstants.LCDUI_DISPLAY_HEADLESS),
              null, AlertType.INFO);

        displayId = theDisplayId;
        midletControllerEventProducer  = theMidletControllerEventProducer;

        setTimeout(Alert.FOREVER);

        // Don't put the background command on the main display's alert
        if (!MIDletSuiteUtils.isAmsIsolate()) {
            backgroundCommand = new Command(Resource.getString(
                                ResourceConstants.OK), Command.OK, 2);
            addCommand(backgroundCommand);
        }

        exitCommand = new Command(Resource.getString(ResourceConstants.EXIT),
                                  Command.EXIT, 1);

        addCommand(exitCommand);

        setCommandListener(this);
    }

    /**
     * Process commands for this alert. "OK" will dismiss the
     * alert with no action. "Exit" will destroy the MIDlet.
     *
     * @param c command the user pressed
     * @param d this displayable(not used)
     */
    public void commandAction(Command c, Displayable d) {
        if (c == exitCommand) {
            /**
             * We need to destroy current midlet -
             * the owner of this alert:
             * to generate MIDLET_DESTROY_REQUEST
             * event for a given midlet to MIDlet Controller
             * in AMS Isolate.
             */
            midletControllerEventProducer.sendMIDletDestroyRequestEvent(
                displayId);
        } else if (c == backgroundCommand) {
            midletControllerEventProducer.sendDisplayBackgroundRequestEvent(
                displayId);
        }
    }
}