16224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala/*
26224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala * Copyright 2012 AndroidPlot.com
36224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
46224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    Licensed under the Apache License, Version 2.0 (the "License");
56224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    you may not use this file except in compliance with the License.
66224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    You may obtain a copy of the License at
76224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
86224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *        http://www.apache.org/licenses/LICENSE-2.0
96224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *
106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    Unless required by applicable law or agreed to in writing, software
116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    distributed under the License is distributed on an "AS IS" BASIS,
126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    See the License for the specific language governing permissions and
146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala *    limitations under the License.
156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala */
166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapackage com.androidplot.demos;
186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.app.Activity;
206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.content.Context;
216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.graphics.Color;
226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.hardware.Sensor;
236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.hardware.SensorEvent;
246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.hardware.SensorEventListener;
256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.hardware.SensorManager;
266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.os.Bundle;
276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.view.View;
286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.widget.CheckBox;
296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport android.widget.CompoundButton;
306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.Plot;
316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.util.PlotStatistics;
326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.util.Redrawer;
336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport com.androidplot.xy.*;
346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.text.DecimalFormat;
356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalaimport java.util.Arrays;
366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala// Monitor the phone's orientation sensor and plot the resulting azimuth pitch and roll values.
386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala// See: http://developer.android.com/reference/android/hardware/SensorEvent.html
396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvalapublic class OrientationSensorExampleActivity extends Activity implements SensorEventListener
406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala{
416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private static final int HISTORY_SIZE = 300;            // number of points to plot in history
436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SensorManager sensorMgr = null;
446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private Sensor orSensor = null;
456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private XYPlot aprLevelsPlot = null;
476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private XYPlot aprHistoryPlot = null;
486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private CheckBox hwAcceleratedCb;
506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private CheckBox showFpsCb;
516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    //private SimpleXYSeries aprLevelsSeries = null;
526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries aLvlSeries;
536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries pLvlSeries;
546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries rLvlSeries;
556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries azimuthHistorySeries = null;
566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries pitchHistorySeries = null;
576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private SimpleXYSeries rollHistorySeries = null;
586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private Redrawer redrawer;
606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    /** Called when the activity is first created. */
626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onCreate(Bundle savedInstanceState) {
646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super.onCreate(savedInstanceState);
656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        setContentView(R.layout.orientation_sensor_example);
666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // setup the APR Levels plot:
686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot = (XYPlot) findViewById(R.id.aprLevelsPlot);
696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setDomainBoundaries(-1, 1, BoundaryMode.FIXED);
706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.getGraphWidget().getDomainLabelPaint().setColor(Color.TRANSPARENT);
716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aLvlSeries = new SimpleXYSeries("A");
736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        pLvlSeries = new SimpleXYSeries("P");
746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        rLvlSeries = new SimpleXYSeries("R");
756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.addSeries(aLvlSeries,
776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        new BarFormatter(Color.rgb(0, 200, 0), Color.rgb(0, 80, 0)));
786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.addSeries(pLvlSeries,
796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        new BarFormatter(Color.rgb(200, 0, 0), Color.rgb(0, 80, 0)));
806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.addSeries(rLvlSeries,
816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        new BarFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 80, 0)));
826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setDomainStepValue(3);
846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setTicksPerRangeLabel(3);
856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // per the android documentation, the minimum and maximum readings we can get from
876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // any of the orientation sensors is -180 and 359 respectively so we will fix our plot's
886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // boundaries to those values.  If we did not do this, the plot would auto-range which
896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // can be visually confusing in the case of dynamic plots.
906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setRangeBoundaries(-180, 359, BoundaryMode.FIXED);
916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // update our domain and range axis labels:
936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setDomainLabel("");
946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.getDomainLabelWidget().pack();
956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setRangeLabel("Angle (Degs)");
966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.getRangeLabelWidget().pack();
976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setGridPadding(15, 0, 15, 0);
986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.setRangeValueFormat(new DecimalFormat("#"));
996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // setup the APR History plot:
1016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot = (XYPlot) findViewById(R.id.aprHistoryPlot);
1026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        azimuthHistorySeries = new SimpleXYSeries("Az.");
1046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        azimuthHistorySeries.useImplicitXVals();
1056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        pitchHistorySeries = new SimpleXYSeries("Pitch");
1066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        pitchHistorySeries.useImplicitXVals();
1076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        rollHistorySeries = new SimpleXYSeries("Roll");
1086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        rollHistorySeries.useImplicitXVals();
1096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setRangeBoundaries(-180, 359, BoundaryMode.FIXED);
1116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setDomainBoundaries(0, HISTORY_SIZE, BoundaryMode.FIXED);
1126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.addSeries(azimuthHistorySeries,
1136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                new LineAndPointFormatter(
1146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        Color.rgb(100, 100, 200), null, null, null));
1156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.addSeries(pitchHistorySeries,
1166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                new LineAndPointFormatter(
1176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        Color.rgb(100, 200, 100), null, null, null));
1186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.addSeries(rollHistorySeries,
1196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                new LineAndPointFormatter(
1206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        Color.rgb(200, 100, 100), null, null, null));
1216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setDomainStepMode(XYStepMode.INCREMENT_BY_VAL);
1226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setDomainStepValue(HISTORY_SIZE/10);
1236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setTicksPerRangeLabel(3);
1246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setDomainLabel("Sample Index");
1256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.getDomainLabelWidget().pack();
1266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setRangeLabel("Angle (Degs)");
1276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.getRangeLabelWidget().pack();
1286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setRangeValueFormat(new DecimalFormat("#"));
1306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.setDomainValueFormat(new DecimalFormat("#"));
1316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // setup checkboxes:
1336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        hwAcceleratedCb = (CheckBox) findViewById(R.id.hwAccelerationCb);
1346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        final PlotStatistics levelStats = new PlotStatistics(1000, false);
1356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        final PlotStatistics histStats = new PlotStatistics(1000, false);
1366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprLevelsPlot.addListener(levelStats);
1386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aprHistoryPlot.addListener(histStats);
1396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        hwAcceleratedCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
1406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            @Override
1416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
1426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                if(b) {
1436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    aprLevelsPlot.setLayerType(View.LAYER_TYPE_NONE, null);
1446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    aprHistoryPlot.setLayerType(View.LAYER_TYPE_NONE, null);
1456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                } else {
1466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    aprLevelsPlot.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
1476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                    aprHistoryPlot.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
1486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                }
1496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            }
1506224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        });
1516224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1526224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        showFpsCb = (CheckBox) findViewById(R.id.showFpsCb);
1536224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        showFpsCb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
1546224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            @Override
1556224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
1566224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                levelStats.setAnnotatePlotEnabled(b);
1576224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                histStats.setAnnotatePlotEnabled(b);
1586224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            }
1596224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        });
1606224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1616224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // get a ref to the BarRenderer so we can make some changes to it:
1626224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        BarRenderer barRenderer = (BarRenderer) aprLevelsPlot.getRenderer(BarRenderer.class);
1636224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        if(barRenderer != null) {
1646224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            // make our bars a little thicker than the default so they can be seen better:
1656224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            barRenderer.setBarWidth(25);
1666224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1676224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1686224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // register for orientation sensor events:
1696224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        sensorMgr = (SensorManager) getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
1706224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        for (Sensor sensor : sensorMgr.getSensorList(Sensor.TYPE_ORIENTATION)) {
1716224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            if (sensor.getType() == Sensor.TYPE_ORIENTATION) {
1726224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                orSensor = sensor;
1736224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            }
1746224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1756224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1766224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // if we can't access the orientation sensor then exit:
1776224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        if (orSensor == null) {
1786224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            System.out.println("Failed to attach to orSensor.");
1796224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            cleanup();
1806224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
1816224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1826224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        sensorMgr.registerListener(this, orSensor, SensorManager.SENSOR_DELAY_UI);
1836224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1846224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        redrawer = new Redrawer(
1856224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                Arrays.asList(new Plot[]{aprHistoryPlot, aprLevelsPlot}),
1866224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                100, false);
1876224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1886224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1896224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
1906224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onResume() {
1916224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super.onResume();
1926224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        redrawer.start();
1936224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
1946224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
1956224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
1966224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onPause() {
1976224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        redrawer.pause();
1986224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super.onPause();
1996224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
2006224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2016224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
2026224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onDestroy() {
2036224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        redrawer.finish();
2046224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        super.onDestroy();
2056224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
2066224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2076224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    private void cleanup() {
2086224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // aunregister with the orientation sensor before exiting:
2096224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        sensorMgr.unregisterListener(this);
2106224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        finish();
2116224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
2126224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2136224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2146224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    // Called whenever a new orSensor reading is taken.
2156224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
2166224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public synchronized void onSensorChanged(SensorEvent sensorEvent) {
2176224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2186224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // update level data:
2196224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        aLvlSeries.setModel(Arrays.asList(
2206224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                new Number[]{sensorEvent.values[0]}),
2216224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
2226224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2236224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        pLvlSeries.setModel(Arrays.asList(
2246224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        new Number[]{sensorEvent.values[1]}),
2256224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
2266224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2276224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        rLvlSeries.setModel(Arrays.asList(
2286224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        new Number[]{sensorEvent.values[2]}),
2296224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala                        SimpleXYSeries.ArrayFormat.Y_VALS_ONLY);
2306224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2316224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // get rid the oldest sample in history:
2326224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        if (rollHistorySeries.size() > HISTORY_SIZE) {
2336224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            rollHistorySeries.removeFirst();
2346224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            pitchHistorySeries.removeFirst();
2356224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala            azimuthHistorySeries.removeFirst();
2366224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        }
2376224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2386224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // add the latest history sample:
2396224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        azimuthHistorySeries.addLast(null, sensorEvent.values[0]);
2406224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        pitchHistorySeries.addLast(null, sensorEvent.values[1]);
2416224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        rollHistorySeries.addLast(null, sensorEvent.values[2]);
2426224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
2436224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2446224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala
2456224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    @Override
2466224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    public void onAccuracyChanged(Sensor sensor, int i) {
2476224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala        // Not interested in this event
2486224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala    }
2496224eda509d436a575f801942337da92a6c18767Eino-Ville Talvala}