/** @file DeviceA3MemoryDialog.java * * @author marco corvi * @date nov 2011 * * @brief TopoDroid DistoX A3 device memory dialog * -------------------------------------------------------- * Copyright This sowftare is distributed under GPL-3.0 or later * See the file COPYING. * -------------------------------------------------------- */ package com.topodroid.DistoX; import java.util.ArrayList; import android.os.Bundle; import android.app.Dialog; // import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnDismissListener; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.ListView; import android.widget.ArrayAdapter; class DeviceA3MemoryDialog extends MyDialog implements View.OnClickListener , IMemoryDialog { DeviceActivity mParent; private Button mBtnStore; private Button mBtnReset; private Button mBtnDump; private Button mBtnRead; // private Button mBtnBack; private EditText mETfrom; private EditText mETto; private EditText mETdumpfrom; private EditText mETdumpto; private EditText mETdumpfile; private TextView mTVshead; private TextView mTVstail; private TextView mTVrhead; private TextView mTVrtail; // List< MemoryOctet> mMemory; ArrayAdapter< String > mArrayAdapter; ListView mList; DeviceA3MemoryDialog( Context context, DeviceActivity parent ) { super( context, R.string.DeviceA3MemoryDialog ); mParent = parent; } @Override public void onCreate( Bundle bundle ) { super.onCreate( bundle ); initLayout( R.layout.device_a3_memory_dialog, R.string.memoryA3 ); getWindow().setLayout( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT ); mTVshead = (TextView) findViewById( R.id.tv_stored_head ); mTVstail = (TextView) findViewById( R.id.tv_stored_tail ); mTVrhead = (TextView) findViewById( R.id.tv_read_head ); mTVrtail = (TextView) findViewById( R.id.tv_read_tail ); mETfrom = (EditText) findViewById( R.id.et_from ); mETto = (EditText) findViewById( R.id.et_to ); mETdumpfrom = (EditText) findViewById( R.id.et_dumpfrom ); mETdumpto = (EditText) findViewById( R.id.et_dumpto ); mETdumpfile = (EditText) findViewById( R.id.et_dumpfile ); mBtnStore = (Button) findViewById(R.id.button_store); mBtnRead = (Button) findViewById(R.id.button_read ); mBtnDump = (Button) findViewById(R.id.button_dump ); mBtnReset = (Button) findViewById(R.id.button_reset); // mBtnBack = (Button) findViewById(R.id.button_back); mBtnStore.setOnClickListener( this ); mBtnReset.setOnClickListener( this ); mBtnRead.setOnClickListener( this ); mBtnDump.setOnClickListener( this ); // mBtnBack.setOnClickListener( this ); mArrayAdapter = new ArrayAdapter<String>( mParent, R.layout.message ); mList = (ListView) findViewById(R.id.list_memory); mList.setAdapter( mArrayAdapter ); // mList.setOnItemClickListener( this ); mList.setDividerHeight( 2 ); int[] ht = new int[2]; mParent.retrieveDeviceHeadTail( ht ); setText( mTVshead, mTVstail, ht ); } public void updateList( ArrayList<MemoryOctet> memory ) { mArrayAdapter.clear(); for ( MemoryOctet m : memory ) mArrayAdapter.add( m.toString() ); mList.invalidate(); } private void setText( TextView h, TextView t, int[] ht ) { h.setText( String.format("%04d", ht[0] / 8 ) ); t.setText( String.format("%04d", ht[1] / 8 ) ); } // int parseInt( EditText et, int scale ) // { // if ( et.getText() == null ) return 0; // String str = et.getText().toString(); // if ( str == null || str.length() == 0 ) return 0; // int ret = 0; // try { // ret = Integer.parseInt( str ) * scale; // } catch ( NumberFormatException e ) { // et.setError( mParent.getResources().getString( R.string.error_invalid_number ) ); // ret = -1; // } // return ret; // } @Override public void onClick( View view ) { int[] ht = new int[2]; String from, to, error; switch ( view.getId() ) { case R.id.button_store: try { ht[0] = Integer.parseInt( mTVrhead.getText().toString() ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mTVrhead.setError( error ); return; } try { ht[1] = Integer.parseInt( mTVrtail.getText().toString() ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mTVrtail.setError( error ); return; } mParent.storeDeviceHeadTail( ht ); mTVshead.setText( mTVrhead.getText() ); mTVstail.setText( mTVrtail.getText() ); break; case R.id.button_dump: from = mETdumpfrom.getText().toString(); to = mETdumpto.getText().toString(); if ( from == null || from.length() == 0 ) { error = mParent.getResources().getString( R.string.error_begin_required ); mETdumpfrom.setError( error ); return; } if ( to == null || to.length() == 0 ) { error = mParent.getResources().getString( R.string.error_end_required ); mETdumpto.setError( error ); return; } try { ht[0] = Integer.parseInt( from ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mETdumpfrom.setError( error ); return; } try { ht[1] = Integer.parseInt( to ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mETdumpto.setError( error ); return; } String dumpfile = null; if ( mETdumpfile.getText() != null ) dumpfile = mETdumpfile.getText().toString(); mParent.readA3Memory( this, ht, dumpfile ); break; case R.id.button_read: mParent.readDeviceHeadTail( ht ); setText( mTVrhead, mTVrtail, ht ); mETfrom.setText( mTVstail.getText() ); mETto.setText( mTVrtail.getText() ); break; case R.id.button_reset: from = mETfrom.getText().toString().trim(); to = mETto.getText().toString().trim(); if ( from == null || from.length() == 0 ) { error = mParent.getResources().getString( R.string.error_begin_required ); mETfrom.setError( error ); return; } if ( to == null || to.length() == 0 ) { error = mParent.getResources().getString( R.string.error_end_required ); mETto.setError( error ); return; } try { ht[0] = Integer.parseInt( from ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mETfrom.setError( error ); return; } try { ht[1] = Integer.parseInt( to ) * 8; } catch ( NumberFormatException e ) { error = mParent.getResources().getString( R.string.error_invalid_number ); mETto.setError( error ); return; } askReset( ht ); // mParent.resetA3DeviceHeadTail( ht ); break; // case R.id.button_cancel: // dismiss(); // break; } } void askReset( final int ht[] ) { TopoDroidAlertDialog.makeAlert( mContext, mParent.getResources(), R.string.ask_reset, new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int btn ) { mParent.resetA3DeviceHeadTail( ht ); // finish(); } } ); } }