| /* |
| * Copyright (C) 2007-2008 Esmertec AG. |
| * Copyright (C) 2007-2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.mms.dom.smil; |
| |
| import org.w3c.dom.DOMException; |
| import org.w3c.dom.events.DocumentEvent; |
| import org.w3c.dom.events.Event; |
| import org.w3c.dom.smil.ElementTime; |
| import org.w3c.dom.smil.SMILMediaElement; |
| import org.w3c.dom.smil.TimeList; |
| |
| import android.util.Log; |
| |
| import com.android.mms.dom.events.EventImpl; |
| |
| public class SmilMediaElementImpl extends SmilElementImpl implements |
| SMILMediaElement { |
| public final static String SMIL_MEDIA_START_EVENT = "SmilMediaStart"; |
| public final static String SMIL_MEDIA_END_EVENT = "SmilMediaEnd"; |
| public final static String SMIL_MEDIA_PAUSE_EVENT = "SmilMediaPause"; |
| public final static String SMIL_MEDIA_SEEK_EVENT = "SmilMediaSeek"; |
| private final static String TAG = "Mms:smil"; |
| private static final boolean DEBUG = false; |
| private static final boolean LOCAL_LOGV = false; |
| |
| ElementTime mElementTime = new ElementTimeImpl(this) { |
| private Event createEvent(String eventType) { |
| DocumentEvent doc = |
| (DocumentEvent)SmilMediaElementImpl.this.getOwnerDocument(); |
| Event event = doc.createEvent("Event"); |
| event.initEvent(eventType, false, false); |
| if (LOCAL_LOGV) { |
| Log.v(TAG, "Dispatching 'begin' event to " |
| + SmilMediaElementImpl.this.getTagName() + " " |
| + SmilMediaElementImpl.this.getSrc() + " at " |
| + System.currentTimeMillis()); |
| } |
| return event; |
| } |
| |
| private Event createEvent(String eventType, int seekTo) { |
| DocumentEvent doc = |
| (DocumentEvent)SmilMediaElementImpl.this.getOwnerDocument(); |
| EventImpl event = (EventImpl) doc.createEvent("Event"); |
| event.initEvent(eventType, false, false, seekTo); |
| if (LOCAL_LOGV) { |
| Log.v(TAG, "Dispatching 'begin' event to " |
| + SmilMediaElementImpl.this.getTagName() + " " |
| + SmilMediaElementImpl.this.getSrc() + " at " |
| + System.currentTimeMillis()); |
| } |
| return event; |
| } |
| |
| public boolean beginElement() { |
| Event startEvent = createEvent(SMIL_MEDIA_START_EVENT); |
| dispatchEvent(startEvent); |
| return true; |
| } |
| |
| public boolean endElement() { |
| Event endEvent = createEvent(SMIL_MEDIA_END_EVENT); |
| dispatchEvent(endEvent); |
| return true; |
| } |
| |
| public void resumeElement() { |
| Event resumeEvent = createEvent(SMIL_MEDIA_START_EVENT); |
| dispatchEvent(resumeEvent); |
| } |
| |
| public void pauseElement() { |
| Event pauseEvent = createEvent(SMIL_MEDIA_PAUSE_EVENT); |
| dispatchEvent(pauseEvent); |
| } |
| |
| public void seekElement(float seekTo) { |
| Event seekEvent = createEvent(SMIL_MEDIA_SEEK_EVENT, (int) seekTo); |
| dispatchEvent(seekEvent); |
| } |
| |
| @Override |
| public float getDur() { |
| float dur = super.getDur(); |
| if (dur == 0) { |
| // Duration is not specified, So get the implicit duration. |
| String tag = getTagName(); |
| if (tag.equals("video") || tag.equals("audio")) { |
| // Continuous media |
| // FIXME Should get the duration of the media. "indefinite" instead here. |
| dur = -1.0F; |
| } else if (tag.equals("text") || tag.equals("img")) { |
| // Discrete media |
| dur = 0; |
| } else { |
| Log.w(TAG, "Unknown media type"); |
| } |
| } |
| return dur; |
| } |
| |
| @Override |
| ElementTime getParentElementTime() { |
| return ((SmilParElementImpl) mSmilElement.getParentNode()).mParTimeContainer; |
| } |
| }; |
| |
| /* |
| * Internal Interface |
| */ |
| |
| SmilMediaElementImpl(SmilDocumentImpl owner, String tagName) { |
| super(owner, tagName); |
| } |
| |
| /* |
| * SMILMediaElement Interface |
| */ |
| |
| public String getAbstractAttr() { |
| return this.getAttribute("abstract"); |
| } |
| |
| public String getAlt() { |
| return this.getAttribute("alt"); |
| } |
| |
| public String getAuthor() { |
| return this.getAttribute("author"); |
| } |
| |
| public String getClipBegin() { |
| return this.getAttribute("clipBegin"); |
| } |
| |
| public String getClipEnd() { |
| return this.getAttribute("clipEnd"); |
| } |
| |
| public String getCopyright() { |
| return this.getAttribute("copyright"); |
| } |
| |
| public String getLongdesc() { |
| return this.getAttribute("longdesc"); |
| } |
| |
| public String getPort() { |
| return this.getAttribute("port"); |
| } |
| |
| public String getReadIndex() { |
| return this.getAttribute("readIndex"); |
| } |
| |
| public String getRtpformat() { |
| return this.getAttribute("rtpformat"); |
| } |
| |
| public String getSrc() { |
| return this.getAttribute("src"); |
| } |
| |
| public String getStripRepeat() { |
| return this.getAttribute("stripRepeat"); |
| } |
| |
| public String getTitle() { |
| return this.getAttribute("title"); |
| } |
| |
| public String getTransport() { |
| return this.getAttribute("transport"); |
| } |
| |
| public String getType() { |
| return this.getAttribute("type"); |
| } |
| |
| public void setAbstractAttr(String abstractAttr) throws DOMException { |
| this.setAttribute("abstract", abstractAttr); |
| } |
| |
| public void setAlt(String alt) throws DOMException { |
| this.setAttribute("alt", alt); |
| } |
| |
| public void setAuthor(String author) throws DOMException { |
| this.setAttribute("author", author); |
| } |
| |
| public void setClipBegin(String clipBegin) throws DOMException { |
| this.setAttribute("clipBegin", clipBegin); |
| } |
| |
| public void setClipEnd(String clipEnd) throws DOMException { |
| this.setAttribute("clipEnd", clipEnd); |
| } |
| |
| public void setCopyright(String copyright) throws DOMException { |
| this.setAttribute("copyright", copyright); |
| } |
| |
| public void setLongdesc(String longdesc) throws DOMException { |
| this.setAttribute("longdesc", longdesc); |
| |
| } |
| |
| public void setPort(String port) throws DOMException { |
| this.setAttribute("port", port); |
| } |
| |
| public void setReadIndex(String readIndex) throws DOMException { |
| this.setAttribute("readIndex", readIndex); |
| } |
| |
| public void setRtpformat(String rtpformat) throws DOMException { |
| this.setAttribute("rtpformat", rtpformat); |
| } |
| |
| public void setSrc(String src) throws DOMException { |
| this.setAttribute("src", src); |
| } |
| |
| public void setStripRepeat(String stripRepeat) throws DOMException { |
| this.setAttribute("stripRepeat", stripRepeat); |
| } |
| |
| public void setTitle(String title) throws DOMException { |
| this.setAttribute("title", title); |
| } |
| |
| public void setTransport(String transport) throws DOMException { |
| this.setAttribute("transport", transport); |
| } |
| |
| public void setType(String type) throws DOMException { |
| this.setAttribute("type", type); |
| } |
| |
| /* |
| * TimeElement Interface |
| */ |
| |
| public boolean beginElement() { |
| return mElementTime.beginElement(); |
| } |
| |
| public boolean endElement() { |
| return mElementTime.endElement(); |
| } |
| |
| public TimeList getBegin() { |
| return mElementTime.getBegin(); |
| } |
| |
| public float getDur() { |
| return mElementTime.getDur(); |
| } |
| |
| public TimeList getEnd() { |
| return mElementTime.getEnd(); |
| } |
| |
| public short getFill() { |
| return mElementTime.getFill(); |
| } |
| |
| public short getFillDefault() { |
| return mElementTime.getFillDefault(); |
| } |
| |
| public float getRepeatCount() { |
| return mElementTime.getRepeatCount(); |
| } |
| |
| public float getRepeatDur() { |
| return mElementTime.getRepeatDur(); |
| } |
| |
| public short getRestart() { |
| return mElementTime.getRestart(); |
| } |
| |
| public void pauseElement() { |
| mElementTime.pauseElement(); |
| } |
| |
| public void resumeElement() { |
| mElementTime.resumeElement(); |
| } |
| |
| public void seekElement(float seekTo) { |
| mElementTime.seekElement(seekTo); |
| } |
| |
| public void setBegin(TimeList begin) throws DOMException { |
| mElementTime.setBegin(begin); |
| } |
| |
| public void setDur(float dur) throws DOMException { |
| mElementTime.setDur(dur); |
| } |
| |
| public void setEnd(TimeList end) throws DOMException { |
| mElementTime.setEnd(end); |
| } |
| |
| public void setFill(short fill) throws DOMException { |
| mElementTime.setFill(fill); |
| } |
| |
| public void setFillDefault(short fillDefault) throws DOMException { |
| mElementTime.setFillDefault(fillDefault); |
| } |
| |
| public void setRepeatCount(float repeatCount) throws DOMException { |
| mElementTime.setRepeatCount(repeatCount); |
| } |
| |
| public void setRepeatDur(float repeatDur) throws DOMException { |
| mElementTime.setRepeatDur(repeatDur); |
| } |
| |
| public void setRestart(short restart) throws DOMException { |
| mElementTime.setRestart(restart); |
| } |
| } |