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 com.google.android.mms.ContentType; 21 import com.google.android.mms.MmsException; 22 import com.android.mms.model.AudioModel; 23 import com.android.mms.model.ImageModel; 24 import com.android.mms.model.RegionModel; 25 import com.android.mms.model.SlideModel; 26 import com.android.mms.model.SlideshowModel; 27 import com.android.mms.model.TextModel; 28 import com.android.mms.model.VideoModel; 29 30 import android.content.Context; 31 import android.net.Uri; 32 import android.util.Log; 33 34 /** 35 * An utility to edit contents of a slide. 36 */ 37 public class SlideshowEditor { 38 private static final String TAG = "Mms:slideshow"; 39 40 public static final int MAX_SLIDE_NUM = 10; 41 42 private final Context mContext; 43 private final SlideshowModel mModel; 44 45 public SlideshowEditor(Context context, SlideshowModel model) { 46 mContext = context; 47 mModel = model; 48 } 49 50 /** 51 * Add a new slide to the end of message. 52 * 53 * @return true if success, false if reach the max slide number. 54 */ 55 public boolean addNewSlide() { 56 int position = mModel.size(); 57 return addNewSlide(position); 58 } 59 60 /** 61 * Add a new slide at the specified position in the message. 62 * 63 * @return true if success, false if reach the max slide number. 64 * @throws IndexOutOfBoundsException - if position is out of range 65 * (position < 0 || position > size()). 66 */ 67 public boolean addNewSlide(int position) { 68 int size = mModel.size(); 69 if (size < MAX_SLIDE_NUM) { 70 SlideModel slide = new SlideModel(mModel); 71 72 TextModel text = new TextModel( 73 mContext, ContentType.TEXT_PLAIN, "text_" + size + ".txt", 74 mModel.getLayout().getTextRegion()); 75 slide.add(text); 76 77 mModel.add(position, slide); 78 return true; 79 } else { 80 Log.w(TAG, "The limitation of the number of slides is reached."); 81 return false; 82 } 83 } 84 85 /** 86 * Remove one slide. 87 * 88 * @param position 89 */ 90 public void removeSlide(int position) { 91 mModel.remove(position); 92 } 93 94 /** 95 * Remove all slides. 96 */ 97 public void removeAllSlides() { 98 while (mModel.size() > 0) { 99 removeSlide(0); 100 } 101 } 102 103 /** 104 * Remove the text of the specified slide. 105 * 106 * @param position index of the slide 107 * @return true if success, false if no text in the slide. 108 */ 109 public boolean removeText(int position) { 110 return mModel.get(position).removeText(); 111 } 112 113 public boolean removeImage(int position) { 114 return mModel.get(position).removeImage(); 115 } 116 117 public boolean removeVideo(int position) { 118 return mModel.get(position).removeVideo(); 119 } 120 121 public boolean removeAudio(int position) { 122 return mModel.get(position).removeAudio(); 123 } 124 125 public void changeText(int position, String newText) { 126 if (newText != null) { 127 SlideModel slide = mModel.get(position); 128 TextModel text = slide.getText(); 129 if (text == null) { 130 text = new TextModel(mContext, 131 ContentType.TEXT_PLAIN, "text_" + position + ".txt", 132 mModel.getLayout().getTextRegion()); 133 text.setText(newText); 134 slide.add(text); 135 } else if (!newText.equals(text.getText())) { 136 text.setText(newText); 137 } 138 } 139 } 140 141 public void changeImage(int position, Uri newImage) throws MmsException { 142 mModel.get(position).add(new ImageModel( 143 mContext, newImage, mModel.getLayout().getImageRegion())); 144 } 145 146 public void changeAudio(int position, Uri newAudio) throws MmsException { 147 AudioModel audio = new AudioModel(mContext, newAudio); 148 SlideModel slide = mModel.get(position); 149 slide.add(audio); 150 slide.updateDuration(audio.getDuration()); 151 } 152 153 public void changeVideo(int position, Uri newVideo) throws MmsException { 154 VideoModel video = new VideoModel(mContext, newVideo, 155 mModel.getLayout().getImageRegion()); 156 SlideModel slide = mModel.get(position); 157 slide.add(video); 158 slide.updateDuration(video.getDuration()); 159 } 160 161 public void moveSlideUp(int position) { 162 mModel.add(position - 1, mModel.remove(position)); 163 } 164 165 public void moveSlideDown(int position) { 166 mModel.add(position + 1, mModel.remove(position)); 167 } 168 169 public void changeDuration(int position, int dur) { 170 if (dur >= 0) { 171 mModel.get(position).setDuration(dur); 172 } 173 } 174 175 public void changeLayout(int layout) { 176 mModel.getLayout().changeTo(layout); 177 } 178 179 public RegionModel getImageRegion() { 180 return mModel.getLayout().getImageRegion(); 181 } 182 183 public RegionModel getTextRegion() { 184 return mModel.getLayout().getTextRegion(); 185 } 186 } 187