package com.evancharlton.mileage.views;
import com.evancharlton.mileage.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
public abstract class DeltaView extends LinearLayout {
private EditText mValue;
private Spinner mUnits;
public DeltaView(Context context, AttributeSet attrs) {
super(context, attrs);
super.setOrientation(HORIZONTAL);
super.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.delta, this);
mValue = (EditText) findViewById(R.id.value);
mUnits = (Spinner) findViewById(R.id.units);
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.DeltaView);
mValue.setHint(arr.getString(R.styleable.DeltaView_hint));
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item,
android.R.id.text1, getTexts());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mUnits.setAdapter(adapter);
}
@Override
protected Parcelable onSaveInstanceState() {
Bundle icicle = new Bundle();
icicle.putParcelable("super", super.onSaveInstanceState());
icicle.putString("value", mValue.getText().toString());
icicle.putInt("units", mUnits.getSelectedItemPosition());
return icicle;
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
Bundle saved = (Bundle) state;
super.onRestoreInstanceState(saved.getParcelable("super"));
mValue.setText(saved.getString("value"));
mUnits.setSelection(saved.getInt("units"));
}
public final long getDelta() {
if (mValue.getText().length() > 0) {
long value = Long.parseLong(mValue.getText().toString());
return value * getValues()[mUnits.getSelectedItemPosition()];
}
return 0;
}
public final void setDelta(long delta) {
final int position = getPosition(delta);
final long multiplier = getValues()[position];
mValue.setText(String.valueOf(delta / multiplier));
mUnits.setSelection(position);
}
public final TextView getEditField() {
return mValue;
}
abstract protected int getPosition(long delta);
abstract protected String[] getTexts();
abstract protected long[] getValues();
}