/* @file FixedAddDialog.java * * @author marco corvi * @date jan 2016 * * @brief TopoDroid dialog to enter long-lat data * -------------------------------------------------------- * Copyright This sowftare is distributed under GPL-3.0 or later * See the file COPYING. * -------------------------------------------------------- */ package com.topodroid.DistoX; import android.net.Uri; import android.app.Dialog; import android.os.Bundle; import android.content.Context; import android.content.Intent; import android.widget.EditText; import android.widget.Button; import android.widget.CheckBox; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.KeyEvent; import android.inputmethodservice.KeyboardView; import android.widget.Toast; import android.widget.TextView; // import android.view.View.OnFocusChangeListener; import android.util.Log; public class FixedAddDialog extends MyDialog implements View.OnClickListener , View.OnLongClickListener { private FixedActivity mParent; private MyKeyboard mKeyboard = null; private EditText mETstation; private EditText mETcomment; private EditText mETlng; private EditText mETlat; private EditText mEThell; // altitude ellipsoid private EditText mEThgeo; // altitude geoid private Button mBtnNS; private Button mBtnEW; private Button mBtnOK; private Button mBtnView; private double mLng, mLat, mHEll, mHGeo; private boolean mNorth, mEast; public FixedAddDialog( Context context, FixedActivity parent ) { super( context, R.string.FixedAddDialog ); mParent = parent; } // ------------------------------------------------------------------- @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initLayout( R.layout.fixed_add_dialog, R.string.title_fixed_add ); mETstation = (EditText) findViewById(R.id.edit_name ); mETcomment = (EditText) findViewById(R.id.edit_comment ); mETstation.setOnLongClickListener( this ); mETlng = (EditText) findViewById( R.id.edit_long ); mETlat = (EditText) findViewById( R.id.edit_lat ); mEThell = (EditText) findViewById( R.id.edit_alt ); mEThgeo = (EditText) findViewById( R.id.edit_asl ); mNorth = true; mEast = true; mKeyboard = new MyKeyboard( mContext, (KeyboardView)findViewById( R.id.keyboardview ), R.xml.my_keyboard, -1 ); if ( TDSetting.mKeyboard ) { int flag = MyKeyboard.FLAG_POINT_DEGREE; if ( TDSetting.mStationNames == 1 ) { MyKeyboard.registerEditText( mKeyboard, mETstation, MyKeyboard.FLAG_POINT ); } else { MyKeyboard.registerEditText( mKeyboard, mETstation, MyKeyboard.FLAG_POINT_LCASE_2ND ); } MyKeyboard.registerEditText( mKeyboard, mEThell, MyKeyboard.FLAG_POINT ); MyKeyboard.registerEditText( mKeyboard, mEThgeo, MyKeyboard.FLAG_POINT ); MyKeyboard.registerEditText( mKeyboard, mETlng, flag ); MyKeyboard.registerEditText( mKeyboard, mETlat, flag ); } else { mKeyboard.hide(); mETlng.setInputType( TDConst.NUMBER_DECIMAL_SIGNED ); mETlat.setInputType( TDConst.NUMBER_DECIMAL_SIGNED ); mEThell.setInputType( TDConst.NUMBER_DECIMAL ); mEThgeo.setInputType( TDConst.NUMBER_DECIMAL ); if ( TDSetting.mStationNames == 1 ) { mETstation.setInputType( TDConst.NUMBER_DECIMAL ); } } mBtnNS = (Button) findViewById(R.id.button_NS); mBtnNS.setOnClickListener( this ); mBtnEW = (Button) findViewById(R.id.button_EW); mBtnEW.setOnClickListener( this ); mBtnOK = (Button) findViewById(R.id.button_ok); mBtnOK.setOnClickListener( this ); mBtnView = (Button) findViewById(R.id.button_view); mBtnView.setOnClickListener( this ); } @Override public boolean onLongClick(View v) { CutNPaste.makePopup( mContext, (EditText)v ); return true; } boolean getLngLat() { String longit = mETlng.getText().toString(); if ( longit == null || longit.length() == 0 ) { mETlng.setError( mContext.getResources().getString( R.string.error_long_required ) ); return false; } String latit = mETlat.getText().toString(); if ( latit == null || latit.length() == 0 ) { mETlat.setError( mContext.getResources().getString( R.string.error_lat_required) ); return false; } mLng = FixedInfo.string2double( longit ); if ( mLng < -1000 ) { mETlng.setError( mContext.getResources().getString( R.string.error_long_required ) ); return false; } mLat = FixedInfo.string2double( latit ); if ( mLat < -1000 ) { mETlat.setError( mContext.getResources().getString( R.string.error_lat_required) ); return false; } if ( ! mNorth ) mLat = - mLat; if ( ! mEast ) mLng = - mLng; return true; } @Override public void onClick(View v) { if ( CutNPaste.dismissPopup() ) return; if ( TDSetting.mKeyboard && mKeyboard.isVisible() ) { mKeyboard.hide(); } Button b = (Button) v; // TDLog.Log( TDLog.LOG_INPUT, "FixedAddDialog onClick() button " + b.getText().toString() ); mNorth = mBtnNS.getText().toString().equals("N"); mEast = mBtnEW.getText().toString().equals("E"); if ( b == mBtnNS ) { mBtnNS.setText( mNorth ? "S" : "N" ); return; } else if ( b == mBtnEW ) { mBtnEW.setText( mEast ? "W" : "E" ); return; } else if ( b == mBtnView ) { if ( getLngLat() ) { Uri uri = Uri.parse( "geo:" + mLat + "," + mLng ); mContext.startActivity( new Intent( Intent.ACTION_VIEW, uri ) ); } } else if ( b == mBtnOK ) { String name = mETstation.getText().toString(); if ( name == null || name.length() == 0 ) { mETstation.setError( mContext.getResources().getString( R.string.error_station_required ) ); return; } String comment = mETcomment.getText().toString(); if ( comment == null ) comment = ""; if ( getLngLat() ) { String altit = mEThell.getText().toString(); String aslit = mEThgeo.getText().toString(); if ( ( altit == null || altit.length() == 0 ) && (aslit == null || aslit.length() == 0 ) ) { mEThell.setError( mContext.getResources().getString( R.string.error_alt_required) ); return; } mHEll = -1000.0; mHGeo = -1000.0; if ( ( altit == null || altit.length() == 0 ) ) { try { mHGeo = Double.parseDouble( aslit.replace(",", ".") ); } catch ( NumberFormatException e ) { mEThgeo.setError( mContext.getResources().getString( R.string.error_invalid_number) ); return; } WorldMagneticModel wmm = new WorldMagneticModel( mContext ); mHEll = wmm.geoidToEllipsoid( mLat, mLng, mHGeo ); } else { try { mHEll = Double.parseDouble( altit.replace(",", ".") ); } catch ( NumberFormatException e ) { mEThell.setError( mContext.getResources().getString( R.string.error_invalid_number) ); return; } if ( ( aslit == null || aslit.length() == 0 ) ) { WorldMagneticModel wmm = new WorldMagneticModel( mContext ); mHGeo = wmm.ellipsoidToGeoid( mLat, mLng, mHEll ); } else { try { mHGeo = Double.parseDouble( aslit.replace(",", ".") ); } catch ( NumberFormatException e ) { mEThgeo.setError( mContext.getResources().getString( R.string.error_invalid_number) ); return; } } } mParent.addFixedPoint( name, mLng, mLat, mHEll, mHGeo, comment ); } else { return; } } onBackPressed(); } @Override public void onBackPressed() { if ( TDSetting.mKeyboard ) { if ( mKeyboard.isVisible() ) { mKeyboard.hide(); return; } } dismiss(); } }