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.net.Uri; 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.RegionModel; 2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideModel; 2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.SlideshowModel; 2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.TextModel; 3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport com.android.mms.model.VideoModel; 31d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.ContentType; 32d64419030e1fec1e751695dab3bd7236e2fb0214Roger Chenimport com.google.android.mms.MmsException; 3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/** 3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * An utility to edit contents of a slide. 3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SlideshowEditor { 3886b3e552c250704de7abeab5553bab664fa01f64Wei Huang private static final String TAG = "Mms:slideshow"; 3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 40f6f761abb71455f79c8cadda94aa15fc15bb6d39Tom Taylor public static final int MAX_SLIDE_NUM = 10; 4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project private final Context mContext; 439abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor private SlideshowModel mModel; 4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public SlideshowEditor(Context context, SlideshowModel model) { 4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext = context; 4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel = model; 4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 509abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor public void setSlideshow(SlideshowModel model) { 519abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor mModel = model; 529abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor } 539abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor 5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Add a new slide to the end of message. 5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return true if success, false if reach the max slide number. 5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addNewSlide() { 6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int position = mModel.size(); 6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return addNewSlide(position); 6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Add a new slide at the specified position in the message. 6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return true if success, false if reach the max slide number. 6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @throws IndexOutOfBoundsException - if position is out of range 6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * (position < 0 || position > size()). 7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean addNewSlide(int position) { 7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project int size = mModel.size(); 7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (size < MAX_SLIDE_NUM) { 7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = new SlideModel(mModel); 7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextModel text = new TextModel( 7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext, ContentType.TEXT_PLAIN, "text_" + size + ".txt", 7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.getLayout().getTextRegion()); 7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.add(text); 8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.add(position, slide); 8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return true; 8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else { 8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project Log.w(TAG, "The limitation of the number of slides is reached."); 859abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor return false; 869abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor } 879abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor } 889abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor /** 899abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor * Add an existing slide at the specified position in the message. 909abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor * 919abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor * @return true if success, false if reach the max slide number. 929abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor * @throws IndexOutOfBoundsException - if position is out of range 939abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor * (position < 0 || position > size()). 949abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor */ 959abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor public boolean addSlide(int position, SlideModel slide) { 969abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor int size = mModel.size(); 979abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor if (size < MAX_SLIDE_NUM) { 989abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor mModel.add(position, slide); 999abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor return true; 1009abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor } else { 1019abae049669b8525b28ec4f4adb2e14372b4d931Tom Taylor Log.w(TAG, "The limitation of the number of slides is reached."); 10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return false; 10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Remove one slide. 10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param position 11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void removeSlide(int position) { 11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.remove(position); 11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 114fd644551e8506266aad2b76463b51b44154ed62fTom Taylor 11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Remove all slides. 11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void removeAllSlides() { 11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project while (mModel.size() > 0) { 12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project removeSlide(0); 12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project /** 12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Remove the text of the specified slide. 12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * 12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @param position index of the slide 12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * @return true if success, false if no text in the slide. 12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */ 13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeText(int position) { 13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.get(position).removeText(); 13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeImage(int position) { 13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.get(position).removeImage(); 13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeVideo(int position) { 13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.get(position).removeVideo(); 14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public boolean removeAudio(int position) { 14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.get(position).removeAudio(); 14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeText(int position, String newText) { 14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (newText != null) { 14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = mModel.get(position); 14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project TextModel text = slide.getText(); 15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (text == null) { 15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text = new TextModel(mContext, 15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project ContentType.TEXT_PLAIN, "text_" + position + ".txt", 15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.getLayout().getTextRegion()); 15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(newText); 15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.add(text); 15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } else if (!newText.equals(text.getText())) { 15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project text.setText(newText); 15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeImage(int position, Uri newImage) throws MmsException { 16372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.get(position).add(new ImageModel( 16472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mContext, newImage, mModel.getLayout().getImageRegion())); 16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeAudio(int position, Uri newAudio) throws MmsException { 16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project AudioModel audio = new AudioModel(mContext, newAudio); 16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = mModel.get(position); 17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.add(audio); 17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.updateDuration(audio.getDuration()); 17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeVideo(int position, Uri newVideo) throws MmsException { 17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project VideoModel video = new VideoModel(mContext, newVideo, 17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.getLayout().getImageRegion()); 17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project SlideModel slide = mModel.get(position); 17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.add(video); 17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project slide.updateDuration(video.getDuration()); 18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void moveSlideUp(int position) { 18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.add(position - 1, mModel.remove(position)); 18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void moveSlideDown(int position) { 18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.add(position + 1, mModel.remove(position)); 18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeDuration(int position, int dur) { 19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project if (dur >= 0) { 19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.get(position).setDuration(dur); 19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 19672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public void changeLayout(int layout) { 19772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project mModel.getLayout().changeTo(layout); 19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public RegionModel getImageRegion() { 20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.getLayout().getImageRegion(); 20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project 20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project public RegionModel getTextRegion() { 20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project return mModel.getLayout().getTextRegion(); 20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project } 20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project} 208