---
 application/res/layout/conversations.xml           |    1 +
 .../org/yaaic/activity/ConversationActivity.java   |   19 +++++++++++++++++++
 application/src/org/yaaic/irc/IRCConnection.java   |    8 ++++++++
 .../org/yaaic/listener/ConversationListener.java   |    7 +++++++
 .../listener/ConversationSelectedListener.java     |    7 ++++++-
 application/src/org/yaaic/model/Broadcast.java     |    1 +
 .../org/yaaic/receiver/ConversationReceiver.java   |    2 ++
 7 files changed, 44 insertions(+), 1 deletions(-)

diff --git a/application/res/layout/conversations.xml 
b/application/res/layout/conversations.xml
index f0b80a3..fbc43b9 100644
--- a/application/res/layout/conversations.xml
+++ b/application/res/layout/conversations.xml
@@ -42,6 +42,7 @@ along with Yaaic.  If not, see <http://www.gnu.org/licenses/>.
             android:paddingLeft="3dp"
             android:textSize="12sp"
             android:text="Server"
+            android:maxLines="1"
             android:layout_weight="1" />
     </LinearLayout>
     <ViewSwitcher
diff --git a/application/src/org/yaaic/activity/ConversationActivity.java 
b/application/src/org/yaaic/activity/ConversationActivity.java
index d6786b4..afabb1a 100644
--- a/application/src/org/yaaic/activity/ConversationActivity.java
+++ b/application/src/org/yaaic/activity/ConversationActivity.java
@@ -39,6 +39,7 @@ import org.yaaic.listener.ConversationSelectedListener;
 import org.yaaic.listener.ServerListener;
 import org.yaaic.listener.SpeechClickListener;
 import org.yaaic.model.Broadcast;
+import org.yaaic.model.Channel;
 import org.yaaic.model.Conversation;
 import org.yaaic.model.Extra;
 import org.yaaic.model.Message;
@@ -204,6 +205,7 @@ public class ConversationActivity extends Activity 
implements ServiceConnection,
         registerReceiver(channelReceiver, new 
IntentFilter(Broadcast.CONVERSATION_MESSAGE));
         registerReceiver(channelReceiver, new 
IntentFilter(Broadcast.CONVERSATION_NEW));
         registerReceiver(channelReceiver, new 
IntentFilter(Broadcast.CONVERSATION_REMOVE));
+        registerReceiver(channelReceiver, new 
IntentFilter(Broadcast.CONVERSATION_TOPIC));
 
         serverReceiver = new ServerReceiver(this);
         registerReceiver(serverReceiver, new 
IntentFilter(Broadcast.SERVER_UPDATE));
@@ -509,6 +511,23 @@ public class ConversationActivity extends Activity 
implements ServiceConnection,
     }
 
     /**
+     * On topic change
+     */
+    public void onTopicChanged(String target)
+    {
+        String selected = server.getSelectedConversation();
+        if (selected.equals(target)) {
+            // onTopicChanged is only called for channels
+            Channel channel = (Channel) server.getConversation(selected);
+            StringBuilder sb = new StringBuilder();
+            sb.append(server.getTitle() + " - " + channel.getName());
+            if (!(channel.getTopic()).equals(""))
+                sb.append(" - " + channel.getTopic());
+            ((TextView) findViewById(R.id.title)).setText(sb.toString());
+        }
+    }
+
+    /**
      * On server status update
      */
     @Override
diff --git a/application/src/org/yaaic/irc/IRCConnection.java 
b/application/src/org/yaaic/irc/IRCConnection.java
index 62e4ea1..f744c4b 100644
--- a/application/src/org/yaaic/irc/IRCConnection.java
+++ b/application/src/org/yaaic/irc/IRCConnection.java
@@ -724,6 +724,14 @@ public class IRCConnection extends PircBot
             target
         );
         service.sendBroadcast(intent);
+
+        // update the displayed conversation title if necessary
+        intent = Broadcast.createConversationIntent(
+            Broadcast.CONVERSATION_TOPIC,
+            server.getId(),
+            target
+        );
+        service.sendBroadcast(intent);
     }
 
     /**
diff --git a/application/src/org/yaaic/listener/ConversationListener.java 
b/application/src/org/yaaic/listener/ConversationListener.java
index ec760dd..d8fe99f 100644
--- a/application/src/org/yaaic/listener/ConversationListener.java
+++ b/application/src/org/yaaic/listener/ConversationListener.java
@@ -47,4 +47,11 @@ public interface ConversationListener
      * @param target
      */
     public void onRemoveConversation(String target);
+
+    /**
+     * On topic changed (for given target)
+     *
+     * @param target
+     */
+    public void onTopicChanged(String target);
 }
diff --git 
a/application/src/org/yaaic/listener/ConversationSelectedListener.java 
b/application/src/org/yaaic/listener/ConversationSelectedListener.java
index 49eaa6c..5a83a93 100644
--- a/application/src/org/yaaic/listener/ConversationSelectedListener.java
+++ b/application/src/org/yaaic/listener/ConversationSelectedListener.java
@@ -20,6 +20,7 @@ along with Yaaic.  If not, see <http://www.gnu.org/licenses/>.
  */
 package org.yaaic.listener;
 
+import org.yaaic.model.Channel;
 import org.yaaic.model.Conversation;
 import org.yaaic.model.Server;
 import org.yaaic.view.ConversationSwitcher;
@@ -67,7 +68,11 @@ public class ConversationSelectedListener implements 
OnItemSelectedListener
         Conversation conversation = (Conversation) 
deck.getItemAtPosition(position);
 
         if (conversation != null && conversation.getType() != 
Conversation.TYPE_SERVER) {
-            titleView.setText(server.getTitle() + " - " + 
conversation.getName());
+            StringBuilder sb = new StringBuilder();
+            sb.append(server.getTitle() + " - " + conversation.getName());
+            if (conversation.getType() == Conversation.TYPE_CHANNEL && 
!((Channel)conversation).getTopic().equals(""))
+                sb.append(" - " + ((Channel)conversation).getTopic());
+            titleView.setText(sb.toString());
         } else {
             onNothingSelected(deck);
         }
diff --git a/application/src/org/yaaic/model/Broadcast.java 
b/application/src/org/yaaic/model/Broadcast.java
index 7ebd9a5..97ca0fe 100644
--- a/application/src/org/yaaic/model/Broadcast.java
+++ b/application/src/org/yaaic/model/Broadcast.java
@@ -34,6 +34,7 @@ public abstract class Broadcast
     public static final String CONVERSATION_MESSAGE    = 
"org.yaaic.conversation.message";
     public static final String CONVERSATION_NEW        = 
"org.yaaic.conversation.new";
     public static final String CONVERSATION_REMOVE    = 
"org.yaaic.conversation.remove";
+    public static final String CONVERSATION_TOPIC    = 
"org.yaaic.conversation.topic";
 
     /**
      * Create an Intent for conversation broadcasting
diff --git a/application/src/org/yaaic/receiver/ConversationReceiver.java 
b/application/src/org/yaaic/receiver/ConversationReceiver.java
index f6d333a..c81b1e4 100644
--- a/application/src/org/yaaic/receiver/ConversationReceiver.java
+++ b/application/src/org/yaaic/receiver/ConversationReceiver.java
@@ -72,6 +72,8 @@ public class ConversationReceiver extends BroadcastReceiver
             
listener.onNewConversation(intent.getExtras().getString(Extra.CONVERSATION));
         } else if (action.equals(Broadcast.CONVERSATION_REMOVE)) {
             
listener.onRemoveConversation(intent.getExtras().getString(Extra.CONVERSATION));
+        } else if (action.equals(Broadcast.CONVERSATION_TOPIC)) {
+            
listener.onTopicChanged(intent.getExtras().getString(Extra.CONVERSATION));
         }
 
     }
-- 
1.7.2.5

Reply via email to