1
package net.sourceforge.subsonic.android.activity;
3
import android.os.Bundle;
4
import android.preference.EditTextPreference;
5
import android.preference.Preference;
6
import android.preference.PreferenceActivity;
7
import android.preference.PreferenceScreen;
8
import android.preference.ListPreference;
9
import android.content.SharedPreferences;
10
import android.util.Log;
11
import net.sourceforge.subsonic.android.R;
12
import net.sourceforge.subsonic.android.service.MusicService;
13
import net.sourceforge.subsonic.android.service.MusicServiceFactory;
14
import net.sourceforge.subsonic.android.util.BackgroundTask;
15
import net.sourceforge.subsonic.android.util.Constants;
16
import net.sourceforge.subsonic.android.util.ErrorDialog;
17
import net.sourceforge.subsonic.android.util.Util;
21
import java.util.HashMap;
22
import java.util.List;
23
import java.util.ArrayList;
24
import java.util.LinkedHashMap;
26
public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
28
private static final String TAG = SettingsActivity.class.getSimpleName();
29
private final Map<String, ServerSettings> serverSettings = new LinkedHashMap<String, ServerSettings>();
30
private ListPreference serverInstance;
33
public void onCreate(Bundle savedInstanceState) {
34
super.onCreate(savedInstanceState);
35
addPreferencesFromResource(R.xml.settings);
37
serverInstance = (ListPreference) findPreference("serverInstance");
38
Preference testConnection = findPreference("testConnection");
39
testConnection.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
41
public boolean onPreferenceClick(Preference preference) {
48
for (int i = 1; i <= 3; i++) {
49
String instance = String.valueOf(i);
50
serverSettings.put(instance, new ServerSettings(instance));
53
SharedPreferences prefs = getSharedPreferences(Constants.PREFERENCES_FILE_NAME, 0);
54
prefs.registerOnSharedPreferenceChangeListener(this);
60
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
64
private void update() {
65
String instance = serverInstance.getValue();
66
ServerSettings serverSetting = serverSettings.get(instance);
67
serverInstance.setSummary(serverSetting.serverName.getText());
69
List<String> entries = new ArrayList<String>();
70
for (ServerSettings ss : serverSettings.values()) {
72
entries.add(ss.serverName.getText());
74
serverInstance.setEntries(entries.toArray(new CharSequence[entries.size()]));
77
private void testConnection() {
78
BackgroundTask<Boolean> task = new BackgroundTask<Boolean>(this) {
80
protected Boolean doInBackground() throws Throwable {
81
updateProgress("Testing connection...");
82
MusicService musicService = MusicServiceFactory.getMusicService();
83
musicService.ping(SettingsActivity.this, this);
84
return musicService.isLicenseValid(SettingsActivity.this, null);
88
protected void done(Boolean licenseValid) {
90
Util.toast(SettingsActivity.this, "Connection is OK");
92
Util.toast(SettingsActivity.this, "Connection is OK. Server unlicensed.");
97
protected void cancel() {
101
protected void error(Throwable error) {
102
Log.w(TAG, error.toString(), error);
103
new ErrorDialog(SettingsActivity.this, "Connection failure. " + getErrorMessage(error), false);
109
private class ServerSettings {
110
private EditTextPreference serverName;
111
private EditTextPreference serverUrl;
112
private EditTextPreference username;
113
private PreferenceScreen screen;
115
private ServerSettings(String instance) {
117
screen = (PreferenceScreen) findPreference("server" + instance);
118
serverName = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_NAME + instance);
119
serverUrl = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_URL + instance);
120
username = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_USERNAME + instance);
122
serverUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
124
public boolean onPreferenceChange(Preference preference, Object value) {
126
new URL((String) value);
127
} catch (Exception x) {
128
new ErrorDialog(SettingsActivity.this, "Please specify a valid URL.", false);
135
public void update() {
136
serverName.setSummary(serverName.getText());
137
serverUrl.setSummary(serverUrl.getText());
138
username.setSummary(username.getText());
140
screen.setTitle(""); // Work-around for missing update of screen summary.
141
screen.setSummary(serverUrl.getText());
142
screen.setTitle(serverName.getText());
b'\\ No newline at end of file'