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