package theintelligentminds.messenger; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.DataSetObserver; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.text.Html; import android.text.Spanned; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import org.json.JSONArray; import java.util.Timer; import java.util.TimerTask; import java.util.TreeSet; import at.intelligentminds.client.ConnectionProvider; import at.intelligentminds.client.Message; import theintelligentminds.messenger.emoji.Emojicon; import theintelligentminds.messenger.emoji.EmojiconEditText; import theintelligentminds.messenger.emoji.EmojiconGridFragment; import theintelligentminds.messenger.emoji.EmojiconsFragment; public class ChatBubbleActivity extends FragmentActivity implements EmojiconGridFragment.OnEmojiconClickedListener, EmojiconsFragment.OnEmojiconBackspaceClickedListener { private static final String TAG = "ChatActivity"; private ChatArrayAdapter chatArrayAdapter; private ListView listView; private EmojiconEditText chatText; private Button buttonSend; private ImageView buttonEmo; private LinearLayout emoPanel; private String receiver; boolean popupShown = false; Timer autoUpdateTimer; private ConnectionProvider provider = ConnectionProvider.getInstance(AndroidFriendlyFeature.class); Intent intent; private boolean side = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); receiver = getIntent().getStringExtra("USER_EMAIL"); Intent i = getIntent(); setContentView(R.layout.activity_chat); buttonSend = (Button) findViewById(R.id.buttonSend); buttonEmo = (ImageView) findViewById(R.id.imageButton); listView = (ListView) findViewById(R.id.listView1); emoPanel = (LinearLayout) findViewById(R.id.emojilayout); chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), R.layout.activity_chat_singlemessage); listView.setAdapter(chatArrayAdapter); chatText = (EmojiconEditText) findViewById(R.id.chatText); chatText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { new AsyncSendMessageTask().execute(); return true; } return false; } }); buttonSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { new AsyncSendMessageTask().execute(); } }); buttonEmo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { popUpEmos(); } }); listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); listView.setAdapter(chatArrayAdapter); //to scroll the list view to bottom on data change chatArrayAdapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { super.onChanged(); listView.setSelection(chatArrayAdapter.getCount() - 1); } }); autoUpdateTimer = new Timer(); autoUpdateTimer.schedule(new TimerTask(){ @Override public void run(){ autoUpdateMessages(); } }, 0, 5000); } private void autoUpdateMessages() { final TreeSet<Message> messages = provider.getMessagesBySenderAndReceiverSorted(receiver); runOnUiThread(new Runnable() { public void run() { chatArrayAdapter.refreshFromMessagesList(messages); chatArrayAdapter.notifyDataSetInvalidated(); listView.invalidate(); listView.setSelection(chatArrayAdapter.getCount() - 1); } }); } private boolean popUpEmos(){ if(popupShown) { emoPanel.setVisibility(View.GONE); }else{ emoPanel.setVisibility(View.VISIBLE); } popupShown = !popupShown; return true; } @Override public void onEmojiconClicked(Emojicon emojicon) { EmojiconsFragment.input(chatText, emojicon); } @Override public void onEmojiconBackspaceClicked(View v) { EmojiconsFragment.backspace(chatText); } class AsyncSendMessageTask extends AsyncTask<String,Void,Boolean> { @Override protected Boolean doInBackground(String... strings) { return provider.sendMessage(receiver,chatText.getText().toString()); } @Override protected void onPostExecute(Boolean success) { super.onPostExecute(success); if(success) { chatArrayAdapter.add(new ChatMessage(false, chatText.getText().toString())); }else{ chatArrayAdapter.add(new ChatMessage(false, "Message failed to send: " + chatText.getText().toString())); } chatText.setText(""); } } }