package com.maciekjanusz.compassproject.input;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.InputFilter;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.google.android.gms.maps.model.LatLng;
import com.maciekjanusz.compassproject.R;
import butterknife.Bind;
import butterknife.ButterKnife;
import static com.maciekjanusz.compassproject.util.CompassMath.validateLatitude;
import static com.maciekjanusz.compassproject.util.CompassMath.validateLongitude;
public class DecimalLocationInputView extends LinearLayout implements LocationInputView {
@Bind(R.id.latitude_edit_text)
EditText latitudeEditText;
@Bind(R.id.longitude_edit_text)
EditText longitudeEditText;
public DecimalLocationInputView(Context context) {
super(context);
init(context);
}
public DecimalLocationInputView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public DecimalLocationInputView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public DecimalLocationInputView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
private void init(Context context) {
inflate(context, R.layout.view_decimal_location_input, this);
ButterKnife.bind(this, this);
InputFilter[] latInputFilter = new InputFilter[] {new LatitudeInputFilter()};
InputFilter[] lonInputFilter = new InputFilter[] {new LongitudeInputFilter()};
latitudeEditText.setFilters(latInputFilter);
longitudeEditText.setFilters(lonInputFilter);
}
@Override
public LatLng getLatLng() throws InvalidLocationException {
String latString = latitudeEditText.getText().toString();
String lonString = longitudeEditText.getText().toString();
// if lat or lon is empty, throw exception
if(latString.isEmpty() || lonString.isEmpty()) {
throw new InvalidLocationException();
}
// input filter ensures valid values
float latitude = Float.parseFloat(latString);
float longitude = Float.parseFloat(lonString);
// return latlng
return new LatLng(latitude, longitude);
}
}