project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/LobbyChatFragment.java
--- 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();
+ }
+ }
+ }
+ };
}