/** * Update URL and gauge of the progress form. * * @param url new URL, null to remove, "" to not change * @param size 0 if unknown, else size of object to download in K bytes * @param gaugeLabel label for progress gauge */ private void updateProgressForm(String url, int size, String gaugeLabel) { Gauge oldProgressGauge; Gauge progressGauge; StringItem urlItem; // We need to prevent "flashing" on fast development platforms. while (System.currentTimeMillis() - lastDisplayChange < GraphicalInstaller.ALERT_TIMEOUT) ; if (size <= 0) { progressGauge = new Gauge(gaugeLabel, false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING); } else { progressGauge = new Gauge(gaugeLabel, false, size, 0); } oldProgressGauge = (Gauge) progressForm.get(progressGaugeIndex); progressForm.set(progressGaugeIndex, progressGauge); // this ends the background thread of gauge. oldProgressGauge.setValue(Gauge.CONTINUOUS_IDLE); if (url == null) { urlItem = new StringItem("", ""); progressForm.set(progressUrlIndex, urlItem); } else if (url.length() != 0) { urlItem = new StringItem(Resource.getString(ResourceConstants.AMS_WEBSITE) + ": ", url); progressForm.set(progressUrlIndex, urlItem); } lastDisplayChange = System.currentTimeMillis(); }
/** * Display the connecting form to the user, let call set actions. * * @param action action to put in the form's title * @param name name to in the form's title * @param url URL of a JAD * @param size 0 if unknown, else size of object to download in K bytes * @param gaugeLabel label for progress gauge * @return displayed form */ private Form displayProgressForm( String action, String name, String url, int size, String gaugeLabel) { Gauge progressGauge; StringItem urlItem; progressForm = new Form(null); progressForm.setTitle(action + " " + name); if (size <= 0) { progressGauge = new Gauge(gaugeLabel, false, Gauge.INDEFINITE, Gauge.CONTINUOUS_RUNNING); } else { progressGauge = new Gauge(gaugeLabel, false, size, 0); } progressGaugeIndex = progressForm.append(progressGauge); if (url == null) { urlItem = new StringItem("", ""); } else { urlItem = new StringItem(Resource.getString(ResourceConstants.AMS_WEBSITE) + ": ", url); } progressUrlIndex = progressForm.append(urlItem); display.setCurrent(progressForm); lastDisplayChange = System.currentTimeMillis(); return progressForm; }
/** * Alert the user that an action was successful. * * @param successMessage message to display to user */ private void displaySuccessMessage(String successMessage) { Image icon; Alert successAlert; icon = GraphicalInstaller.getImageFromInternalStorage("_dukeok8"); successAlert = new Alert(null, successMessage, icon, null); successAlert.setTimeout(GraphicalInstaller.ALERT_TIMEOUT); // We need to prevent "flashing" on fast development platforms. while (System.currentTimeMillis() - lastDisplayChange < GraphicalInstaller.ALERT_TIMEOUT) ; lastDisplayChange = System.currentTimeMillis(); display.setCurrent(successAlert); }
public void destroyApp(boolean unconditional) { if (state != STATE_STOPPED) { svgAnimator.stop(); state = STATE_STOPPED; } svgAnimator = null; svgCanvas = null; System.gc(); }
/** * Makes a copy of a list of permissions. * * @param permissions source copy * @return array of permissions from {@link Permissions} */ protected byte[][] copyPermissions(byte[][] permissions) { if (permissions == null) { return null; } byte[][] copy = new byte[2][]; for (int i = 0; i < 2; i++) { copy[i] = new byte[permissions[i].length]; System.arraycopy(permissions[i], 0, copy[i], 0, permissions[i].length); } return copy; }
public void startApp() { if (svgCanvas == null) { // If there is a splash screen defined, show it immediately. boolean hasSplash = ((splashImageName != null) && !"".equals(splashImageName)); if (hasSplash) { InputStream splashStream = getClass().getResourceAsStream(splashImageName); try { Image splashImage = Image.createImage(splashStream); splashCanvas = new SplashCanvas(splashImage); } catch (IOException ioe) { ioe.printStackTrace(); hasSplash = false; } if (splashCanvas != null) { Display.getDisplay(this).setCurrent(splashCanvas); } } long start = System.currentTimeMillis(); // Get input stream to the SVG image stored in the MIDlet's jar. InputStream svgDemoStream = getClass().getResourceAsStream(svgImageName); // Build an SVGImage instance from the stream svgImage = null; if (svgDemoStream != null) { try { svgImage = (SVGImage) SVGImage.createImage(svgDemoStream, null); } catch (IOException io) { io.printStackTrace(); } } if (svgImage == null) { throw new Error(ERROR_COULD_NOT_LOAD_SVG + svgImageName); } // Build an SVGAnimator from the SVGImage. The SVGAnimator will handle // all the animation details and run the SVG animation in a // Canvas instance. svgAnimator = SVGAnimator.createAnimator(svgImage); // Set to 10 fps (frames per second) svgAnimator.setTimeIncrement(0.01f); // Get the Canvas managed by the SVGAnimator and set the // svgImage's size to the canvas display area. svgCanvas = (Canvas) svgAnimator.getTargetComponent(); svgImage.setViewportWidth(svgCanvas.getWidth()); svgImage.setViewportHeight(svgCanvas.getHeight()); // Hook the exit command so that we can exit the animation demo. svgCanvas.addCommand(exitCommand); svgCanvas.setCommandListener(this); // The SVG root element is used to reset the time on a stop operation. doc = svgImage.getDocument(); svg = (SVGSVGElement) doc.getDocumentElement(); // Hook-in key listeners to play, pause and stop the animation. svgAnimator.setSVGEventListener(this); long end = System.currentTimeMillis(); if (hasSplash) { long waitMore = SPLASH_MIN_LENGTH - (end - start); if (waitMore > 0) { try { Thread.currentThread().sleep(waitMore); } catch (InterruptedException ie) { // Do nothing. } } } if (autoStart) { svgAnimator.play(); state = STATE_PLAYING; System.err.println("PLAYING..."); } } Display.getDisplay(this).setCurrent(svgCanvas); resumeAnimation(); }
/** * Get the list of suites for the user to install. The suites that are listed are the links on a * web page that end with .jad. */ public void run() { StreamConnection conn = null; InputStreamReader in = null; String errorMessage; long startTime; startTime = System.currentTimeMillis(); try { parent.displayProgressForm( Resource.getString(ResourceConstants.AMS_DISC_APP_GET_INSTALL_LIST), "", url, 0, Resource.getString(ResourceConstants.AMS_GRA_INTLR_CONN_GAUGE_LABEL)); conn = (StreamConnection) Connector.open(url, Connector.READ); in = new InputStreamReader(conn.openInputStream()); try { parent.updateProgressForm( "", 0, Resource.getString(ResourceConstants.AMS_DISC_APP_GAUGE_LABEL_DOWNLOAD)); parent.installList = SuiteDownloadInfo.getDownloadInfoFromPage(in); if (parent.installList.size() > 0) { parent.installListBox = new List( Resource.getString(ResourceConstants.AMS_DISC_APP_SELECT_INSTALL), Choice.IMPLICIT); // Add each suite for (int i = 0; i < parent.installList.size(); i++) { SuiteDownloadInfo suite = (SuiteDownloadInfo) installList.elementAt(i); parent.installListBox.append(suite.label, (Image) null); } parent.installListBox.addCommand(parent.backCmd); parent.installListBox.addCommand(parent.installCmd); parent.installListBox.setCommandListener(parent); /* * We need to prevent "flashing" on fast development * platforms. */ while (System.currentTimeMillis() - parent.lastDisplayChange < GraphicalInstaller.ALERT_TIMEOUT) ; parent.display.setCurrent(parent.installListBox); return; } errorMessage = Resource.getString(ResourceConstants.AMS_DISC_APP_CHECK_URL_MSG); } catch (IllegalArgumentException ex) { errorMessage = Resource.getString(ResourceConstants.AMS_DISC_APP_URL_FORMAT_MSG); } catch (Exception ex) { errorMessage = ex.getMessage(); } } catch (Exception ex) { errorMessage = Resource.getString(ResourceConstants.AMS_DISC_APP_CONN_FAILED_MSG); } finally { if (parent.progressForm != null) { // end the background thread of progress gauge. Gauge progressGauge = (Gauge) parent.progressForm.get(parent.progressGaugeIndex); progressGauge.setValue(Gauge.CONTINUOUS_IDLE); } try { conn.close(); in.close(); } catch (Exception e) { if (Logging.REPORT_LEVEL <= Logging.WARNING) { Logging.report(Logging.WARNING, LogChannels.LC_AMS, "close threw an Exception"); } } } Alert a = new Alert( Resource.getString(ResourceConstants.ERROR), errorMessage, null, AlertType.ERROR); a.setTimeout(Alert.FOREVER); parent.display.setCurrent(a, parent.urlTextBox); }