// Created by plusminus on 6:20:06 PM - Feb 21, 2009
package org.androad.ui.settings;
import org.androad.R;
import org.androad.preferences.PreferenceConstants;
import org.androad.preferences.Preferences;
import org.androad.ui.AndNavBaseActivity;
import org.androad.ui.common.OnClickOnFocusChangedListenerAdapter;
import org.androad.ui.map.hud.HUDRegistry;
import org.androad.ui.map.hud.IHUDImpl;
import org.androad.ui.map.hud.IHUDImplVariation;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.ViewFlipper;
import android.widget.AdapterView.OnItemSelectedListener;
public class SettingsHUD extends AndNavBaseActivity implements PreferenceConstants {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private ViewFlipper mVariationFlipper;
private IHUDImpl[] mHUDImpls;
private IHUDImpl mCurrentHUDImpl;
private int mCurrentVariation;
private Spinner mSpinHUDImpls;
private ImageButton mIbtnVariationNext;
private ImageButton mIbtnVariationPrevious;
private TextView mTvVariationDescription;
private Animation mAnimSlideOutLeft;
private Animation mAnimSlideInRight;
private Animation mAnimSlideOutRight;
private Animation mAnimSlideInLeft;
// ===========================================================
// Constructors
// ===========================================================
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Preferences.applySharedSettings(this);
this.setContentView(R.layout.settings_hud);
this.mTvVariationDescription = (TextView)this.findViewById(R.id.tv_settings_hud_variation_description);
this.mVariationFlipper = (ViewFlipper)findViewById(R.id.flip_settings_hud_variations);
this.mAnimSlideInLeft = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
this.mAnimSlideOutRight = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
this.mAnimSlideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right);
this.mAnimSlideOutLeft = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
this.mSpinHUDImpls = (Spinner)this.findViewById(R.id.spin_settings_hud_implementations);
this.mIbtnVariationNext = (ImageButton)this.findViewById(R.id.ibtn_settings_hud_variation_next);
this.mIbtnVariationPrevious = (ImageButton)this.findViewById(R.id.ibtn_settings_hud_variation_previous);
initHUDSelectionViews();
applyTopButtonListeners();
initVariationSwitcher();
}
private void initHUDSelectionViews() {
this.mHUDImpls = HUDRegistry.getAll();
/* We need to convert the HudImpls to a String representation to show the in the Spinner. */
final String[] hudImplNames = new String[this.mHUDImpls.length];
for (int i = 0; i < this.mHUDImpls.length; i++) {
final IHUDImpl h = this.mHUDImpls[i];
hudImplNames[i] = getString(h.getNameResourceID());
}
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, hudImplNames);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
this.mSpinHUDImpls.setAdapter(adapter);
this.mSpinHUDImpls.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(final AdapterView<?> parent, final View view, final int position, final long id){
if(SettingsHUD.this.mCurrentHUDImpl.getID() != SettingsHUD.this.mHUDImpls[position].getID()){
SettingsHUD.this.mCurrentHUDImpl = SettingsHUD.this.mHUDImpls[position];
SettingsHUD.this.mCurrentVariation = 0;
Preferences.saveHUDImpl(SettingsHUD.this, SettingsHUD.this.mCurrentHUDImpl, IHUDImplVariation.VARIATION_DEFAULT_ID);
initVariationSwitcher();
}
}
@Override
public void onNothingSelected(final AdapterView<?> arg0) {
}
});
this.mIbtnVariationNext.setOnClickListener(new OnClickListener(){
@Override
public void onClick(final View arg0) {
SettingsHUD.this.mVariationFlipper.setInAnimation(SettingsHUD.this.mAnimSlideInLeft);
SettingsHUD.this.mVariationFlipper.setOutAnimation(SettingsHUD.this.mAnimSlideOutRight);
SettingsHUD.this.mCurrentVariation++;
SettingsHUD.this.mVariationFlipper.showNext();
SettingsHUD.this.refreshVariationNameAndFlipperButtons();
}
});
this.mIbtnVariationPrevious.setOnClickListener(new OnClickListener(){
@Override
public void onClick(final View arg0) {
SettingsHUD.this.mVariationFlipper.setInAnimation(SettingsHUD.this.mAnimSlideInRight);
SettingsHUD.this.mVariationFlipper.setOutAnimation(SettingsHUD.this.mAnimSlideOutLeft);
SettingsHUD.this.mCurrentVariation--;
SettingsHUD.this.mVariationFlipper.showPrevious();
SettingsHUD.this.refreshVariationNameAndFlipperButtons();
}
});
/* Finally select the HUD currently set. */
this.mCurrentHUDImpl = Preferences.getHUDImpl(this);
for(int i = 0; i < this.mHUDImpls.length; i++){
if(this.mHUDImpls[i].getID() == this.mCurrentHUDImpl.getID()){
this.mSpinHUDImpls.setSelection(i);
break;
}
}
this.mCurrentVariation = Preferences.getHUDImplVariationID(this);
}
private void initVariationSwitcher(){
this.mVariationFlipper.removeAllViews();
for (final IHUDImplVariation v : this.mCurrentHUDImpl.getVariations()) {
final ImageView iv = new ImageView(this);
iv.setImageResource(v.getScreenshotResourceID());
this.mVariationFlipper.addView(iv, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
}
this.refreshVariationNameAndFlipperButtons();
}
private void refreshVariationNameAndFlipperButtons(){
final boolean hasNextVariation = this.mCurrentVariation < this.mCurrentHUDImpl.getCountOfVariations() - 1;
this.mIbtnVariationNext.setEnabled(hasNextVariation);
final boolean hasPrevoiusVariation = this.mCurrentVariation > 0;
this.mIbtnVariationPrevious.setEnabled(hasPrevoiusVariation);
final IHUDImplVariation v = this.mCurrentHUDImpl.getVariations()[this.mCurrentVariation];
this.mTvVariationDescription.setText(v.getDescriptionStringID());
Preferences.saveHUDImpl(this, this.mCurrentHUDImpl, v);
this.mVariationFlipper.setDisplayedChild(this.mCurrentVariation);
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
private void applyTopButtonListeners() {
new OnClickOnFocusChangedListenerAdapter(this.findViewById(R.id.ibtn_settings_hud_close)){
@Override
public void onBoth(final View arg0, final boolean focused) {
if(SettingsHUD.super.mMenuVoiceEnabled && focused) {
MediaPlayer.create(SettingsHUD.this, R.raw.close).start();
}
}
// No onFocusChange, because there is no Quickinfo-Text
@Override
public void onClicked(final View me) {
SettingsHUD.this.finish();
}
};
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}