001: /*
002: *
003: * Copyright (c) 2007, Sun Microsystems, Inc.
004: *
005: * All rights reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * * Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: * * Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: * * Neither the name of Sun Microsystems nor the names of its contributors
017: * may be used to endorse or promote products derived from this software
018: * without specific prior written permission.
019: *
020: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
021: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
022: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
023: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
024: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
025: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
026: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
027: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
028: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
029: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
030: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
031: */
032: package example.obex.demo;
033:
034: import java.util.Vector;
035:
036: import javax.microedition.lcdui.Alert;
037: import javax.microedition.lcdui.Command;
038: import javax.microedition.lcdui.CommandListener;
039: import javax.microedition.lcdui.Display;
040: import javax.microedition.lcdui.Displayable;
041: import javax.microedition.lcdui.Form;
042: import javax.microedition.lcdui.Gauge;
043: import javax.microedition.lcdui.List;
044:
045: final class GUIImageSender implements CommandListener {
046: private static final int TIMEOUT = 5000;
047: private static final int IMAGE_COUNT = 100;
048:
049: /** Keeps a reference to a parent MIDlet. */
050: private ObexDemoMIDlet parent;
051:
052: /** Soft button for stopping download and returning to the mane screen. */
053: private Command stopCommand = new Command("Stop", Command.BACK, 1);
054:
055: /** Soft button for returning to the mane screen of demo. */
056: private Command backCommand = new Command("Back", Command.STOP, 1);
057:
058: /** Soft button for launching an image sending. */
059: private Command sendCommand = new Command("Send", Command.ITEM, 1);
060:
061: /** Container of images file names */
062: private Vector imageNames;
063:
064: /** List of images titles to select a sending image */
065: private List imageList;
066:
067: /** Form to show current state of sending a picture */
068: private Form senderForm = new Form("Send Image");
069:
070: /** Gauge to indicate progress of downloading process */
071: private Gauge sendingItem = new Gauge("", false, 256, 0);
072:
073: /** Reference to Obex sender part */
074: private ObexImageSender obexSender;
075:
076: /** Constructor initialize image list and sender form */
077: GUIImageSender(ObexDemoMIDlet parent) {
078: this .parent = parent;
079: setupImageList();
080: imageList.addCommand(sendCommand);
081: imageList.addCommand(backCommand);
082: imageList.setCommandListener(this );
083: senderForm.append(sendingItem);
084: senderForm.addCommand(stopCommand);
085: senderForm.setCommandListener(this );
086: showImageList();
087: }
088:
089: /**
090: * Responds to commands issued on "client or server" form.
091: *
092: * @param c command object source of action
093: * @param d screen object containing the item the action was performed on
094: */
095: public void commandAction(Command c, Displayable d) {
096: if (c == backCommand) {
097: parent.show();
098: } else if (c == stopCommand) {
099: if (obexSender != null) {
100: obexSender.stop();
101: }
102:
103: showImageList();
104: } else if ((c == sendCommand) || (c == List.SELECT_COMMAND)) {
105: obexSender = new ObexImageSender(this );
106: sendImage();
107: } else if (c == Alert.DISMISS_COMMAND) {
108: showImageList();
109: }
110: }
111:
112: /**
113: * Shows progress of image uploading
114: */
115: void showProgress(String label, int maxValue) {
116: sendingItem.setLabel(label);
117: sendingItem.setValue(0);
118: sendingItem.setMaxValue(maxValue);
119: Display.getDisplay(parent).setCurrent(senderForm);
120: }
121:
122: /**
123: * Update progress of image uploading
124: */
125: void updateProgress(int value) {
126: sendingItem.setValue(value);
127: }
128:
129: /**
130: * Shows list with image names to select one for sending to receiver
131: */
132: void showImageList() {
133: Display.getDisplay(parent).setCurrent(imageList);
134: }
135:
136: /**
137: * Shows alert with error message
138: */
139: void errorMessage() {
140: Alert alert = new Alert("Error", "Can't read the image", null,
141: null);
142: alert.setTimeout(TIMEOUT);
143: alert.setCommandListener(this );
144: Display.getDisplay(parent).setCurrent(alert, imageList);
145: }
146:
147: /**
148: * Shows alert with "not ready" message
149: */
150: void notReadyMessage() {
151: Alert alert = new Alert("Warning", "Receiver isn't ready"
152: + " to download image", null, null);
153: alert.setTimeout(TIMEOUT);
154: alert.setCommandListener(this );
155: Display.getDisplay(parent).setCurrent(alert, imageList);
156: }
157:
158: /**
159: * Shows alert with "stop" message
160: */
161: void stopMessage() {
162: Alert alert = new Alert("Warning", "Receiver terminated"
163: + " image loading", null, null);
164: alert.setTimeout(TIMEOUT);
165: alert.setCommandListener(this );
166: Display.getDisplay(parent).setCurrent(alert, imageList);
167: }
168:
169: /** Stops Uploading process */
170: void stop() {
171: if (obexSender != null) {
172: obexSender.stop();
173: }
174: }
175:
176: /** Starts sending process */
177: private void sendImage() {
178: int imageIndex = imageList.getSelectedIndex();
179: String imageName = (String) imageNames.elementAt(imageIndex);
180: obexSender.setImageName(imageName);
181: (new Thread(obexSender)).start();
182: }
183:
184: /**
185: * Check the attributes in the descriptor that identify
186: * images and titles and initialize the lists of imageNames
187: * and imageList.
188: * <P>
189: * The attributes are named "ImageTitle-n" and "ImageImage-n".
190: * The value "n" must start at "1" and increment by 1.
191: */
192: private void setupImageList() {
193: imageNames = new Vector();
194: imageList = new List("Select Image to send", List.IMPLICIT);
195: imageList.addCommand(backCommand);
196: imageList.setCommandListener(this );
197:
198: for (int n = 1; n < IMAGE_COUNT; n++) {
199: String nthImage = "ImageName-" + n;
200: String image = parent.getAppProperty(nthImage);
201:
202: if ((image == null) || (image.length() == 0)) {
203: break;
204: }
205:
206: String nthTitle = "ImageTitle-" + n;
207: String title = parent.getAppProperty(nthTitle);
208:
209: if ((title == null) || (title.length() == 0)) {
210: title = image;
211: }
212:
213: imageNames.addElement(image);
214: imageList.append(title, null);
215: }
216: }
217: }
|