1 /* 2 * Copyright (C) 2008 Esmertec AG. 3 * Copyright (C) 2008 The Android Open Source Project 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.android.mms.ui; 19 20 import android.content.Context; 21 22 import com.android.mms.model.AudioModel; 23 import com.android.mms.model.ImageModel; 24 import com.android.mms.model.Model; 25 import com.android.mms.model.SlideModel; 26 import com.android.mms.model.SlideshowModel; 27 import com.android.mms.model.VideoModel; 28 import com.android.mms.util.ItemLoadedCallback; 29 import com.android.mms.util.ItemLoadedFuture; 30 import com.android.mms.util.ThumbnailManager.ImageLoaded; 31 32 public class MmsThumbnailPresenter extends Presenter { 33 private static final String TAG = "MmsThumbnailPresenter"; 34 private ItemLoadedCallback mOnLoadedCallback; 35 private ItemLoadedFuture mItemLoadedFuture; 36 MmsThumbnailPresenter(Context context, ViewInterface view, Model model)37 public MmsThumbnailPresenter(Context context, ViewInterface view, Model model) { 38 super(context, view, model); 39 } 40 41 @Override present(ItemLoadedCallback callback)42 public void present(ItemLoadedCallback callback) { 43 mOnLoadedCallback = callback; 44 SlideModel slide = ((SlideshowModel) mModel).get(0); 45 if (slide != null) { 46 presentFirstSlide((SlideViewInterface) mView, slide); 47 } 48 } 49 presentFirstSlide(SlideViewInterface view, SlideModel slide)50 private void presentFirstSlide(SlideViewInterface view, SlideModel slide) { 51 view.reset(); 52 53 if (slide.hasImage()) { 54 presentImageThumbnail(view, slide.getImage()); 55 } else if (slide.hasVideo()) { 56 presentVideoThumbnail(view, slide.getVideo()); 57 } else if (slide.hasAudio()) { 58 presentAudioThumbnail(view, slide.getAudio()); 59 } 60 } 61 62 private ItemLoadedCallback<ImageLoaded> mImageLoadedCallback = 63 new ItemLoadedCallback<ImageLoaded>() { 64 public void onItemLoaded(ImageLoaded imageLoaded, Throwable exception) { 65 if (exception == null) { 66 if (mItemLoadedFuture != null) { 67 synchronized(mItemLoadedFuture) { 68 mItemLoadedFuture.setIsDone(true); 69 } 70 } 71 if (mOnLoadedCallback != null) { 72 mOnLoadedCallback.onItemLoaded(imageLoaded, exception); 73 } else { 74 // Right now we're only handling image and video loaded callbacks. 75 SlideModel slide = ((SlideshowModel) mModel).get(0); 76 if (slide != null) { 77 if (slide.hasVideo() && imageLoaded.mIsVideo) { 78 ((SlideViewInterface)mView).setVideoThumbnail(null, 79 imageLoaded.mBitmap); 80 } else if (slide.hasImage() && !imageLoaded.mIsVideo) { 81 ((SlideViewInterface)mView).setImage(null, imageLoaded.mBitmap); 82 } 83 } 84 } 85 } 86 } 87 }; 88 presentVideoThumbnail(SlideViewInterface view, VideoModel video)89 private void presentVideoThumbnail(SlideViewInterface view, VideoModel video) { 90 mItemLoadedFuture = video.loadThumbnailBitmap(mImageLoadedCallback); 91 } 92 presentImageThumbnail(SlideViewInterface view, ImageModel image)93 private void presentImageThumbnail(SlideViewInterface view, ImageModel image) { 94 mItemLoadedFuture = image.loadThumbnailBitmap(mImageLoadedCallback); 95 } 96 presentAudioThumbnail(SlideViewInterface view, AudioModel audio)97 protected void presentAudioThumbnail(SlideViewInterface view, AudioModel audio) { 98 view.setAudio(audio.getUri(), audio.getSrc(), audio.getExtras()); 99 } 100 onModelChanged(Model model, boolean dataChanged)101 public void onModelChanged(Model model, boolean dataChanged) { 102 // TODO Auto-generated method stub 103 } 104 cancelBackgroundLoading()105 public void cancelBackgroundLoading() { 106 // Currently we only support background loading of thumbnails. If we extend background 107 // loading to other media types, we should add a cancelLoading API to Model. 108 SlideModel slide = ((SlideshowModel) mModel).get(0); 109 if (slide != null && slide.hasImage()) { 110 slide.getImage().cancelThumbnailLoading(); 111 } 112 } 113 114 } 115