// Created by plusminus on 6:43:53 PM - Feb 23, 2009
package org.androad.ui.map.hud.impl.mavoric;
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.mavoric.views.HUDNextActionView;
import org.androad.ui.map.hud.impl.mavoric.views.HUDUpperNextActionView;
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 MavoricHUDImpl implements IHUDImpl {
// ===========================================================
// Constants
// ===========================================================
public static final int ID = 1;
// ===========================================================
// Fields
// ===========================================================
private TextView mTvTurnDescription;
private TextView mTvTimeRemaining;
private TextView mTvLengthRemaining;
private HUDNextActionView mHUDNextActionView;
private HUDUpperNextActionView mHUDUpperNextActionView;
private DescriptionAndSummaryWrapper mDescriptionAndSummaryWrapper;
// ===========================================================
// Constructors
// ===========================================================
@Override
public void init(final View pRootView) {
this.mHUDNextActionView = (HUDNextActionView) pRootView.findViewById(R.id.hud_ddmap_mavoric_nextaction);
this.mHUDUpperNextActionView = (HUDUpperNextActionView) pRootView.findViewById(R.id.hud_ddmap_mavoric_uppernextaction);
this.mTvLengthRemaining = (TextView) pRootView.findViewById(R.id.hud_ddmap_mavoric_restlength);
this.mTvTimeRemaining = (TextView) pRootView.findViewById(R.id.hud_ddmap_mavoric_time);
this.mTvTurnDescription = (TextView) pRootView.findViewById(R.id.hud_ddmap_mavoric_turndescription);
this.mDescriptionAndSummaryWrapper = new DescriptionAndSummaryWrapper();
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
@Override
public int getCountOfVariations() {
return VARIATIONS.length;
}
@Override
public int getDescriptionResourceID() {
return R.string.hud_mavoric_description;
}
@Override
public int getID() {
return ID;
}
@Override
public int getNameResourceID() {
return R.string.hud_mavoric_name;
}
@Override
public IHUDNextActionView getNextActionView() {
return this.mHUDNextActionView;
}
@Override
public IHUDNextActionView getUpperNextActionView() {
return this.mHUDUpperNextActionView;
}
@Override
public IHUDRemainingSummaryView getRemainingSummaryView() {
return this.mDescriptionAndSummaryWrapper;
}
@Override
public IHUDTurnDescriptionView getTurnTurnDescriptionView() {
return this.mDescriptionAndSummaryWrapper;
}
@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 necessary) {
/* Nothing. */
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
private class DescriptionAndSummaryWrapper implements IHUDRemainingSummaryView, IHUDTurnDescriptionView{
private UnitSystem mUnitSystem;
protected boolean mArrivalTimeInsteadOfRestTime = false;
private int mDrivenInSession;
@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){
MavoricHUDImpl.this.mTvTimeRemaining.setText(TimeUtils.getTimeString(estimatedTimeLeftMinutes));
}else{
MavoricHUDImpl.this.mTvTimeRemaining.setText(TimeUtils.getTimeDurationString(estimatedTimeLeftMinutes));
}
}
@Override
public void setGPSConnectionStrength(final int pConnectionStrength) {
/* Not displayed. */
}
@Override
public void setMetersDrivenSession(final int pMetersDriven) {
if(pMetersDriven == Constants.NOT_SET) {
return;
}
this.mDrivenInSession = (int)(pMetersDriven * this.mUnitSystem.mScaleToMeters);
final String[] pParts = this.mUnitSystem.getDistanceString(pMetersDriven, null);
MavoricHUDImpl.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() {
MavoricHUDImpl.this.mTvLengthRemaining.setText("");
MavoricHUDImpl.this.mTvTimeRemaining.setText("");
MavoricHUDImpl.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) {
return;
}
final String[] pParts = this.mUnitSystem.getDistanceString(pMeterDistance, null);
MavoricHUDImpl.this.mTvLengthRemaining.setText(pParts[UnitSystem.DISTSTRINGS_DIST_ID] + " " + pParts[UnitSystem.DISTSTRINGS_UNIT_ID]);
}
@Override
public void setUnitSystem(final UnitSystem pUnitSystem) {
this.mUnitSystem = pUnitSystem;
this.setMetersDrivenSession(this.mDrivenInSession);
// TODO More like the one above
}
@Override
public String getTurnDescription() {
return MavoricHUDImpl.this.mTvTurnDescription.getText().toString();
}
@Override
public void setTurnDescription(final String pTurnDescription) {
MavoricHUDImpl.this.mTvTurnDescription.setText(pTurnDescription);
}
@Override
public void setTurnDescriptionOnClickListener(final OnClickListener pOnClickListener) {
MavoricHUDImpl.this.mTvTurnDescription.setOnClickListener(pOnClickListener);
}
@Override
public void setRemainingSummaryOnClickListener(final OnClickListener pOnClickListener) {
MavoricHUDImpl.this.mTvTimeRemaining.setOnClickListener(pOnClickListener);
MavoricHUDImpl.this.mTvLengthRemaining.setOnClickListener(pOnClickListener);
}
}
private static final IHUDImplVariation[] VARIATIONS = new IHUDImplVariation[]{
new IHUDImplVariation(){
@Override
public int getLayoutID() {
return R.layout.ddmap_hud_mavoric_default;
}
@Override
public int getVariationID() {
return VARIATION_DEFAULT_ID;
}
@Override
public DirectionArrowDescriptor getDirectionArrowDescriptor() {
return new DirectionArrowDescriptor(new Point(24,30), R.drawable.hud_mavoric_variation_default_direction_arrow);
}
@Override
public int getDescriptionStringID() {
return R.string.hud_mavoric_variation_default;
}
@Override
public int getScreenshotResourceID() {
return R.drawable.hud_mavoric_variation_default_sample;
}
}
};
}