/*
* Copyright (C) 2014 Nafundi
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.odk.collect.android.preferences;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceManager;
import android.text.InputFilter;
import android.text.Spanned;
import android.widget.Toast;
import org.odk.collect.android.R;
import org.odk.collect.android.application.Collect;
import org.odk.collect.android.utilities.UrlUtils;
import org.odk.collect.android.utilities.WebUtils;
/**
* Handles aggregate specific preferences.
*
* @author Carl Hartung (chartung@nafundi.com)
*/
public class AggregatePreferencesActivity extends PreferenceActivity {
protected EditTextPreference mServerUrlPreference;
protected EditTextPreference mUsernamePreference;
protected EditTextPreference mPasswordPreference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.aggregate_preferences);
mServerUrlPreference = (EditTextPreference) findPreference(PreferencesActivity.KEY_SERVER_URL);
mUsernamePreference = (EditTextPreference) findPreference(PreferencesActivity.KEY_USERNAME);
mPasswordPreference = (EditTextPreference) findPreference(PreferencesActivity.KEY_PASSWORD);
PreferenceCategory aggregatePreferences = (PreferenceCategory) findPreference(getString(R.string.aggregate_preferences));
mServerUrlPreference
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
String url = newValue.toString();
// remove all trailing "/"s
while (url.endsWith("/")) {
url = url.substring(0, url.length() - 1);
}
if (UrlUtils.isValidUrl(url)) {
preference.setSummary(newValue.toString());
return true;
} else {
Toast.makeText(getApplicationContext(),
R.string.url_error, Toast.LENGTH_SHORT)
.show();
return false;
}
}
});
mServerUrlPreference.setSummary(mServerUrlPreference.getText());
mServerUrlPreference.getEditText().setFilters(
new InputFilter[] { getReturnFilter() });
mUsernamePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence) newValue);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String server = settings.getString(PreferencesActivity.KEY_SERVER_URL, getString(R.string.default_server_url));
Uri u = Uri.parse(server);
WebUtils.clearHostCredentials(u.getHost());
Collect.getInstance().getCookieStore().clear();
return true;
}
});
mUsernamePreference.setSummary(mUsernamePreference.getText());
mUsernamePreference.getEditText().setFilters(
new InputFilter[] { getReturnFilter() });
mPasswordPreference
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
String pw = newValue.toString();
if (pw.length() > 0) {
mPasswordPreference.setSummary("********");
} else {
mPasswordPreference.setSummary("");
}
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String server = settings.getString(PreferencesActivity.KEY_SERVER_URL, getString(R.string.default_server_url));
Uri u = Uri.parse(server);
WebUtils.clearHostCredentials(u.getHost());
Collect.getInstance().getCookieStore().clear();
return true;
}
});
if (mPasswordPreference.getText() != null
&& mPasswordPreference.getText().length() > 0) {
mPasswordPreference.setSummary("********");
}
mPasswordPreference.getEditText().setFilters(
new InputFilter[] { getReturnFilter() });
}
/**
* Disallows carriage returns from user entry
*
* @return
*/
protected InputFilter getReturnFilter() {
InputFilter returnFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (Character.getType((source.charAt(i))) == Character.CONTROL) {
return "";
}
}
return null;
}
};
return returnFilter;
}
protected InputFilter getWhitespaceFilter() {
InputFilter whitespaceFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (Character.isWhitespace(source.charAt(i))) {
return "";
}
}
return null;
}
};
return whitespaceFilter;
}
}