package com.robert.maps.applib.preference; import org.andnav.osm.util.GeoPoint; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences.Editor; import android.preference.DialogPreference; import android.view.View; import android.widget.EditText; import com.robert.maps.applib.R; public class OffsetPreference extends DialogPreference { private EditText mEditTextLat; private EditText mEditTextLon; private String mMapID; public OffsetPreference(Context context, String mapID) { super(context, null); setDialogLayoutResource(R.layout.pref_offset); mMapID = mapID; } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); mEditTextLat = (EditText) view.findViewById(R.id.Lat); mEditTextLon = (EditText) view.findViewById(R.id.Lon); final float offsetLat = getSharedPreferences().getFloat(getKey()+"lat", 0f); final float offsetLon = getSharedPreferences().getFloat(getKey()+"lon", 0f); final GeoPoint geoPoint0 = new GeoPoint(0, 0); final int lat = (offsetLat < 0 ? -1 : 1) * geoPoint0.distanceTo(new GeoPoint((int) (1E6 * offsetLat), 0)); final int lon = (offsetLon < 0 ? -1 : 1) * geoPoint0.distanceTo(new GeoPoint(0, (int) (1E6 * offsetLon))); mEditTextLat.setText(String.format("%d", lat)); mEditTextLon.setText(String.format("%d", lon)); view.findViewById(R.id.map).setOnClickListener(mClickMap); } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) { Editor editor = getSharedPreferences().edit(); final GeoPoint geoPoint0 = new GeoPoint(0, 0); try { final int lat = Integer.parseInt(mEditTextLat.getText().toString()); final GeoPoint geolat = geoPoint0.calculateEndingGlobalCoordinates(geoPoint0, 0, lat); editor.putFloat(getKey()+"lat", (float) geolat.getLatitude()); } catch (NumberFormatException e1) { editor.putFloat(getKey()+"lat", 0f); } try { final int lon = Integer.parseInt(mEditTextLon.getText().toString()); final GeoPoint geolat = geoPoint0.calculateEndingGlobalCoordinates(geoPoint0, 90, lon); editor.putFloat(getKey()+"lon", (float) geolat.getLongitude()); } catch (NumberFormatException e1) { editor.putFloat(getKey()+"lon", 0f); } editor.commit(); } } private View.OnClickListener mClickMap = new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getContext(), OffsetActivity.class); intent.putExtra("MAPID", mMapID); getContext().startActivity(intent); getDialog().dismiss(); } }; }