Cottage360.java

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

import javax.microedition.io.Connector;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.sensor.ChannelInfo;
import javax.microedition.sensor.Data;
import javax.microedition.sensor.DataListener;
import javax.microedition.sensor.SensorConnection;
import javax.microedition.sensor.SensorInfo;
import javax.microedition.sensor.SensorManager;

import com.nokia.mid.ui.DeviceControl;



public class Cottage360 extends MIDlet implements DataListener, PanoramaCanvas.ExitIf {

    static final int BUFFER_SIZE = 3;
    private static PanoramaCanvas iCanvas;
    private static SensorConnection iConnection;
    private static final String PHOTO_NAME = "/cottage360.jpg";
    public Cottage360()
    {
    }

    public void dataReceived( SensorConnection con, Data[] aData, boolean aMissed)
    {
        iCanvas.setPosition(aData);
    }

    public void exit()
    {
        try
        {
            destroyApp( true );
        }
        catch (MIDletStateChangeException e)
        {
            e.printStackTrace();
        }
        notifyDestroyed();
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
        try
        {
            if (iConnection!=null)
                iConnection.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    protected void pauseApp()
    {
    }

    protected void startApp() throws MIDletStateChangeException
    {
        DeviceControl.setLights( 0, 100 );
        Display disp = Display.getDisplay( this );
        try
        {
            iCanvas = new PanoramaCanvas( Image.createImage(PHOTO_NAME), this );
            disp.setCurrent( iCanvas );
            iConnection = openAccelerationSensor();
            if (iConnection != null)
                iConnection.setDataListener( this, BUFFER_SIZE );
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    private SensorConnection openAccelerationSensor(){

        SensorInfo[] infos = SensorManager.findSensors("acceleration", null);
        if (infos.length==0) return null;

        // INT data type is preferred
        int i=0;
        for (i=0; i<infos.length && infos[i].getChannelInfos()[0].getDataType()!=ChannelInfo.TYPE_INT; i++);

        try{
            return i==infos.length ? (SensorConnection)Connector.open(infos[0].getUrl()):
                (SensorConnection)Connector.open(infos[i].getUrl());
        }catch (Exception e) {
            return null;
        }
    }
}