• 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 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     private static final int MAX_SLIDE_NUM = 10;
41 
42     private final Context mContext;
43     private final SlideshowModel mModel;
44 
SlideshowEditor(Context context, SlideshowModel model)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      */
addNewSlide()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      */
addNewSlide(int position)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      */
removeSlide(int position)90     public void removeSlide(int position) {
91         mModel.remove(position);
92     }
93 
94     /**
95      * Remove all slides.
96      */
removeAllSlides()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      */
removeText(int position)109     public boolean removeText(int position) {
110         return mModel.get(position).removeText();
111     }
112 
removeImage(int position)113     public boolean removeImage(int position) {
114         return mModel.get(position).removeImage();
115     }
116 
removeVideo(int position)117     public boolean removeVideo(int position) {
118         return mModel.get(position).removeVideo();
119     }
120 
removeAudio(int position)121     public boolean removeAudio(int position) {
122         return mModel.get(position).removeAudio();
123     }
124 
changeText(int position, String newText)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 
changeImage(int position, Uri newImage)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 
changeAudio(int position, Uri newAudio)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 
changeVideo(int position, Uri newVideo)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 
moveSlideUp(int position)161     public void moveSlideUp(int position) {
162         mModel.add(position - 1, mModel.remove(position));
163     }
164 
moveSlideDown(int position)165     public void moveSlideDown(int position) {
166         mModel.add(position + 1, mModel.remove(position));
167     }
168 
changeDuration(int position, int dur)169     public void changeDuration(int position, int dur) {
170         if (dur >= 0) {
171             mModel.get(position).setDuration(dur);
172         }
173     }
174 
changeLayout(int layout)175     public void changeLayout(int layout) {
176         mModel.getLayout().changeTo(layout);
177     }
178 
getImageRegion()179     public RegionModel getImageRegion() {
180         return mModel.getLayout().getImageRegion();
181     }
182 
getTextRegion()183     public RegionModel getTextRegion() {
184         return mModel.getLayout().getTextRegion();
185     }
186 }
187