//Created by plusminus on 19:47:09 - 01.02.2008 package org.androad.ui; import org.androad.R; import org.androad.preferences.Preferences; import org.androad.ui.common.CommonCallbackAdapter; import org.androad.ui.common.CommonDialogFactory; import org.androad.ui.common.OnClickOnFocusChangedListenerAdapter; import org.androad.ui.map.OpenStreetDDMap; import org.androad.ui.map.WhereAmIMap; import org.androad.ui.sd.SDMainChoose; import org.androad.ui.sd.SDFavorites; import org.androad.ui.settings.SettingsMenu; import org.androad.ui.settings.SettingsORSServer; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.view.KeyEvent; import android.view.MenuItem; import android.view.View; import android.view.Window; public class Menu extends AndNavGPSActivity { // =========================================================== // Final Fields // =========================================================== /* REQUEST-CODES for SubActivities. */ private static final int REQUESTCODE_SETTINGS = 0x1337; private static final int REQUESTCODE_SD_MAINCHOOSE = REQUESTCODE_SETTINGS + 1; private static final int REQUESTCODE_WHEREAMI = REQUESTCODE_SD_MAINCHOOSE + 1; private static final int REQUESTCODE_FAVORITES = REQUESTCODE_WHEREAMI + 1; private static final int REQUESTCODE_SERVER_CHOOSE = REQUESTCODE_FAVORITES + 1; private static final int REQUESTCODE_ABOUT = REQUESTCODE_SERVER_CHOOSE + 1; private static final int REQUESTCODE_TTS_DATA_CHECK_CODE = REQUESTCODE_ABOUT + 1; private static final int MENU_ABOUT_ID = android.view.Menu.FIRST; private static final int MENU_VERSIONINFO_ID = MENU_ABOUT_ID + 1; private static final int DIALOG_SHOW_VERSIONINFO = 0; private static final int DIALOG_SHOW_TTS_INSTALL = DIALOG_SHOW_VERSIONINFO + 1; // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== /** Called when the activity is first created. */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); Preferences.applySharedSettings(this); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(R.layout.menu); this.findViewById(R.id.ibtn_whereami).requestFocus(); this.applyMenuButtonListeners(); findViewById(R.id.ibtn_whereami).setSoundEffectsEnabled(true); findViewById(R.id.ibtn_searchdestination).setSoundEffectsEnabled(false); /* Check if TTS is installed and the dialog was not permanently dismissed. */ if(Preferences.showTTSNotInstalledInfo(this)){ try{ Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); startActivityForResult(checkIntent, REQUESTCODE_TTS_DATA_CHECK_CODE); }catch(Throwable t){ } } } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods // =========================================================== private void applyMenuButtonListeners() { /* Set OnClickListener for Where-am-I-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_whereami)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { MediaPlayer.create(Menu.this, R.raw.where_am_i).start(); } } } @Override public void onClicked(final View v) { startWhereAmIActivity(); } }; /* Set OnClickListener for Search-Destination-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_searchdestination)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { MediaPlayer.create(Menu.this, R.raw.search_destination).start(); } } } @Override public void onClicked(final View v) { startSearchDestinationActivity(); } }; /* Set OnClickListener for Favorites-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_favorites)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { //MediaPlayer.create(Menu.this, R.raw.favorites).start(); } } } @Override public void onClicked(final View v) { startFavoritesActivity(); } }; /* Set OnClickListener for Settings-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_settings)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { MediaPlayer.create(Menu.this, R.raw.settings).start(); } } } @Override public void onClicked(final View v) { startSettingsActivity(); } }; /* Set OnClickListener for Server-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_server)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { //MediaPlayer.create(Menu.this, R.raw.server).start(); } } } @Override public void onClicked(final View v) { startServerActivity(); } }; /* Set OnClickListener for Exit-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_quit)){ @Override public void onBoth(final View v, final boolean justGotFocus) { if(justGotFocus){ if(Menu.super.mMenuVoiceEnabled) { MediaPlayer.create(Menu.this, R.raw.quit).start(); } } } @Override public void onClicked(final View v) { Menu.this.finish(); } }; } // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public boolean onKeyDown(final int keyCode, final KeyEvent event) { switch(keyCode){ case KeyEvent.KEYCODE_F: // Favorites startFavoritesActivity(); break; case KeyEvent.KEYCODE_W: // Where am I startWhereAmIActivity(); break; case KeyEvent.KEYCODE_D: // Search destination startSearchDestinationActivity(); break; case KeyEvent.KEYCODE_S: // Server startServerActivity(); break; case KeyEvent.KEYCODE_C: // Config (aka Settings) startSettingsActivity(); break; case KeyEvent.KEYCODE_Q: // Quit this.finish(); break; } return super.onKeyDown(keyCode, event); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { switch(requestCode){ case REQUESTCODE_TTS_DATA_CHECK_CODE: if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) { // success, TTS is available } else { showDialog(DIALOG_SHOW_TTS_INSTALL); } break; } } @Override public boolean onCreateOptionsMenu(final android.view.Menu menu) { menu.add(0, MENU_VERSIONINFO_ID, android.view.Menu.NONE, getString(R.string.versioninfo)).setIcon(R.drawable.hardhat); menu.add(1, MENU_ABOUT_ID, android.view.Menu.NONE, getString(R.string.about)).setIcon(R.drawable.questionmark_small); return true; } @Override protected Dialog onCreateDialog(final int id) { switch(id){ case DIALOG_SHOW_TTS_INSTALL: return new AlertDialog.Builder(this) .setMessage(R.string.tts_not_installed_message) .setTitle(R.string.tts_not_installed_title) .setIcon(R.drawable.information) .setPositiveButton(R.string.install, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface pDialog, int pWhich) { // missing data, install it Intent installIntent = new Intent(); installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); startActivity(installIntent); } }) .setNeutralButton(R.string.cancel, new DialogInterface.OnClickListener(){ @Override public void onClick(final DialogInterface d, final int which) { d.dismiss(); } }) .setNegativeButton(R.string.nevershowagain, new DialogInterface.OnClickListener(){ @Override public void onClick(final DialogInterface d, final int which) { d.dismiss(); Preferences.saveShowTTSNotInstalledInfo(Menu.this, false); } }).create(); case DIALOG_SHOW_VERSIONINFO: return CommonDialogFactory.createVersionInfoDialog(this, new CommonCallbackAdapter<Void>(){ @Override public void onSuccess(final Void result) { // Nothing } }); default: return null; } } @Override public boolean onMenuItemSelected(final int featureId, final MenuItem item) { switch (item.getItemId()) { case MENU_ABOUT_ID: final Intent aboutIntent = new Intent(this, About.class); startActivityForResult(aboutIntent, REQUESTCODE_ABOUT); return true; case MENU_VERSIONINFO_ID: showDialog(DIALOG_SHOW_VERSIONINFO); return true; } return super.onMenuItemSelected(featureId, item); } private void startSearchDestinationActivity() { /* Load SDMainChoose-Activity. */ final Intent sdCountryIntent = new Intent(Menu.this, SDMainChoose.class); final Bundle b = new Bundle(); b.putInt(MODE_SD, MODE_SD_DESTINATION); sdCountryIntent.putExtras(b); Menu.this.startActivityForResult(sdCountryIntent, REQUESTCODE_SD_MAINCHOOSE); } private void startSettingsActivity() { /* Load Settings-Activity. */ final Intent settingsIntent = new Intent(Menu.this, SettingsMenu.class); Menu.this.startActivityForResult(settingsIntent, REQUESTCODE_SETTINGS); } private void startWhereAmIActivity() { /* Load WhereAmI-MapActivity. */ final Intent whereAmIIntent = new Intent(Menu.this, WhereAmIMap.class); Menu.this.startActivityForResult(whereAmIIntent, REQUESTCODE_WHEREAMI); } private void startFavoritesActivity() { /* Load Favorites-Activity. */ final Intent favIntent = new Intent(Menu.this, SDFavorites.class); final Bundle bundleCreatedWith = favIntent.getExtras(); favIntent.putExtra(SDFavorites.EXTRAS_FAVORITES_REFER, true); Menu.this.startActivityForResult(favIntent, REQUESTCODE_FAVORITES); } private void startServerActivity() { /* Load ServerActivity. */ final Intent serverIntent = new Intent(Menu.this, SettingsORSServer.class); Menu.this.startActivityForResult(serverIntent, REQUESTCODE_SERVER_CHOOSE); } @Override protected void onLocationChanged() { // Nothing, we just want GPS enabled :) } @Override protected void onLocationLost() { // Nothing, we just want GPS enabled :) } }