// Created by plusminus on 11:17:18 AM - Feb 27, 2009
package org.androad.ui.map.hud.impl.bigarrow;
import org.androad.R;
import org.androad.adt.UnitSystem;
import org.androad.osm.views.overlay.util.DirectionArrowDescriptor;
import org.androad.ui.map.hud.IHUDImpl;
import org.androad.ui.map.hud.IHUDImplVariation;
import org.androad.ui.map.hud.IHUDNextActionView;
import org.androad.ui.map.hud.IHUDRemainingSummaryView;
import org.androad.ui.map.hud.IHUDTurnDescriptionView;
import org.androad.ui.map.hud.impl.bigarrow.views.HUDNextActionView;
import org.androad.ui.map.hud.util.Util;
import org.androad.util.TimeUtils;
import org.androad.util.constants.Constants;
import android.graphics.Point;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class BigArrowHUDImpl implements IHUDImpl {
// ===========================================================
// Constants
// ===========================================================
public static final int ID = 2;
// ===========================================================
// Fields
// ===========================================================
private TextView mTvTurnDescription;
private TextView mTvTimeRemaining;
private TextView mTvLengthRemaining;
private HUDNextActionView mHUDNextActionView;
private DescriptionAndSummaryWrapper mDescriptionAndSummaryWrapper;
private IHUDNextActionView mHUDUpperNextActionDummyAdapter;
// ===========================================================
// Constructors
// ===========================================================
@Override
public void init(final View pRootView) {
this.mHUDNextActionView = (HUDNextActionView) pRootView.findViewById(R.id.hud_ddmap_bigarrow_nextaction);
this.mTvLengthRemaining = (TextView) pRootView.findViewById(R.id.hud_ddmap_bigarrow_restlength);
this.mTvTimeRemaining = (TextView) pRootView.findViewById(R.id.hud_ddmap_bigarrow_time);
this.mTvTurnDescription = (TextView) pRootView.findViewById(R.id.hud_ddmap_bigarrow_turndescription);
this.mDescriptionAndSummaryWrapper = new DescriptionAndSummaryWrapper();
this.mHUDUpperNextActionDummyAdapter = new IHUDNextActionView.IHUDNextActionViewAdapter();
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
@Override
public int getCountOfVariations() {
return VARIATIONS.length;
}
@Override
public int getDescriptionResourceID() {
return R.string.hud_bigarrow_description;
}
@Override
public int getID() {
return ID;
}
@Override
public int getNameResourceID() {
return R.string.hud_bigarrow_name;
}
@Override
public IHUDNextActionView getNextActionView() {
return this.mHUDNextActionView;
}
@Override
public IHUDRemainingSummaryView getRemainingSummaryView() {
return this.mDescriptionAndSummaryWrapper;
}
@Override
public IHUDTurnDescriptionView getTurnTurnDescriptionView() {
return this.mDescriptionAndSummaryWrapper;
}
@Override
public IHUDNextActionView getUpperNextActionView() {
return this.mHUDUpperNextActionDummyAdapter;
}
@Override
public IHUDImplVariation getVariation(final int pVariationID) throws IllegalArgumentException {
return Util.getVariation(VARIATIONS, pVariationID);
}
@Override
public IHUDImplVariation[] getVariations() {
return VARIATIONS;
}
@Override
public void invalidateViews() {
}
@Override
public void setUpperNextActionViewNecessary(final boolean pNecessary) {
/* Nothing. */
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
private class DescriptionAndSummaryWrapper implements IHUDRemainingSummaryView, IHUDTurnDescriptionView {
private UnitSystem mUnitSystem = UnitSystem.METRIC;
protected boolean mArrivalTimeInsteadOfRestTime = false;
@Override
public void setDataConnectionStrength(final int dataConnectionStrength) {
/* Not displayed. */
}
@Override
public void setEstimatedRestSeconds(final int pEstimatedRestSeconds) {
final int estimatedTimeLeftMinutes;
if(pEstimatedRestSeconds == Constants.NOT_SET) {
return;
}
estimatedTimeLeftMinutes = (pEstimatedRestSeconds + 15)/ 60; /* The last 15 seconds will show "0:00" */
if(this.mArrivalTimeInsteadOfRestTime){
BigArrowHUDImpl.this.mTvTimeRemaining.setText(TimeUtils.getTimeString(estimatedTimeLeftMinutes));
}else{
BigArrowHUDImpl.this.mTvTimeRemaining.setText(TimeUtils.getTimeDurationString(estimatedTimeLeftMinutes));
}
}
@Override
public void setGPSConnectionStrength(final int pConnectionStrength) {
/* Not displayed. */
}
@Override
public void setMetersDrivenSession(final int pMetersDriven) {
final String[] pParts = this.mUnitSystem.getDistanceString(pMetersDriven, null);
BigArrowHUDImpl.this.mTvLengthRemaining.setText(pParts[UnitSystem.DISTSTRINGS_DIST_ID] + " " + pParts[UnitSystem.DISTSTRINGS_UNIT_ID]);
}
@Override
public void onClick() {
this.mArrivalTimeInsteadOfRestTime = !this.mArrivalTimeInsteadOfRestTime;
}
@Override
public void recycle() {
}
@Override
public void reset() {
BigArrowHUDImpl.this.mTvLengthRemaining.setText("");
BigArrowHUDImpl.this.mTvTimeRemaining.setText("");
BigArrowHUDImpl.this.mTvTurnDescription.setText("");
}
@Override
public void setDisplayQuality(final int pDisplayQuality) {
/* Nothing, because the views are TextViews only. */
}
@Override
public void setDistance(final int pMeterDistance) {
if(pMeterDistance != Constants.NOT_SET){
final String[] pParts = this.mUnitSystem.getDistanceString(pMeterDistance, null);
BigArrowHUDImpl.this.mTvLengthRemaining.setText(pParts[UnitSystem.DISTSTRINGS_DIST_ID] + " " + pParts[UnitSystem.DISTSTRINGS_UNIT_ID]);
}
}
@Override
public void setUnitSystem(final UnitSystem pUnitSystem) {
this.mUnitSystem = pUnitSystem;
}
@Override
public void setRemainingSummaryOnClickListener(final OnClickListener pOnClickListener) {
BigArrowHUDImpl.this.mTvTimeRemaining.setOnClickListener(pOnClickListener);
BigArrowHUDImpl.this.mTvLengthRemaining.setOnClickListener(pOnClickListener);
}
@Override
public String getTurnDescription() {
return BigArrowHUDImpl.this.mTvTurnDescription.getText().toString();
}
@Override
public void setTurnDescription(final String pTurnDescription) {
BigArrowHUDImpl.this.mTvTurnDescription.setText(pTurnDescription);
}
@Override
public void setTurnDescriptionOnClickListener(final OnClickListener pOnClickListener) {
BigArrowHUDImpl.this.mTvTurnDescription.setOnClickListener(pOnClickListener);
}
}
private static final IHUDImplVariation[] VARIATIONS = new IHUDImplVariation[]{
new IHUDImplVariation(){
@Override
public int getLayoutID() {
return R.layout.ddmap_hud_bigarrow_default;
}
@Override
public int getVariationID() {
return VARIATION_DEFAULT_ID;
}
@Override
public DirectionArrowDescriptor getDirectionArrowDescriptor() {
return new DirectionArrowDescriptor(new Point(20,20), R.drawable.hud_basic_variation_default_direction_arrow);
}
@Override
public int getDescriptionStringID() {
return R.string.hud_bigarrow_variation_default;
}
@Override
public int getScreenshotResourceID() {
return R.drawable.hud_bigarrow_variation_default_sample;
}
},
new IHUDImplVariation(){
@Override
public int getLayoutID() {
return R.layout.ddmap_hud_bigarrow_variation_1;
}
@Override
public int getVariationID() {
return VARIATION_DEFAULT_ID + 1;
}
@Override
public DirectionArrowDescriptor getDirectionArrowDescriptor() {
return new DirectionArrowDescriptor(new Point(20,20), R.drawable.hud_basic_variation_default_direction_arrow);
}
@Override
public int getDescriptionStringID() {
return R.string.hud_bigarrow_variation_1;
}
@Override
public int getScreenshotResourceID() {
return R.drawable.hud_bigarrow_variation_1_sample;
}
}
};
}