/** * Copyright (c) 2012 Nokia Corporation. All rights reserved. * Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation. * Oracle and Java are trademarks or registered trademarks of Oracle and/or its * affiliates. Other product and company names mentioned herein may be trademarks * or trade names of their respective owners. * See LICENSE.TXT for license information. */ package com.nokia.example; import java.io.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.wireless.messaging.*; // Main class of the EventSharing MIDlet public class EventSharingMIDlet extends MIDlet implements MessageListener { private final static int DEFAULT_PORT = 6553; private final static String SMS_PREFIX = "sms://:"; private final Image logo; private final EventCreationForm mainScreen; private int port; private MessageConnection conn; private OperationsQueue queue = new OperationsQueue(); private final Display display; public EventSharingMIDlet() { // init basic parameters logo = makeImage("/logo.png"); try { port = Integer.parseInt(getAppProperty("port")); } catch (Exception e) { // in case the property is missing or with a wrong format port = DEFAULT_PORT; } ErrorScreen.init(logo, Display.getDisplay(this)); mainScreen = new EventCreationForm(this, port); display = Display.getDisplay(this); } void sendMessage(String number, byte[] text) { showMessage("Sending event " + "to number " + number); if (conn != null) { try { // create a new message BinaryMessage requestSMS = (BinaryMessage)conn.newMessage(MessageConnection.BINARY_MESSAGE); String address = new StringBuffer("sms://").append(number).append(":").append(port).toString(); requestSMS.setAddress(address); requestSMS.setPayloadData(text); conn.send(requestSMS); } catch (IOException e) { showMessage(e.getMessage()); } catch (SecurityException e) { showMessage(e.getMessage()); } } } public void startApp() { Displayable current = Display.getDisplay(this).getCurrent(); if (current == null) { // check that the API is available boolean isAPIAvailable = (System.getProperty("microedition.pim.version") != null); // shows splash screen StringBuffer splashText = new StringBuffer(getAppProperty("MIDlet-Name")).append("\n") .append(getAppProperty("MIDlet-Vendor")).append(isAPIAvailable ? "" : "\nPIM API not available"); //Alert splashScreen = new Alert(null, splashText.toString(), logo, AlertType.INFO); //splashScreen.setTimeout(3000); if (!isAPIAvailable) { //display.setCurrent(splashScreen, mainScreen); display.setCurrent(mainScreen); } else { //display.setCurrent(splashScreen, mainScreen); display.setCurrent(mainScreen); // List connections from PushRegistry String smsConnections[] = PushRegistry.listConnections(true); // Chech the connections. We'll assume only one is of interest for (int i = 0; i < smsConnections.length; i++) { if (smsConnections[i].startsWith(SMS_PREFIX)) { try { conn = (MessageConnection) Connector.open(smsConnections[i]); BinaryMessage incomingMessage = (BinaryMessage)conn.receive(); showIncomingMessage(incomingMessage); conn.close(); } catch (IOException e) { showMessage(e.getMessage()); } catch (SecurityException e) { showMessage(e.getMessage()); } } } // Build the connection string String connection = SMS_PREFIX + port; try { // Initiate the connection and add listener conn = (MessageConnection) Connector.open(connection); conn.setMessageListener(this); } catch (IOException e) { showMessage(e.getMessage()); } catch (SecurityException e) { showMessage(e.getMessage()); } } } else { Display.getDisplay(this).setCurrent(current); } } public void pauseApp() { } public void destroyApp(boolean unconditional) { try { // Close the connection on exit if (conn != null) { conn.close(); } } catch (IOException e) { // Ignore since we are closing anyway } queue.abort(); } // Asynchronous callback for inbound message. public void notifyIncomingMessage(MessageConnection conn) { if (conn == this.conn && conn != null) { try { // Create a ReceiveScreen upon message removal BinaryMessage incomingMessage = (BinaryMessage) conn.receive(); showIncomingMessage(incomingMessage); } catch (IOException e) { showMessage(e.getMessage()); } catch (SecurityException e) { showMessage(e.getMessage()); } } } void showIncomingMessage(BinaryMessage msg) { display.setCurrent(new IncomingEventForm(this, msg)); } void showMessage(String message) { ErrorScreen.showError(message, mainScreen); } void showMessage(String message, Displayable mainScreen) { ErrorScreen.showError(message, mainScreen); } // adds an operation the queue void enqueueOperation(Operation operation) { queue.enqueueOperation(operation); } // shows the main screen void showMain() { display.setCurrent(mainScreen); } // shows the contacts list screen void showContactsList() { display.setCurrent(new ContactListForm(EventSharingMIDlet.this)); } // callback from contacts list when a particular // telephone number has been selected void contactSelected(String telephoneNumber) { mainScreen.setTargetPhoneNumber(telephoneNumber); showMain(); } // loads a given image by name static Image makeImage(String filename) { Image image = null; try { image = Image.createImage(filename); } catch (Exception e) { // use a null image instead } return image; } }