/*
* This file is part of GPSLogger for Android.
*
* GPSLogger for Android is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* GPSLogger for Android is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GPSLogger for Android. If not, see <http://www.gnu.org/licenses/>.
*/
package com.mendhak.gpslogger;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.*;
import android.preference.Preference.OnPreferenceClickListener;
import android.util.Log;
import arida.ufc.br.moapgpstracker.R;
import com.mendhak.gpslogger.common.Utilities;
import com.mendhak.gpslogger.senders.osm.OSMHelper;
public class GpsSettingsActivity extends PreferenceActivity
{
private final Handler handler = new Handler();
private SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
if (getIntent().getBooleanExtra("autosend_preferencescreen", false))
{
PreferenceScreen screen = (PreferenceScreen) findPreference("gpslogger_preferences");
int pos = findPreference("autosend_preferencescreen").getOrder();
screen.onItemClick(null, null, pos, 0);
}
prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean useImperial = prefs.getBoolean("useImperial", false);
EditTextPreference distanceBeforeLogging = (EditTextPreference) findPreference("distance_before_logging");
if (useImperial)
{
distanceBeforeLogging.setDialogTitle(R.string.settings_distance_in_feet);
distanceBeforeLogging.getEditText().setHint(R.string.settings_enter_feet);
}
else
{
distanceBeforeLogging.setDialogTitle(R.string.settings_distance_in_meters);
distanceBeforeLogging.getEditText().setHint(R.string.settings_enter_meters);
}
CheckBoxPreference imperialCheckBox = (CheckBoxPreference) findPreference("useImperial");
imperialCheckBox.setOnPreferenceChangeListener(new ImperialPreferenceChangeListener(prefs, distanceBeforeLogging));
Preference enableDisablePref = findPreference("enableDisableGps");
enableDisablePref.setOnPreferenceClickListener(new AndroidLocationPreferenceClickListener());
Preference osmSetupPref = findPreference("osm_setup");
osmSetupPref.setOnPreferenceClickListener(new OSMPreferenceClickListener());
CheckBoxPreference chkLog_opengts = (CheckBoxPreference) findPreference("log_opengts");
chkLog_opengts.setOnPreferenceClickListener(new LogOpenGTSPreferenceClickListener(prefs));
}
private final Runnable updateResults = new Runnable()
{
public void run()
{
finish();
startActivity(getIntent());
}
};
/**
* Opens the Android Location preferences screen
*/
private class AndroidLocationPreferenceClickListener implements OnPreferenceClickListener
{
public boolean onPreferenceClick(Preference preference)
{
startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));
return true;
}
}
/**
* Opens the OpenStreetMap preferences screen
*/
private class OSMPreferenceClickListener implements OnPreferenceClickListener
{
public boolean onPreferenceClick(Preference preference)
{
startActivity(OSMHelper.GetOsmSettingsIntent(getApplicationContext()));
return true;
}
}
private class ImperialPreferenceChangeListener implements Preference.OnPreferenceChangeListener
{
EditTextPreference distanceBeforeLogging;
SharedPreferences prefs;
public ImperialPreferenceChangeListener(SharedPreferences prefs, EditTextPreference distanceBeforeLogging)
{
this.prefs = prefs;
this.distanceBeforeLogging = distanceBeforeLogging;
}
public boolean onPreferenceChange(Preference preference, final Object newValue)
{
Utilities.ShowProgress(GpsSettingsActivity.this, getString(R.string.settings_converting_title),
getString(R.string.settings_converting_description));
new Thread()
{
public void run()
{
try
{
sleep(3000); // Give user time to read the message
}
catch (InterruptedException e)
{
Log.e("Settings", e.getMessage());
}
boolean useImp = Boolean.parseBoolean(newValue.toString());
String minimumDistanceString = prefs.getString("distance_before_logging", "0");
int minimumDistance;
if (minimumDistanceString != null && minimumDistanceString.length() > 0)
{
minimumDistance = Integer.valueOf(minimumDistanceString);
}
else
{
minimumDistance = 0;
}
SharedPreferences.Editor editor = prefs.edit();
if (useImp)
{
distanceBeforeLogging.setDialogTitle(R.string.settings_distance_in_feet);
distanceBeforeLogging.getEditText().setHint(R.string.settings_enter_feet);
minimumDistance = Utilities.MetersToFeet(minimumDistance);
}
else
{
minimumDistance = Utilities.FeetToMeters(minimumDistance);
distanceBeforeLogging.setDialogTitle(R.string.settings_distance_in_meters);
distanceBeforeLogging.getEditText().setHint(R.string.settings_enter_meters);
}
if (minimumDistance >= 9999)
{
minimumDistance = 9999;
}
editor.putString("distance_before_logging", String.valueOf(minimumDistance));
editor.commit();
handler.post(updateResults);
Utilities.HideProgress();
}
}.start();
return true;
}
}
/**
* Opens the OpenGTS preferences
* Listener to ensure that the server is configured when the user wants to enable OpenGTS logging logger
*/
private class LogOpenGTSPreferenceClickListener implements OnPreferenceClickListener
{
private SharedPreferences prefs;
public LogOpenGTSPreferenceClickListener(SharedPreferences prefs)
{
this.prefs = prefs;
}
public boolean onPreferenceClick(Preference preference)
{
CheckBoxPreference chkLog_opengts = (CheckBoxPreference) findPreference("log_opengts");
boolean opengts_enabled = prefs.getBoolean("opengts_enabled", false);
if (chkLog_opengts.isChecked() && !opengts_enabled)
{
startActivity(new Intent("com.mendhak.gpslogger.OPENGTS_SETUP"));
}
return true;
}
}
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
Utilities.LogDebug("GpsSettingsActivity.onWindowFocusChanged");
if (hasFocus)
{
CheckBoxPreference chkLog_opengts = (CheckBoxPreference) findPreference("log_opengts");
boolean opengts_enabled = prefs.getBoolean("opengts_enabled", false);
if (chkLog_opengts.isChecked() && !opengts_enabled)
{
chkLog_opengts.setChecked(false);
}
}
}
}