// Created by plusminus on 7:56:23 PM - Feb 23, 2009
package org.androad.ui.map.hud.impl.bigarrow.views;
import org.androad.R;
import org.androad.adt.UnitSystem;
import org.androad.ui.map.hud.IHUDNextActionView;
import org.androad.util.constants.Constants;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ImageView.ScaleType;
public class HUDNextActionView extends LinearLayout implements IHUDNextActionView{
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final TextView mTvTurnDistance;
private final ImageView mIvTurnAngle;
private UnitSystem mUnitSystem = UnitSystem.METRIC;
// ===========================================================
// Constructors
// ===========================================================
public HUDNextActionView(final Context context, final AttributeSet attrs) {
super(context, attrs);
this.setOrientation(LinearLayout.VERTICAL);
/* The arrowView. */
this.mIvTurnAngle = new ImageView(context);
this.mIvTurnAngle.setScaleType(ScaleType.CENTER_INSIDE);
final LayoutParams arrowLayoutParams = new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
arrowLayoutParams.weight = 1;
this.addView(this.mIvTurnAngle, arrowLayoutParams);
/* The distanceView. */
this.mTvTurnDistance = new TextView(context);
final LayoutParams distanceLayoutParams = new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
this.mTvTurnDistance.setGravity(Gravity.CENTER);
this.mTvTurnDistance.setTextSize(32);
this.mTvTurnDistance.setTextColor(Color.BLACK);
this.addView(this.mTvTurnDistance, distanceLayoutParams);
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
@Override
public void setNextActionOnClickListener(final OnClickListener pOnClickListener) {
this.setOnClickListener(pOnClickListener);
}
@Override
public void setCurrentMeterSpeed(final float aMeterSpeed) {
final int currentSpeed = (int)(aMeterSpeed * this.mUnitSystem.mScaleToMetersPerSecond);
this.mTvTurnDistance.setText(currentSpeed + this.mUnitSystem.mAbbrKilometersPerHourScale);
}
@Override
public void setTurnAngle(final float angle) {
this.mIvTurnAngle.setImageResource(getArrowResourceIDFromAngle((int)angle));
}
@Override
public void showTargetReached() {
this.mIvTurnAngle.setImageResource(R.drawable.flag_destination_big);
}
@Override
public void onClick() {
/* Nothing */
}
@Override
public void recycle() {
/* Nothing. */
}
@Override
public void reset() {
this.mTvTurnDistance.setText("");
}
@Override
public void setDisplayQuality(final int displayQuality) {
/* Nothing as we are using common views. */
}
@Override
public void setDistance(final int pMeterDistance) {
if(pMeterDistance != Constants.NOT_SET){
final String[] values = this.mUnitSystem.getDistanceString(pMeterDistance, null);
this.mTvTurnDistance.setText(values[UnitSystem.DISTSTRINGS_DIST_ID] + " " + values[UnitSystem.DISTSTRINGS_UNIT_ID]);
}
}
@Override
public void setUnitSystem(final UnitSystem pUnitSystem) {
this.mUnitSystem = pUnitSystem;
}
// ===========================================================
// Methods
// ===========================================================
protected static final int getArrowResourceIDFromAngle(final int turnAngle) {
if(turnAngle > 60) {
return R.drawable.turn_left_90_big;
} else if(turnAngle > 35) {
return R.drawable.turn_left_45_big;
} else if(turnAngle > 15) {
return R.drawable.turn_left_25_big;
} else if(turnAngle <= 15 && turnAngle >= -15) {
return R.drawable.turn_straight_big;
} else if(turnAngle > -35) {
return R.drawable.turn_right_25_big;
} else if(turnAngle > -60) {
return R.drawable.turn_right_45_big;
} else {
return R.drawable.turn_right_90_big;
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}