javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerListenerImpl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_qt/baseline/javasrc/com/nokia/microedition/media/PlayerListenerImpl.java Tue May 11 16:07:20 2010 +0300
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This class is player listener implementation
+*
+*/
+
+
+package com.nokia.microedition.media;
+
+import javax.microedition.media.Player;
+import javax.microedition.media.PlayerListener;
+import javax.microedition.media.Control;
+import javax.microedition.media.control.VideoControl;
+import java.util.Vector;
+import java.util.Enumeration;
+//import com.symbian.midp.runtime.MIDletExecutor;
+//import com.symbian.midp.runtime.MIDletInstance;
+import com.nokia.mj.impl.utils.Logger;
+
+
+public class PlayerListenerImpl
+{
+ // PlayerListener event types that come from native side
+ protected static final int E_STARTED = 0;
+ protected static final int E_STOPPED = 1;
+ protected static final int E_STOPPED_AT_TIME = 2;
+ protected static final int E_END_OF_MEDIA = 3;
+ protected static final int E_DURATION_UPDATED = 4;
+ protected static final int E_AUDIO_DEVICE_UNAVAILABLE = 5;
+ protected static final int E_VOLUME_CHANGED = 6;
+ protected static final int E_SIZE_CHANGED = 7;
+ protected static final int E_ERROR = 8;
+ protected static final int E_CLOSED = 9;
+ protected static final int E_RECORD_STARTED = 10;
+ protected static final int E_RECORD_STOPPED = 11;
+ protected static final int E_PRIVATE_DATA_AVAILABLE = 12;
+ protected static final int E_PRIVATE_DATA_OVERWRITTEN = 13;
+ protected static final int E_BUFFERING_STARTED = 14;
+ protected static final int E_BUFFERING_STOPPED = 15;
+ protected static final int E_RECORD_ERROR = 16;
+ // For global volume info
+ protected static final int E_NOKIA_EXTERNAL_VOLUME_EVENT = 17;
+ // for Audio Routing preferences change
+ protected static final int E_AUDIO_ROUTING_PREFERENCE_CHANGED_EVENT = 18;
+
+ private static final String KVideoControlClassName =
+ "javax.microedition.media.control.VideoControl";
+
+ // maps int event types to String event types
+ private static Vector sEventTypes;
+
+ static
+ {
+ sEventTypes = new Vector(19); // there's 17 event types + 1 global volume event + 1 Audio Routing Preference Change Event
+ sEventTypes.addElement(PlayerListener.STARTED); // E_STARTED
+ sEventTypes.addElement(PlayerListener.STOPPED); // E_STOPPED
+ sEventTypes.addElement(PlayerListener.STOPPED_AT_TIME); // E_STOPPED_AT_TIME
+ sEventTypes.addElement(PlayerListener.END_OF_MEDIA); // E_END_OF_MEDIA
+ sEventTypes.addElement(PlayerListener.DURATION_UPDATED); // E_DURATION_UPDATED
+ sEventTypes.addElement(PlayerListener.DEVICE_UNAVAILABLE); // E_AUDIO_DEVICE_UNAVAILABLE
+ sEventTypes.addElement(PlayerListener.VOLUME_CHANGED); // E_VOLUME_CHANGED
+ sEventTypes.addElement(PlayerListener.SIZE_CHANGED); // E_SIZE_CHANGED
+ sEventTypes.addElement(PlayerListener.ERROR); // E_ERROR
+ sEventTypes.addElement(PlayerListener.CLOSED); // E_CLOSED
+ sEventTypes.addElement(PlayerListener.RECORD_STARTED); // E_RECORD_STARTED
+ sEventTypes.addElement(PlayerListener.RECORD_STOPPED); // E_RECORD_STOPPED
+ sEventTypes.addElement(null); // E_PRIVATE_DATA_AVAILABLE
+ sEventTypes.addElement(null); // E_PRIVATE_DATA_OVERWRITTEN
+ sEventTypes.addElement(PlayerListener.BUFFERING_STARTED); // E_BUFFERING_STARTED
+ sEventTypes.addElement(PlayerListener.BUFFERING_STOPPED); // E_BUFFERING_STOPPED
+ sEventTypes.addElement(PlayerListener.RECORD_ERROR); // E_RECORD_ERROR
+ sEventTypes.addElement("com.nokia.external.volume.event"); // E_NOKIA_EXTERNAL_VOLUME_EVENT
+ sEventTypes.addElement("com.nokia.audiooutputchange.event"); // E_AUDIO_ROUTING_PREFERENCE_CHANGED_EVENT
+ }
+
+ private Vector iPlayerListeners = new Vector();
+ private Player iPlayer;
+
+ /**
+ * Constructor
+ * @param aPlayer Handle to player
+ */
+ public PlayerListenerImpl(Player aPlayer)
+ {
+ iPlayer = aPlayer;
+ }
+
+ /**
+ * Adds PlayerListener
+ * @param aPlayerListener Listener that will be added
+ * @see PlayerListener
+ */
+ public synchronized void addPlayerListener(PlayerListener aPlayerListener)
+ {
+ if (aPlayerListener == null)
+ {
+ return;
+ }
+ if (!iPlayerListeners.contains(aPlayerListener))
+ {
+ iPlayerListeners.addElement(aPlayerListener);
+ }
+ }
+
+
+ /**
+ * Removes PlayerListener
+ * @param aPlayerListener Listener that will be removed
+ * @see PlayerListener
+ */
+ public synchronized void removePlayerListener(PlayerListener aPlayerListener)
+ {
+ iPlayerListeners.removeElement(aPlayerListener);
+ }
+
+ /**
+ * Deliveres event to all registered PlayerListeners
+ * @param aEventType type defined in PlayerListener
+ * @param aEventData data for event
+ */
+ public synchronized void postEvent(String aEventType, Object aEventData)
+ {
+ Enumeration listeners = iPlayerListeners.elements();
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerListenerImpl.java::PostEvent" + listeners);
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlayerListenerImpl.java::PostEvent" + aEventType + aEventData );
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"PlaerListenerImpl.java::PostEvent, this = "+this +" iPlayerListeners = "+iPlayerListeners);
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"Listeners count = "+iPlayerListeners.size());
+ while (listeners.hasMoreElements())
+ {
+ PlayerListener listener = (PlayerListener)listeners.nextElement();
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"listener = "+listener);
+
+ CallBackThread obj = new CallBackThread(aEventType,aEventData,listener,iPlayer);
+ Thread t = new Thread(obj);
+ t.start();
+ }
+ }
+
+ /**
+ * Posts a long event. Called from native implementation.
+ * @param aEventType Event type
+ * @param aEventData Event data
+ */
+ private void postLongEvent(int aEventType, long aEventData)
+ {
+ // event has come after this has been gc'd
+ if (this == null)
+ {
+ return;
+ }
+ Long eventData = new Long(aEventData);
+ postEvent(getEventType(aEventType), eventData);
+ }
+
+ /**
+ * Posts a string event. Called from native implementation.
+ * @param aEventType Event type
+ * @param aEventData Event data
+ */
+ private void postStringEvent(int aEventType, String aEventData)
+ {
+ // event has come after this has been gc'd
+ if (this == null)
+ {
+ return;
+ }
+ if (aEventType == E_SIZE_CHANGED)
+ {
+ VideoControl vc = (VideoControl)iPlayer.getControl(KVideoControlClassName);
+ postEvent(getEventType(aEventType), vc);
+ }
+ else
+ {
+ postEvent(getEventType(aEventType), aEventData);
+ }
+ }
+
+ /**
+ * Posts object event. Called from native implementation.
+ * @param aEventType Event type
+ * @param aEventData Event data
+ */
+ private void postObjectEvent(int aEventType, Object aEventData)
+ {
+ // event has come after this has been gc'd
+ if (this == null)
+ {
+ return;
+ }
+ postEvent(getEventType(aEventType), aEventData);
+ }
+
+ /**
+ * Posts a control event. Called from native implementation.
+ * @param aEventType Event type
+ * @param aEventData Event data
+ */
+ private void postControlEvent(int aEventType, String aEventData)
+ {
+ // event has come after this has been gc'd
+ if (this == null)
+ {
+ return;
+ }
+ Control eventData = iPlayer.getControl(aEventData);
+ postEvent(getEventType(aEventType), eventData);
+ }
+
+ /**
+ * Converts int eventType to String eventType
+ * @param aEventType event type to be converted
+ * @return converted event type
+ */
+ private String getEventType(int aEventType)
+ {
+ String eventType = null;
+ eventType = (String)sEventTypes.elementAt(aEventType);
+ return eventType;
+ }
+
+ class CallBackThread extends Thread
+ {
+ private String iEventType;
+ private Object iEventData;
+ private PlayerListener iListener;
+ private Player iPlayer;
+
+ public CallBackThread(String aEventType, Object aEventData, PlayerListener aListener, Player aPlayer)
+ {
+ iEventType = aEventType;
+ iEventData = aEventData;
+ iListener = aListener;
+ iPlayer = aPlayer;
+
+
+ }
+
+ public void doCallBack()
+ {
+
+
+ }
+ public void run()
+ {
+ iListener.playerUpdate(iPlayer,
+ iEventType,
+ iEventData);
+
+ Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,"after calling midlet playerupdate");
+
+
+ }
+
+ }
+}