~cmiller/ubuntuone-android-music/goog-analytics

« back to all changes in this revision

Viewing changes to src/net/sourceforge/subsonic/android/activity/SettingsActivity.java

  • Committer: sindre_mehus
  • Date: 2009-10-03 08:14:28 UTC
  • Revision ID: svn-v4:24148959-8e0e-0410-9c20-a6ce11f09cd5:trunk/subsonic-android:1069
Android: Changed package name.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package net.sourceforge.subsonic.android.activity;
2
 
 
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;
18
 
 
19
 
import java.net.URL;
20
 
import java.util.Map;
21
 
import java.util.HashMap;
22
 
import java.util.List;
23
 
import java.util.ArrayList;
24
 
import java.util.LinkedHashMap;
25
 
 
26
 
public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
27
 
 
28
 
    private static final String TAG = SettingsActivity.class.getSimpleName();
29
 
    private final Map<String, ServerSettings> serverSettings = new LinkedHashMap<String, ServerSettings>();
30
 
    private ListPreference serverInstance;
31
 
 
32
 
    @Override
33
 
    public void onCreate(Bundle savedInstanceState) {
34
 
        super.onCreate(savedInstanceState);
35
 
        addPreferencesFromResource(R.xml.settings);
36
 
 
37
 
        serverInstance = (ListPreference) findPreference("serverInstance");
38
 
        Preference testConnection = findPreference("testConnection");
39
 
        testConnection.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
40
 
            @Override
41
 
            public boolean onPreferenceClick(Preference preference) {
42
 
                testConnection();
43
 
                return false;
44
 
            }
45
 
        });
46
 
 
47
 
 
48
 
        for (int i = 1; i <= 3; i++) {
49
 
            String instance = String.valueOf(i);
50
 
            serverSettings.put(instance, new ServerSettings(instance));
51
 
        }
52
 
 
53
 
        SharedPreferences prefs = getSharedPreferences(Constants.PREFERENCES_FILE_NAME, 0);
54
 
        prefs.registerOnSharedPreferenceChangeListener(this);
55
 
 
56
 
        update();
57
 
    }
58
 
 
59
 
    @Override
60
 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
61
 
        update();
62
 
    }
63
 
 
64
 
    private void update() {
65
 
        String instance = serverInstance.getValue();
66
 
        ServerSettings serverSetting = serverSettings.get(instance);
67
 
        serverInstance.setSummary(serverSetting.serverName.getText());
68
 
 
69
 
        List<String> entries = new ArrayList<String>();
70
 
        for (ServerSettings ss : serverSettings.values()) {
71
 
            ss.update();
72
 
            entries.add(ss.serverName.getText());
73
 
        }
74
 
        serverInstance.setEntries(entries.toArray(new CharSequence[entries.size()]));
75
 
    }
76
 
 
77
 
    private void testConnection() {
78
 
        BackgroundTask<Boolean> task = new BackgroundTask<Boolean>(this) {
79
 
            @Override
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);
85
 
            }
86
 
 
87
 
            @Override
88
 
            protected void done(Boolean licenseValid) {
89
 
                if (licenseValid) {
90
 
                    Util.toast(SettingsActivity.this, "Connection is OK");
91
 
                } else {
92
 
                    Util.toast(SettingsActivity.this, "Connection is OK. Server unlicensed.");
93
 
                }
94
 
            }
95
 
 
96
 
            @Override
97
 
            protected void cancel() {
98
 
            }
99
 
 
100
 
            @Override
101
 
            protected void error(Throwable error) {
102
 
                Log.w(TAG, error.toString(), error);
103
 
                new ErrorDialog(SettingsActivity.this, "Connection failure. " + getErrorMessage(error), false);
104
 
            }
105
 
        };
106
 
        task.execute();
107
 
    }
108
 
 
109
 
    private class ServerSettings {
110
 
        private EditTextPreference serverName;
111
 
        private EditTextPreference serverUrl;
112
 
        private EditTextPreference username;
113
 
        private PreferenceScreen screen;
114
 
 
115
 
        private ServerSettings(String instance) {
116
 
 
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);
121
 
 
122
 
            serverUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
123
 
                @Override
124
 
                public boolean onPreferenceChange(Preference preference, Object value) {
125
 
                    try {
126
 
                        new URL((String) value);
127
 
                    } catch (Exception x) {
128
 
                        new ErrorDialog(SettingsActivity.this, "Please specify a valid URL.", false);
129
 
                        return false;
130
 
                    }
131
 
                    return true;
132
 
                }});
133
 
        }
134
 
 
135
 
        public void update() {
136
 
            serverName.setSummary(serverName.getText());
137
 
            serverUrl.setSummary(serverUrl.getText());
138
 
            username.setSummary(username.getText());
139
 
 
140
 
            screen.setTitle(""); // Work-around for missing update of screen summary.
141
 
            screen.setSummary(serverUrl.getText());
142
 
            screen.setTitle(serverName.getText());
143
 
        }
144
 
    }
145
 
}
 
 
b'\\ No newline at end of file'