---
application/res/values/settings.xml | 3 ++
application/res/values/strings.xml | 2 +
application/res/xml/preferences.xml | 6 ++++
.../org/yaaic/activity/ConversationActivity.java | 15 ++++++++-
.../src/org/yaaic/adapter/MessageListAdapter.java | 6 ++-
.../org/yaaic/command/handler/QueryHandler.java | 1 +
application/src/org/yaaic/irc/IRCConnection.java | 6 +++-
application/src/org/yaaic/model/Conversation.java | 32 ++++++++++++++++++-
application/src/org/yaaic/model/Settings.java | 17 ++++++++++
9 files changed, 81 insertions(+), 7 deletions(-)
diff --git a/application/res/values/settings.xml
b/application/res/values/settings.xml
index 2e70728..e77cf5e 100644
--- a/application/res/values/settings.xml
+++ b/application/res/values/settings.xml
@@ -44,4 +44,7 @@
<string name="key_graphical_smilies">graphical_smilies</string>
<string name="default_graphical_smilies">false</string>
+
+ <string name="key_history_size">history_size</string>
+ <string name="default_history_size">30</string>
</resources>
diff --git a/application/res/values/strings.xml
b/application/res/values/strings.xml
index 56c10cb..c3e234a 100644
--- a/application/res/values/strings.xml
+++ b/application/res/values/strings.xml
@@ -203,4 +203,6 @@
<string name="settings_mirc_colors_desc">Show mIRC colors in
messages</string>
<string name="settings_graphical_smilies_title">Show graphical
smilies</string>
<string name="settings_graphical_smilies_desc">Text smilies will be
displayed as images in chat</string>
+ <string name="settings_history_size_title">History size</string>
+ <string name="settings_history_size_desc">Number of lines of conversation
history to keep</string>
</resources>
diff --git a/application/res/xml/preferences.xml
b/application/res/xml/preferences.xml
index e4a1c8f..e190eb3 100644
--- a/application/res/xml/preferences.xml
+++ b/application/res/xml/preferences.xml
@@ -85,6 +85,12 @@ along with Yaaic. If not, see
<http://www.gnu.org/licenses/>.
android:summary="@string/settings_graphical_smilies_desc"
android:key="@string/key_graphical_smilies"
android:defaultValue="@string/default_graphical_smilies" />
+ <EditTextPreference
+ android:title="@string/settings_history_size_title"
+ android:summary="@string/settings_history_size_desc"
+ android:key="@string/key_history_size"
+ android:defaultValue="@string/default_history_size"
+ android:inputType="number" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/settings_highlight">
diff --git a/application/src/org/yaaic/activity/ConversationActivity.java
b/application/src/org/yaaic/activity/ConversationActivity.java
index c4dd530..d6786b4 100644
--- a/application/src/org/yaaic/activity/ConversationActivity.java
+++ b/application/src/org/yaaic/activity/ConversationActivity.java
@@ -122,6 +122,8 @@ public class ConversationActivity extends Activity
implements ServiceConnection,
// We'll set it to 0 if it's not supported
private int setInputTypeFlag;
+ private int historySize;
+
/**
* On create
*/
@@ -158,9 +160,13 @@ public class ConversationActivity extends Activity
implements ServiceConnection,
deck.setOnItemClickListener(new ConversationClickListener(deckAdapter,
switcher));
deck.setBackgroundDrawable(new NonScalingBackgroundDrawable(this,
deck, R.drawable.background));
+ Settings settings = new Settings(this);
+ historySize = settings.getHistorySize();
+
if (server.getStatus() == Status.PRE_CONNECTING) {
server.clearConversations();
deckAdapter.clearConversations();
+
server.getConversation(ServerInfo.DEFAULT_NAME).setHistorySize(historySize);
}
// Optimization : cache field lookups
@@ -519,7 +525,9 @@ public class ConversationActivity extends Activity
implements ServiceConnection,
if (server.getStatus() == Status.CONNECTING) {
deckAdapter.clearConversations();
-
deckAdapter.addItem(server.getConversation(ServerInfo.DEFAULT_NAME));
+ Conversation serverInfo =
server.getConversation(ServerInfo.DEFAULT_NAME);
+ serverInfo.setHistorySize(historySize);
+ deckAdapter.addItem(serverInfo);
return;
}
@@ -540,7 +548,9 @@ public class ConversationActivity extends Activity
implements ServiceConnection,
);
server.clearConversations();
deckAdapter.clearConversations();
-
deckAdapter.addItem(server.getConversation(ServerInfo.DEFAULT_NAME));
+ Conversation serverInfo =
server.getConversation(ServerInfo.DEFAULT_NAME);
+ serverInfo.setHistorySize(historySize);
+ deckAdapter.addItem(serverInfo);
binder.connect(server);
}
})
@@ -845,6 +855,7 @@ public class ConversationActivity extends Activity
implements ServiceConnection,
if (query == null) {
// Open a query if there's none yet
query = new Query(nicknameWithoutPrefix);
+
query.setHistorySize(binder.getService().getSettings().getHistorySize());
server.addConversation(query);
Intent intent =
Broadcast.createConversationIntent(
diff --git a/application/src/org/yaaic/adapter/MessageListAdapter.java
b/application/src/org/yaaic/adapter/MessageListAdapter.java
index 5150ee1..600e470 100644
--- a/application/src/org/yaaic/adapter/MessageListAdapter.java
+++ b/application/src/org/yaaic/adapter/MessageListAdapter.java
@@ -40,6 +40,7 @@ public class MessageListAdapter extends BaseAdapter
{
private final LinkedList<TextView> messages;
private final Context context;
+ private int historySize;
/**
* Create a new MessageAdapter
@@ -72,6 +73,7 @@ public class MessageListAdapter extends BaseAdapter
this.messages = messages;
this.context = context;
+ historySize = conversation.getHistorySize();
}
/**
@@ -83,7 +85,7 @@ public class MessageListAdapter extends BaseAdapter
{
messages.add(message.renderTextView(context));
- if (messages.size() > Conversation.HISTORY_SIZE) {
+ if (messages.size() > historySize) {
messages.remove(0);
}
@@ -104,7 +106,7 @@ public class MessageListAdapter extends BaseAdapter
for (int i = mSize - 1; i > -1; i--) {
mMessages.add(messages.get(i).renderTextView(mContext));
- if (mMessages.size() > Conversation.HISTORY_SIZE) {
+ if (mMessages.size() > historySize) {
mMessages.remove(0);
}
}
diff --git a/application/src/org/yaaic/command/handler/QueryHandler.java
b/application/src/org/yaaic/command/handler/QueryHandler.java
index 8a13992..b30f2ee 100644
--- a/application/src/org/yaaic/command/handler/QueryHandler.java
+++ b/application/src/org/yaaic/command/handler/QueryHandler.java
@@ -60,6 +60,7 @@ public class QueryHandler extends BaseHandler
}
query = new Query(params[1]);
+ query.setHistorySize(service.getSettings().getHistorySize());
server.addConversation(query);
Intent intent = Broadcast.createConversationIntent(
diff --git a/application/src/org/yaaic/irc/IRCConnection.java
b/application/src/org/yaaic/irc/IRCConnection.java
index 0e5907e..62e4ea1 100644
--- a/application/src/org/yaaic/irc/IRCConnection.java
+++ b/application/src/org/yaaic/irc/IRCConnection.java
@@ -218,6 +218,7 @@ public class IRCConnection extends PircBot
if (conversation == null) {
// Open a query if there's none yet
conversation = new Query(queryNick);
+
conversation.setHistorySize(service.getSettings().getHistorySize());
server.addConversation(conversation);
conversation.addMessage(message);
@@ -349,7 +350,9 @@ public class IRCConnection extends PircBot
{
if (sender.equalsIgnoreCase(getNick())) {
// We joined a new channel
- server.addConversation(new Channel(target));
+ Conversation conversation = new Channel(target);
+
conversation.setHistorySize(service.getSettings().getHistorySize());
+ server.addConversation(conversation);
Intent intent = Broadcast.createConversationIntent(
Broadcast.CONVERSATION_NEW,
@@ -601,6 +604,7 @@ public class IRCConnection extends PircBot
if (conversation == null) {
// Open a query if there's none yet
conversation = new Query(queryNick);
+
conversation.setHistorySize(service.getSettings().getHistorySize());
conversation.addMessage(message);
server.addConversation(conversation);
diff --git a/application/src/org/yaaic/model/Conversation.java
b/application/src/org/yaaic/model/Conversation.java
index fc83922..bd4b161 100644
--- a/application/src/org/yaaic/model/Conversation.java
+++ b/application/src/org/yaaic/model/Conversation.java
@@ -41,13 +41,14 @@ public abstract class Conversation
public static final int STATUS_HIGHLIGHT = 4;
public static final int STATUS_MISC = 5; // join/part/quit
- public static final int HISTORY_SIZE = 30;
+ private static final int DEFAULT_HISTORY_SIZE = 30;
private final LinkedList<Message> buffer;
private final LinkedList<Message> history;
private final String name;
private int status = 1;
private int newMentions = 0;
+ private int historySize = DEFAULT_HISTORY_SIZE;
/**
* Get the type of conversation (channel, query, ..)
@@ -84,7 +85,7 @@ public abstract class Conversation
buffer.add(0, message);
history.add(message);
- if (history.size() > HISTORY_SIZE) {
+ if (history.size() > historySize) {
history.remove(0);
}
}
@@ -204,4 +205,31 @@ public abstract class Conversation
{
return newMentions;
}
+
+ /**
+ * Get this conversation's history size.
+ *
+ * @return The conversation's history size.
+ */
+ public int getHistorySize()
+ {
+ return historySize;
+ }
+
+ /**
+ * Set this conversation's history size.
+ *
+ * @param size The new history size for this conversation.
+ */
+ public void setHistorySize(int size)
+ {
+ if (size <= 0) {
+ return;
+ }
+
+ historySize = size;
+ if (history.size() > size) {
+ history.subList(size, history.size()).clear();
+ }
+ }
}
diff --git a/application/src/org/yaaic/model/Settings.java
b/application/src/org/yaaic/model/Settings.java
index 8a5f74e..5bc08aa 100644
--- a/application/src/org/yaaic/model/Settings.java
+++ b/application/src/org/yaaic/model/Settings.java
@@ -247,4 +247,21 @@ public class Settings
Boolean.parseBoolean(resources.getString(R.string.default_graphical_smilies))
);
}
+
+ /**
+ * Get the conversation history size.
+ *
+ * @return The conversation history size
+ */
+ public int getHistorySize()
+ {
+ try {
+ return Integer.parseInt(preferences.getString(
+ resources.getString(R.string.key_history_size),
+ resources.getString(R.string.default_history_size)
+ ));
+ } catch (NumberFormatException e) {
+ return
Integer.parseInt(resources.getString(R.string.default_history_size));
+ }
+ }
}
--
1.7.2.5