MainView.java

/**
 * Copyright (c) 2013 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.imagescaler;

import java.io.IOException;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.StringItem;

import com.nokia.mid.ui.FileSelect;
import com.nokia.mid.ui.FileSelectDetail;

/**
 * The main view of the application.
 */
public class MainView 
    extends Form 
    implements CommandListener
{
    // Constants
    private static final String LOGO_IMAGE_URI = "/logo.png";
    private static final String INFO_TEXT =
        "This application helps you in downscaling the images using the Image "
        + "Scaling API.";
    private static final int ERROR_DIALOG_TIMEOUT = 5000; // Milliseconds

    // Members
    private final Command exitCommand = new Command("Exit", Command.EXIT, 1);
    private final Command browseImagesCommand = new Command("Browse images", Command.OK, 1);
    private Main main = null;
    private ImageCanvas imageCanvas = null;
    private Image logoImage = null;
    private StringItem stringItem = null;
    private String originalImageUrl = null;

    /**
     * Constructor.
     * @param title The title of this view.
     * @param main The Main (MIDlet) instance.
     */
    public MainView(String title, Main main) {
        super(title);
        
        this.main = main;
        
        try {
        	logoImage = Image.createImage(LOGO_IMAGE_URI);
        }
        catch (IOException e) {
        }
        
        stringItem = new StringItem("About", INFO_TEXT);
        append(stringItem);
        
        addCommand(browseImagesCommand);
        addCommand(exitCommand);
        setCommandListener(this);
    }

    /**
     * @see CommandListener#commandAction(javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable) 
     */
    public void commandAction(Command command, Displayable displayable) {
        final MainView mainView = this;
        
        if (command == exitCommand) {
            main.quit();
        }
        else if (command == browseImagesCommand) {
            new Thread() {
                public void run() {
                    try {
                        FileSelectDetail selectedFiles[] =
                            FileSelect.launch(Utils.PHOTOS_DIR,
                                              FileSelect.MEDIA_TYPE_PICTURE,
                                              false);
                        
                        if (selectedFiles != null && selectedFiles.length > 0) {
                            originalImageUrl = selectedFiles[0].url;
                            
                            if (imageCanvas == null) {
                                imageCanvas = new ImageCanvas(mainView);
                            }
                            
                            if (imageCanvas.loadImage(originalImageUrl) == true) {
                                Display.getDisplay(main).setCurrent(imageCanvas);
                            }
                        }
                    }
                    catch (Exception e) {
                    }
                }
            }.start();
        }
    }

    /**
     * Shows this view.
     */
    public void displayThis() {
        Display.getDisplay(main).setCurrent(this);
        imageCanvas = null;
    }

    /**
     * Displays the given message.
     * @param alertType The type of the alert (message).
     * @param message The message to show.
     */
    public void showMessage(AlertType alertType, String message) {
        Displayable currentDisplayable = Display.getDisplay(main).getCurrent();
        
        if (currentDisplayable != this || currentDisplayable != imageCanvas) {
            if (imageCanvas != null) {
                Display.getDisplay(main).setCurrent(imageCanvas);
            }
            else {
                Display.getDisplay(main).setCurrent(this);
            }
        }
        
        String title = null;
        
        if (alertType == AlertType.ERROR) {
            title = "Error";
        }
        else {
            title = null;
        }
        
        Alert errorAlert = new Alert(title, message, logoImage, alertType);
        errorAlert.setTimeout(ERROR_DIALOG_TIMEOUT);
        Display.getDisplay(main).setCurrent(errorAlert);
    }
}