project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/MessageLog.java
changeset 7346 b0f67c5b4215
parent 7332 3f2e130f9715
child 7352 641f11cdd319
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/MessageLog.java	Thu Jul 19 22:53:39 2012 +0200
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/MessageLog.java	Thu Jul 19 22:55:36 2012 +0200
@@ -1,5 +1,7 @@
 package org.hedgewars.hedgeroid.netplay;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
@@ -22,7 +24,7 @@
 import android.util.Log;
 
 public class MessageLog {
-	private static final int BACKLOG_CHARS = 10000;
+	private static final int BACKLOG_LINES = 200;
 	
 	private static final int INFO_COLOR = Color.GRAY;
 	private static final int CHAT_COLOR = Color.GREEN;
@@ -32,9 +34,7 @@
 	
 	private final Context context;
 	private List<Observer> observers = new LinkedList<Observer>();
-	
-	private SpannableStringBuilder log = new SpannableStringBuilder();
-	private List<Integer> lineLengths = new LinkedList<Integer>();
+	private List<CharSequence> log = new LinkedList<CharSequence>();
 	
 	public MessageLog(Context context) {
 		this.context = context;
@@ -61,18 +61,20 @@
 	
 	private void append(CharSequence msg) {
 		SpannableStringBuilder ssb = new SpannableStringBuilder();
-		ssb.append(makeLogTime()).append(msg).append("\n");
+		ssb.append(makeLogTime()).append(msg);
 		appendRaw(ssb);
 	}
 	
 	private void appendRaw(CharSequence msg) {
-		lineLengths.add(msg.length());
-		log.append(msg);
-		while(log.length() > BACKLOG_CHARS) {
-			log.delete(0, lineLengths.remove(0));
+		if(log.size() > BACKLOG_LINES) {
+			log.remove(0);
+			for(Observer o : observers) {
+				o.lineRemoved();
+			}
 		}
+		log.add(msg);
 		for(Observer o : observers) {
-			o.textChanged(log);
+			o.lineAdded(msg);
 		}
 	}
 	
@@ -113,7 +115,7 @@
 			append(msg);
 			break;
 		case JnaFrontlib.NETCONN_MSG_TYPE_SERVERMESSAGE:
-			appendRaw(span(TextUtils.concat("\n", Html.fromHtml(msg), "\n\n"), new RelativeSizeSpan(1.5f)));
+			appendRaw(span(TextUtils.concat("\n", Html.fromHtml(msg), "\n"), new RelativeSizeSpan(1.5f)));
 			break;
 		default:
 			Log.e("MessageLog", "Unknown messagetype "+type);
@@ -121,19 +123,27 @@
 	}
 	
 	void clear() {
+		for(Observer o : observers) {
+			o.clear();
+		}
 		log.clear();
-		lineLengths.clear();
 	}
 	
-	public void observe(Observer o) {
+	public void registerObserver(Observer o) {
 		observers.add(o);
 	}
 	
-	public void unobserve(Observer o) {
+	public void unregisterObserver(Observer o) {
 		observers.remove(o);
 	}
 	
 	public static interface Observer {
-		void textChanged(Spanned text);
+		void lineAdded(CharSequence text);
+		void lineRemoved();
+		void clear();
+	}
+
+	public Collection<CharSequence> getLog() {
+		return Collections.unmodifiableList(log);
 	}
 }