/* @file TopoDroidPreferences.java
*
* @author marco corvi
* @date nov 2011
*
* @brief TopoDroid options dialog
* --------------------------------------------------------
* Copyright This sowftare is distributed under GPL-3.0 or later
* See the file COPYING.
* --------------------------------------------------------
*/
package com.topodroid.DistoX;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.CheckBoxPreference;
// import android.preference.EditTextPreference;
// import android.preference.ListPreference;
// import android.view.Menu;
// import android.view.MenuItem;
import android.widget.ListAdapter;
import android.util.Log;
/**
*/
public class TopoDroidPreferences extends PreferenceActivity
{
static final int REQUEST_CWD = 1;
static final int REQUEST_PLOT_SCREEN = 2;
static final int REQUEST_TOOL_SCREEN = 3;
static final int REQUEST_LOCATION = 4;
static final int REQUEST_ACCURACY = 5;
static final int REQUEST_SHOT_DATA = 6;
static final int REQUEST_PT_CMAP = 7;
static final String PREF_CATEGORY = "PrefCategory";
static final int PREF_CATEGORY_ALL = 0;
static final int PREF_CATEGORY_SURVEY = 1;
static final int PREF_CATEGORY_PLOT = 2;
static final int PREF_CATEGORY_CALIB = 3;
static final int PREF_CATEGORY_DEVICE = 4;
static final int PREF_CATEGORY_SKETCH = 5;
static final int PREF_CATEGORY_IMPORT_EXPORT = 6;
static final int PREF_SHOT_DATA = 7;
static final int PREF_SHOT_UNITS = 8;
static final int PREF_ACCURACY = 9;
static final int PREF_LOCATION = 10;
static final int PREF_PLOT_SCREEN = 11;
static final int PREF_TOOL_LINE = 12;
static final int PREF_TOOL_POINT = 13;
static final int PREF_PLOT_WALLS = 14;
static final int PREF_PLOT_DRAW = 15;
static final int PREF_PLOT_ERASE = 16;
static final int PREF_PLOT_EDIT = 17;
static final int PREF_CATEGORY_LOG = 18; // this must be the last
private int mPrefCategory = PREF_CATEGORY_ALL; // preference category
Preference mCwdPreference;
Preference mPtCmapPreference;
TopoDroidApp mApp;
@Override
public void onDestroy( )
{
super.onDestroy();
// if (mPrefCategory == PREF_CATEGORY_ALL ) { mApp.mPrefActivity = null; }
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate( savedInstanceState );
mApp = (TopoDroidApp) getApplication();
Bundle extras = getIntent().getExtras();
if ( extras != null ) {
mPrefCategory = extras.getInt( PREF_CATEGORY );
if ( mPrefCategory < PREF_CATEGORY_ALL || mPrefCategory > PREF_CATEGORY_LOG ) {
mPrefCategory = PREF_CATEGORY_ALL;
}
}
// Log.v("DistoX", "Pref create. category " + mPrefCategory + " level " + TDSetting.mActivityLevel );
if (mPrefCategory == PREF_CATEGORY_ALL ) { mApp.mPrefActivity = this; }
if ( TDSetting.mLevelOverExperimental ) {
switch ( mPrefCategory ) {
case PREF_CATEGORY_SURVEY:
addPreferencesFromResource(R.xml.prefs_3_survey);
break;
case PREF_CATEGORY_PLOT:
addPreferencesFromResource(R.xml.prefs_3_plot);
// TODO handle ZOOM_CONTROLS separatedly
break;
case PREF_CATEGORY_CALIB:
addPreferencesFromResource(R.xml.prefs_4_calib);
break;
case PREF_CATEGORY_DEVICE:
addPreferencesFromResource(R.xml.prefs_3_device);
linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
break;
case PREF_CATEGORY_IMPORT_EXPORT:
addPreferencesFromResource(R.xml.prefs_3_export);
break;
case PREF_SHOT_DATA:
addPreferencesFromResource(R.xml.prefs_3_shot_data);
break;
case PREF_SHOT_UNITS:
addPreferencesFromResource(R.xml.prefs_3_shot_units);
break;
case PREF_ACCURACY:
addPreferencesFromResource(R.xml.prefs_3_accuracy);
break;
case PREF_LOCATION:
addPreferencesFromResource(R.xml.prefs_3_location);
break;
case PREF_PLOT_SCREEN:
addPreferencesFromResource(R.xml.prefs_3_plot_screen);
break;
case PREF_TOOL_LINE:
addPreferencesFromResource(R.xml.prefs_3_tool_line);
break;
case PREF_TOOL_POINT:
addPreferencesFromResource(R.xml.prefs_3_tool_point);
break;
case PREF_PLOT_WALLS:
addPreferencesFromResource(R.xml.prefs_3_plot_walls);
break;
case PREF_PLOT_DRAW:
addPreferencesFromResource(R.xml.prefs_plot_draw);
break;
case PREF_PLOT_ERASE:
addPreferencesFromResource(R.xml.prefs_plot_erase);
break;
case PREF_PLOT_EDIT:
addPreferencesFromResource(R.xml.prefs_plot_edit);
break;
case PREF_CATEGORY_SKETCH:
addPreferencesFromResource(R.xml.prefs_sketch);
break;
case PREF_CATEGORY_LOG:
addPreferencesFromResource(R.xml.prefs_log);
break;
default:
addPreferencesFromResource(R.xml.prefs_4);
break;
}
} else if ( TDSetting.mLevelOverAdvanced ) { // ----------------- EXPERIMENTAL
switch ( mPrefCategory ) {
case PREF_CATEGORY_SURVEY:
addPreferencesFromResource(R.xml.prefs_3_survey);
break;
case PREF_CATEGORY_PLOT:
addPreferencesFromResource(R.xml.prefs_3_plot);
// TODO handle ZOOM_CONTROLS separatedly
break;
case PREF_CATEGORY_CALIB:
addPreferencesFromResource(R.xml.prefs_3_calib);
break;
case PREF_CATEGORY_DEVICE:
addPreferencesFromResource(R.xml.prefs_3_device);
linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
break;
case PREF_CATEGORY_IMPORT_EXPORT:
addPreferencesFromResource(R.xml.prefs_3_export);
break;
case PREF_SHOT_DATA:
addPreferencesFromResource(R.xml.prefs_3_shot_data);
break;
case PREF_SHOT_UNITS:
addPreferencesFromResource(R.xml.prefs_3_shot_units);
break;
case PREF_ACCURACY:
addPreferencesFromResource(R.xml.prefs_3_accuracy);
break;
case PREF_LOCATION:
addPreferencesFromResource(R.xml.prefs_3_location);
break;
case PREF_PLOT_SCREEN:
addPreferencesFromResource(R.xml.prefs_3_plot_screen);
break;
case PREF_TOOL_LINE:
addPreferencesFromResource(R.xml.prefs_3_tool_line);
break;
case PREF_TOOL_POINT:
addPreferencesFromResource(R.xml.prefs_3_tool_point);
break;
case PREF_PLOT_WALLS:
addPreferencesFromResource(R.xml.prefs_3_plot_walls);
break;
case PREF_PLOT_DRAW:
addPreferencesFromResource(R.xml.prefs_plot_draw);
break;
case PREF_PLOT_ERASE:
addPreferencesFromResource(R.xml.prefs_plot_erase);
break;
case PREF_PLOT_EDIT:
addPreferencesFromResource(R.xml.prefs_plot_edit);
break;
case PREF_CATEGORY_LOG:
addPreferencesFromResource(R.xml.prefs_log);
break;
default:
addPreferencesFromResource(R.xml.prefs_3);
break;
}
} else if ( TDSetting.mLevelOverNormal ) { // ---------------- ADVANCED
switch ( mPrefCategory ) {
case PREF_CATEGORY_SURVEY:
addPreferencesFromResource(R.xml.prefs_2_survey);
break;
case PREF_CATEGORY_PLOT:
addPreferencesFromResource(R.xml.prefs_2_plot);
// TODO handle ZOOM_CONTROLS separatedly
break;
case PREF_CATEGORY_CALIB:
addPreferencesFromResource(R.xml.prefs_2_calib);
break;
case PREF_CATEGORY_DEVICE:
addPreferencesFromResource(R.xml.prefs_2_device);
linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
break;
case PREF_CATEGORY_IMPORT_EXPORT:
addPreferencesFromResource(R.xml.prefs_2_export);
break;
case PREF_SHOT_DATA:
addPreferencesFromResource(R.xml.prefs_2_shot_data);
break;
case PREF_SHOT_UNITS:
addPreferencesFromResource(R.xml.prefs_2_shot_units);
break;
case PREF_ACCURACY:
addPreferencesFromResource(R.xml.prefs_2_accuracy);
break;
case PREF_LOCATION:
addPreferencesFromResource(R.xml.prefs_2_location);
break;
case PREF_PLOT_SCREEN:
addPreferencesFromResource(R.xml.prefs_2_plot_screen);
break;
case PREF_TOOL_LINE:
addPreferencesFromResource(R.xml.prefs_2_tool_line);
break;
case PREF_TOOL_POINT:
addPreferencesFromResource(R.xml.prefs_2_tool_point);
break;
// case PREF_PLOT_WALLS:
// addPreferencesFromResource(R.xml.prefs_2_plot_walls);
// break;
case PREF_PLOT_DRAW:
addPreferencesFromResource(R.xml.prefs_plot_draw);
break;
case PREF_PLOT_ERASE:
addPreferencesFromResource(R.xml.prefs_plot_erase);
break;
case PREF_PLOT_EDIT:
addPreferencesFromResource(R.xml.prefs_plot_edit);
break;
// case PREF_CATEGORY_LOG:
// addPreferencesFromResource(R.xml.prefs_log);
// break;
default:
addPreferencesFromResource(R.xml.prefs_2);
break;
}
} else if ( TDSetting.mLevelOverBasic ) { // ------------------- NORMAL
switch ( mPrefCategory ) {
case PREF_CATEGORY_SURVEY:
addPreferencesFromResource(R.xml.prefs_1_survey);
break;
case PREF_CATEGORY_PLOT:
addPreferencesFromResource(R.xml.prefs_1_plot);
// TODO handle ZOOM_CONTROLS separatedly
break;
case PREF_CATEGORY_CALIB:
addPreferencesFromResource(R.xml.prefs_1_calib);
break;
case PREF_CATEGORY_DEVICE:
addPreferencesFromResource(R.xml.prefs_1_device);
linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
break;
case PREF_CATEGORY_IMPORT_EXPORT:
addPreferencesFromResource(R.xml.prefs_1_export);
break;
case PREF_SHOT_DATA:
addPreferencesFromResource(R.xml.prefs_1_shot_data);
break;
case PREF_SHOT_UNITS:
addPreferencesFromResource(R.xml.prefs_1_shot_units);
break;
case PREF_ACCURACY:
addPreferencesFromResource(R.xml.prefs_1_accuracy);
break;
case PREF_LOCATION:
addPreferencesFromResource(R.xml.prefs_1_location);
break;
case PREF_PLOT_SCREEN:
addPreferencesFromResource(R.xml.prefs_1_plot_screen);
break;
case PREF_TOOL_LINE:
addPreferencesFromResource(R.xml.prefs_1_tool_line);
break;
case PREF_TOOL_POINT:
addPreferencesFromResource(R.xml.prefs_1_tool_point);
break;
// case PREF_PLOT_WALLS:
// addPreferencesFromResource(R.xml.prefs_1_plot_walls);
// break;
case PREF_PLOT_DRAW:
addPreferencesFromResource(R.xml.prefs_plot_draw);
break;
case PREF_PLOT_ERASE:
addPreferencesFromResource(R.xml.prefs_plot_erase);
break;
case PREF_PLOT_EDIT:
addPreferencesFromResource(R.xml.prefs_plot_edit);
break;
// case PREF_CATEGORY_LOG:
// addPreferencesFromResource(R.xml.prefs_log);
// break;
default:
addPreferencesFromResource(R.xml.prefs_1);
break;
}
} else { // ---------------- BASIC
switch ( mPrefCategory ) {
case PREF_CATEGORY_SURVEY:
addPreferencesFromResource(R.xml.prefs_0_survey);
break;
case PREF_CATEGORY_PLOT:
addPreferencesFromResource(R.xml.prefs_0_plot);
// TODO handle ZOOM_CONTROLS separatedly
break;
case PREF_CATEGORY_CALIB:
addPreferencesFromResource(R.xml.prefs_0_calib);
break;
case PREF_CATEGORY_DEVICE:
addPreferencesFromResource(R.xml.prefs_0_device);
linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
break;
case PREF_CATEGORY_IMPORT_EXPORT:
addPreferencesFromResource(R.xml.prefs_0_export);
break;
case PREF_SHOT_DATA:
addPreferencesFromResource(R.xml.prefs_0_shot_data);
break;
case PREF_SHOT_UNITS:
addPreferencesFromResource(R.xml.prefs_0_shot_units);
break;
// case PREF_ACCURACY:
// addPreferencesFromResource(R.xml.prefs_0_accuracy);
// break;
case PREF_LOCATION:
addPreferencesFromResource(R.xml.prefs_0_location);
break;
case PREF_PLOT_SCREEN:
addPreferencesFromResource(R.xml.prefs_0_plot_screen);
break;
case PREF_TOOL_LINE:
addPreferencesFromResource(R.xml.prefs_0_tool_line);
break;
case PREF_TOOL_POINT:
addPreferencesFromResource(R.xml.prefs_0_tool_point);
break;
// case PREF_PLOT_WALLS:
// addPreferencesFromResource(R.xml.prefs_0_plot_walls);
// break;
case PREF_PLOT_DRAW:
addPreferencesFromResource(R.xml.prefs_plot_draw);
break;
case PREF_PLOT_ERASE:
addPreferencesFromResource(R.xml.prefs_plot_erase);
break;
case PREF_PLOT_EDIT:
addPreferencesFromResource(R.xml.prefs_plot_edit);
break;
// case PREF_CATEGORY_LOG:
// addPreferencesFromResource(R.xml.prefs_log);
// break;
default:
addPreferencesFromResource(R.xml.prefs_0);
break;
}
}
if (mPrefCategory == PREF_CATEGORY_ALL ) {
final Intent cwd_intent = new Intent( this, CWDActivity.class );
mCwdPreference = (Preference) findPreference( "DISTOX_CWD" );
if ( mCwdPreference != null ) {
mCwdPreference.setSummary( mApp.mCWD );
mCwdPreference.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick( Preference pref )
{
startActivityForResult( cwd_intent, REQUEST_CWD );
return true;
}
} );
}
linkPreference( "DISTOX_SURVEY_PREF", PREF_CATEGORY_SURVEY );
linkPreference( "DISTOX_PLOT_PREF", PREF_CATEGORY_PLOT );
linkPreference( "DISTOX_IMPORT_EXPORT_PREF", PREF_CATEGORY_IMPORT_EXPORT );
linkPreference( "DISTOX_SKETCH_PREF", PREF_CATEGORY_SKETCH );
linkPreference( "DISTOX_DEVICE_PREF", PREF_CATEGORY_DEVICE );
// linkPreference( "DISTOX_CALIB_PREF", PREF_CATEGORY_CALIB );
}
if (mPrefCategory == PREF_CATEGORY_IMPORT_EXPORT ) {
final Intent pt_intent = new Intent( this, PtCmapActivity.class );
mPtCmapPreference = (Preference) findPreference( "DISTOX_PT_CMAP" );
if ( mPtCmapPreference != null ) {
mPtCmapPreference.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick( Preference pref )
{
startActivityForResult( pt_intent, REQUEST_PT_CMAP );
return true;
}
} );
}
}
if (mPrefCategory == PREF_CATEGORY_PLOT ) {
linkPreference( "DISTOX_PLOT_SCREEN", PREF_PLOT_SCREEN );
linkPreference( "DISTOX_TOOL_LINE", PREF_TOOL_LINE );
linkPreference( "DISTOX_TOOL_POINT", PREF_TOOL_POINT );
// if ( TDSetting.mLevelOverAdvanced )
linkPreference( "DISTOX_PLOT_WALLS", PREF_PLOT_WALLS );
}
if (mPrefCategory == PREF_CATEGORY_SURVEY ) {
// if ( TDSetting.mLevelOverBasic )
linkPreference( "DISTOX_LOCATION_SCREEN", PREF_LOCATION );
// if ( TDSetting.mLevelOverNormal )
linkPreference( "DISTOX_ACCURACY_SCREEN", PREF_ACCURACY );
linkPreference( "DISTOX_SHOT_UNITS_SCREEN", PREF_SHOT_UNITS );
linkPreference( "DISTOX_SHOT_DATA_SCREEN", PREF_SHOT_DATA );
}
}
void reloadPreferences()
{
if (mPrefCategory != PREF_CATEGORY_ALL ) return;
mApp.mPrefActivity = null;
finish();
Intent intent = new Intent( mApp, TopoDroidPreferences.class );
intent.putExtra( TopoDroidPreferences.PREF_CATEGORY, TopoDroidPreferences.PREF_CATEGORY_ALL );
startActivity( intent );
}
private void linkPreference( String pref_name, int category )
{
// if ( pref_name == null ) return;
Preference pref = findPreference( pref_name );
if ( pref == null ) return;
final Intent intent = new Intent( this, TopoDroidPreferences.class );
intent.putExtra( PREF_CATEGORY, category );
pref.setOnPreferenceClickListener(
new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick( Preference pref )
{
startActivity( intent );
return true;
}
} );
}
public void onActivityResult( int request, int result, Intent intent )
{
Bundle extras = (intent != null)? intent.getExtras() : null;
switch ( request ) {
case REQUEST_CWD:
if ( extras != null ) {
String cwd = extras.getString( TDTag.TOPODROID_CWD );
mCwdPreference.setSummary( cwd );
// Log.v("DistoX", "got CWD " + cwd );
}
break;
case REQUEST_PLOT_SCREEN:
case REQUEST_TOOL_SCREEN:
case REQUEST_LOCATION:
case REQUEST_ACCURACY:
case REQUEST_SHOT_DATA:
break;
case REQUEST_PT_CMAP:
if ( extras != null ) {
String cmap = extras.getString( TDTag.TOPODROID_CMAP );
// mPtCmapPreference.
}
break;
}
}
// public void setPreferenceText( String key, String text )
// {
// EditPreference ep = (EditPreference) findPreference( key );
// if ( ep != null ) ep.setText( text );
// }
// public void setPreferenceText( String key, int i ) { setPreferenceText( key, Integer.toString(i) ); }
// public void setPreferenceText( String key, float f ) { setPreferenceText( key, Float.toString(f) ); }
}