• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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