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