/** @file FixedImportDialog.java * * @author marco corvi * @date jan 2016 * * @brief TopoDroid MobileTopographer pointlist files dialog * -------------------------------------------------------- * Copyright This sowftare is distributed under GPL-3.0 or later * See the file COPYING. * -------------------------------------------------------- */ package com.topodroid.DistoX; import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; // import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.EditText; import android.widget.Toast; import android.content.Context; import android.content.Intent; import android.inputmethodservice.KeyboardView; import android.net.Uri; import android.util.Log; public class FixedImportDialog extends MyDialog implements OnItemClickListener , OnClickListener , OnLongClickListener { static final String POINTLISTS = Environment.getExternalStorageDirectory().getPath() + "/MobileTopographer/pointlists"; static final String POINTLISTS_PRO = Environment.getExternalStorageDirectory().getPath() + "/MobileTopographerPro/pointlists"; private FixedActivity mParent; private ArrayAdapter<String> mArrayAdapter; private ListView mList; private Button mBtnOk; private Button mBtnView; private TextView mTVlat; private TextView mTVlng; private TextView mTVhell; private TextView mTVhgeo; private EditText mETstation; private EditText mETcomment; private double mLat, mLng, mHEll, mHGeo; private boolean isSet; private MyKeyboard mKeyboard; public FixedImportDialog( Context context, FixedActivity parent ) { super( context, R.string.FixedImportDialog ); mParent = parent; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); initLayout( R.layout.fixed_import_dialog, R.string.title_fixed_import ); mArrayAdapter = new ArrayAdapter<String>( mContext, R.layout.message ); mList = (ListView) findViewById(R.id.list); mList.setOnItemClickListener( this ); mList.setDividerHeight( 2 ); readPoints(); mETstation = (EditText) findViewById( R.id.station ); mETcomment = (EditText) findViewById( R.id.comment ); mETstation.setOnLongClickListener( this ); mTVlat = (TextView) findViewById( R.id.tv_lat ); mTVlng = (TextView) findViewById( R.id.tv_lng ); mTVhell = (TextView) findViewById( R.id.tv_alt ); mTVhgeo = (TextView) findViewById( R.id.tv_asl ); mBtnOk = (Button) findViewById( R.id.btn_ok ); mBtnView = (Button) findViewById( R.id.btn_view ); mBtnOk.setOnClickListener( this ); mBtnView.setOnClickListener( this ); // mBtnCancel = (Button)findViewById( R.id.button_cancel ); // mBtnCancel.setOnClickListener( this ); mKeyboard = new MyKeyboard( mContext, (KeyboardView)findViewById( R.id.keyboardview ), R.xml.my_keyboard_base, R.xml.my_keyboard_qwerty ); if ( TDSetting.mKeyboard ) { if ( TDSetting.mStationNames == 1 ) { MyKeyboard.registerEditText( mKeyboard, mETstation, MyKeyboard.FLAG_POINT ); } else { MyKeyboard.registerEditText( mKeyboard, mETstation, MyKeyboard.FLAG_POINT_LCASE_2ND ); } } else { mKeyboard.hide(); if ( TDSetting.mStationNames == 1 ) { mETstation.setInputType( TDConst.NUMBER_DECIMAL ); } } isSet = false; } private boolean readPoints() { mArrayAdapter.clear(); File dir = new File( POINTLISTS ); if ( ! dir.exists() ) dir = new File( POINTLISTS_PRO ); if ( ! dir.exists() ) return false; File[] files = dir.listFiles(); if ( files == null || files.length == 0 ) return false; // Log.v("DistoX", "number of files " + files.length ); boolean ret = false; for ( File f : files ) { // Log.v("DistoX", "file " + f.getName() + " is dir " + f.isDirectory() ); if ( ! f.isDirectory() ) { ret = readPointFile( dir, f.getName() ) || ret; // N.B. read file before oring with ret } } if ( ret ) { mList.setAdapter( mArrayAdapter ); } else { Toast.makeText( mContext, R.string.MT_points_none, Toast.LENGTH_SHORT ).show(); dismiss(); } return ret; } private boolean readPointFile( File dir, String filename ) { // Log.v("DistoX", "reading file " + filename ); boolean ret = false; try { File file = new File( dir, filename ); FileReader fr = new FileReader( file ); BufferedReader br = new BufferedReader( fr ); for ( ; ; ) { String line = br.readLine(); if ( line == null ) break; // Log.v("DistoX", "read " + line ); String[] vals = line.split(","); int len = vals.length; if ( len >= 4 ) { ret = true; StringBuilder sb = new StringBuilder(); sb.append( vals[len-3].trim() ); sb.append( " " ); sb.append( vals[len-4].trim() ); sb.append( " " ); sb.append( vals[len-2].trim() ); sb.append( " " ); sb.append( vals[len-1].trim() ); // int k=0; // String name = vals[k]; // while ( ++k < len-4 ) { // name = name + "," + vals[k]; // } mArrayAdapter.add( sb.toString() ); } } } catch ( IOException e ) { } catch ( NumberFormatException e ) { } return ret; } @Override public boolean onLongClick(View v) { CutNPaste.makePopup( mContext, (EditText)v ); return true; } @Override public void onClick( View v ) { if ( CutNPaste.dismissPopup() ) return; if ( TDSetting.mKeyboard && mKeyboard.isVisible() ) { mKeyboard.hide(); } Button b = (Button)v; boolean do_toast = false; if ( b == mBtnOk ) { String station = mETstation.getText().toString(); if ( station == null || station.length() == 0 ) { mETstation.setError( mContext.getResources().getString( R.string.error_station_required ) ); return; } String comment = mETcomment.getText().toString(); if ( comment == null ) comment = ""; if ( isSet ) { mParent.addFixedPoint( station, mLng, mLat, mHEll, mHGeo, comment ); dismiss(); } else { do_toast = true; } } else if ( b == mBtnView ) { if ( isSet ) { Uri uri = Uri.parse( "geo:" + mLat + "," + mLng ); mContext.startActivity( new Intent( Intent.ACTION_VIEW, uri ) ); } else { do_toast = true; } } else { dismiss(); } if ( do_toast ) { Toast.makeText( mContext, R.string.no_location_data, Toast.LENGTH_SHORT ).show(); } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String item = ((TextView) view).getText().toString(); // TDLog.Log( TDLog.LOG_INPUT, "FixedImportDialog onItemClick() " + item.toString() ); String[] vals = item.split(" "); if ( vals.length == 4 ) { String lngstr = vals[0].trim(); String latstr = vals[1].trim(); String altstr = vals[2].trim(); String aslstr = vals[3].trim(); mHGeo = Double.parseDouble( aslstr ); mHEll = Double.parseDouble( altstr ); mLng = Double.parseDouble( lngstr ); mLat = Double.parseDouble( latstr ); mTVlat.setText( latstr ); mTVlng.setText( lngstr ); mTVhell.setText( altstr ); mTVhgeo.setText( aslstr ); isSet = true; } } }