//Created by plusminus on 13:59:14 - 12.02.2008 package org.androad.ui.sd; import org.androad.R; import org.androad.preferences.Preferences; import org.androad.ui.AndNavBaseActivity; import org.androad.ui.common.OnClickOnFocusChangedListenerAdapter; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnKeyListener; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.Toast; public class SDStreetNumber extends AndNavBaseActivity { // =========================================================== // Final Fields // =========================================================== /* REQUEST-CODES for SubActivities. */ protected static final int REQUESTCODE_RESOLVER = 0x1737; // =========================================================== // Fields // =========================================================== protected EditText streetNumberEditText; protected Bundle bundleCreatedWith; // =========================================================== // Constructors // =========================================================== /** Called when the activity is first created. */ @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); Preferences.applySharedSettings(this); setContentView(R.layout.sd_streetnumber); /* 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.streetNumberEditText = (EditText)findViewById(R.id.et_sd_streetnumber_numberentered); this.streetNumberEditText.setInputType(EditorInfo.TYPE_CLASS_NUMBER); InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(this.streetNumberEditText, InputMethodManager.SHOW_FORCED); this.applyTopButtonListeners(); if(super.mMenuVoiceEnabled) { MediaPlayer.create(this, R.raw.enter_a_streetnumber).start(); } } @Override protected void onDestroy() { InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.hideSoftInputFromWindow(this.streetNumberEditText.getWindowToken(), 0); super.onDestroy(); } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @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 // =========================================================== private void advanceToNextScreen(final boolean skipThis) { if(!skipThis && this.streetNumberEditText.getText().length() == 0){ Toast.makeText(this, R.string.toast_sd_streetnumber_empty, Toast.LENGTH_SHORT).show(); }else{ final String streetNumber = SDStreetNumber.this.streetNumberEditText.getText().toString(); if(skipThis){ /* Remove Info from the bundle that may be included in it. */ SDStreetNumber.this.bundleCreatedWith.remove(EXTRAS_STREETNUMBER_ID); }else{ if(streetNumber.length() == 0){ Toast.makeText(this, R.string.toast_sd_streetnumber_empty, Toast.LENGTH_SHORT).show(); return; } if (SDStreetNumber.super.mMenuVoiceEnabled) { MediaPlayer.create(SDStreetNumber.this, R.raw.ok).start(); } /* Add the StreetNumber to the Bundle to be passed further. */ SDStreetNumber.this.bundleCreatedWith.putString(EXTRAS_STREETNUMBER_ID, streetNumber); } /* Create an Intent to open the Map as a SubActivity. */ final Intent resolveIntent = new Intent(SDStreetNumber.this, SDResolver.class); /* Pass the Bundle this Activity was created with further. */ resolveIntent.putExtras(SDStreetNumber.this.bundleCreatedWith); startActivityForResult(resolveIntent, REQUESTCODE_RESOLVER); } } protected void applyTopButtonListeners() { this.streetNumberEditText.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(final View arg0, final int arg1, final KeyEvent ke) { if(ke.getAction() == KeyEvent.ACTION_DOWN){ if(ke.getKeyCode() == KeyEvent.KEYCODE_ENTER || ke.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER){ if(SDStreetNumber.super.mMenuVoiceEnabled) { MediaPlayer.create(SDStreetNumber.this, R.raw.ok).start(); } advanceToNextScreen(false); return true; } } return false; } }); /* Set OnClickListener for Skip-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_sd_streetnumber_skip)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDStreetNumber.super.mMenuVoiceEnabled) { MediaPlayer.create(SDStreetNumber.this, R.raw.skip).start(); } } @Override public void onClicked(final View me) { advanceToNextScreen(true); } }; /* Set OnClickListener for Back-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_sd_streetnumber_back)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDStreetNumber.super.mMenuVoiceEnabled) { MediaPlayer.create(SDStreetNumber.this, R.raw.close).start(); } } @Override public void onClicked(final View me) { /* Back one level. */ SDStreetNumber.this.setResult(SUBACTIVITY_RESULTCODE_UP_ONE_LEVEL); SDStreetNumber.this.finish(); } }; /* Set OnClickListener for Close-Button. */ new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_sd_streetnumber_close)){ @Override public void onBoth(final View me, final boolean focused) { if(focused && SDStreetNumber.super.mMenuVoiceEnabled) { MediaPlayer.create(SDStreetNumber.this, R.raw.close).start(); } } @Override public void onClicked(final View me) { /* Set ResultCode that the calling * activity knows that we want * to go back to the Base-Menu */ SDStreetNumber.this.setResult(SUBACTIVITY_RESULTCODE_CHAINCLOSE_QUITTED); SDStreetNumber.this.finish(); } }; } // =========================================================== // Inner and Anonymous Classes // =========================================================== }