/**
AirCasting - Share your Air!
Copyright (C) 2011-2012 HabitatMap, Inc.
This program 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 3 of the License, or
(at your option) any later version.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
You can contact the authors by email at <info@habitatmap.org>
*/
package pl.llp.aircasting.activity;
import pl.llp.aircasting.Intents;
import pl.llp.aircasting.R;
import pl.llp.aircasting.activity.extsens.ExternalSensorActivity;
import pl.llp.aircasting.activity.menu.MainMenu;
import pl.llp.aircasting.activity.settings.BackendSettingsActivity;
import pl.llp.aircasting.activity.settings.DisableMapSettingsActivity;
import pl.llp.aircasting.helper.SettingsHelper;
import pl.llp.aircasting.model.SensorManager;
import android.app.Application;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.inject.Inject;
import roboguice.activity.RoboPreferenceActivity;
import roboguice.inject.InjectResource;
public class SettingsActivity extends RoboPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener
{
public static final String ACCOUNT_KEY = "account";
public static final String EXTERNAL_SENSOR_KEY = "external_sensor";
public static final String MEASUREMENT_STREAMS_KEY = "measurement_streams";
public static final String BACKEND_SETTINGS_KEY = "backend_settings";
public static final String DISABLE_MAPS_KEY = "disable_maps";
public static final String SOUND_LEVEL_MEASUREMENTLESS_KEY = "sound_level_measurementless";
public static final String CONTRIBUTE_TO_CROWDMAP = "contribute_to_crowdmap";
public static final String FIXED_SESSIONS_STREAMING = "fixed_sessions_streaming";
@Inject Application context;
@Inject SharedPreferences sharedPreferences;
@Inject SettingsHelper settingsHelper;
@Inject SensorManager sensorManager;
@Inject MainMenu mainMenu;
@Inject ApplicationState state;
@InjectResource(R.string.profile_template) String profileTemplate;
Offset60DbInputListener offset60DbInputListener;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
offset60DbInputListener = new Offset60DbInputListener();
final Preference offsetPreference = getPreferenceScreen().findPreference(SettingsHelper.OFFSET_60_DB);
if (state.recording().isRecording()) {
getPreferenceScreen().removePreference(getPreferenceScreen().findPreference(SOUND_LEVEL_MEASUREMENTLESS_KEY));
}
getPreferenceScreen().findPreference(CONTRIBUTE_TO_CROWDMAP).setDependency(FIXED_SESSIONS_STREAMING);
offsetPreference.setOnPreferenceChangeListener(offset60DbInputListener);
}
@Override
protected void onResume()
{
super.onResume();
Preference account = getPreferenceScreen().findPreference(ACCOUNT_KEY);
if (settingsHelper.hasCredentials())
{
String email = settingsHelper.getUserLogin();
String text = String.format(profileTemplate, email);
account.setSummary(text);
}
else
{
account.setSummary(R.string.profile_summary);
}
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
{
if (ACCOUNT_KEY.equals(preference.getKey()))
{
signInOrOut();
return true;
}
else if (EXTERNAL_SENSOR_KEY.equals(preference.getKey()))
{
startActivity(new Intent(this, ExternalSensorActivity.class));
return true;
}
else if (MEASUREMENT_STREAMS_KEY.equals(preference.getKey()))
{
Intents.startStreamsActivity(this);
return true;
}
else if (BACKEND_SETTINGS_KEY.equals(preference.getKey()))
{
startActivity(new Intent(this, BackendSettingsActivity.class));
return true;
}
else if (DISABLE_MAPS_KEY.equals(preference.getKey()))
{
startActivity(new Intent(this, DisableMapSettingsActivity.class));
return true;
}
else
{
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
private void signInOrOut()
{
if (settingsHelper.hasCredentials())
{
startActivity(new Intent(this, SignOutActivity.class));
}
else
{
startActivity(new Intent(this, ProfileActivity.class));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
return mainMenu.create(this, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return mainMenu.handleClick(this, item);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key)
{
if (!settingsHelper.validateFormat(key))
{
Toast.makeText(context, R.string.setting_error, Toast.LENGTH_LONG).show();
}
else if (key.equals(SettingsHelper.AVERAGING_TIME) && !settingsHelper.validateAveragingTime())
{
Toast.makeText(context, R.string.averaging_time_error, Toast.LENGTH_LONG).show();
}
}
class Offset60DbInputListener implements Preference.OnPreferenceChangeListener
{
@Override
public boolean onPreferenceChange(Preference preference, Object newValue)
{
{
if (newValue != null)
{
try
{
int newOffset = Integer.parseInt(newValue.toString());
if (settingsHelper.validateOffset60DB(newOffset))
{
return true;
}
}
catch (NumberFormatException ignore)
{
}
}
Toast.makeText(SettingsActivity.this, R.string.offset_error, Toast.LENGTH_LONG).show();
return false;
}
}
}
}