src/com/beem/project/beem/ui/CreateAccount.java
changeset 212 bbc0b169cdf0
child 256 35f81983d351
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/ui/CreateAccount.java	Tue May 26 19:56:38 2009 +0200
@@ -0,0 +1,244 @@
+package com.beem.project.beem.ui;
+
+import org.jivesoftware.smack.AccountManager;
+import org.jivesoftware.smack.ConnectionConfiguration;
+import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smack.proxy.ProxyInfo;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import com.beem.project.beem.R;
+
+/**
+ * This class represents an activity which allows the user to create an account on the XMPP server
+ * saved in settings
+ * 
+ * @author dasilvj
+ */
+public class CreateAccount extends Activity {
+
+    private final static boolean DEFAULT_BOOLEAN_VALUE = false;
+    private final static String  DEFAULT_STRING_VALUE  = "";
+    private final static int     DEFAULT_INT_VALUE     = 0;
+
+    private final static String  DEFAULT_XMPP_PORT     = "5222";
+
+    private final static int     NOTIFICATION_DURATION = Toast.LENGTH_SHORT;
+
+    private SharedPreferences    settings              = null;
+    private Button               createAccountButton   = null;
+
+    /**
+     * Check if the fields password and confirm password match
+     * 
+     * @return return true if password & confirm password fields match, else false
+     */
+    private boolean checkPasswords() {
+	final String passwordFieldValue = ((EditText) findViewById(R.id.create_account_password)).getText().toString();
+	final String passwordConfirmFielddValue = ((EditText) findViewById(R.id.create_account_confirm_password))
+	        .getText().toString();
+
+	if (passwordFieldValue.equals(passwordConfirmFielddValue))
+	    return (true);
+	return (false);
+    }
+
+    /**
+     * Create an account on the XMPP server specified in settings
+     */
+    private void createAccount(String username, String password) {
+	XMPPConnection xmppConnection = null;
+	ConnectionConfiguration connectionConfiguration = null;
+
+	if (getRegisteredProxy() != null) {
+	    connectionConfiguration = new ConnectionConfiguration(getRegisteredXMPPServer(), getRegisteredXMPPPort(),
+		    getRegisteredProxy());
+	} else {
+	    connectionConfiguration = new ConnectionConfiguration(getRegisteredXMPPServer(), getRegisteredXMPPPort());
+	}
+	if (getRegisteredXMPPTLSUse())
+	    connectionConfiguration.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
+
+	xmppConnection = new XMPPConnection(connectionConfiguration);
+	try {
+	    xmppConnection.connect();
+	    AccountManager accountManager = new AccountManager(xmppConnection);
+	    accountManager.createAccount(username, password);
+	    Toast toast = Toast.makeText(getApplicationContext(), "Account " + username + " "
+		    + getString(R.string.create_account_successfull_after), NOTIFICATION_DURATION);
+	    toast.show();
+	} catch (XMPPException e) {
+	    Log.e(getString(R.string.create_account_tag), e.getMessage());
+	    createErrorDialog(e.getMessage());
+	}
+	xmppConnection.disconnect();
+    }
+
+    /**
+     * Create a dialog containing an error message
+     * 
+     * @param errMsg
+     *            the error message
+     */
+    private void createErrorDialog(String errMsg) {
+	Log.v(getString(R.string.create_account_tag), errMsg);
+	AlertDialog.Builder builder = new AlertDialog.Builder(this);
+	builder.setTitle(R.string.create_account_err_dialog_title).setMessage(errMsg).setCancelable(false);
+	builder.setNeutralButton(R.string.create_account_close_dialog_button, new DialogInterface.OnClickListener() {
+
+	    @Override
+	    public void onClick(DialogInterface dialog, int which) {
+		dialog.cancel();
+	    }
+	});
+	AlertDialog settingsErrDialog = builder.create();
+	settingsErrDialog.show();
+    }
+
+    /**
+     * Retrive proxy informations from the preferences
+     * 
+     * @return Registered proxy informations
+     */
+    private ProxyInfo getRegisteredProxy() {
+	if (getRegisteredProxyUse()) {
+	    ProxyInfo proxyInfo = new ProxyInfo(getRegisteredProxyType(), getRegisteredProxyServer(),
+		    getRegisteredProxyPort(), getRegisteredProxyUsername(), getRegisteredProxyPassword());
+	    return (proxyInfo);
+	}
+	return (null);
+    }
+
+    /**
+     * Retrieve proxy password from the preferences
+     * 
+     * @return Registered proxy password
+     */
+    private String getRegisteredProxyPassword() {
+	return (settings.getString(getString(R.string.settings_key_proxy_password), DEFAULT_STRING_VALUE));
+    }
+
+    /**
+     * Retrieve proxy port from the preferences
+     * 
+     * @return Registered proxy port
+     */
+    private int getRegisteredProxyPort() {
+	return (Integer.parseInt(settings.getString(getString(R.string.settings_key_proxy_port), DEFAULT_STRING_VALUE)));
+    }
+
+    /**
+     * Retrieve proxy server from the preferences
+     * 
+     * @return Registered proxy server
+     */
+    private String getRegisteredProxyServer() {
+	return (settings.getString(getString(R.string.settings_key_proxy_server), DEFAULT_STRING_VALUE));
+    }
+
+    /**
+     * Retrieve proxy type from the preferences
+     * 
+     * @return Registered proxy type
+     */
+    private ProxyInfo.ProxyType getRegisteredProxyType() {
+	switch (settings.getInt(getString(R.string.settings_key_proxy_type), DEFAULT_INT_VALUE)) {
+	case 0:
+	    return ProxyInfo.ProxyType.HTTP;
+	case 1:
+	    return ProxyInfo.ProxyType.SOCKS4;
+	case 2:
+	    Log.i(getString(R.string.create_account_tag), "SOCKS5 PROXY");
+	    return ProxyInfo.ProxyType.SOCKS5;
+	default:
+	    return ProxyInfo.ProxyType.NONE;
+	}
+    }
+
+    /**
+     * Retrieve proxy use from the preferences
+     * 
+     * @return Registered proxy use
+     */
+    private boolean getRegisteredProxyUse() {
+	return (settings.getBoolean(getString(R.string.settings_key_proxy_use), DEFAULT_BOOLEAN_VALUE));
+    }
+
+    /**
+     * Retrieve proxy username from the preferences
+     * 
+     * @return Registered proxy username
+     */
+    private String getRegisteredProxyUsername() {
+	return (settings.getString(getString(R.string.settings_key_proxy_username), DEFAULT_STRING_VALUE));
+    }
+
+    /**
+     * Retrieve xmpp port from the preferences
+     * 
+     * @return Registered xmpp port
+     */
+    private int getRegisteredXMPPPort() {
+	return (Integer.parseInt(settings.getString(getString(R.string.settings_key_xmpp_port), DEFAULT_XMPP_PORT)));
+    }
+
+    /**
+     * Retrieve xmpp server from the preferences
+     * 
+     * @return Registered xmpp server
+     */
+    private String getRegisteredXMPPServer() {
+	return (settings.getString(getString(R.string.settings_key_xmpp_server), DEFAULT_STRING_VALUE));
+    }
+
+    /**
+     * Retrieve TLS use from the preferences
+     * 
+     * @return Registered TLS use
+     */
+    private boolean getRegisteredXMPPTLSUse() {
+	return (settings.getBoolean(getString(R.string.settings_key_xmpp_tls_use), DEFAULT_BOOLEAN_VALUE));
+    }
+
+    /**
+     * Initialize the "Create this account" button which allows the user to create an account
+     */
+    private void initCreateAccountButton() {
+	createAccountButton = (Button) findViewById(R.id.create_account_button);
+	createAccountButton.setOnClickListener(new View.OnClickListener() {
+
+	    public void onClick(View v) {
+		String usernameFieldValue = ((EditText) findViewById(R.id.create_account_username)).getText()
+		        .toString();
+		String passwordFieldValue = ((EditText) findViewById(R.id.create_account_password)).getText()
+		        .toString();
+
+		if (!checkPasswords())
+		    createErrorDialog(getString(R.string.create_account_err_passwords));
+		else
+		    createAccount(usernameFieldValue, passwordFieldValue);
+	    }
+	});
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+	super.onCreate(savedInstanceState);
+	setContentView(R.layout.create_account);
+	initCreateAccountButton();
+	settings = getSharedPreferences(getString(R.string.settings_filename), MODE_PRIVATE);
+    }
+}