// Created by plusminus on 22:55:26 - 06.09.2008
package org.androad.ui.common.views;
import org.androad.R;
import org.androad.util.constants.Constants;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.widget.Toast;
public class CompassRotateView extends RotateView implements SensorEventListener {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
protected boolean mActive = false;
private boolean mToastShownOnce = false;
// ===========================================================
// Constructors
// ===========================================================
public CompassRotateView(final Context context) {
super(context);
}
public CompassRotateView(final Context context, final AttributeSet attrs) {
super(context, attrs);
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void toggleActive() {
if(this.mActive) {
deactivate();
} else {
activate();
}
}
public void activate(){
this.mActive = true;
invalidate();
}
public void deactivate(){
this.mActive = false;
super.mHeading = Constants.NOT_SET;
invalidate();
}
public boolean isActive() {
return this.mActive;
}
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
@Override
public void onAccuracyChanged(final Sensor sensor, final int accuracy) {
if(!this.mToastShownOnce && this.mActive && accuracy < SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM){
this.mToastShownOnce = true;
Toast.makeText(this.getContext(), R.string.compass_please_callibrate, Toast.LENGTH_SHORT).show();
}
}
public void onSensorChanged(final int sensor, final float[] values) {
//Log.d(TAG, "x: " + values[0] + "y: " + values[1] + "z: " + values[2]);
if(this.mActive){
synchronized (this) {
super.mHeading = values[0];
invalidate();
}
}
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}