package com.pwittchen.eegreader.activity.controller;
import android.speech.tts.TextToSpeech;
import android.widget.Toast;
import com.actionbarsherlock.view.MenuItem;
import com.neurosky.thinkgear.TGDevice;
import com.pwittchen.eegreader.R;
import com.pwittchen.eegreader.activity.contract.ActivityMainContract;
import com.pwittchen.eegreader.database.DatabaseHandler;
import com.pwittchen.eegreader.database.model.Signal;
import com.pwittchen.eegreader.generics.GenericApplication;
import com.pwittchen.eegreader.menu.item.MenuItemBluetooth;
import com.pwittchen.eegreader.menu.item.MenuItemSettings;
import com.pwittchen.eegreader.preferences.SettingsSharedPreferences;
import com.pwittchen.eegreader.utils.StringUtils;
public class MainController {
private ActivityMainContract activity;
private SettingsSharedPreferences settingsSharedPreferences = new SettingsSharedPreferences();
private DatabaseHandler databaseHandler;
private static int TTSThreshold = 90;
public MainController(ActivityMainContract activity) {
setActivity(activity);
setDatabaseHandler();
setOptionsMenu();
}
public void setActivity(ActivityMainContract activity) {
this.activity = activity;
}
private void setDatabaseHandler() {
this.databaseHandler = new DatabaseHandler(GenericApplication.getContext());
}
private void setOptionsMenu() {
activity.getOptionsMenu().put(R.id.ic_bluetooth_connect_or_disconnect, new MenuItemBluetooth());
activity.getOptionsMenu().put(R.id.ic_settings, new MenuItemSettings());
}
public void connectOrDisconnectToDevice(MenuItem item) {
if (GenericApplication.getTGDeviceUtils().getTGDevice() != null) {
disconnectFromDevice(item);
} else {
connectToDevice(item);
}
}
private void connectToDevice(MenuItem item) {
GenericApplication.getTGDeviceUtils().reconnectToDevice();
item.setIcon(R.drawable.ic_menu_device_access_bluetooth_connected);
Toast.makeText(GenericApplication.getContext(), activity.getConnectedToDevice(), Toast.LENGTH_SHORT).show();
}
private void disconnectFromDevice(MenuItem item) {
GenericApplication.getTGDeviceUtils().disconnectFromDevice();
item.setIcon(R.drawable.ic_menu_device_access_bluetooth);
Toast.makeText(GenericApplication.getContext(), activity.getDisconnectedFromDevice(), Toast.LENGTH_SHORT).show();
}
private boolean isVoiceFeedbackEnabled() {
return settingsSharedPreferences.get(SettingsSharedPreferences.enableVoiceFeedback);
}
private boolean isSaveEegAndEyeBlinkingDataEnabled() {
return settingsSharedPreferences.get(SettingsSharedPreferences.saveEegAndEyeBlinkingData);
}
private String getHighAttentionVoiceString() {
return StringUtils.getStringFromResources(R.string.high_attention_acquired);
}
private String getHighMeditationVoiceString() {
return StringUtils.getStringFromResources(R.string.high_meditation_acquired);
}
private void executeAttentionTTS(int level) {
if (isVoiceFeedbackEnabled() && level > TTSThreshold) {
if (!activity.getTextToSpeech().isSpeaking()) {
activity.getTextToSpeech().speak(getHighAttentionVoiceString(), TextToSpeech.QUEUE_FLUSH, null);
}
}
}
private void executeMeditationTTS(int level) {
if (isVoiceFeedbackEnabled() && level > TTSThreshold) {
if (!activity.getTextToSpeech().isSpeaking()) {
activity.getTextToSpeech().speak(getHighMeditationVoiceString(), TextToSpeech.QUEUE_FLUSH, null);
}
}
}
private void executeAttentionDataSave(int level) {
if (isSaveEegAndEyeBlinkingDataEnabled()) {
databaseHandler.getSignalTableController().add(new Signal(TGDevice.MSG_ATTENTION, level));
}
}
private void executeMeditationDataSave(int level) {
if (isSaveEegAndEyeBlinkingDataEnabled()) {
databaseHandler.getSignalTableController().add(new Signal(TGDevice.MSG_MEDITATION, level));
}
}
private void executeBlinkDataSave(int level) {
if (isSaveEegAndEyeBlinkingDataEnabled()) {
databaseHandler.getSignalTableController().add(new Signal(TGDevice.MSG_BLINK, level));
}
}
private String getMessageForSignal(int level, int resourcesId) {
return StringUtils.getStringFromResources(resourcesId) + ": " + String.valueOf(level);
}
public void setAttentionLevel(int level) {
activity.getViewHolder().tvAttention.setText(getMessageForSignal(level,R.string.attention_level));
executeAttentionTTS(level);
executeAttentionDataSave(level);
}
public void setMeditationLevel(int level) {
activity.getViewHolder().tvMeditation.setText(getMessageForSignal(level,R.string.meditation_level));
executeMeditationTTS(level);
executeMeditationDataSave(level);
}
public void setBlinkLevel(int level) {
activity.getViewHolder().tvBlink.setText(getMessageForSignal(level,R.string.blink_level));
executeBlinkDataSave(level);
}
public void setRawData(int level) {
activity.getViewHolder().tvRawData.setText(getMessageForSignal(level,R.string.raw_data));
}
public void setWaveAlphaLow(int level) {
activity.getViewHolder().tvWaveAlphaLow.setText(getMessageForSignal(level,R.string.wave_alpha_low));
}
public void setWaveAlphaHigh(int level) {
activity.getViewHolder().tvWaveAlphaHigh.setText(getMessageForSignal(level,R.string.wave_alpha_high));
}
public void setWaveBetaLow(int level) {
activity.getViewHolder().tvWaveBetaLow.setText(getMessageForSignal(level,R.string.wave_beta_low));
}
public void setWaveBetaHigh(int level) {
activity.getViewHolder().tvWaveBetaHigh.setText(getMessageForSignal(level,R.string.wave_beta_high));
}
public void setWaveGammaLow(int level) {
activity.getViewHolder().tvWaveGammaLow.setText(getMessageForSignal(level,R.string.wave_gamma_low));
}
public void setWaveGammaMid(int level) {
activity.getViewHolder().tvWaveGammaMid.setText(getMessageForSignal(level,R.string.wave_gamma_mid));
}
public void setWaveDelta(int level) {
activity.getViewHolder().tvWaveDelta.setText(getMessageForSignal(level,R.string.wave_delta));
}
public void setWaveTheta(int level) {
activity.getViewHolder().tvWaveTheta.setText(getMessageForSignal(level,R.string.wave_theta));
}
}