/*
*
*
* 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.midlet;
import com.sun.midp.events.Event;
import com.sun.midp.events.EventTypes;
import com.sun.midp.events.EventQueue;
import com.sun.midp.events.EventListener;
import com.sun.midp.events.NativeEvent;
import com.sun.midp.security.Permissions;
import com.sun.midp.security.SecurityToken;
import com.sun.midp.log.Logging;
import com.sun.midp.log.LogChannels;
/**
* Listener for MIDlet related events (state changes, etc).
*
*/
public class MIDletEventListener implements EventListener {
/** Cached reference to the MIDP event queue. */
private EventQueue eventQueue;
/** The controller of MIDlets. */
private MIDletStateHandler midletStateHandler;
/** This class has a different security domain than the application. */
private static SecurityToken classSecurityToken;
/**
* The constructor for the default event handler for LCDUI.
*
* @param token security token that has AMS permission to
* use restricted MIDlet state handler methods
* @param theMIDletStateHandler the midlet state handler
* @param theEventQueue the event queue
*/
public MIDletEventListener(
SecurityToken token,
MIDletStateHandler theMIDletStateHandler,
EventQueue theEventQueue) {
token.checkIfPermissionAllowed(Permissions.AMS);
classSecurityToken = token;
midletStateHandler = theMIDletStateHandler;
eventQueue = theEventQueue;
/*
* All events handled by this object are of NativeEventClass
* and are instance specific events assosiated with some display Id.
* So this listener is able to find an appropriate DisplayEventConsumer
* associated with the displayId field of NativeEvent and
* to call methods of found consumer.
*/
eventQueue.registerEventListener(EventTypes.ACTIVATE_MIDLET_EVENT,
this);
eventQueue.registerEventListener(EventTypes.PAUSE_MIDLET_EVENT, this);
eventQueue.registerEventListener(EventTypes.DESTROY_MIDLET_EVENT,
this);
}
/**
* Preprocess an event that is being posted to the event queue.
*
* @param event event being posted
*
* @param waitingEvent previous event of this type waiting in the
* queue to be processed
*
* @return true to allow the post to continue, false to not post the
* event to the queue
*/
public boolean preprocess(Event event, Event waitingEvent) {
return true;
}
/**
* Process an event.
*
* @param event event to process
*/
public void process(Event event) {
NativeEvent nativeEvent = (NativeEvent)event;
MIDletEventConsumer midletEventConsumer =
midletStateHandler.getMIDletEventConsumer(classSecurityToken,
nativeEvent.stringParam1);
if (midletEventConsumer != null) {
switch (event.getType()) {
case EventTypes.ACTIVATE_MIDLET_EVENT:
midletEventConsumer.handleMIDletActivateEvent();
return;
case EventTypes.PAUSE_MIDLET_EVENT:
midletEventConsumer.handleMIDletPauseEvent();
return;
case EventTypes.DESTROY_MIDLET_EVENT:
midletEventConsumer.handleMIDletDestroyEvent();
return;
default:
if (Logging.REPORT_LEVEL <= Logging.WARNING) {
Logging.report(Logging.WARNING, LogChannels.LC_CORE,
"unknown system event (" +
event.getType() + ")");
}
}
}
}
}
|