diff --git a/src/org/yaaic/adapter/DeckAdapter.java b/src/org/yaaic/adapter/DeckAdapter.java index 7df7053..8f749f2 100644 --- a/src/org/yaaic/adapter/DeckAdapter.java +++ b/src/org/yaaic/adapter/DeckAdapter.java @@ -24,8 +24,9 @@ import java.util.HashMap; import java.util.LinkedList; import org.yaaic.model.Channel; +import org.yaaic.model.Message; -import android.view.Display; +import android.text.SpannableString; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; @@ -183,10 +184,10 @@ public class DeckAdapter extends BaseAdapter public View renderChannel(Channel channel, ViewGroup parent) { TextView canvas = new TextView(parent.getContext()); - canvas.setText(channel.getName()); + canvas.setText(new SpannableString(channel.getName())); - for (String message : channel.getHistory()) { - canvas.append("\n" + message); + for (Message message : channel.getHistory()) { + canvas.append(message.render()); } canvas.setTextColor(0xff000000); diff --git a/src/org/yaaic/adapter/ServerListAdapter.java b/src/org/yaaic/adapter/ServerListAdapter.java index 1daf04c..510067e 100644 --- a/src/org/yaaic/adapter/ServerListAdapter.java +++ b/src/org/yaaic/adapter/ServerListAdapter.java @@ -33,7 +33,6 @@ import android.widget.TextView; import org.yaaic.R; import org.yaaic.Yaaic; import org.yaaic.model.Server; -import org.yaaic.model.Status; /** * Adapter for server lists diff --git a/src/org/yaaic/irc/IRCConnection.java b/src/org/yaaic/irc/IRCConnection.java index 36aec11..5908574 100644 --- a/src/org/yaaic/irc/IRCConnection.java +++ b/src/org/yaaic/irc/IRCConnection.java @@ -29,6 +29,7 @@ import org.jibble.pircbot.User; import org.yaaic.Yaaic; import org.yaaic.model.Broadcast; import org.yaaic.model.Channel; +import org.yaaic.model.Message; import org.yaaic.model.Server; import org.yaaic.model.Status; @@ -79,7 +80,8 @@ public class IRCConnection extends PircBot { debug("Action", target + " " + sender + " " + action); - server.getChannel(target).addMessage("* " + sender + " " + action); + Message message = new Message(sender + " " + action); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -104,7 +106,8 @@ public class IRCConnection extends PircBot { debug("Deop", target + " " + recipient + "(" + sourceNick + ")"); - server.getChannel(target).addMessage(sourceNick + " deoped " + recipient); + Message message = new Message(sourceNick + " deoped " + recipient); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -120,7 +123,8 @@ public class IRCConnection extends PircBot { debug("DeVoice", target + " " + recipient + "(" + sourceNick + ")"); - server.getChannel(target).addMessage(sourceNick + " devoiced " + recipient); + Message message = new Message(sourceNick + " devoiced " + recipient); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -136,7 +140,8 @@ public class IRCConnection extends PircBot { debug("Invite", target + " " + targetNick + "(" + sourceNick + ")"); - server.getChannel(target).addMessage(sourceNick + " invited " + targetNick); + Message message = new Message(sourceNick + " invited " + targetNick); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -161,7 +166,8 @@ public class IRCConnection extends PircBot intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); service.sendBroadcast(intent); } else { - server.getChannel(target).addMessage(sender + " joined"); + Message message = new Message(sender + " joined"); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -187,7 +193,8 @@ public class IRCConnection extends PircBot intent.putExtra(Broadcast.EXTRA_CHANNEL, target); service.sendBroadcast(intent); } else { - server.getChannel(target).addMessage(kickerNick + " kicked " + recipientNick); + Message message = new Message(kickerNick + " kicked " + recipientNick); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -200,11 +207,12 @@ public class IRCConnection extends PircBot * On Message */ @Override - protected void onMessage(String target, String sender, String login, String hostname, String message) + protected void onMessage(String target, String sender, String login, String hostname, String text) { - debug("Message", target + " " + sender + " " + message); + debug("Message", target + " " + sender + " " + text); - server.getChannel(target).addMessage("<" + sender + "> " + message); + Message message = new Message("<" + sender + "> " + text); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -220,7 +228,8 @@ public class IRCConnection extends PircBot { debug("Mode", target + " " + sourceNick + " " + mode); - server.getChannel(target).addMessage(sourceNick + " sets mode " + mode); + Message message = new Message(sourceNick + " sets mode " + mode); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -235,6 +244,8 @@ public class IRCConnection extends PircBot protected void onNickChange(String oldNick, String login, String hostname, String newNick) { debug("Nick", oldNick + " " + newNick); + + // XXX: Add message to all channels where oldNick / newNick is present } /** @@ -244,6 +255,8 @@ public class IRCConnection extends PircBot protected void onNotice(String sourceNick, String sourceLogin, String sourceHostname, String target, String notice) { debug("Notice", sourceNick + " " + notice); + + // XXX: Where should notices be shown? Current window? All windows? Server window? } /** @@ -254,7 +267,8 @@ public class IRCConnection extends PircBot { debug("Op", target + " " + recipient + "(" + sourceNick + ")"); - server.getChannel(target).addMessage(sourceNick + " oped " + recipient); + Message message = new Message(sourceNick + " oped " + recipient); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -279,7 +293,8 @@ public class IRCConnection extends PircBot intent.putExtra(Broadcast.EXTRA_CHANNEL, target); service.sendBroadcast(intent); } else { - server.getChannel(target).addMessage(sender + " parted"); + Message message = new Message(sender + " parted"); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); @@ -315,9 +330,11 @@ public class IRCConnection extends PircBot debug("Topic", target + " " + setBy + " " + topic); if (changed) { - server.getChannel(target).addMessage(setBy + " sets topic: " + topic); + Message message = new Message(setBy + " sets topic: " + topic); + server.getChannel(target).addMessage(message); } else { - server.getChannel(target).addMessage("Topic: " + topic); + Message message = new Message("Topic: " + topic); + server.getChannel(target).addMessage(message); } Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); @@ -333,6 +350,8 @@ public class IRCConnection extends PircBot protected void onUserList(String channel, User[] users) { debug("UserList", channel + " (" + users.length + ")"); + + // XXX: Store user list somewhere and keep it updated or just broadcast some event? } /** @@ -343,7 +362,8 @@ public class IRCConnection extends PircBot { debug("Voice", target + " " + recipient + "(" + sourceNick + ")"); - server.getChannel(target).addMessage(sourceNick + " voiced " + recipient); + Message message = new Message(sourceNick + " voiced " + recipient); + server.getChannel(target).addMessage(message); Intent intent = new Intent(Broadcast.CHANNEL_MESSAGE); intent.putExtra(Broadcast.EXTRA_SERVER, server.getId()); diff --git a/src/org/yaaic/model/Channel.java b/src/org/yaaic/model/Channel.java index c2b6d61..fb1e926 100644 --- a/src/org/yaaic/model/Channel.java +++ b/src/org/yaaic/model/Channel.java @@ -32,8 +32,8 @@ public class Channel private static final int BUFFER_SIZE = 30; private String name; - private LinkedList buffer = new LinkedList(); - private LinkedList history = new LinkedList(); + private LinkedList buffer = new LinkedList(); + private LinkedList history = new LinkedList(); /** * Create a new channel object @@ -56,7 +56,7 @@ public class Channel /** * Add a message to the channel */ - public void addMessage(String message) + public void addMessage(Message message) { buffer.addFirst(message); history.addLast(message); @@ -71,7 +71,7 @@ public class Channel * * @return */ - public LinkedList getBuffer() + public LinkedList getBuffer() { return buffer; } @@ -81,7 +81,7 @@ public class Channel * * @return */ - public LinkedList getHistory() + public LinkedList getHistory() { return history; } @@ -91,7 +91,7 @@ public class Channel * * @return */ - public String pollMessage() + public Message pollMessage() { return buffer.poll(); } diff --git a/src/org/yaaic/model/Message.java b/src/org/yaaic/model/Message.java index 6945e84..a5bc9b4 100644 --- a/src/org/yaaic/model/Message.java +++ b/src/org/yaaic/model/Message.java @@ -20,6 +20,8 @@ along with Yaaic. If not, see . */ package org.yaaic.model; +import android.text.SpannableString; + /** * A channel or server message * @@ -28,6 +30,7 @@ package org.yaaic.model; public class Message { private int icon; private String text; + private SpannableString span; /** * Create a new message without an icon @@ -81,4 +84,19 @@ public class Message { { return text; } + + /** + * Render message as spannable string + */ + public SpannableString render() + { + if (span == null) { + span = new SpannableString(text); + if (hasIcon()) { + + } + } + + return span; + } } diff --git a/src/org/yaaic/view/ServerActivity.java b/src/org/yaaic/view/ServerActivity.java index 471b174..bb34807 100644 --- a/src/org/yaaic/view/ServerActivity.java +++ b/src/org/yaaic/view/ServerActivity.java @@ -54,6 +54,7 @@ import org.yaaic.irc.IRCService; import org.yaaic.listener.ChannelListener; import org.yaaic.model.Broadcast; import org.yaaic.model.Channel; +import org.yaaic.model.Message; import org.yaaic.model.Server; import org.yaaic.receiver.ChannelReceiver; @@ -193,18 +194,18 @@ public class ServerActivity extends Activity implements ServiceConnection, Chann */ public void onChannelMessage(String target) { - String message = server.getChannel(target).pollMessage(); + Message message = server.getChannel(target).pollMessage(); TextView canvas = (TextView) deckAdapter.getItemByName(target); if (canvas != null) { - canvas.append("\n" + message); + canvas.append(message.render()); deckAdapter.notifyDataSetChanged(); Log.d(TAG, "Target: " + target + " - Switched: " + deckAdapter.getSwitchedName()); if (target.equals(deckAdapter.getSwitchedName())) { - ((TextView) deckAdapter.getSwitchedView()).append("\n" + message); + ((TextView) deckAdapter.getSwitchedView()).append(message.render()); } } else { Log.d(TAG, "No canvas found");