/*
* Copyright (C) 2007-2008 Esmertec AG. Copyright (C) 2007-2008 The Android Open
* Source Project
*
* 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 info.guardianproject.otr.app.im.app;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import info.guardianproject.otr.app.im.R;
import info.guardianproject.otr.app.im.provider.Imps;
import info.guardianproject.otr.app.im.service.ImServiceConstants;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.widget.Toast;
public class AccountSettingsActivity extends SherlockPreferenceActivity implements
OnSharedPreferenceChangeListener {
private long mProviderId;
private EditTextPreference mXmppResource;
private EditTextPreference mXmppResourcePrio;
private EditTextPreference mPort;
private EditTextPreference mServer;
private CheckBoxPreference mAllowPlainAuth;
private CheckBoxPreference mRequireTls;
private CheckBoxPreference mDoDnsSrv;
private void setInitialValues() {
ContentResolver cr = getContentResolver();
Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(cr,
mProviderId, false /* keep updated */, null /* no handler */);
String text;
text = settings.getXmppResource();
mXmppResource.setText(text);
if (text != null) {
mXmppResource.setSummary(text);
}
text = Integer.toString(settings.getXmppResourcePrio());
mXmppResourcePrio.setText(text);
if (text != null) {
mXmppResourcePrio.setSummary(text);
}
text = Integer.toString(settings.getPort());
mPort.setText(text);
if (text != null && settings.getPort() != 5222 && settings.getPort() != 0) {
mPort.setSummary(text);
}
text = settings.getServer();
mServer.setText(text);
if (text != null) {
mServer.setSummary(text);
}
mAllowPlainAuth.setChecked(settings.getAllowPlainAuth());
mRequireTls.setChecked(settings.getRequireTls());
mDoDnsSrv.setChecked(settings.getDoDnsSrv());
settings.close();
}
/* save the preferences in Imps so they are accessible everywhere */
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
final Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(
getContentResolver(), mProviderId, false /* don't keep updated */, null /* no handler */);
String value;
if (key.equals("pref_account_xmpp_resource")) {
value = prefs.getString(key, null);
settings.setXmppResource(value);
if (value != null) {
value = value.trim();
mXmppResource.setSummary(value);
mXmppResource.setText(value); // In case it was trimmed
}
} else if (key.equals("pref_account_xmpp_resource_prio")) {
value = prefs.getString(key, "20");
try {
settings.setXmppResourcePrio(Integer.parseInt(value));
} catch (NumberFormatException nfe) {
Toast.makeText(getBaseContext(),
"Priority must be a number in the range [0 .. 127]", Toast.LENGTH_SHORT)
.show();
}
mXmppResourcePrio.setSummary(value);
} else if (key.equals("pref_account_port")) {
value = prefs.getString(key, "0");
try {
settings.setPort(Integer.parseInt(value));
} catch (NumberFormatException nfe) {
Toast.makeText(getBaseContext(), "Port number must be a number", Toast.LENGTH_SHORT)
.show();
}
if (settings.getPort() != 5222 && settings.getPort() != 0)
mPort.setSummary(value);
} else if (key.equals("pref_account_server")) {
value = prefs.getString(key, null);
settings.setServer(value);
if (value != null) {
value = value.trim();
mServer.setSummary(value);
mServer.setText(value); // In case it was trimmed
}
} else if (key.equals("pref_security_allow_plain_auth")) {
settings.setAllowPlainAuth(prefs.getBoolean(key, false));
} else if (key.equals("pref_security_require_tls")) {
settings.setRequireTls(prefs.getBoolean(key, true));
} else if (key.equals("pref_security_tls_cert_verify")) {
settings.setTlsCertVerify(prefs.getBoolean(key, true));
} else if (key.equals("pref_security_do_dns_srv")) {
settings.setDoDnsSrv(prefs.getBoolean(key, true));
}
settings.setShowMobileIndicator(true);
settings.close();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set dummy name for preferences so that they don't mix with global ones.
// FIXME we should not be writing these out to a file, since they are written to
// the DB in onSharedPreferenceChanged().
getPreferenceManager().setSharedPreferencesName("account");
addPreferencesFromResource(R.xml.account_settings);
Intent intent = getIntent();
mProviderId = intent.getLongExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, -1);
if (mProviderId < 0) {
Log.e(ImApp.LOG_TAG, "AccountSettingsActivity intent requires provider id extra");
throw new RuntimeException(
"AccountSettingsActivity must be created with an provider id");
}
mXmppResource = (EditTextPreference) findPreference(("pref_account_xmpp_resource"));
mXmppResourcePrio = (EditTextPreference) findPreference(("pref_account_xmpp_resource_prio"));
mPort = (EditTextPreference) findPreference(("pref_account_port"));
mServer = (EditTextPreference) findPreference(("pref_account_server"));
mAllowPlainAuth = (CheckBoxPreference) findPreference(("pref_security_allow_plain_auth"));
mRequireTls = (CheckBoxPreference) findPreference(("pref_security_require_tls"));
mDoDnsSrv = (CheckBoxPreference) findPreference(("pref_security_do_dns_srv"));
}
@Override
protected void onResume() {
super.onResume();
setInitialValues();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
this);
}
}