1
0
mirror of https://github.com/moparisthebest/Yaaic synced 2025-02-16 15:00:14 -05:00

Aliases are now configurable.

This commit is contained in:
Michael Imamura 2010-09-07 10:07:40 +08:00 committed by Sebastian Kaspari
parent b9c1363a2d
commit 288a1a9093
14 changed files with 314 additions and 8 deletions

View File

@ -68,6 +68,10 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
android:label="@string/users" android:label="@string/users"
android:theme="@android:style/Theme.Dialog"> android:theme="@android:style/Theme.Dialog">
</activity> </activity>
<activity
android:name=".activity.AddAliasActivity"
android:theme="@android:style/Theme.Dialog">
</activity>
<activity <activity
android:name=".activity.AddChannelActivity" android:name=".activity.AddChannelActivity"
android:theme="@android:style/Theme.Dialog"> android:theme="@android:style/Theme.Dialog">
@ -85,7 +89,8 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
android:theme="@android:style/Theme.Dialog"> android:theme="@android:style/Theme.Dialog">
</activity> </activity>
<service android:name=".irc.IRCService"></service> <service android:name=".irc.IRCService"></service>
</application>
</application>
<uses-sdk android:minSdkVersion="3" /> <uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission>

48
res/layout/aliasadd.xml Normal file
View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/alias_add_description"
android:padding="5px" />
<ListView
android:id="@+id/aliases"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/alias"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text=""
android:layout_weight="1" />
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ok"
android:text="Ok" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cancel"
android:text="Cancel" />
</LinearLayout>
</LinearLayout>

8
res/layout/aliasitem.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/host"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="7px"
android:text=""
android:textSize="12px" />

View File

@ -108,6 +108,11 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" /> android:singleLine="true" />
<Button
android:id="@+id/aliases"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/aliases" />
<TextView <TextView
android:text="@string/ident" android:text="@string/ident"
android:layout_width="fill_parent" android:layout_width="fill_parent"

View File

@ -22,6 +22,7 @@
<string name="add_server">Add server</string> <string name="add_server">Add server</string>
<string name="select_charset">Select a charset</string> <string name="select_charset">Select a charset</string>
<string name="nickname">Nickname</string> <string name="nickname">Nickname</string>
<string name="aliases">Aliases</string>
<string name="ident">Ident</string> <string name="ident">Ident</string>
<string name="realname">Real Name</string> <string name="realname">Real Name</string>
@ -48,6 +49,7 @@
<string name="action_cancel">Cancel</string> <string name="action_cancel">Cancel</string>
<string name="negative_button">No</string> <string name="negative_button">No</string>
<string name="alias_add_description">These aliases will be used if the main nickname is unavailable.</string>
<string name="channel_add_description">These channels will be automatically joined after connect.</string> <string name="channel_add_description">These channels will be automatically joined after connect.</string>
<string name="command_add_description">These commands will be executed after connect.</string> <string name="command_add_description">These commands will be executed after connect.</string>

View File

@ -2333,7 +2333,7 @@ public abstract class PircBot implements ReplyConstants {
_name = name; _name = name;
} }
protected final void setAliases(Collection<String> aliases) { public final void setAliases(Collection<String> aliases) {
_aliases.clear(); _aliases.clear();
_aliases.addAll(aliases); _aliases.addAll(aliases);
} }

View File

@ -0,0 +1,112 @@
package org.yaaic.activity;
import java.util.ArrayList;
import org.yaaic.R;
import org.yaaic.model.Extra;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class AddAliasActivity extends Activity implements OnClickListener, OnItemClickListener
{
private EditText aliasInput;
private ArrayAdapter<String> adapter;
private ArrayList<String> aliases;
private Button okButton;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.aliasadd);
aliasInput = (EditText) findViewById(R.id.alias);
adapter = new ArrayAdapter<String>(this, R.layout.aliasitem);
ListView list = (ListView) findViewById(R.id.aliases);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
((Button) findViewById(R.id.add)).setOnClickListener(this);
((Button) findViewById(R.id.cancel)).setOnClickListener(this);
okButton = (Button) findViewById(R.id.ok);
okButton.setOnClickListener(this);
okButton.setEnabled(false);
aliases = getIntent().getExtras().getStringArrayList(Extra.ALIASES);
for (String alias : aliases) {
adapter.add(alias);
}
}
/**
* On Click
*/
public void onClick(View v)
{
switch (v.getId()) {
case R.id.add:
String alias = aliasInput.getText().toString().trim();
aliases.add(alias);
adapter.add(alias);
aliasInput.setText("");
okButton.setEnabled(true);
break;
case R.id.cancel:
setResult(RESULT_CANCELED);
finish();
break;
case R.id.ok:
// Get list and return as result
Intent intent = new Intent();
intent.putExtra(Extra.ALIASES, aliases);
setResult(RESULT_OK, intent);
finish();
break;
}
}
/**
* On item clicked
*/
public void onItemClick(AdapterView<?> list, View item, int position, long id)
{
final String alias = adapter.getItem(position);
String[] items = { getResources().getString(R.string.action_remove) };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(alias);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0: // Remove
adapter.remove(alias);
aliases.remove(alias);
okButton.setEnabled(true);
break;
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
}

View File

@ -55,8 +55,10 @@ public class AddServerActivity extends Activity implements OnClickListener
{ {
private static final int REQUEST_CODE_CHANNELS = 1; private static final int REQUEST_CODE_CHANNELS = 1;
private static final int REQUEST_CODE_COMMANDS = 2; private static final int REQUEST_CODE_COMMANDS = 2;
private static final int REQUEST_CODE_ALIASES = 3;
private Server server; private Server server;
private ArrayList<String> aliases;
private ArrayList<String> channels; private ArrayList<String> channels;
private ArrayList<String> commands; private ArrayList<String> commands;
@ -69,11 +71,13 @@ public class AddServerActivity extends Activity implements OnClickListener
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.serveradd); setContentView(R.layout.serveradd);
aliases = new ArrayList<String>();
channels = new ArrayList<String>(); channels = new ArrayList<String>();
commands = new ArrayList<String>(); commands = new ArrayList<String>();
((Button) findViewById(R.id.add)).setOnClickListener(this); ((Button) findViewById(R.id.add)).setOnClickListener(this);
((Button) findViewById(R.id.cancel)).setOnClickListener(this); ((Button) findViewById(R.id.cancel)).setOnClickListener(this);
((Button) findViewById(R.id.aliases)).setOnClickListener(this);
((Button) findViewById(R.id.channels)).setOnClickListener(this); ((Button) findViewById(R.id.channels)).setOnClickListener(this);
((Button) findViewById(R.id.commands)).setOnClickListener(this); ((Button) findViewById(R.id.commands)).setOnClickListener(this);
@ -88,6 +92,7 @@ public class AddServerActivity extends Activity implements OnClickListener
// Request to edit an existing server // Request to edit an existing server
Database db = new Database(this); Database db = new Database(this);
this.server = db.getServerById(extras.getInt(Extra.SERVER)); this.server = db.getServerById(extras.getInt(Extra.SERVER));
aliases.addAll(server.getIdentity().getAliases());
this.channels = db.getChannelsByServerId(server.getId()); this.channels = db.getChannelsByServerId(server.getId());
this.commands = db.getCommandsByServerId(server.getId()); this.commands = db.getCommandsByServerId(server.getId());
db.close(); db.close();
@ -138,6 +143,10 @@ public class AddServerActivity extends Activity implements OnClickListener
} }
switch (requestCode) { switch (requestCode) {
case REQUEST_CODE_ALIASES:
aliases.clear();
aliases.addAll(data.getExtras().getStringArrayList(Extra.ALIASES));
break;
case REQUEST_CODE_CHANNELS: case REQUEST_CODE_CHANNELS:
channels = data.getExtras().getStringArrayList(Extra.CHANNELS); channels = data.getExtras().getStringArrayList(Extra.CHANNELS);
break; break;
@ -153,6 +162,11 @@ public class AddServerActivity extends Activity implements OnClickListener
public void onClick(View v) public void onClick(View v)
{ {
switch (v.getId()) { switch (v.getId()) {
case R.id.aliases:
Intent aliasIntent = new Intent(this, AddAliasActivity.class);
aliasIntent.putExtra(Extra.ALIASES, aliases);
startActivityForResult(aliasIntent, REQUEST_CODE_ALIASES);
break;
case R.id.channels: case R.id.channels:
Intent channelIntent = new Intent(this, AddChannelActivity.class); Intent channelIntent = new Intent(this, AddChannelActivity.class);
channelIntent.putExtra(Extra.CHANNELS, channels); channelIntent.putExtra(Extra.CHANNELS, channels);
@ -196,7 +210,8 @@ public class AddServerActivity extends Activity implements OnClickListener
long identityId = db.addIdentity( long identityId = db.addIdentity(
identity.getNickname(), identity.getNickname(),
identity.getIdent(), identity.getIdent(),
identity.getRealName() identity.getRealName(),
identity.getAliases()
); );
Server server = getServerFromView(); Server server = getServerFromView();
@ -252,7 +267,8 @@ public class AddServerActivity extends Activity implements OnClickListener
identityId, identityId,
identity.getNickname(), identity.getNickname(),
identity.getIdent(), identity.getIdent(),
identity.getNickname() identity.getNickname(),
identity.getAliases()
); );
db.setChannels(serverId, channels); db.setChannels(serverId, channels);
@ -313,6 +329,8 @@ public class AddServerActivity extends Activity implements OnClickListener
identity.setIdent(ident); identity.setIdent(ident);
identity.setRealName(realname); identity.setRealName(realname);
identity.setAliases(aliases);
return identity; return identity;
} }

View File

@ -0,0 +1,19 @@
package org.yaaic.db;
import android.provider.BaseColumns;
public class AliasConstants implements BaseColumns {
public static final String TABLE_NAME = "aliases";
// fields
public static final String ALIAS = "alias";
public static final String IDENTITY = "identity";
public static final String[] ALL = {
_ID,
ALIAS,
IDENTITY,
};
}

View File

@ -22,6 +22,7 @@ package org.yaaic.db;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import org.yaaic.model.Identity; import org.yaaic.model.Identity;
import org.yaaic.model.Server; import org.yaaic.model.Server;
@ -41,7 +42,7 @@ import android.database.sqlite.SQLiteOpenHelper;
public class Database extends SQLiteOpenHelper public class Database extends SQLiteOpenHelper
{ {
private static final String DATABASE_NAME = "servers.db"; private static final String DATABASE_NAME = "servers.db";
private static final int DATABASE_VERSION = 3; private static final int DATABASE_VERSION = 4;
/** /**
* Create a new helper for database access * Create a new helper for database access
@ -94,6 +95,13 @@ public class Database extends SQLiteOpenHelper
+ ChannelConstants.SERVER + " INTEGER" + ChannelConstants.SERVER + " INTEGER"
+ ");" + ");"
); );
db.execSQL("CREATE TABLE " + AliasConstants.TABLE_NAME + " ("
+ AliasConstants._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ AliasConstants.ALIAS + " TEXT NOT NULL, "
+ AliasConstants.IDENTITY + " INTEGER"
+ ");"
);
} }
/** /**
@ -125,6 +133,17 @@ public class Database extends SQLiteOpenHelper
+ ChannelConstants.SERVER + " INTEGER" + ChannelConstants.SERVER + " INTEGER"
+ ");" + ");"
); );
oldVersion = 3;
}
if (oldVersion == 3) {
db.execSQL("CREATE TABLE " + AliasConstants.TABLE_NAME + " ("
+ AliasConstants._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ AliasConstants.ALIAS + " TEXT NOT NULL, "
+ AliasConstants.IDENTITY + " INTEGER"
+ ");"
);
} }
} }
@ -471,6 +490,7 @@ public class Database extends SQLiteOpenHelper
// until we have some kind of identity manager // until we have some kind of identity manager
int identityId = this.getIdentityIdByServerId(serverId); int identityId = this.getIdentityIdByServerId(serverId);
if (identityId != -1) { if (identityId != -1) {
deleteAliases(identityId);
this.getWritableDatabase().execSQL( this.getWritableDatabase().execSQL(
"DELETE FROM " + IdentityConstants.TABLE_NAME + " WHERE " + IdentityConstants._ID + " = " + identityId + ";" "DELETE FROM " + IdentityConstants.TABLE_NAME + " WHERE " + IdentityConstants._ID + " = " + identityId + ";"
); );
@ -482,6 +502,48 @@ public class Database extends SQLiteOpenHelper
); );
} }
protected void setAliases(long identityId, List<String> aliases)
{
deleteAliases(identityId);
ContentValues values = new ContentValues();
for (String alias : aliases) {
values.clear();
values.put(AliasConstants.ALIAS, alias);
values.put(AliasConstants.IDENTITY, identityId);
getWritableDatabase().insert(AliasConstants.TABLE_NAME, null, values);
}
}
protected void deleteAliases(long identityId)
{
getWritableDatabase().execSQL(
"DELETE FROM " + AliasConstants.TABLE_NAME + " WHERE " + AliasConstants.IDENTITY + " = " + identityId
);
}
protected List<String> getAliasesByIdentityId(long identityId)
{
List<String> aliases = new ArrayList<String>();
Cursor cursor = this.getReadableDatabase().query(
AliasConstants.TABLE_NAME,
AliasConstants.ALL,
AliasConstants.IDENTITY + " = " + identityId,
null,
null,
null,
null
);
while (cursor.moveToNext()) {
aliases.add(cursor.getString(cursor.getColumnIndex(AliasConstants.ALIAS)));
}
cursor.close();
return aliases;
}
/** /**
* Add a new identity * Add a new identity
* *
@ -489,8 +551,9 @@ public class Database extends SQLiteOpenHelper
* @param nickname * @param nickname
* @param ident * @param ident
* @param realname * @param realname
* @param aliases
*/ */
public long addIdentity(String nickname, String ident, String realname) public long addIdentity(String nickname, String ident, String realname, List<String> aliases)
{ {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
@ -498,7 +561,11 @@ public class Database extends SQLiteOpenHelper
values.put(IdentityConstants.IDENT, ident); values.put(IdentityConstants.IDENT, ident);
values.put(IdentityConstants.REALNAME, realname); values.put(IdentityConstants.REALNAME, realname);
return this.getWritableDatabase().insert(IdentityConstants.TABLE_NAME, null, values); long identityId = this.getWritableDatabase().insert(IdentityConstants.TABLE_NAME, null, values);
setAliases(identityId, aliases);
return identityId;
} }
/** /**
@ -509,7 +576,7 @@ public class Database extends SQLiteOpenHelper
* @param ident * @param ident
* @param realname * @param realname
*/ */
public void updateIdentity(int identityId, String nickname, String ident, String realname) public void updateIdentity(int identityId, String nickname, String ident, String realname, List<String> aliases)
{ {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
@ -523,6 +590,8 @@ public class Database extends SQLiteOpenHelper
IdentityConstants._ID + " = " + identityId, IdentityConstants._ID + " = " + identityId,
null null
); );
setAliases(identityId, aliases);
} }
/** /**
@ -551,6 +620,8 @@ public class Database extends SQLiteOpenHelper
identity.setNickname(cursor.getString(cursor.getColumnIndex(IdentityConstants.NICKNAME))); identity.setNickname(cursor.getString(cursor.getColumnIndex(IdentityConstants.NICKNAME)));
identity.setIdent(cursor.getString(cursor.getColumnIndex(IdentityConstants.IDENT))); identity.setIdent(cursor.getString(cursor.getColumnIndex(IdentityConstants.IDENT)));
identity.setRealName(cursor.getString(cursor.getColumnIndex(IdentityConstants.REALNAME))); identity.setRealName(cursor.getString(cursor.getColumnIndex(IdentityConstants.REALNAME)));
identity.setAliases(getAliasesByIdentityId(identityId));
} }
cursor.close(); cursor.close();

View File

@ -21,6 +21,7 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
package org.yaaic.irc; package org.yaaic.irc;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Vector; import java.util.Vector;

View File

@ -256,6 +256,7 @@ public class IRCService extends Service
IRCConnection connection = getConnection(server.getId()); IRCConnection connection = getConnection(server.getId());
connection.setNickname(server.getIdentity().getNickname()); connection.setNickname(server.getIdentity().getNickname());
connection.setAliases(server.getIdentity().getAliases());
connection.setIdent(server.getIdentity().getIdent()); connection.setIdent(server.getIdentity().getIdent());
connection.setRealName(server.getIdentity().getRealName()); connection.setRealName(server.getIdentity().getRealName());
connection.setUseSSL(server.useSSL()); connection.setUseSSL(server.useSSL());

View File

@ -31,6 +31,7 @@ public class Extra
public static final String CONVERSATION = "conversation"; public static final String CONVERSATION = "conversation";
public static final String USERS = "users"; public static final String USERS = "users";
public static final String ALIASES = "aliases";
public static final String CHANNELS = "channels"; public static final String CHANNELS = "channels";
public static final String COMMANDS = "commands"; public static final String COMMANDS = "commands";
public static final String MESSAGE = "message"; public static final String MESSAGE = "message";

View File

@ -20,6 +20,11 @@ along with Yaaic. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.yaaic.model; package org.yaaic.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/** /**
* An identity containing a nickname, an ident and a real name * An identity containing a nickname, an ident and a real name
* *
@ -28,6 +33,7 @@ package org.yaaic.model;
public class Identity public class Identity
{ {
private String nickname; private String nickname;
private List<String> aliases = new ArrayList<String>();
private String ident; private String ident;
private String realname; private String realname;
@ -51,6 +57,15 @@ public class Identity
return nickname; return nickname;
} }
public void setAliases(Collection<String> aliases) {
this.aliases.clear();
this.aliases.addAll(aliases);
}
public List<String> getAliases() {
return Collections.unmodifiableList(aliases);
}
/** /**
* Set the ident of this identity * Set the ident of this identity
* *