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.ui; 1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2051e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylorimport android.content.Context; 2151e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor 22ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wenimport com.android.mms.LogTag; 2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.AudioModel; 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.ImageModel; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.Model; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideModel; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideshowModel; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.VideoModel; 2951e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylorimport com.android.mms.util.ItemLoadedCallback; 309c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylorimport com.android.mms.util.ItemLoadedFuture; 3179bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylorimport com.android.mms.util.ThumbnailManager.ImageLoaded; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class MmsThumbnailPresenter extends Presenter { 34ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wen private static final String TAG = LogTag.TAG; 3551e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor private ItemLoadedCallback mOnLoadedCallback; 369c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor private ItemLoadedFuture mItemLoadedFuture; 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public MmsThumbnailPresenter(Context context, ViewInterface view, Model model) { 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, view, model); 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 4351e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor public void present(ItemLoadedCallback callback) { 4451e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor mOnLoadedCallback = callback; 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = ((SlideshowModel) mModel).get(0); 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (slide != null) { 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentFirstSlide((SlideViewInterface) mView, slide); 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void presentFirstSlide(SlideViewInterface view, SlideModel slide) { 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.reset(); 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (slide.hasImage()) { 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentImageThumbnail(view, slide.getImage()); 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (slide.hasVideo()) { 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentVideoThumbnail(view, slide.getVideo()); 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (slide.hasAudio()) { 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentAudioThumbnail(view, slide.getAudio()); 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6379bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor private ItemLoadedCallback<ImageLoaded> mImageLoadedCallback = 6479bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor new ItemLoadedCallback<ImageLoaded>() { 6579bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor public void onItemLoaded(ImageLoaded imageLoaded, Throwable exception) { 6679bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor if (exception == null) { 679c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor if (mItemLoadedFuture != null) { 689c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor synchronized(mItemLoadedFuture) { 699c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor mItemLoadedFuture.setIsDone(true); 709c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor } 719c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor } 72721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor if (mOnLoadedCallback != null) { 73721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor mOnLoadedCallback.onItemLoaded(imageLoaded, exception); 74721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor } else { 75721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor // Right now we're only handling image and video loaded callbacks. 76721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor SlideModel slide = ((SlideshowModel) mModel).get(0); 77721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor if (slide != null) { 78721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor if (slide.hasVideo() && imageLoaded.mIsVideo) { 79721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor ((SlideViewInterface)mView).setVideoThumbnail(null, 80721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor imageLoaded.mBitmap); 81721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor } else if (slide.hasImage() && !imageLoaded.mIsVideo) { 82721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor ((SlideViewInterface)mView).setImage(null, imageLoaded.mBitmap); 83721ad07121cb9b0cd76bdbbc88494aa8f4d45a6dTom Taylor } 8479bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor } 8579bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor } 8679bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor } 8779bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor } 8879bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor }; 8979bf6f70c54d08dc9c3481b8461a3a46a3cefb83Tom Taylor 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void presentVideoThumbnail(SlideViewInterface view, VideoModel video) { 919c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor mItemLoadedFuture = video.loadThumbnailBitmap(mImageLoadedCallback); 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private void presentImageThumbnail(SlideViewInterface view, ImageModel image) { 959c9df2773645d195dbf17df91d7cccdf5154fe84Tom Taylor mItemLoadedFuture = image.loadThumbnailBitmap(mImageLoadedCallback); 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentAudioThumbnail(SlideViewInterface view, AudioModel audio) { 990ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor view.setAudio(audio.getUri(), audio.getSrc(), audio.getExtras()); 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onModelChanged(Model model, boolean dataChanged) { 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO Auto-generated method stub 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10551e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor 10651e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor public void cancelBackgroundLoading() { 10751e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor // Currently we only support background loading of thumbnails. If we extend background 10851e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor // loading to other media types, we should add a cancelLoading API to Model. 10951e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor SlideModel slide = ((SlideshowModel) mModel).get(0); 11051e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor if (slide != null && slide.hasImage()) { 11151e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor slide.getImage().cancelThumbnailLoading(); 11251e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor } 11351e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor } 11451e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 116