172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/* 272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 Esmertec AG. 372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License. 772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at 872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and 1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License. 1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.model; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilMediaElementImpl.SMIL_MEDIA_END_EVENT; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilMediaElementImpl.SMIL_MEDIA_PAUSE_EVENT; 2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilMediaElementImpl.SMIL_MEDIA_SEEK_EVENT; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilMediaElementImpl.SMIL_MEDIA_START_EVENT; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilParElementImpl.SMIL_SLIDE_END_EVENT; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport static com.android.mms.dom.smil.SmilParElementImpl.SMIL_SLIDE_START_EVENT; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.io.ByteArrayInputStream; 28d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.io.ByteArrayOutputStream; 29d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.io.IOException; 30d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.ArrayList; 31d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.Arrays; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.events.EventTarget; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILDocument; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILElement; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILLayoutElement; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILMediaElement; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILParElement; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILRegionElement; 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILRegionMediaElement; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILRootLayoutElement; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.xml.sax.SAXException; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 440ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylorimport android.drm.DrmManagerClient; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.text.TextUtils; 460ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylorimport android.util.Config; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.MmsApp; 50d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.dom.smil.SmilDocumentImpl; 51d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.dom.smil.parser.SmilXmlParser; 52d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.dom.smil.parser.SmilXmlSerializer; 53d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.ContentType; 54d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.MmsException; 55d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.pdu.PduBody; 56d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.pdu.PduPart; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SmilHelper { 599242286c35743422051d439d7460cd0a1426899cWei Huang private static final String TAG = "Mms/smil"; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 610ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final String ELEMENT_TAG_TEXT = "text"; 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final String ELEMENT_TAG_IMAGE = "img"; 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final String ELEMENT_TAG_AUDIO = "audio"; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final String ELEMENT_TAG_VIDEO = "video"; 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static final String ELEMENT_TAG_REF = "ref"; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SmilHelper() { 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Never instantiate this class. 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static SMILDocument getDocument(PduBody pb) { 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Find SMIL part in the message. 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduPart smilPart = findSmilPart(pb); 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILDocument document = null; 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Try to load SMIL document from existing part. 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (smilPart != null) { 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document = getSmilDocument(smilPart); 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (document == null) { 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create a new SMIL document. 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document = createSmilDocument(pb); 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return document; 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static SMILDocument getDocument(SlideshowModel model) { 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return createSmilDocument(model); 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Find a SMIL part in the MM. 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return The existing SMIL part or null if no SMIL part was found. 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static PduPart findSmilPart(PduBody body) { 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int partNum = body.getPartsNum(); 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for(int i = 0; i < partNum; i++) { 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduPart part = body.getPart(i); 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (Arrays.equals(part.getContentType(), 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContentType.APP_SMIL.getBytes())) { 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Sure only one SMIL part. 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return part; 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return null; 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static SMILDocument validate(SMILDocument in) { 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: add more validating facilities. 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return in; 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Parse SMIL message and retrieve SMILDocument. 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return A SMILDocument or null if parsing failed. 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static SMILDocument getSmilDocument(PduPart smilPart) { 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project try { 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project byte[] data = smilPart.getData(); 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (data != null) { 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Parsing SMIL document."); 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, new String(data)); 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ByteArrayInputStream bais = new ByteArrayInputStream(data); 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILDocument document = new SmilXmlParser().parse(bais); 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return validate(document); 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (IOException e) { 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to parse SMIL document.", e); 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (SAXException e) { 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to parse SMIL document.", e); 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } catch (MmsException e) { 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.e(TAG, "Failed to parse SMIL document.", e); 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return null; 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static SMILParElement addPar(SMILDocument document) { 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILParElement par = (SMILParElement) document.createElement("par"); 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Set duration to eight seconds by default. 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.setDur(8.0f); 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document.getBody().appendChild(par); 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return par; 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public static SMILMediaElement createMediaElement( 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String tag, SMILDocument document, String src) { 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement mediaElement = 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project (SMILMediaElement) document.createElement(tag); 15831e14b68beee7af348a4d1528acf947732351a51Tom Taylor mediaElement.setSrc(escapeXML(src)); 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mediaElement; 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16231e14b68beee7af348a4d1528acf947732351a51Tom Taylor static public String escapeXML(String str) { 16331e14b68beee7af348a4d1528acf947732351a51Tom Taylor return str.replaceAll("&","&") 16431e14b68beee7af348a4d1528acf947732351a51Tom Taylor .replaceAll("<", "<") 16531e14b68beee7af348a4d1528acf947732351a51Tom Taylor .replaceAll(">", ">") 16631e14b68beee7af348a4d1528acf947732351a51Tom Taylor .replaceAll("\"", """) 16731e14b68beee7af348a4d1528acf947732351a51Tom Taylor .replaceAll("'", "'"); 16831e14b68beee7af348a4d1528acf947732351a51Tom Taylor } 16931e14b68beee7af348a4d1528acf947732351a51Tom Taylor 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static SMILDocument createSmilDocument(PduBody pb) { 1710ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor if (Config.LOGV) { 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Creating default SMIL document."); 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILDocument document = new SmilDocumentImpl(); 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create root element. 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // FIXME: Should we create root element in the constructor of document? 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement smil = (SMILElement) document.createElement("smil"); 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smil.setAttribute("xmlns", "http://www.w3.org/2001/SMIL20/Language"); 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document.appendChild(smil); 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create <head> and <layout> element. 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement head = (SMILElement) document.createElement("head"); 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smil.appendChild(head); 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILLayoutElement layout = (SMILLayoutElement) document.createElement("layout"); 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project head.appendChild(layout); 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create <body> element and add a empty <par>. 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement body = (SMILElement) document.createElement("body"); 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smil.appendChild(body); 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILParElement par = addPar(document); 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create media objects for the parts in PDU. 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int partsNum = pb.getPartsNum(); 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (partsNum == 0) { 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return document; 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2010ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor DrmManagerClient drmManagerClient = MmsApp.getApplication().getDrmManagerClient(); 2020ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project boolean hasText = false; 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project boolean hasMedia = false; 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (int i = 0; i < partsNum; i++) { 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create new <par> element. 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((par == null) || (hasMedia && hasText)) { 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par = addPar(document); 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasText = false; 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasMedia = false; 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project PduPart part = pb.getPart(i); 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String contentType = new String(part.getContentType()); 2150ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (ContentType.isDrmType(contentType)) { 2170ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor contentType = drmManagerClient.getOriginalMimeType(part.getDataUri()); 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (contentType.equals(ContentType.TEXT_PLAIN) 2217c8748972faf3078f53ef9ecbe6c95f0903f43f7satok || contentType.equalsIgnoreCase(ContentType.APP_WAP_XHTML) 2227c8748972faf3078f53ef9ecbe6c95f0903f43f7satok || contentType.equals(ContentType.TEXT_HTML)) { 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement textElement = createMediaElement( 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ELEMENT_TAG_TEXT, document, part.generateLocation()); 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.appendChild(textElement); 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasText = true; 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (ContentType.isImageType(contentType)) { 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement imageElement = createMediaElement( 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ELEMENT_TAG_IMAGE, document, part.generateLocation()); 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.appendChild(imageElement); 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasMedia = true; 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (ContentType.isVideoType(contentType)) { 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement videoElement = createMediaElement( 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ELEMENT_TAG_VIDEO, document, part.generateLocation()); 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.appendChild(videoElement); 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasMedia = true; 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (ContentType.isAudioType(contentType)) { 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement audioElement = createMediaElement( 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ELEMENT_TAG_AUDIO, document, part.generateLocation()); 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.appendChild(audioElement); 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project hasMedia = true; 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: handle other media types. 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.w(TAG, "unsupport media type"); 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return document; 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static SMILDocument createSmilDocument(SlideshowModel slideshow) { 2520ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor if (Config.LOGV) { 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Creating SMIL document from SlideshowModel."); 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILDocument document = new SmilDocumentImpl(); 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create SMIL and append it to document 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement smilElement = (SMILElement) document.createElement("smil"); 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document.appendChild(smilElement); 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create HEAD and append it to SMIL 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement headElement = (SMILElement) document.createElement("head"); 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilElement.appendChild(headElement); 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create LAYOUT and append it to HEAD 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILLayoutElement layoutElement = (SMILLayoutElement) 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project document.createElement("layout"); 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project headElement.appendChild(layoutElement); 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create ROOT-LAYOUT and append it to LAYOUT 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILRootLayoutElement rootLayoutElement = 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project (SMILRootLayoutElement) document.createElement("root-layout"); 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutModel layouts = slideshow.getLayout(); 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project rootLayoutElement.setWidth(layouts.getLayoutWidth()); 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project rootLayoutElement.setHeight(layouts.getLayoutHeight()); 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String bgColor = layouts.getBackgroundColor(); 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (!TextUtils.isEmpty(bgColor)) { 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project rootLayoutElement.setBackgroundColor(bgColor); 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project layoutElement.appendChild(rootLayoutElement); 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create REGIONs and append them to LAYOUT 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList<RegionModel> regions = layouts.getRegions(); 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList<SMILRegionElement> smilRegions = new ArrayList<SMILRegionElement>(); 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (RegionModel r : regions) { 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILRegionElement smilRegion = (SMILRegionElement) document.createElement("region"); 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setId(r.getRegionId()); 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setLeft(r.getLeft()); 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setTop(r.getTop()); 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setWidth(r.getWidth()); 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setHeight(r.getHeight()); 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegion.setFit(r.getFit()); 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegions.add(smilRegion); 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create BODY and append it to the document. 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILElement bodyElement = (SMILElement) document.createElement("body"); 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilElement.appendChild(bodyElement); 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (SlideModel slide : slideshow) { 30284e6aaee7d3721b0c36e9adc67e72248cf3cbadfTom Taylor boolean txtRegionPresentInLayout = false; 30384e6aaee7d3721b0c36e9adc67e72248cf3cbadfTom Taylor boolean imgRegionPresentInLayout = false; 30484e6aaee7d3721b0c36e9adc67e72248cf3cbadfTom Taylor 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Create PAR element. 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILParElement par = addPar(document); 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.setDur(slide.getDuration() / 1000f); 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addParElementEventListeners((EventTarget) par, slide); 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Add all media elements. 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : slide) { 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILMediaElement sme = null; 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String src = media.getSrc(); 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (media instanceof TextModel) { 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextModel text = (TextModel) media; 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (TextUtils.isEmpty(text.getText())) { 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Empty text part ignored: " + text.getSrc()); 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme = SmilHelper.createMediaElement(SmilHelper.ELEMENT_TAG_TEXT, document, src); 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project txtRegionPresentInLayout = setRegion((SMILRegionMediaElement) sme, 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegions, 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project layoutElement, 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutModel.TEXT_REGION_ID, 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project txtRegionPresentInLayout); 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media instanceof ImageModel) { 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme = SmilHelper.createMediaElement(SmilHelper.ELEMENT_TAG_IMAGE, document, src); 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project imgRegionPresentInLayout = setRegion((SMILRegionMediaElement) sme, 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegions, 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project layoutElement, 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutModel.IMAGE_REGION_ID, 33572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project imgRegionPresentInLayout); 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media instanceof VideoModel) { 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme = SmilHelper.createMediaElement(SmilHelper.ELEMENT_TAG_VIDEO, document, src); 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project imgRegionPresentInLayout = setRegion((SMILRegionMediaElement) sme, 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilRegions, 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project layoutElement, 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutModel.IMAGE_REGION_ID, 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project imgRegionPresentInLayout); 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media instanceof AudioModel) { 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme = SmilHelper.createMediaElement(SmilHelper.ELEMENT_TAG_AUDIO, document, src); 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.w(TAG, "Unsupport media: " + media); 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project continue; 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Set timing information. 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int begin = media.getBegin(); 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (begin != 0) { 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme.setAttribute("begin", String.valueOf(begin / 1000)); 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int duration = media.getDuration(); 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (duration != 0) { 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project sme.setDur((float) duration / 1000); 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project par.appendChild(sme); 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project addMediaElementEventListeners((EventTarget) sme, media); 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 36672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ByteArrayOutputStream out = new ByteArrayOutputStream(); 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SmilXmlSerializer.serialize(document, out); 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, out.toString()); 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return document; 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static SMILRegionElement findRegionElementById( 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList<SMILRegionElement> smilRegions, String rId) { 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (SMILRegionElement smilRegion : smilRegions) { 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (smilRegion.getId().equals(rId)) { 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return smilRegion; 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return null; 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static boolean setRegion(SMILRegionMediaElement srme, 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ArrayList<SMILRegionElement> smilRegions, 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILLayoutElement smilLayout, 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project String regionId, 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project boolean regionPresentInLayout) { 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SMILRegionElement smilRegion = findRegionElementById(smilRegions, regionId); 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (!regionPresentInLayout && smilRegion != null) { 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project srme.setRegion(smilRegion); 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project smilLayout.appendChild(smilRegion); 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 39472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project static void addMediaElementEventListeners( 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project EventTarget target, MediaModel media) { 40072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // To play the media with SmilPlayer, we should add them 40172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // as EventListener into an EventTarget. 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_MEDIA_START_EVENT, media, false); 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_MEDIA_END_EVENT, media, false); 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_MEDIA_PAUSE_EVENT, media, false); 40572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_MEDIA_SEEK_EVENT, media, false); 40672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project static void addParElementEventListeners( 40972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project EventTarget target, SlideModel slide) { 41072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // To play the slide with SmilPlayer, we should add it 41172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // as EventListener into an EventTarget. 41272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_SLIDE_START_EVENT, slide, false); 41372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project target.addEventListener(SMIL_SLIDE_END_EVENT, slide, false); 41472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 416