package be.lukin.android.babble;
import be.lukin.android.babble.provider.Phrase;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.speech.tts.TextToSpeech;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
public class PhrasesActivity extends SubActivity {
private static final String SORT_ORDER_TEXT = Phrase.Columns.TEXT + " ASC";
private static final String SORT_ORDER_LANG = Phrase.Columns.LANG + " ASC";
private static final String SORT_ORDER_DIST = Phrase.Columns.DIST + " DESC";
private static final String SORT_ORDER_TIMESTAMP = Phrase.Columns.TIMESTAMP + " DESC";
private static final int TTS_DATA_CHECK_CODE = 1;
private TextToSpeech mTts;
private SharedPreferences mPrefs;
private static String mCurrentSortOrder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.phrases);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_DATA_CHECK_CODE);
}
@Override
public void onStop() {
super.onStop();
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString(getString(R.string.prefCurrentSortOrder), mCurrentSortOrder);
editor.commit();
}
@Override
public void onDestroy() {
super.onDestroy();
// Stop TTS
if (mTts != null) {
mTts.shutdown();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.phrases, menu);
// Indicate the current sort order by checking the corresponding radio button
int id = mPrefs.getInt(getString(R.string.prefCurrentSortOrderMenu), R.id.menuMainSortByTimestamp);
MenuItem menuItem = menu.findItem(id);
// TODO: check why null can happen
if (menuItem != null) {
menuItem.setChecked(true);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menuMainSortByTimestamp:
sort(item, SORT_ORDER_TIMESTAMP);
return true;
case R.id.menuMainSortByText:
sort(item, SORT_ORDER_TEXT);
return true;
case R.id.menuMainSortByLang:
sort(item, SORT_ORDER_LANG);
return true;
case R.id.menuMainSortByDist:
sort(item, SORT_ORDER_DIST);
return true;
case R.id.menuLanguagesPlot:
LanguagesBarChart lbc = new LanguagesBarChart();
Intent intent = lbc.execute(this);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TTS_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
} else {
// TODO: inform the user about the TTS problem
Log.e(getString(R.string.errorTtsInitError));
}
}
});
} else {
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
public TextToSpeech getTts() {
return mTts;
}
private void sort(MenuItem item, String sortOrder) {
mCurrentSortOrder = sortOrder;
CursorLoaderListFragment fragment = (CursorLoaderListFragment) getFragmentManager().findFragmentById(R.id.list);
fragment.changeSortOrder(sortOrder);
item.setChecked(true);
// Save the ID of the selected item.
// TODO: ideally this should be done in onDestory
SharedPreferences.Editor editor = mPrefs.edit();
editor.putInt(getString(R.string.prefCurrentSortOrderMenu), item.getItemId());
editor.commit();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.cm_main, menu);
}
}