package com.sunflower.WavePanel;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.util.Log;
import android.view.View;
public class DisplayView extends View implements SensorEventListener{
private DisplayView instance = null;
private ViewManager vmanager = null;
private int line_idx = 0;
private int led_idx = 0;
private long old_time = 0;
private LedController led = null;
private SampleFilter filter = null;
private int stop_count = 0;
private boolean display_flag = false;
private Rect dirty_area = null;
public DisplayView(Context context) {
super(context);
instance = this;
vmanager = (ViewManager) context;
filter = new SampleFilter(3);
led = new LedController();
dirty_area = led.getRedrawArea();
}
@Override
protected void onDraw(Canvas canvas) {
if(display_flag) {
line_idx++;
if(line_idx >= LedController.END_LINE){
display_flag = false;
}
// Log.i("Draw LED: "+Integer.toString(led_idx), "Line = "+Integer.toString(line_idx));
led.showLine(canvas, line_idx);
}
else
led.showDarkLine(canvas);
invalidate(dirty_area);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ORIENTATION){
float azimuth = event.values[0];
filter.addSample(azimuth);
// Log.i("Azimuth", Float.toString(azimuth));
// filter.dump();
int movement = filter.getMovement();
switch(movement) {
case SampleFilter.LEFT_END:
//column index reset, ready to display
Log.i("Movement", "LEFT END");
stop_count = 0;
line_idx = 0;
display_flag = true;
break;
case SampleFilter.RIGHT_END:
Log.i("Movement", "RIGHT END");
//turns to dark
stop_count = 0;
line_idx = LedController.END_LINE;
display_flag = false;
break;
case SampleFilter.LEFT:
case SampleFilter.RIGHT:
case SampleFilter.STOP:
//keeps dark
//Log.i("Stop count", Integer.toString(stop_count));
stop_count++;
if(stop_count >= 25) {
vmanager.switchView(ViewManager.HINT_VIEW_ID);
stop_count = 0;
}
break;
}
if(old_time == 0) {
old_time = System.currentTimeMillis();
led.setText(SettingView.getText(0));
led.setTextColor(SettingView.getTextColor());
}
else {
if(System.currentTimeMillis()- old_time >= SettingView.getTextDisplayTime()*1000) {
led_idx++;
if(led_idx >= SettingView.getTextNum()) led_idx = 0;
// Log.i("Index = "+Integer.toString(led_idx), "Total = "+Integer.toString(SettingView.getTextNum()));
led.setText(SettingView.getText(led_idx));
led.setTextColor(SettingView.getTextColor());
old_time = System.currentTimeMillis();
}
}
}
}
}
|