/* @file PhotoActivity.java
*
* @author marco corvi
* @date may 2012
*
* @brief TopoDroid survey photo listing
* --------------------------------------------------------
* 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.IOException;
// import java.io.EOFException;
// import java.io.DataInputStream;
// import java.io.DataOutputStream;
import java.io.BufferedReader;
import java.io.FileReader;
// import java.io.FileWriter;
import java.util.List;
import java.util.ArrayList;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Application;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.ActivityNotFoundException;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
// import android.view.MenuInflater;
// import android.content.res.ColorStateList;
// import android.location.LocationManager;
// import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.Button;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
public class PhotoActivity extends Activity
implements OnItemClickListener, ILister
{
private TopoDroidApp app;
private ListView mList;
// private int mListPos = -1;
// private int mListTop = 0;
private PhotoAdapter mDataAdapter;
private long mShotId = -1; // id of the shot
private String mSaveData = "";
private TextView mSaveTextView = null;
private PhotoInfo mSavePhoto = null;
String mPhotoStation;
String mPhotoComment;
long mPhotoId;
// -------------------------------------------------------------------
// ILister interface
@Override
public void refreshDisplay( int nr, boolean toast )
{
updateDisplay( );
}
@Override
public void updateBlockList( DistoXDBlock blk ) { }
@Override
public void updateBlockList( long blk_id ) { }
@Override
public void setConnectionStatus( int status ) { }
@Override
public void setRefAzimuth( float azimuth, long fixed_extend ) { }
public void setTheTitle() { }
// ----------------------------------------------------------------------
public void updateDisplay( )
{
// TDLog.Log( TDLog.LOG_PHOTO, "updateDisplay() status: " + StatusName() + " forcing: " + force_update );
DataHelper data = app.mData;
if ( data != null && app.mSID >= 0 ) {
List< PhotoInfo > list = data.selectAllPhotos( app.mSID, TopoDroidApp.STATUS_NORMAL );
// TDLog.Log( TDLog.LOG_PHOTO, "update shot list size " + list.size() );
updatePhotoList( list );
setTitle( app.mySurvey );
// } else {
// Toast.makeText( this, R.string.no_survey, Toast.LENGTH_SHORT ).show();
}
}
// -------------------------------------------------------------------
private void updatePhotoList( List< PhotoInfo > list )
{
// TDLog.Log(TDLog.LOG_PHOTO, "updatePhotoList size " + list.size() );
mDataAdapter.clear();
mList.setAdapter( mDataAdapter );
if ( list.size() == 0 ) {
Toast.makeText( this, R.string.no_photos, Toast.LENGTH_SHORT ).show();
finish();
}
for ( PhotoInfo item : list ) {
mDataAdapter.add( item );
}
}
// ---------------------------------------------------------------
// list items click
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
// CharSequence item = ((TextView) view).getText();
// String value = item.toString();
// TDLog.Log( TDLog.LOG_INPUT, "PhotoDialog onItemClick() " + value );
// if ( value.equals( getResources().getString( R.string.back_to_survey ) ) ) {
// updateDisplay( );
// return;
// }
// // setListPos( position );
startPhotoDialog( (TextView)view, position );
}
public void startPhotoDialog( TextView tv, int pos )
{
mSavePhoto = mDataAdapter.get(pos);
String filename = TDPath.getSurveyJpgFile( app.mySurvey, Long.toString(mSavePhoto.id) );
(new PhotoEditDialog( this, this, mSavePhoto, filename )).show();
}
// ---------------------------------------------------------------
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate( savedInstanceState );
setContentView(R.layout.main_photo);
app = (TopoDroidApp) getApplication();
mDataAdapter = new PhotoAdapter( this, R.layout.row, new ArrayList< PhotoInfo >() );
mList = (ListView) findViewById(R.id.list);
mList.setAdapter( mDataAdapter );
mList.setOnItemClickListener( this );
mList.setDividerHeight( 2 );
updateDisplay( );
}
// ------------------------------------------------------------------
public void viewPhoto( String filename )
{
// Log.v("DistoX", "photo <" + filename + ">" );
File file = new File( filename );
Uri uri = Uri.fromFile( file );
// Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("file://" + filename ) );
Intent intent = new Intent(Intent.ACTION_VIEW );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP );
intent.setDataAndType( uri, "image/jpeg" );
try {
startActivity( intent );
} catch ( ActivityNotFoundException e ) {
// gracefully fail without saying anything
}
}
public void dropPhoto( PhotoInfo photo )
{
app.mData.deletePhoto( photo.sid, photo.id );
File imagefile = new File( TDPath.getSurveyJpgFile( app.mySurvey, Long.toString(photo.id) ) );
imagefile.delete();
updateDisplay( ); // FIXME
}
public void updatePhoto( PhotoInfo photo, String comment )
{
// TDLog.Log( TDLog.LOG_PHOTO, "updatePhoto comment " + comment );
if ( app.mData.updatePhoto( photo.sid, photo.id, comment ) ) {
// if ( app.mListRefresh ) {
// // This works but it refreshes the whole list
// mDataAdapter.notifyDataSetChanged();
// } else {
// mSavePhoto.mComment = comment;
// }
updateDisplay( ); // FIXME
} else {
Toast.makeText( this, R.string.no_db, Toast.LENGTH_SHORT ).show();
}
}
// public void notifyDisconnected()
// {
// }
@Override
public boolean onKeyDown( int code, KeyEvent event )
{
switch ( code ) {
case KeyEvent.KEYCODE_MENU: // HARDWRAE MENU (82)
String help_page = getResources().getString( R.string.PhotoActivity );
if ( help_page != null ) UserManualActivity.showHelpPage( this, help_page );
return true;
case KeyEvent.KEYCODE_BACK: // HARDWARE BACK (4)
super.onBackPressed();
return true;
// case KeyEvent.KEYCODE_SEARCH:
// return onSearchRequested();
// case KeyEvent.KEYCODE_VOLUME_UP: // (24)
// case KeyEvent.KEYCODE_VOLUME_DOWN: // (25)
default:
// TDLog.Error( "key down: code " + code );
}
return false;
}
}