diff -r 867e4fda496e -r 3f2e130f9715 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("Chatter: " + text + "
")); - 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(); + } + } + } + }; }