SlideModel.java revision 4ae926d268bb27d260b711a2a136c07441134178
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 com.android.mms.ContentRestrictionException; 2172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.dom.smil.SmilParElementImpl; 22f7e8281a223af6228e6399055a6197a1edd9bc3aTom Taylorimport com.google.android.mms.ContentType; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.events.Event; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.events.EventListener; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.ElementTime; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log; 29d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huangimport android.text.TextUtils; 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.ArrayList; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.Collection; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.Iterator; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.List; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport java.util.ListIterator; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 377fa61cafe50deb74beb0819bdf52128239d50201Wei Huangpublic class SlideModel extends Model implements List<MediaModel>, EventListener { 389242286c35743422051d439d7460cd0a1426899cWei Huang public static final String TAG = "Mms/slideshow"; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 40150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato private static final boolean LOCAL_LOGV = false; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final int DEFAULT_SLIDE_DURATION = 5000; 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final ArrayList<MediaModel> mMedia = new ArrayList<MediaModel>(); 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mText; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mImage; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mAudio; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private MediaModel mVideo; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddImage = true; 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddAudio = true; 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mCanAddVideo = true; 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int mDuration; 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean mVisible = true; 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private short mFill; 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int mSlideSize; 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private SlideshowModel mParent; 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(SlideshowModel slideshow) { 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project this(DEFAULT_SLIDE_DURATION, slideshow); 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(int duration, SlideshowModel slideshow) { 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent = slideshow; 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Create a SlideModel with exist media collection. 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param duration The duration of the slide. 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param mediaList The exist media collection. 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws IllegalStateException One or more media in the mediaList cannot 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * be added into the slide due to a slide cannot contain image 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * and video or audio and video at the same time. 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideModel(int duration, ArrayList<MediaModel> mediaList) { 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int maxDur = 0; 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mediaList) { 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAdd(media); 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int mediaDur = media.getDuration(); 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mediaDur > maxDur) { 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project maxDur = mediaDur; 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project updateDuration(maxDur); 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void internalAdd(MediaModel media) throws IllegalStateException { 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (media == null) { 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Don't add null value into the list. 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (media.isText()) { 102d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang String contentType = media.getContentType(); 1037c8748972faf3078f53ef9ecbe6c95f0903f43f7satok if (TextUtils.isEmpty(contentType) || ContentType.TEXT_PLAIN.equals(contentType) 1047c8748972faf3078f53ef9ecbe6c95f0903f43f7satok || ContentType.TEXT_HTML.equals(contentType)) { 105d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang internalAddOrReplace(mText, media); 106d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang mText = media; 107d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang } else { 108d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 109d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang " isn't supported (as text)"); 110d130e2e6dc448fd80ecb70f0d31e3affb9888b9aWei Huang } 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isImage()) { 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddImage) { 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mImage, media); 11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = media; 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = false; 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1174ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1184ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add image in this state"); 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isAudio()) { 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddAudio) { 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mAudio, media); 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = media; 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = false; 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1264ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1274ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add audio in this state"); 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (media.isVideo()) { 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mCanAddVideo) { 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAddOrReplace(mVideo, media); 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = media; 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = false; 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = false; 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1364ae926d268bb27d260b711a2a136c07441134178Tom Taylor Log.w(TAG, "[SlideModel] content type " + media.getContentType() + 1374ae926d268bb27d260b711a2a136c07441134178Tom Taylor " - can't add video in this state"); 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void internalAddOrReplace(MediaModel old, MediaModel media) { 14310eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // If the media is resizable, at this point consider it to be zero length. 14410eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // Just before we send the slideshow, we take the remaining space in the 14510eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // slideshow and equally allocate it to all the resizeable media items and resize them. 14610eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor int addSize = media.getMediaResizable() ? 0 : media.getMediaSize(); 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int removeSize; 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (old == null) { 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (null != mParent) { 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.checkMessageSize(addSize); 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.add(media); 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseSlideSize(addSize); 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseMessageSize(addSize); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 1564799c671cd7925c7d8098bc3a743c0e83701bb34Matthias Thomae removeSize = old.getMediaResizable() ? 0 : old.getMediaSize(); 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (addSize > removeSize) { 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (null != mParent) { 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.checkMessageSize(addSize - removeSize); 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseSlideSize(addSize - removeSize); 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project increaseMessageSize(addSize - removeSize); 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(removeSize - addSize); 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(removeSize - addSize); 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.set(mMedia.indexOf(old), media); 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project old.unregisterAllModelChangedObservers(); 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (IModelChangedObserver observer : mModelChangedObservers) { 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.registerModelChangedObserver(observer); 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private boolean internalRemove(Object object) { 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mMedia.remove(object)) { 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (object instanceof TextModel) { 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mText = null; 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof ImageModel) { 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = null; 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof AudioModel) { 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = null; 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (object instanceof VideoModel) { 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = null; 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = true; 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = true; 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19110eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // If the media is resizable, at this point consider it to be zero length. 19210eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // Just before we send the slideshow, we take the remaining space in the 19310eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor // slideshow and equally allocate it to all the resizeable media items and resize them. 19410eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor int decreaseSize = ((MediaModel) object).getMediaResizable() ? 0 19510eed0e3020e3eb0612747fe39e0f6117222dd95Tom Taylor : ((MediaModel) object).getMediaSize(); 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(decreaseSize); 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(decreaseSize); 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((Model) object).unregisterAllModelChangedObservers(); 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mDuration 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int getDuration() { 21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mDuration; 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param duration the mDuration to set 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setDuration(int duration) { 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int getSlideSize() { 22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mSlideSize; 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void increaseSlideSize(int increaseSize) { 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (increaseSize > 0) { 22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideSize += increaseSize; 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void decreaseSlideSize(int decreaseSize) { 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (decreaseSize > 0) { 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideSize -= decreaseSize; 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setParent(SlideshowModel parent) { 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent = parent; 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void increaseMessageSize(int increaseSize) { 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((increaseSize > 0) && (null != mParent)) { 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int size = mParent.getCurrentMessageSize(); 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project size += increaseSize; 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.setCurrentMessageSize(size); 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void decreaseMessageSize(int decreaseSize) { 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((decreaseSize > 0) && (null != mParent)) { 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int size = mParent.getCurrentMessageSize(); 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project size -= decreaseSize; 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mParent.setCurrentMessageSize(size); 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Implement List<E> interface. 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Add a MediaModel to the slide. If the slide has already contained 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * a media object in the same type, the media object will be replaced by 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * the new one. 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param object A media object to be added into the slide. 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return true 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws IllegalStateException One or more media in the mediaList cannot 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * be added into the slide due to a slide cannot contain image 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * and video or audio and video at the same time. 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws ContentRestrictionException when can not add this object. 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean add(MediaModel object) { 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project internalAdd(object); 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addAll(Collection<? extends MediaModel> collection) { 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void clear() { 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mMedia.size() > 0) { 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterAllModelChangedObservers(); 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int decreaseSize = media.getMediaSize(); 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseSlideSize(decreaseSize); 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project decreaseMessageSize(decreaseSize); 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mMedia.clear(); 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mText = null; 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mImage = null; 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mAudio = null; 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVideo = null; 29972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddImage = true; 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddAudio = true; 30272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mCanAddVideo = true; 30372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 30872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean contains(Object object) { 30972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.contains(object); 31072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean containsAll(Collection<?> collection) { 31372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.containsAll(collection); 31472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 31672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean isEmpty() { 31772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.isEmpty(); 31872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 31972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public Iterator<MediaModel> iterator() { 32172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.iterator(); 32272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 32372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 32472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean remove(Object object) { 32572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((object != null) && (object instanceof MediaModel) 32672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project && internalRemove(object)) { 32772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 32872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 32972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 33172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeAll(Collection<?> collection) { 33472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 33572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 33672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 33772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean retainAll(Collection<?> collection) { 33872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 33972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int size() { 34272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.size(); 34372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public Object[] toArray() { 34672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.toArray(); 34772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 34872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 34972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public <T> T[] toArray(T[] array) { 35072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.toArray(array); 35172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void add(int location, MediaModel object) { 35472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 35572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 35672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 35772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addAll(int location, 35872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Collection<? extends MediaModel> collection) { 35972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 36072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 36272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel get(int location) { 3634ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang if (mMedia.size() == 0) { 3644ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang return null; 3654ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang } 3664ee7aa9aec45dd564c0e82928fa5a8378e856dcfWei Huang 36772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.get(location); 36872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 36972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int indexOf(Object object) { 37172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.indexOf(object); 37272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int lastIndexOf(Object object) { 37572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.lastIndexOf(object); 37672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 37772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 37872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ListIterator<MediaModel> listIterator() { 37972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.listIterator(); 38072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ListIterator<MediaModel> listIterator(int location) { 38372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.listIterator(location); 38472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 38572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 38672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel remove(int location) { 38772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MediaModel media = mMedia.get(location); 38872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((media != null) && internalRemove(media)) { 38972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 39072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return media; 39272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MediaModel set(int location, MediaModel object) { 39572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project throw new UnsupportedOperationException("Operation not supported."); 39672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 39772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 39872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public List<MediaModel> subList(int start, int end) { 39972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mMedia.subList(start, end); 40072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 40372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mVisible 40472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 40572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean isVisible() { 40672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mVisible; 40772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 40872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 41072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param visible the mVisible to set 41172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 41272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setVisible(boolean visible) { 41372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = visible; 41472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 41572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 41672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 41772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 41872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return the mFill 41972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 42072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public short getFill() { 42172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mFill; 42272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 42372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 42472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 42572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param fill the mFill to set 42672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 42772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setFill(short fill) { 42872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mFill = fill; 42972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(true); 43072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 43272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 43372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void registerModelChangedObserverInDescendants( 43472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project IModelChangedObserver observer) { 43572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 43672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.registerModelChangedObserver(observer); 43772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 43972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 44072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 44172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void unregisterModelChangedObserverInDescendants( 44272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project IModelChangedObserver observer) { 44372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 44472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterModelChangedObserver(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 unregisterAllModelChangedObserversInDescendants() { 45072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project for (MediaModel media : mMedia) { 45172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project media.unregisterAllModelChangedObservers(); 45272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 45472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 45572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // EventListener Interface 45672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void handleEvent(Event evt) { 45772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (evt.getType().equals(SmilParElementImpl.SMIL_SLIDE_START_EVENT)) { 45872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 45972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Start to play slide: " + this); 46072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = true; 46272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (mFill != ElementTime.FILL_FREEZE) { 46372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 46472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "Stop playing slide: " + this); 46572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mVisible = false; 46772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 46872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 46972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project notifyModelChanged(false); 47072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 47272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasText() { 47372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mText != null; 47472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 47672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasImage() { 47772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mImage != null; 47872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 47972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasAudio() { 48172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mAudio != null; 48272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 48372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean hasVideo() { 48572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mVideo != null; 48672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 48772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 48872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeText() { 48972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return remove(mText); 49072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 49172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeImage() { 49372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return remove(mImage); 49472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 49572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 49672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeAudio() { 49740421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor boolean result = remove(mAudio); 49840421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor resetDuration(); 49940421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor return result; 50072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 50172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 50272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeVideo() { 50340421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor boolean result = remove(mVideo); 50440421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor resetDuration(); 50540421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor return result; 50672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 50772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 50872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public TextModel getText() { 50972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (TextModel) mText; 51072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 51172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 51272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public ImageModel getImage() { 51372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (ImageModel) mImage; 51472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 51572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 51672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public AudioModel getAudio() { 51772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (AudioModel) mAudio; 51872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 51972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 52072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public VideoModel getVideo() { 52172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (VideoModel) mVideo; 52272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 52372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 52440421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor public void resetDuration() { 52540421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // If we remove all the objects that have duration, reset the slide back to its 52640421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // default duration. If we don't do this, if the user replaces a 10 sec video with 52740421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // a 3 sec audio, the duration will remain at 10 sec (see the way updateDuration() below 52840421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor // works). 52940421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor if (!hasAudio() && !hasVideo()) { 53040421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor mDuration = DEFAULT_SLIDE_DURATION; 53140421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor } 53240421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor } 53340421e0b0316a4bf77e3e5f9a8b734ba6478f1c7Tom Taylor 53472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void updateDuration(int duration) { 53572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (duration <= 0) { 53672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return; 53772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 53872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 53972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if ((duration > mDuration) 54072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project || (mDuration == DEFAULT_SLIDE_DURATION)) { 54172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mDuration = duration; 54272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 54372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 54472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 545