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 20d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.content.Context; 21d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.os.Handler; 22d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport android.util.Log; 23d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chen 2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.AudioModel; 2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.ImageModel; 2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.LayoutModel; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.MediaModel; 28d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.android.mms.model.MediaModel.MediaAction; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.Model; 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.RegionMediaModel; 3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.RegionModel; 3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideModel; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideshowModel; 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.TextModel; 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.VideoModel; 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.ui.AdaptableSlideViewInterface.OnSizeChangedListener; 3751e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylorimport com.android.mms.util.ItemLoadedCallback; 3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * A basic presenter of slides. 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SlideshowPresenter extends Presenter { 4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final String TAG = "SlideshowPresenter"; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private static final boolean DEBUG = false; 45150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato private static final boolean LOCAL_LOGV = false; 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected int mLocation; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected final int mSlideNumber; 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5037880013315d8b7abefd9081b2c36b060083d6faTom Taylor protected float mWidthTransformRatio = 1.0f; 5137880013315d8b7abefd9081b2c36b060083d6faTom Taylor protected float mHeightTransformRatio = 1.0f; 5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Since only the original thread that created a view hierarchy can touch 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // its views, we have to use Handler to manage the views in the some 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // callbacks such as onModelChanged(). 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected final Handler mHandler = new Handler(); 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideshowPresenter(Context context, ViewInterface view, Model model) { 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project super(context, view, model); 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mLocation = 0; 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mSlideNumber = ((SlideshowModel) mModel).size(); 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (view instanceof AdaptableSlideViewInterface) { 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((AdaptableSlideViewInterface) view).setOnSizeChangedListener( 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mViewSizeChangedListener); 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final OnSizeChangedListener mViewSizeChangedListener = 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project new OnSizeChangedListener() { 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onSizeChanged(int width, int height) { 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project LayoutModel layout = ((SlideshowModel) mModel).getLayout(); 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mWidthTransformRatio = getWidthTransformRatio( 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project width, layout.getLayoutWidth()); 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHeightTransformRatio = getHeightTransformRatio( 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project height, layout.getLayoutHeight()); 77d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao // The ratio indicates how to reduce the source to match the View, 78d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao // so the larger one should be used. 79d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao float ratio = mWidthTransformRatio > mHeightTransformRatio ? 80d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao mWidthTransformRatio : mHeightTransformRatio; 81d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao mWidthTransformRatio = ratio; 82d7a1ec4c8a007f707cc3115ed6e558f839f875eaBai Tao mHeightTransformRatio = ratio; 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (LOCAL_LOGV) { 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.v(TAG, "ratio_w = " + mWidthTransformRatio 8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project + ", ratio_h = " + mHeightTransformRatio); 8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }; 8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private float getWidthTransformRatio(int width, int layoutWidth) { 9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (width > 0) { 9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (float) layoutWidth / (float) width; 9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return 1.0f; 9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private float getHeightTransformRatio(int height, int layoutHeight) { 9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (height > 0) { 9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (float) layoutHeight / (float) height; 10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return 1.0f; 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int transformWidth(int width) { 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (int) (width / mWidthTransformRatio); 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private int transformHeight(int height) { 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return (int) (height / mHeightTransformRatio); 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project @Override 11351e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor public void present(ItemLoadedCallback callback) { 11451e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor // This is called to show a full-screen slideshow. Presently, all parts of 11551e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor // a slideshow (images, sounds, etc.) are loaded and displayed on the UI thread. 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentSlide((SlideViewInterface) mView, ((SlideshowModel) mModel).get(mLocation)); 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param view 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param model 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentSlide(SlideViewInterface view, SlideModel model) { 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.reset(); 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 1260ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor for (MediaModel media : model) { 1270ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor if (media instanceof RegionMediaModel) { 1280ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor presentRegionMedia(view, (RegionMediaModel) media, true); 1290ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor } else if (media.isAudio()) { 1300ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor presentAudio(view, (AudioModel) media, true); 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param view 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentRegionMedia(SlideViewInterface view, 1390ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor RegionMediaModel rMedia, boolean dataChanged) { 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project RegionModel r = (rMedia).getRegion(); 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (rMedia.isText()) { 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentText(view, (TextModel) rMedia, r, dataChanged); 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (rMedia.isImage()) { 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentImage(view, (ImageModel) rMedia, r, dataChanged); 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (rMedia.isVideo()) { 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentVideo(view, (VideoModel) rMedia, r, dataChanged); 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentAudio(SlideViewInterface view, AudioModel audio, 1510ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor boolean dataChanged) { 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // Set audio only when data changed. 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (dataChanged) { 1540ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor view.setAudio(audio.getUri(), audio.getSrc(), audio.getExtras()); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MediaAction action = audio.getCurrentAction(); 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (action == MediaAction.START) { 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.startAudio(); 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.PAUSE) { 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.pauseAudio(); 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.STOP) { 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.stopAudio(); 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.SEEK) { 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.seekAudio(audio.getSeekTo()); 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentText(SlideViewInterface view, TextModel text, 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project RegionModel r, boolean dataChanged) { 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (dataChanged) { 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.setText(text.getSrc(), text.getText()); 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (view instanceof AdaptableSlideViewInterface) { 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((AdaptableSlideViewInterface) view).setTextRegion( 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformWidth(r.getLeft()), 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformHeight(r.getTop()), 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformWidth(r.getWidth()), 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformHeight(r.getHeight())); 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.setTextVisibility(text.isVisible()); 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param view 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param image 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param r 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentImage(SlideViewInterface view, ImageModel image, 1910ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor RegionModel r, boolean dataChanged) { 19237880013315d8b7abefd9081b2c36b060083d6faTom Taylor int transformedWidth = transformWidth(r.getWidth()); 19337880013315d8b7abefd9081b2c36b060083d6faTom Taylor int transformedHeight = transformWidth(r.getHeight()); 19437880013315d8b7abefd9081b2c36b060083d6faTom Taylor 19537880013315d8b7abefd9081b2c36b060083d6faTom Taylor if (LOCAL_LOGV) { 19637880013315d8b7abefd9081b2c36b060083d6faTom Taylor Log.v(TAG, "presentImage r.getWidth: " + r.getWidth() 19737880013315d8b7abefd9081b2c36b060083d6faTom Taylor + ", r.getHeight: " + r.getHeight() + 19837880013315d8b7abefd9081b2c36b060083d6faTom Taylor " transformedWidth: " + transformedWidth + 19937880013315d8b7abefd9081b2c36b060083d6faTom Taylor " transformedHeight: " + transformedHeight); 20037880013315d8b7abefd9081b2c36b060083d6faTom Taylor } 20137880013315d8b7abefd9081b2c36b060083d6faTom Taylor 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (dataChanged) { 2037459fa20925be3d348dcfd58bd1ecea59798c315Roger Chen view.setImage(image.getSrc(), image.getBitmap(transformedWidth, transformedHeight)); 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (view instanceof AdaptableSlideViewInterface) { 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((AdaptableSlideViewInterface) view).setImageRegion( 20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformWidth(r.getLeft()), 20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformHeight(r.getTop()), 21037880013315d8b7abefd9081b2c36b060083d6faTom Taylor transformedWidth, 21137880013315d8b7abefd9081b2c36b060083d6faTom Taylor transformedHeight); 21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.setImageRegionFit(r.getFit()); 21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.setImageVisibility(image.isVisible()); 21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param view 21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param video 22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param r 22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project protected void presentVideo(SlideViewInterface view, VideoModel video, 2230ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor RegionModel r, boolean dataChanged) { 22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (dataChanged) { 2250ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor view.setVideo(video.getSrc(), video.getUri()); 22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 2280ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor if (view instanceof AdaptableSlideViewInterface) { 22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ((AdaptableSlideViewInterface) view).setVideoRegion( 23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformWidth(r.getLeft()), 23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformHeight(r.getTop()), 23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformWidth(r.getWidth()), 23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project transformHeight(r.getHeight())); 23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.setVideoVisibility(video.isVisible()); 23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project MediaAction action = video.getCurrentAction(); 23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (action == MediaAction.START) { 23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.startVideo(); 24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.PAUSE) { 24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.pauseVideo(); 24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.STOP) { 24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.stopVideo(); 24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (action == MediaAction.SEEK) { 24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project view.seekVideo(video.getSeekTo()); 24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void setLocation(int location) { 25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mLocation = location; 25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public int getLocation() { 25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mLocation; 25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void goBackward() { 25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mLocation > 0) { 25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mLocation--; 26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void goForward() { 26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (mLocation < (mSlideNumber - 1)) { 26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mLocation++; 26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void onModelChanged(final Model model, final boolean dataChanged) { 27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project final SlideViewInterface view = (SlideViewInterface) mView; 27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // FIXME: Should be optimized. 27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (model instanceof SlideshowModel) { 27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: 27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (model instanceof SlideModel) { 27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (((SlideModel) model).isVisible()) { 27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHandler.post(new Runnable() { 27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project presentSlide(view, (SlideModel) model); 28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHandler.post(new Runnable() { 28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project goForward(); 28672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 28872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 28972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (model instanceof MediaModel) { 29072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (model instanceof RegionMediaModel) { 29172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHandler.post(new Runnable() { 29272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 2930ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor presentRegionMedia(view, (RegionMediaModel) model, dataChanged); 29472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 29572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 29672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (((MediaModel) model).isAudio()) { 29772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mHandler.post(new Runnable() { 29872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void run() { 2990ecc26df09777835cfa8dbfd3c48ca7b7fa7f011Tom Taylor presentAudio(view, (AudioModel) model, dataChanged); 30072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project }); 30272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (model instanceof RegionModel) { 30472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project // TODO: 30572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 30751e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor 30851e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor @Override 30951e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor public void cancelBackgroundLoading() { 31051e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor // For now, the SlideshowPresenter does no background loading so there is nothing to cancel. 31151e4621fa12400b1e79cc18b7bb0f9a83af6b622Tom Taylor } 31272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 313