package edu.mit.mobile.android.locast;
/*
* Copyright (C) 2010 MIT Mobile Experience Lab
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
import edu.mit.mobile.android.locast.net.NetworkClient;
import edu.mit.mobile.android.locast.ver2.R;
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener, OnPreferenceChangeListener {
private static final int REQUEST_RESET_DB = 0;
private static final String TAG = SettingsActivity.class.getSimpleName();
private String newUrl;
private PreferenceScreen preferenceScreen;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preferences);
preferenceScreen = getPreferenceScreen();
}
@Override
protected void onResume() {
super.onResume();
preferenceScreen.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
preferenceScreen.getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
private void setUrl(String newUrl){
final Editor editor = preferenceScreen.getSharedPreferences().edit();
editor.putString(NetworkClient.PREF_SERVER_URL, newUrl);
editor.commit();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case REQUEST_RESET_DB:
if (resultCode == RESULT_OK){
setUrl(newUrl);
finish();
}else if (resultCode == RESULT_CANCELED){
// reset the URL to the currently entered one
final ListPreference pref = (ListPreference) preferenceScreen.findPreference(NetworkClient.PREF_LOCAST_SITE);
if (pref != null){
pref.setValue(preferenceScreen.getSharedPreferences().getString(NetworkClient.PREF_SERVER_URL, null));
}
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(NetworkClient.PREF_LOCAST_SITE)){
final String newUrl = sharedPreferences.getString(NetworkClient.PREF_LOCAST_SITE, null);
// only do this if something's actually changed.
if (newUrl != null && !newUrl.equals(sharedPreferences.getString(NetworkClient.PREF_SERVER_URL, null))){
setUrl(newUrl);
// TODO this needs to ensure that the prefereces are up to date
}
}
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final String key = preference.getKey();
if (key.equals(NetworkClient.PREF_SERVER_URL)) {
String baseurl = (String) newValue;
if (!baseurl.endsWith("/")) {
if (Constants.DEBUG) {
Log.w(TAG, "Baseurl in preferences (" + baseurl
+ ") didn't end in a slash, so we added one.");
}
baseurl = baseurl + "/";
}
}
return true;
}
}