package com.boombuler.piraten.map;
import java.util.List;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.text.Html;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.view.MenuItem;
import android.widget.TextView;
import com.boombuler.piraten.map.data.DBAdapter;
import com.boombuler.piraten.map.data.ServerInfo;
public class SettingsActivity extends PreferenceActivity implements OnPreferenceChangeListener, OnPreferenceClickListener {
public static final String KEY_USERNAME = "username";
public static final String KEY_PASSWORD = "password";
public static final String KEY_ACCURACY = "accuracy";
public static final String KEY_SYNC_RANGE = "sync_range";
public static final String KEY_RETURN_TO_MY_LOCATION = "return_to_my_location";
public static final String KEY_SERVER = "sync_server";
public static final String KEY_HAS_SYNCED = "has_synced_before";
private static final String KEY_ABOUT_SERVER = "about_server";
private ListPreference mServerPref;
private List<ServerInfo> mServerList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
mServerPref = (ListPreference)findPreference(KEY_SERVER);
FetchServerList.Load(this, new Runnable() {
@Override
public void run() {
DBAdapter dba = new DBAdapter(SettingsActivity.this);
dba.open();
try {
mServerList = dba.GetServers(false);
}
finally {
dba.close();
}
String[] serverNames = new String[mServerList.size()];
String[] serverURLs = new String[mServerList.size()];
for (int i = 0; i < mServerList.size(); i++) {
serverNames[i] = mServerList.get(i).getName();
serverURLs[i] = mServerList.get(i).getURL();
}
mServerPref.setEntries(serverNames);
mServerPref.setEntryValues(serverURLs);
mServerPref.setOnPreferenceChangeListener(SettingsActivity.this);
}
});
findPreference(KEY_ABOUT_SERVER).setOnPreferenceClickListener(this);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
if (item.getItemId() == android.R.id.home) {
this.finish();
return true;
}
}
return super.onOptionsItemSelected(item);
}
public boolean onPreferenceChange(Preference preference, Object newValue) {
final String nv = (String)newValue;
final Preference pref = preference;
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (prefs.getString(KEY_SERVER, "").equals(nv))
return false;
new AlertDialog.Builder(this)
.setMessage(getString(R.string.ask_server_change))
.setTitle(android.R.string.dialog_alert_title)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(KEY_HAS_SYNCED, false);
edit.putString(KEY_SERVER, nv);
DBAdapter dba = new DBAdapter(SettingsActivity.this);
try {
dba.open();
dba.ClearAllData();
} finally {
dba.close();
}
((ListPreference)pref).setValue(nv);
edit.commit();
}
}).setNegativeButton(android.R.string.no, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setCancelable(true)
.show();
return false;
}
private String getServerInfo() {
String serv = mServerPref.getValue();
for (ServerInfo si : mServerList) {
if (si.getURL().equalsIgnoreCase(serv)) {
return si.getInfo();
}
}
return null;
}
public boolean onPreferenceClick(Preference preference) {
if (preference.getKey().equals(KEY_ABOUT_SERVER)) {
String serverInfo = getServerInfo();
if (serverInfo == null) {
serverInfo = getResources().getString(R.string.no_server_selected);
}
Spanned htmltext = Html.fromHtml(serverInfo);
AlertDialog dlg = new AlertDialog.Builder(this)
.setMessage(htmltext)
.setTitle(R.string.about_server)
.setIcon(android.R.drawable.ic_dialog_info)
.setPositiveButton(android.R.string.ok, null)
.show();
((TextView)dlg.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
}
return false;
}
}