package de.tu.darmstadt.seemoo.ansian.gui.views.morse;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.widget.TextView;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
import de.tu.darmstadt.seemoo.ansian.MainActivity;
import de.tu.darmstadt.seemoo.ansian.R;
import de.tu.darmstadt.seemoo.ansian.control.events.morse.MorseCodeEvent;
import de.tu.darmstadt.seemoo.ansian.control.events.morse.MorseStateEvent;
import de.tu.darmstadt.seemoo.ansian.control.events.morse.MorseSymbolEvent;
import de.tu.darmstadt.seemoo.ansian.model.demodulation.morse.Morse.State;
import de.tu.darmstadt.seemoo.ansian.tools.morse.Decoder;
public class MorseReceiveView extends MyMorseView {
private TextView codeText, symbolText;
private String LOGTAG = "MorseReceiveView";
StringBuffer codeBuffer;
StringBuffer symbolLine;
Decoder decoder;
public MorseReceiveView(Context context) {
super(context);
}
public MorseReceiveView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MorseReceiveView(Context context, AttributeSet attrs, int defaultStyle) {
super(context, attrs, defaultStyle);
}
@Override
protected void init() {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.morse_receive_view, this);
codeText = (TextView) findViewById(R.id.code_text);
symbolText = (TextView) findViewById(R.id.symbol_text);
decoder = new Decoder();
codeText.setGravity(Gravity.RIGHT);
codeText.setHorizontallyScrolling(true);
symbolText.setGravity(Gravity.RIGHT);
symbolText.setHorizontallyScrolling(true);
MorseCodeEvent event = EventBus.getDefault().getStickyEvent(MorseCodeEvent.class);
if (event != null) {
codeBuffer = new StringBuffer(event.getCompleteCodeString());
codeText.setText(codeBuffer);
symbolText.setText(new StringBuilder().append(decoder.decode(cutString(codeBuffer))));
} else {
codeBuffer = new StringBuffer();
}
}
@Subscribe
public void onEvent(final MorseCodeEvent event) {
if (event.isInRange()) {
MainActivity.instance.runOnUiThread(new Runnable() {
@Override
public void run() {
codeBuffer = new StringBuffer(event.getCompleteCodeString());
// if(codeLine.length()>150)
// codeLine= new
// StringBuffer(codeLine.subSequence(codeLine.length()-150,
// codeLine.length()));
// setText(new
// StringBuilder().append(codeLine).append("\n").append(decoder.decode(codeLine.toString())));
// show/hide morse live ticker
// showHideViews();
symbolText.setText(new StringBuilder().append(decoder.decode(cutString(codeBuffer))));
codeText.setText(codeBuffer);
}
});
}
}
@Subscribe
public void onEvent(final MorseSymbolEvent event) {
if (event.isRecognized()) {
MainActivity.instance.runOnUiThread(new Runnable() {
@Override
public void run() {
// String symbol = event.getSymbol();
// int length = event.getCurrentSymbolCode().length();
// for(int i =0;i<length/2;i++)
// symbolLine.append(" ");
// symbolLine.append(symbol);
// for(int i =0;i<length/2;i++)
// symbolLine.append(" ");
// if(symbolLine.length()>50)
//
// symbolLine= new
// StringBuffer(symbolLine.subSequence(symbolLine.length()-50,
// symbolLine.length()));
// setText(new
// StringBuilder().append(codeLine).append("\n").append(symbolLine));
// symbolLine= ;
// Log.d(LOGTAG , "MorseSymbolEvent");
}
});
}
}
@Subscribe
public void onEvent(final MorseStateEvent event) {
if (event.getState() == State.STOPPED) {
MainActivity.instance.runOnUiThread(new Runnable() {
@Override
public void run() {
codeBuffer = new StringBuffer();
symbolLine = new StringBuffer();
}
});
}
}
private String cutString(StringBuffer buffer) {
int start = buffer.indexOf(" ");
int end = buffer.lastIndexOf(" ");
if (start == end || start == -1 || end == -1)
return "";
else
return buffer.substring(start, end);
}
@Override
public void update() {
// TODO Auto-generated method stub
}
}