TextHandler.java

/**
 * 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.contenthandler.texthandler;

import javax.microedition.content.ContentHandlerServer;
import javax.microedition.content.Invocation;
import javax.microedition.content.Registry;
import javax.microedition.content.RequestListener;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class TextHandler extends MIDlet implements RequestListener {

    // Choice list title
    private static final String FAVOURITE_LINKS = "Favourite Links";
    // content type constant
    private static final String CONTENT_TYPE = "text/plain";
    // Current class name
    private static final String CLASS_NAME = "com.nokia.example.contenthandler.texthandler.TextHandler";
    // Display instance
    Display display = null;
    // Current invocation, null if no Invocation.
    private Invocation invocation;
    // ContentHandlerServer from which to get requests.
    private ContentHandlerServer handler;
    // Access to Registry functions and responses.
    private Registry registry;
    // instance to display choice list
    ChoiceList choices;
    // Invocation URL
    String url;

    /**
     * Constructor creates Display instance and create choice list.
     */
    public TextHandler() {
        display = Display.getDisplay(this);
        //Display the choice list
        choices = new ChoiceList(FAVOURITE_LINKS, this);
        display.setCurrent(choices);
    }

    protected void startApp() throws MIDletStateChangeException {
        register();
    }

    protected void destroyApp(boolean arg0) {
    }

    protected void pauseApp() {
    }

    /**
     * Method displays Text Invocation. Current invocation handles Text Content
     * type "text/plain"
     *
     * @param invoc invocation with content type "text/plain"
     */
    void showCurrentInvocation(Invocation invoc) {
        Form textViewerFrom = new TextViewer(invoc, this);
        display.setCurrent(textViewerFrom);
    }

    /**
     * Register this MIDlet to receive invocations about text/plain
     */
    void register() {
        try {
            registry = Registry.getRegistry(TextHandler.CLASS_NAME);
            handler = registry.register(TextHandler.CLASS_NAME,
                    new String[]{TextHandler.CONTENT_TYPE}, null, null,
                    null, null, null);

            if (handler != null) {
                handler.setListener(this);
            }
            displayMessage(TextHandler.CONTENT_TYPE + " was successfully registered for this MIDlet!");
        }
        catch (Exception che) {
            //che.printStackTrace();
            displayMessage(TextHandler.CONTENT_TYPE + " registration failed!");
        }
    }

    /**
     * It displays alert messages
     *
     * @param message Message to display
     *
     */
    private void displayMessage(String message) {
        Alert alert = new Alert("Message", message, null, AlertType.INFO);
        display.setCurrent(alert);
    }

    /**
     * Handles incoming invocation request using the ContentHandlerServer
     * instance. If there is a current Invocation finish it so the next Contact
     * can be displayed.
     */
    public void invocationRequestNotify(ContentHandlerServer server) {

        if (invocation != null) {
            handler.finish(invocation, Invocation.OK);
        }
        invocation = handler.getRequest(false);
        if (invocation != null) {
            showCurrentInvocation(invocation);
        }
    }

    /**
     * Finish the current invocation
     *
     * @param invocStatus
     */
    void doFinish(int invocStatus) {
        if (invocStatus == Invocation.OK) {
            if (invocation != null) {
                invocation = null;
            }
        }
    }

    /**
     * Invoke the URL provided.
     *
     * @param url http URL
     */
    void doInvoke(String url) {
        try {
            Invocation invoc = new Invocation(url);
            if (registry.invoke(invoc)) {
                destroyApp(true);
                notifyDestroyed();
            }
            else {
                //displayMessage("Could not link to " + url);
            }
        }
        catch (Exception ex) {
            //displayMessage("Could not link to " + url);
        }
    }
}