// Created by plusminus on 00:45:35 - 25.10.2008 package org.androad.ui.sd; import java.util.ArrayList; import java.util.List; import org.androad.R; import org.androad.adt.DBPOI; import org.androad.db.DBManager; import org.androad.db.DataBaseException; import org.androad.preferences.Preferences; import org.androad.ui.AndNavBaseActivity; import org.androad.ui.common.InlineAutoCompleterConstant; import org.androad.ui.common.OnClickOnFocusChangedListenerAdapter; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.text.method.TextKeyListener; import android.text.method.TextKeyListener.Capitalize; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.Toast; public class SDPOIEntry extends AndNavBaseActivity{ // =========================================================== // Final Fields // =========================================================== /* REQUEST-CODES for SubActivities. */ protected static final int REQUESTCODE_SD_POISEARCHLIST = 0; protected static final int MENU_WIPE_ID = Menu.FIRST; // =========================================================== // Fields // =========================================================== protected EditText poiEditText; protected Bundle bundleCreatedWith; private InlineAutoCompleterConstant mAutoCompleter; // =========================================================== // Constructors // =========================================================== /** Called when the activity is first created. */ @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle, true); // We need DataState-Info Preferences.applySharedSettings(this); this.setContentView(R.layout.sd_poi_entry); /* Save the Extras Bundle of the Intent this Activity * was created with, because it contains the Information, * that will finally be used for a GeoCode API. */ this.bundleCreatedWith = this.getIntent().getExtras(); this.poiEditText = (EditText)findViewById(R.id.et_sd_poi_entry_query); this.poiEditText.setKeyListener(new TextKeyListener(Capitalize.WORDS,false)); InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(this.poiEditText, InputMethodManager.SHOW_FORCED); this.applyTopMenuButtonListeners(); this.applyOkButtonListener(); this.applyAutoCompleteListeners(); if(super.mMenuVoiceEnabled) { MediaPlayer.create(this, R.raw.enter_a_streetname).start(); } } @Override protected void onDestroy() { InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.hideSoftInputFromWindow(this.poiEditText.getWindowToken(), 0); super.onDestroy(); } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public boolean onCreateOptionsMenu(final Menu menu) { menu.add(0, MENU_WIPE_ID, Menu.NONE, R.string.menu_sd_poi_wipe).setIcon(R.drawable.wipe).setAlphabeticShortcut('w'); return super.onCreateOptionsMenu(menu); } @Override public boolean onMenuItemSelected(final int featureId, final MenuItem item) { switch(item.getItemId()){ case MENU_WIPE_ID: try { DBManager.clearPOIHistory(this); this.mAutoCompleter.clearStatic(); } catch (final DataBaseException e) { Log.e(DEBUGTAG, "DBError", e); } return true; } return super.onMenuItemSelected(featureId, item); } @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { switch(resultCode){ case SUBACTIVITY_RESULTCODE_CHAINCLOSE_SUCCESS: this.setResult(SUBACTIVITY_RESULTCODE_CHAINCLOSE_SUCCESS, data); this.finish(); break; case SUBACTIVITY_RESULTCODE_CHAINCLOSE_QUITTED: this.setResult(SUBACTIVITY_RESULTCODE_CHAINCLOSE_QUITTED, data); this.finish(); break; } /* Finally call the super()-method. */ super.onActivityResult(requestCode, resultCode, data); } // =========================================================== // Methods // =========================================================== protected void advanceToNextScreen() { if(this.poiEditText.getText().length() == 0){ Toast.makeText(this, R.string.toast_sd_poi_empty, Toast.LENGTH_SHORT).show(); return; } // TODO REMOVE COMENTS, when local search works. // final UnitSystem us = Preferences.getUnitSystem(this); // // final int[] valDist; // switch(us){ // case IMPERIAL: // valDist = getResources().getIntArray(R.array.poi_search_radius_ors_imperial); // break; // case METRIC: // default: // valDist = getResources().getIntArray(R.array.poi_search_radius_ors_metric); // } // final String[] valStr = new String[valDist.length]; // // for (int i = 0; i < valDist.length; i++){ // final int cur = valDist[i]; // if(cur == SDPOISearchList.POISEARCH_RADIUS_GLOBAL){ // valStr[i] = getString(R.string.poi_search_radius_global); // } else { // final String[] distStringParts = us.getDistanceString(cur, null); // valStr[i] = distStringParts[UnitSystem.DISTSTRINGS_DIST_ID] + distStringParts[UnitSystem.DISTSTRINGS_UNIT_ID]; // } // } // // new AlertDialog.Builder(this) // .setTitle(R.string.choose_search_radius) // .setSingleChoiceItems(valStr, 3, new DialogInterface.OnClickListener(){ // @Override // public void onClick(final DialogInterface d, final int which) { // d.dismiss(); final Intent favIntent = new Intent(SDPOIEntry.this, SDPOISearchList.class); // ........................................ valDist[which]); SDPOIEntry.this.bundleCreatedWith.putInt(SDPOISearchList.EXTRAS_POISEARCH_RADIUS, SDPOISearchList.POISEARCH_RADIUS_GLOBAL); SDPOIEntry.this.bundleCreatedWith.putInt(SDPOISearchList.EXTRAS_POISEARCH_MODE, SDPOISearchList.EXTRAS_POISEARCH_MODE_GOOGLE_FREEFORM_SEARCH); SDPOIEntry.this.bundleCreatedWith.putString(SDPOISearchList.EXTRAS_POISEARCH_QUERY, SDPOIEntry.this.poiEditText.getText().toString()); favIntent.putExtras(SDPOIEntry.this.bundleCreatedWith); SDPOIEntry.this.startActivityForResult(favIntent, REQUESTCODE_SD_POISEARCHLIST); // } // }).create().show(); } protected void applyAutoCompleteListeners() { try{ final List<DBPOI> usedPOIs = DBManager.getPOIHistory(this); final ArrayList<String> usedPOIStrings = new ArrayList<String>(usedPOIs.size()); for(final DBPOI poi : usedPOIs) { usedPOIStrings.add(poi.getName()); } this.mAutoCompleter = new InlineAutoCompleterConstant(this.poiEditText, usedPOIStrings, false){ @Override public boolean onEnter() { SDPOIEntry.this.advanceToNextScreen(); return true; } }; } catch (final DataBaseException e) { // Log.e(DEBUGTAG, "Error on loading POIs", e); } } protected void applyOkButtonListener() { /* Set Listener for OK-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.btn_sd_poi_entry_ok)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDPOIEntry.super.mMenuVoiceEnabled) { MediaPlayer.create(SDPOIEntry.this, R.raw.ok).start(); } } @Override public void onClicked(final View me) { SDPOIEntry.this.advanceToNextScreen(); } }; } protected void applyTopMenuButtonListeners() { /* Set Listener for Back-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_sd_poi_entry_back)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDPOIEntry.super.mMenuVoiceEnabled) { MediaPlayer.create(SDPOIEntry.this, R.raw.close).start(); } } @Override public void onClicked(final View me) { /* Back one level. */ SDPOIEntry.this.setResult(SUBACTIVITY_RESULTCODE_UP_ONE_LEVEL); SDPOIEntry.this.finish(); } }; /* Set Listener for Close-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_sd_poi_entry_close)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDPOIEntry.super.mMenuVoiceEnabled) { MediaPlayer.create(SDPOIEntry.this, R.raw.close).start(); } } @Override public void onClicked(final View me) { /* Set RsultCode that the calling * activity knows that we want * to go back to the Base-Menu */ SDPOIEntry.this.setResult(SUBACTIVITY_RESULTCODE_CHAINCLOSE_QUITTED); SDPOIEntry.this.finish(); } }; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }