<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- <service android:name="Task">
- </service>
+ <activity android:name="Prefs" />
+ <service android:name="Task" />
</application>
</manifest>
android:title="Connect" />
<item android:id="@+id/disconnect"
android:title="Disconnect" />
+ <item android:id="@+id/settings"
+ android:title="Settings" />
<item android:id="@+id/exit"
android:title="Exit" />
</menu>
--- /dev/null
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <PreferenceCategory
+ android:title="Connection settings"
+ android:key="pref_conn">
+ <EditTextPreference
+ android:key="pref_server"
+ android:summary="IRC Server to Hostname"
+ android:title="Server"
+ android:defaultValue="irc.freenode.net" />
+ <EditTextPreference
+ android:key="pref_port"
+ android:summary="TCP Port for IRC on Server"
+ android:title="Port"
+ android:numeric="integer"
+ android:defaultValue="6667" />
+ </PreferenceCategory>
+ <PreferenceCategory
+ android:title="User settings"
+ android:key="pref_user">
+ <EditTextPreference
+ android:key="pref_nickname"
+ android:summary="Prefered IRC Nickname"
+ android:title="Nickname"
+ android:defaultValue="andydroid" />
+ <EditTextPreference
+ android:key="pref_channel"
+ android:summary="IRC Channel to Join"
+ android:title="Channel"
+ android:defaultValue="#rhnoise" />
+ </PreferenceCategory>
+ <PreferenceCategory
+ android:title="Authentication settings"
+ android:key="pref_user">
+ <CheckBoxPreference
+ android:key="pref_usesasl"
+ android:summary="Use SASL Plain for Authentication"
+ android:title="Use SASL"
+ android:defaultValue="false" />
+ <EditTextPreference
+ android:key="pref_authname"
+ android:summary="Username for SASL Authentication"
+ android:title="Nickname"
+ android:defaultValue="" />
+ <EditTextPreference
+ android:key="pref_password"
+ android:summary="Password for SASL Authentication"
+ android:title="Password"
+ android:defaultValue="" />
+ </PreferenceCategory>
+</PreferenceScreen>
public class Client
{
- /* Private data */
- private String server = null;
- private int port = 6667;
- private String nickname = null;
- private String channel = null;
- private String username = null;
- private String hostname = null;
-
- private Socket socket = null;
- private BufferedReader input = null;
- private PrintWriter output = null;
-
- private int mangle = 0;
+ /* Preference data */
+ public String server = "irc.freenode.net";
+ public int port = 6667;
+ public String nickname = "SpadeGuest";
+ public String channel = "#rhnoise";
+ public boolean usesasl = false;
+ public String authname = "";
+ public String password = "";
+ public String username = "user";
+ public String hostname = "localhost";
/* Public data */
public boolean ready = false;
+ /* Connection data */
+ private Socket socket;
+ private BufferedReader input;
+ private PrintWriter output;
+
+ /* Private data */
+ private int mangle;
+
/* Public Methods */
- public Client(String username, String hostname)
+ public Client()
{
- this.username = username;
- this.hostname = hostname;
Os.debug("Client: create");
}
- public Client()
+ public void setServer(String server, int port)
{
- this("user", "localhost");
+ this.server = server;
+ this.port = port;
}
- public boolean connect(String server, String nickname, String channel)
+ public void setAuth(boolean usesasl, String authname, String password)
{
- Os.debug("Client: connect");
+ this.usesasl = usesasl;
+ this.authname = authname;
+ this.password = password;
+ }
- this.server = server;
+ public void setUser(String nickname, String channel)
+ {
this.nickname = nickname;
this.channel = channel;
+ }
+
+ public boolean connect()
+ {
+ Os.debug("Client: connect");
try {
this.socket = new Socket(this.server, this.port);
import android.os.Handler;
import android.os.Messenger;
import android.text.method.ScrollingMovementMethod;
-import android.view.View;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
-import android.widget.TextView;
import android.widget.ScrollView;
import android.widget.TabHost;
import android.widget.TabWidget;
+import android.widget.TextView;
import android.widget.Toast;
+import android.preference.PreferenceActivity;
+
public class Main extends Activity
{
/* Static data */
case R.id.disconnect:
this.stopService();
return true;
+ case R.id.settings:
+ this.startActivity(new Intent(this, Prefs.class));
+ return true;
case R.id.exit:
this.stopService();
this.finish();
}
}
}
-
--- /dev/null
+package org.pileus.spades;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+public class Prefs extends PreferenceActivity
+{
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.prefs);
+ }
+}
import android.app.Service;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.os.IBinder;
import android.os.Looper;
import android.os.Messenger;
+import android.preference.PreferenceManager;
public class Task extends Service implements Runnable
{
public static final int DISCONNECT = 3;
public static final int NOTIFY = 4;
- /* Configuration */
- private String server = "irc.freenode.net";
- private String nickname = "andydroid";
- private String channel = "#rhnoise";
-
/* Private data */
- private Messenger messenger = null;
- private Thread thread = null;
- private Client client = null;
+ private SharedPreferences prefs;
+ private Messenger messenger;
+ private Thread thread;
+ private Client client;
/* Private methods */
private void command(int cmd, Object value)
// Setup notification bar
this.notify("Connecting..", android.R.drawable.presence_invisible);
+ // Grab preferences
+ String server = this.prefs.getString ("pref_server", this.client.server);
+ String port = this.prefs.getString ("pref_port", this.client.port + "");
+ String nickname = this.prefs.getString ("pref_nickname", this.client.nickname);
+ String channel = this.prefs.getString ("pref_channel", this.client.channel);
+ boolean usesasl = this.prefs.getBoolean("pref_usesasl", this.client.usesasl);
+ String authname = this.prefs.getString ("pref_authname", this.client.authname);
+ String password = this.prefs.getString ("pref_password", this.client.password);
+
+ // Update client settings
+ this.client.setServer(server, Integer.parseInt(port));
+ this.client.setUser(nickname, channel);
+ this.client.setAuth(usesasl, authname, password);
+
// Start connecting
- if (!this.client.connect(server, nickname, channel)) {
+ if (!this.client.connect()) {
this.command(DISCONNECT, null);
this.notify("Unable to connect", android.R.drawable.presence_offline);
this.thread = null;
Os.debug("Task: onCreate");
super.onCreate();
- // Create the client
this.client = new Client();
+ this.prefs = PreferenceManager.getDefaultSharedPreferences(this);
}
-
+
@Override
public void onDestroy()
{
Os.debug("Task: error stopping service", e);
}
}
-
+
@Override
public void onStart(Intent intent, int startId)
{