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 20d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.ArrayList; 21d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.Collection; 22d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.Iterator; 23d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.List; 24d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport java.util.ListIterator; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.events.Event; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.events.EventListener; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.ElementTime; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.text.TextUtils; 310ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylorimport android.util.Config; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.ContentRestrictionException; 35ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wenimport com.android.mms.LogTag; 36d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.dom.smil.SmilParElementImpl; 37d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.ContentType; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 397fa61cafe50deb74beb0819bdf52128239d50201Wei Huangpublic class SlideModel extends Model implements List<MediaModel>, EventListener { 40ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wen public static final String TAG = LogTag.TAG; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 420ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int DEFAULT_SLIDE_DURATION = 5000; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final ArrayList<MediaModel> mMedia = new ArrayList<MediaModel>(); 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mText; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mImage; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mAudio; 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mVideo; 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddImage = true; 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddAudio = true; 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddVideo = true; 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int mDuration; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mVisible = true; 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private short mFill; 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int mSlideSize; 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowModel mParent; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(SlideshowModel slideshow) { 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project this(DEFAULT_SLIDE_DURATION, slideshow); 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(int duration, SlideshowModel slideshow) { 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent = slideshow; 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Create a SlideModel with exist media collection. 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param duration The duration of the slide. 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param mediaList The exist media collection. 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws IllegalStateException One or more media in the mediaList cannot 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * be added into the slide due to a slide cannot contain image 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * and video or audio and video at the same time. 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(int duration, ArrayList<MediaModel> mediaList) { 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int maxDur = 0; 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mediaList) { 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAdd(media); 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int mediaDur = media.getDuration(); 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mediaDur > maxDur) { 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project maxDur = mediaDur; 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateDuration(maxDur); 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void internalAdd(MediaModel media) throws IllegalStateException { 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (media == null) { 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Don't add null value into the list. 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (media.isText()) { 104d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang String contentType = media.getContentType(); 1057c8748972faf3078f53ef9ecbe6c95f0903f43f7satok if (TextUtils.isEmpty(contentType) || ContentType.TEXT_PLAIN.equals(contentType) 1067c8748972faf3078f53ef9ecbe6c95f0903f43f7satok || ContentType.TEXT_HTML.equals(contentType)) { 107d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang internalAddOrReplace(mText, media); 108d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang mText = media; 109d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang } else { 110d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 111d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang " isn't supported (as text)"); 112d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang } 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isImage()) { 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddImage) { 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mImage, media); 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = media; 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = false; 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1194ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1204ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add image in this state"); 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isAudio()) { 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddAudio) { 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mAudio, media); 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = media; 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = false; 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1284ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1294ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add audio in this state"); 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isVideo()) { 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddVideo) { 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mVideo, media); 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = media; 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = false; 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = false; 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1384ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1394ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add video in this state"); 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void internalAddOrReplace(MediaModel old, MediaModel media) { 14510eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // If the media is resizable, at this point consider it to be zero length. 14610eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // Just before we send the slideshow, we take the remaining space in the 14710eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // slideshow and equally allocate it to all the resizeable media items and resize them. 14810eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor int addSize = media.getMediaResizable() ? 0 : media.getMediaSize(); 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int removeSize; 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (old == null) { 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (null != mParent) { 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.checkMessageSize(addSize); 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.add(media); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseSlideSize(addSize); 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseMessageSize(addSize); 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1584799c671cd7925c7d8098bc3a743c0e83701bb34Matthias Thomae removeSize = old.getMediaResizable() ? 0 : old.getMediaSize(); 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (addSize > removeSize) { 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (null != mParent) { 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.checkMessageSize(addSize - removeSize); 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseSlideSize(addSize - removeSize); 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseMessageSize(addSize - removeSize); 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(removeSize - addSize); 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(removeSize - addSize); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.set(mMedia.indexOf(old), media); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project old.unregisterAllModelChangedObservers(); 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (IModelChangedObserver observer : mModelChangedObservers) { 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.registerModelChangedObserver(observer); 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean internalRemove(Object object) { 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mMedia.remove(object)) { 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (object instanceof TextModel) { 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mText = null; 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof ImageModel) { 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = null; 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof AudioModel) { 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = null; 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof VideoModel) { 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = null; 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = true; 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = true; 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19310eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // If the media is resizable, at this point consider it to be zero length. 19410eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // Just before we send the slideshow, we take the remaining space in the 19510eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // slideshow and equally allocate it to all the resizeable media items and resize them. 19610eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor int decreaseSize = ((MediaModel) object).getMediaResizable() ? 0 19710eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor : ((MediaModel) object).getMediaSize(); 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(decreaseSize); 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(decreaseSize); 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((Model) object).unregisterAllModelChangedObservers(); 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mDuration 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int getDuration() { 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mDuration; 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param duration the mDuration to set 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setDuration(int duration) { 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int getSlideSize() { 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mSlideSize; 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void increaseSlideSize(int increaseSize) { 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (increaseSize > 0) { 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideSize += increaseSize; 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void decreaseSlideSize(int decreaseSize) { 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (decreaseSize > 0) { 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideSize -= decreaseSize; 237c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX if (mSlideSize < 0) { 238c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX mSlideSize = 0; 239c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX } 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setParent(SlideshowModel parent) { 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent = parent; 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void increaseMessageSize(int increaseSize) { 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((increaseSize > 0) && (null != mParent)) { 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int size = mParent.getCurrentMessageSize(); 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project size += increaseSize; 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.setCurrentMessageSize(size); 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void decreaseMessageSize(int decreaseSize) { 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((decreaseSize > 0) && (null != mParent)) { 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int size = mParent.getCurrentMessageSize(); 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project size -= decreaseSize; 259c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX if (size < 0) { 260c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX size = 0; 261c222f543bf642c07b980331faa66281083ab24f9Fang, JiuX } 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.setCurrentMessageSize(size); 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Implement List<E> interface. 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Add a MediaModel to the slide. If the slide has already contained 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * a media object in the same type, the media object will be replaced by 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * the new one. 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param object A media object to be added into the slide. 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return true 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws IllegalStateException One or more media in the mediaList cannot 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * be added into the slide due to a slide cannot contain image 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * and video or audio and video at the same time. 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws ContentRestrictionException when can not add this object. 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean add(MediaModel object) { 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAdd(object); 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addAll(Collection<? extends MediaModel> collection) { 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void clear() { 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mMedia.size() > 0) { 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterAllModelChangedObservers(); 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int decreaseSize = media.getMediaSize(); 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(decreaseSize); 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(decreaseSize); 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.clear(); 30272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mText = null; 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = null; 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = null; 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = null; 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = true; 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = true; 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean contains(Object object) { 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.contains(object); 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean containsAll(Collection<?> collection) { 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.containsAll(collection); 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean isEmpty() { 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.isEmpty(); 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public Iterator<MediaModel> iterator() { 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.iterator(); 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean remove(Object object) { 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((object != null) && (object instanceof MediaModel) 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project && internalRemove(object)) { 33572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeAll(Collection<?> collection) { 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean retainAll(Collection<?> collection) { 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int size() { 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.size(); 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public Object[] toArray() { 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.toArray(); 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public <T> T[] toArray(T[] array) { 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.toArray(array); 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void add(int location, MediaModel object) { 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 36372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addAll(int location, 36672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Collection<? extends MediaModel> collection) { 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel get(int location) { 3714ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang if (mMedia.size() == 0) { 3724ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang return null; 3734ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang } 3744ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.get(location); 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int indexOf(Object object) { 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.indexOf(object); 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int lastIndexOf(Object object) { 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.lastIndexOf(object); 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ListIterator<MediaModel> listIterator() { 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.listIterator(); 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ListIterator<MediaModel> listIterator(int location) { 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.listIterator(location); 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel remove(int location) { 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MediaModel media = mMedia.get(location); 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((media != null) && internalRemove(media)) { 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return media; 40072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel set(int location, MediaModel object) { 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public List<MediaModel> subList(int start, int end) { 40772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.subList(start, end); 40872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 41172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mVisible 41272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 41372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean isVisible() { 41472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mVisible; 41572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 41872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param visible the mVisible to set 41972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 42072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setVisible(boolean visible) { 42172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = visible; 42272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 42372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 42472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 42572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 42672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mFill 42772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 42872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public short getFill() { 42972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mFill; 43072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 43272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 43372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param fill the mFill to set 43472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 43572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setFill(short fill) { 43672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFill = fill; 43772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 43872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 44072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 44172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void registerModelChangedObserverInDescendants( 44272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project IModelChangedObserver observer) { 44372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 44472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.registerModelChangedObserver(observer); 44572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 44672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 44772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 44872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 44972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void unregisterModelChangedObserverInDescendants( 45072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project IModelChangedObserver observer) { 45172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 45272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterModelChangedObserver(observer); 45372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 45672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 45772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void unregisterAllModelChangedObserversInDescendants() { 45872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 45972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterAllModelChangedObservers(); 46072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 46372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // EventListener Interface 46472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void handleEvent(Event evt) { 46572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (evt.getType().equals(SmilParElementImpl.SMIL_SLIDE_START_EVENT)) { 46672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 46772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Start to play slide: " + this); 46872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = true; 47072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (mFill != ElementTime.FILL_FREEZE) { 47172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 47272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Stop playing slide: " + this); 47372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = false; 47572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 47772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(false); 47872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasText() { 48172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mText != null; 48272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 48372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasImage() { 48572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mImage != null; 48672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 48772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasAudio() { 48972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mAudio != null; 49072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 49172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasVideo() { 49372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mVideo != null; 49472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 49572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeText() { 49772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return remove(mText); 49872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 49972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 50072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeImage() { 50172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return remove(mImage); 50272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 50372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 50472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeAudio() { 50540421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor boolean result = remove(mAudio); 50640421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor resetDuration(); 50740421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor return result; 50872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 50972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 51072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeVideo() { 51140421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor boolean result = remove(mVideo); 51240421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor resetDuration(); 51340421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor return result; 51472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 51572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 51672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public TextModel getText() { 51772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (TextModel) mText; 51872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 51972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 52072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ImageModel getImage() { 52172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (ImageModel) mImage; 52272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 52372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 52472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public AudioModel getAudio() { 52572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (AudioModel) mAudio; 52672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 52772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 52872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public VideoModel getVideo() { 52972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (VideoModel) mVideo; 53072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 53172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 53240421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor public void resetDuration() { 53340421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // If we remove all the objects that have duration, reset the slide back to its 53440421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // default duration. If we don't do this, if the user replaces a 10 sec video with 53540421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // a 3 sec audio, the duration will remain at 10 sec (see the way updateDuration() below 53640421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // works). 53740421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor if (!hasAudio() && !hasVideo()) { 53840421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor mDuration = DEFAULT_SLIDE_DURATION; 53940421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor } 54040421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor } 54140421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor 54272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void updateDuration(int duration) { 54372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (duration <= 0) { 54472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 54572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 54672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 54772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((duration > mDuration) 54872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project || (mDuration == DEFAULT_SLIDE_DURATION)) { 54972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 55072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 55172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 55272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 553