project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyChatFragment.java
changeset 7332 3f2e130f9715
parent 7330 867e4fda496e
child 7346 b0f67c5b4215
--- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyChatFragment.java	Mon Jul 16 20:16:03 2012 +0200
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyChatFragment.java	Tue Jul 17 22:27:16 2012 +0200
@@ -1,11 +1,20 @@
 package org.hedgewars.hedgeroid.netplay;
 
+
 import org.hedgewars.hedgeroid.R;
+import org.hedgewars.hedgeroid.netplay.NetplayService.NetplayBinder;
 
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.res.Configuration;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.IBinder;
 import android.support.v4.app.Fragment;
-import android.text.Html;
+import android.text.Spanned;
+import android.text.method.LinkMovementMethod;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -21,29 +30,32 @@
 	private TextView textView;
 	private EditText editText;
 	private ScrollView scrollView;
+	private Netconn netconn;
+	
+	private void scrollDown() {
+		scrollView.post(new Runnable() {
+			public void run() {
+				scrollView.smoothScrollTo(0, textView.getBottom());
+			}
+		});
+	}
 	
 	private void commitText() {
-		String text = editText.getText().toString();
-		int overhang = textView.getHeight()-scrollView.getHeight();
-		boolean followBottom = overhang<=0 || Math.abs(overhang-scrollView.getScrollY())<5;
-		textView.append(Html.fromHtml("<b>Chatter:</b> " + text + "<br/>"));
-		editText.setText("");
-		if(followBottom) {
-			new Handler().post(new Runnable() {
-				public void run() {
-					scrollView.fullScroll(ScrollView.FOCUS_DOWN);
-				}
-			});
+		if(netconn != null && netconn.isConnected()) {
+			String text = editText.getText().toString();
+			editText.setText("");
+			netconn.sendChat(text);
 		}
 	}
-	/*
+	
 	@Override
 	public void onStart() {
 		super.onStart();
 		getActivity().bindService(new Intent(getActivity(), NetplayService.class), serviceConnection,
 	            Context.BIND_AUTO_CREATE);
+		Log.d("LobbyChatFragment", "started");
 	}
-	*/
+	
 	@Override
 	public View onCreateView(LayoutInflater inflater, ViewGroup container,
 			Bundle savedInstanceState) {
@@ -52,6 +64,8 @@
 		editText = (EditText) view.findViewById(R.id.lobbyChatInput);
 		scrollView = (ScrollView) view.findViewById(R.id.lobbyConsoleScroll);
 		
+		textView.setMovementMethod(LinkMovementMethod.getInstance());
+		
         editText.setOnEditorActionListener(new OnEditorActionListener() {
 			public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
 				boolean handled = false;
@@ -62,24 +76,40 @@
 				return handled;
 			}
 		});
-		
+        
 		return view;
 	}
-	/*
+	
+	@Override
+	public void onDestroy() {
+		super.onDestroy();
+		getActivity().unbindService(serviceConnection);
+	}
+
     private ServiceConnection serviceConnection = new ServiceConnection() {
         public void onServiceConnected(ComponentName className, IBinder binder) {
-        	netplayService = ((NetplayBinder) binder).getService();
-        	try {
-				netplayService.connect("AndroidChatter");
-			} catch (IOException e) {
-				throw new RuntimeException(e);
-			}
+        	Log.d("LobbyChatFragment", "netconn received");
+        	netconn = ((NetplayBinder) binder).getNetconn();
+        	netconn.lobbyLog.observe(observer);
         }
 
         public void onServiceDisconnected(ComponentName className) {
         	// TODO navigate away
-        	netplayService = null;
+        	netconn.lobbyLog.unobserve(observer);
+        	netconn = null;
         }
     };
-    */
+    
+    private MessageLog.Observer observer = new MessageLog.Observer() {
+		public void textChanged(Spanned text) {
+			if(textView != null) {
+				int overhang = textView.getHeight()-scrollView.getHeight();
+				boolean followBottom = overhang<=0 || Math.abs(overhang-scrollView.getScrollY())<5;
+				textView.setText(text);
+				if(followBottom) {
+					scrollDown();
+				}
+			}
+		}
+	};
 }