/** @file FirmwareDialog.java
*
* @author marco corvi
* @date nov 2011
*
* @brief TopoDroid DistoX X310 device firmware 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.FileInputStream;
import java.io.DataInputStream;
import java.io.IOException;
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.widget.Button;
import android.widget.RadioButton;
import android.widget.EditText;
// import android.widget.TextView;
import android.widget.Toast;
import android.text.method.KeyListener;
import android.util.Log;
class FirmwareDialog extends MyDialog
implements View.OnClickListener
{
private RadioButton mBtnDump;
private RadioButton mBtnUpload;
private Button mBtnOK;
// private Button mBtnClose;
private EditText mETfile;
DeviceActivity mParent;
TopoDroidApp mApp;
KeyListener mETkeyListener;
FirmwareDialog( Context context, DeviceActivity parent, TopoDroidApp app )
{
super( context, R.string.FirmwareDialog );
mParent = parent;
mApp = app;
}
@Override
public void onCreate( Bundle bundle )
{
super.onCreate( bundle );
initLayout( R.layout.firmware_dialog, R.string.firmware_title );
mETfile = (EditText) findViewById( R.id.firmware_file );
mBtnUpload = (RadioButton) findViewById(R.id.firmware_upload );
mBtnDump = (RadioButton) findViewById(R.id.firmware_dump );
mBtnOK = (Button) findViewById(R.id.firmware_ok);
// mBtnClose = (Button) findViewById(R.id.firmware_close);
mETkeyListener = mETfile.getKeyListener();
mETfile.setOnClickListener( this );
// mETfile.setEnabled( false );
mETfile.setFocusable( false );
mETfile.setFocusableInTouchMode( false );
// mETfile.setClickable( true );
mETfile.setKeyListener( null );
mBtnUpload.setOnClickListener( this );
mBtnDump.setOnClickListener( this );
mBtnOK.setOnClickListener( this );
// mBtnClose.setOnClickListener( this );
}
void setFile( String filename )
{
mETfile.setText( filename );
}
@Override
public void onClick( View view )
{
switch ( view.getId() ) {
case R.id.firmware_file:
if ( mBtnUpload.isChecked() ) {
(new FirmwareFileDialog( mContext, this, mApp)).show(); // select file from bin directory
}
break;
case R.id.firmware_upload:
// mETfile.setEnabled( false );
mETfile.setFocusable( false );
mETfile.setFocusableInTouchMode( false );
// mETfile.setClickable( true );
mETfile.setKeyListener( null );
break;
case R.id.firmware_dump:
// mETfile.setEnabled( true );
mETfile.setFocusable( true );
mETfile.setFocusableInTouchMode( true );
// mETfile.setClickable( true );
mETfile.setKeyListener( mETkeyListener );
break;
case R.id.firmware_ok:
String filename = null;
if ( mETfile.getText() != null ) {
filename = mETfile.getText().toString();
if ( filename != null ) {
filename = filename.trim();
if ( filename.length() == 0 ) filename = null;
}
}
if ( filename == null ) {
Toast.makeText( mParent, mParent.getResources().getString(R.string.firmware_file_missing), Toast.LENGTH_SHORT).show();
return;
}
if ( mBtnDump.isChecked() ) {
TDLog.LogFile( "Firmware dump to " + filename );
File fp = new File( TDPath.getBinFile( filename ) );
if ( fp.exists() ) {
Toast.makeText( mParent, mParent.getResources().getString(R.string.firmware_file_exists), Toast.LENGTH_SHORT).show();
return;
}
askDump( filename );
} else if ( mBtnUpload.isChecked() ) {
TDLog.LogFile( "Firmware upload from " + filename );
File fp = new File( TDPath.getBinFile( filename ) );
if ( ! fp.exists() ) {
TDLog.Error( "inexistent upload firmware file " + filename );
return;
}
int fw = FirmwareUtils.readFirmwareFirmware( fp );
TDLog.LogFile( "Detected Firmware version " + fw );
// int hw = mApp.readFirmwareHardware();
// TDLog.LogFile( "Firmware version " + fw + " Hardware version " + hw );
// // Log.v( "DistoX", "HW " + hw + " FW " + fw );
// // Toast.makeText( mParent, "HARDWARE " + hw, Toast.LENGTH_LONG ).show();
// askUpload( filename, areCompatible(hw,fw) );
askUpload( filename, (fw == 21 || fw == 22 || fw == 23 || fw == 24 || fw == 25 ) );
}
break;
}
}
void askDump( final String filename )
{
TopoDroidAlertDialog.makeAlert( mContext, mParent.getResources(), R.string.ask_dump,
new DialogInterface.OnClickListener() {
@Override
public void onClick( DialogInterface dialog, int btn ) {
TDLog.LogFile( "Firmware dumping to file " + filename );
int ret = mApp.dumpFirmware( filename );
TDLog.LogFile( "Firmware dump to " + filename + " result: " + ret );
Toast.makeText( mParent,
String.format( mParent.getResources().getString(R.string.firmware_file_dumped), filename, ret ),
Toast.LENGTH_SHORT).show();
// finish();
}
}
);
}
void askUpload( final String filename, final boolean compatible )
{
TDLog.LogFile( "FW/HW compatibility " + (compatible? "yes" : "no") );
String title = mParent.getResources().getString( compatible? R.string.ask_upload : R.string.ask_upload_not_compatible );
TopoDroidAlertDialog.makeAlert( mContext, mParent.getResources(), title,
new DialogInterface.OnClickListener() {
@Override
public void onClick( DialogInterface dialog, int btn ) {
String pathname = TDPath.getBinFile( filename );
TDLog.LogFile( "Firmware uploading from path " + pathname );
File file = new File( pathname ); // file must exists
long len = file.length();
int ret = mApp.uploadFirmware( filename );
TDLog.LogFile( "Firmware upload result: written " + ret + " bytes of " + len );
Toast.makeText( mParent,
String.format( mParent.getResources().getString(R.string.firmware_file_uploaded), filename, ret, len ),
Toast.LENGTH_LONG).show();
// finish();
}
}
);
}
}