package de.tu.darmstadt.seemoo.ansian.gui.views.morse;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
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.MorseDitDurationEvent;
import de.tu.darmstadt.seemoo.ansian.control.events.morse.MorseSendEvent;
import de.tu.darmstadt.seemoo.ansian.model.preferences.Preferences;
/**
* This view bunches all the sensor data in a compact view with a picture for
* understanding in the layout.
*
* @author Markus
*
*/
public class MorseButtonView extends MyMorseView {
private SeekBar morseWPMSeekBar;
private TextView morseWPMLabel;
private Button playButton;
private static boolean sending = false;
public MorseButtonView(Context context) {
super(context);
}
public MorseButtonView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MorseButtonView(Context context, AttributeSet attrs, int defaultStyle) {
super(context, attrs, defaultStyle);
}
protected void init() {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.morse_button, this);
morseWPMLabel = (TextView) findViewById(R.id.morseWPMLabel);
morseWPMSeekBar = (SeekBar) findViewById(R.id.morseWPMSeekBar);
morseWPMSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
int wpm = progress + 1;
Preferences.MORSE_PREFERENCE.setWPM(wpm);
EventBus.getDefault()
.postSticky(new MorseDitDurationEvent(Preferences.MORSE_PREFERENCE.getDitDuration()));
}
updateWPMLabel();
}
});
playButton = (Button) findViewById(R.id.morseButton);
playButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EventBus.getDefault().post(new MorseSendEvent(!sending));
}
});
setButtonText(sending);
update();
}
public void update() {
updateWPMLabel();
morseWPMSeekBar.setProgress(Preferences.MORSE_PREFERENCE.getWPM());
}
private void updateWPMLabel() {
morseWPMLabel.setText(String.format(getContext().getString(R.string.morse_wpm_label),
getWPMStringRepresentation(), Preferences.MORSE_PREFERENCE.getDitDuration()));
}
public String getWPMStringRepresentation() {
float wpm = Preferences.MORSE_PREFERENCE.getWPM();
if (wpm < 1)
return "<1";
if (wpm > 20)
return ">20";
return "" + (int) wpm;
}
private void setButtonText(boolean b) {
if (b)
playButton.setText(R.string.morse_button_stop);
else
playButton.setText(R.string.morse_button_send);
}
@Subscribe
public void onEvent(final MorseSendEvent event) {
MainActivity.instance.runOnUiThread(new Runnable() {
@Override
public void run() {
setButtonText(sending = event.isSending());
}
});
}
}