/*
*
*
* 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 javax.microedition.media;
/**
* <CODE>PlayerListener</CODE> is the interface for receiving
* asynchronous
* events generated by <code>Players</code>. Applications may implement
* this interface and register their implementations with
* the <code>addPlayerListener</code> method in <code>Player</code>.
* <p>
* A number of standard <code>Player</code> events are defined
* here in this interface. Event types are defined as strings
* to support extensibility as different implementations
* may introduce proprietary events by adding new event types.
* To avoid name conflicts, proprietary events should be named
* with the "reverse-domainname" convention. For example, a
* company named "mycompany" should name its proprietary event
* names with strings like <code>"com.mycompany.myEvent"</code> etc.
* <p>
* Applications that rely on proprietary events may
* not function properly across different implementations.
* In order to make the applications that use those events to behave
* well in environments that don't implement them,
* <code>String.equals()</code> should
* be used to check the event.
* <P>
* <h4>Code fragment for catching standard events in playerUpdate()</h4>
* <blockquote>
* <code>
* if (eventType == PlayerListener.STARTED) {...}
* </code>
* </blockquote>
* <h4>Code fragment for catching proprietary events in playerUpdate()</h4>
* <blockquote>
* <code>
* if (eventType.equals("com.company.myEvent")) {...}
* </code>
* </blockquote>
*
* @see Player
*
*/
public interface PlayerListener {
/**
* Posted when a <code>Player</code> is started.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the <code>Player</code> is started.
* <p>
* Value <code>started</code> is assigned to <code>STARTED</code>.
*/
String STARTED = "started";
/**
* Posted when a <code>Player</code> stops in response to the
* <code>stop</code> method call.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the <code>Player</code> stopped.
* <p>
* Value <code>stopped</code> is assigned to <code>STOPPED</code>.
*/
String STOPPED = "stopped";
/**
* Posted when a <code>Player</code> is stopped as responding to
* the <code>setStopTime</code> call using the
* <code>StopTimeControl</code>.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the <code>Player</code> is stopped.
* <p>
* Value <code>stoppedAtTime</code> is assigned to
* <code>STOPPED_AT_TIME</code>.
*/
String STOPPED_AT_TIME = "stoppedAtTime";
/**
* Posted when a <code>Player</code> has reached the
* end of the media.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the <code>Player</code> reached end of media and stopped.
* <p>
* Value <code>endOfMedia</code> is assigned to
* <code>END_OF_MEDIA</code>.
*/
String END_OF_MEDIA = "endOfMedia";
/**
* Posted when the duration of a <code>Player</code> is updated.
* This happens for some media types where the duration cannot
* be derived ahead of time. It can only be derived after the
* media is played for a period of time -- for example, when it
* reaches a key frame with duration info; or when it reaches
* the end of media.
* <p>
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the duration
* of the media.
* <p>
* Value <code>durationUpdated</code> is assigned to
* <code>DURATION_UPDATED</code>.
*/
String DURATION_UPDATED = "durationUpdated";
/**
* Posted when the system or another higher priority
* application has temporarily taken control of an
* exclusive device which was
* previously available to the <code>Player</code>.
* <p>
* The <code>Player</code> will be in the <i>REALIZED</i>
* state when this event is received.
* <p>
* This event must
* be followed by either a <code>DEVICE_AVAILABLE</code>
* event when the device becomes available again,
* or an <code>ERROR</code> event if the device
* becomes permanently unavailable.
* <p>
* The <code>eventData</code> parameter is a <code>String</code>
* specifying the name of the device.
* <p>
* Value <code>deviceUnavailable</code> is assigned to
* <code>DEVICE_UNAVAILABLE</code>.
*/
String DEVICE_UNAVAILABLE = "deviceUnavailable";
/**
* Posted when the system or another higher priority
* application has released an exclusive device
* which is now available to the <code>Player</code>.
* <p>
* The <code>Player</code> will be in the <i>REALIZED</i>
* state when this event is received. The application
* may acquire the device with the
* <code>prefetch</code> or <code>start</code> method.
* <p>
* A <code>DEVICE_UNAVAILABLE</code> event must
* preceed this event.
* <p>
* The <code>eventData</code> parameter is a <code>String</code>
* specifying the name of the device.
* <p>
* Value <code>deviceAvailable</code> is assigned to
* <code>DEVICE_AVAILABLE</code>.
*/
String DEVICE_AVAILABLE = "deviceAvailable";
/**
* Posted when the volume of an audio device is changed.
* When this event is received, the <code>eventData</code> parameter
* will be a <a href="control/VolumeControl.html">
* <code>VolumeControl</code></a>
* object. The new volume
* can be queried from the <code>VolumeControl</code>.
* <p>
* Value <code>volumeChanged</code> is assigned to
* <code>VOLUME_CHANGED</code>.
*/
String VOLUME_CHANGED = "volumeChanged";
/**
* Posted when the size of the video is changed either because
* the source video size or the display size is changed.
* When this event is received, the <code>eventData</code> parameter
* will be a <a href="control/VideoControl.html">
* <code>VideoControl</code></a>
* object. The new sizes
* can be queried from the <code>VideoControl</code>.
* <p>
* Value <code>sizeChanged</code> is assigned to
* <code>SIZE_CHANGED</code>.
*/
String SIZE_CHANGED = "sizeChanged";
/**
* Posted when an error had occurred.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>String</code> object specifying the error message.
* <p>
* Value <code>error</code> is assigned to <code>ERROR</code>.
*/
String ERROR = "error";
/**
* Posted when a <code>Player</code> is closed.
* When this event is received, the <code>eventData</code> parameter
* is null.
* <p>
* Value <code>closed</code> is assigned to <code>CLOSED</code>.
*/
String CLOSED = "closed";
/**
* Posted when recording is started.
* <p>
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the recording is started.
* <p>
* Value <code>recordStarted</code> is assigned to
* <code>RECORD_STARTED</code>.
*/
String RECORD_STARTED = "recordStarted";
/**
* Posted when recording is stopped.
* <p>
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the recording stopped.
* <p>
* Value <code>recordStopped</code> is assigned to
* <code>RECORD_STOPPED</code>.
*/
String RECORD_STOPPED = "recordStopped";
/**
* Posted when an error occurs during the recording.
* The current recording will be discarded. The
* application may set a new record location or
* stream to start recording again.
* When this event is received, the <code>eventData</code> parameter
* will be a <code>String</code> object specifying the error message.
* <p>
* Value <code>recordError</code> is assigned to
* <code>RECORD_ERROR</code>.
*/
String RECORD_ERROR = "recordError";
/**
* Posted when the <code>Player</code> enters into a buffering mode.
* Applications may require this event to handle other tasks.
* <p>
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the buffering is started.
* <p>
* Value <code>bufferingStarted</code> is assigned to
* <code>BUFFERING_STARTED</code>.
*/
String BUFFERING_STARTED = "bufferingStarted";
/**
* Posted when the <code>Player</code> leaves the buffering mode.
* Applications may require this event to handle other tasks.
* <p>
* When this event is received, the <code>eventData</code> parameter
* will be a <code>Long</code> object designating the media
* time when the buffering stopped.
* <p>
* Value <code>bufferingStopped</code> is assigned to
* <code>BUFFERING_STOPPED</code>.
*/
String BUFFERING_STOPPED = "bufferingStopped";
/**
* This method is called to deliver an event to a registered
* listener when a <code>Player</code> event is observed.
*
* @param player The player which generated the event.
* @param event The event generated as defined by the enumerated types.
* @param eventData The associated event data.
*/
void playerUpdate(Player player, String event, Object eventData);
}
|