This commit is contained in:
iNPUTmice 2014-07-31 13:26:05 +02:00
parent e3cec50d1f
commit 27b306444b
3 changed files with 110 additions and 38 deletions

View File

@ -31,7 +31,7 @@
android:layout_alignParentLeft="true"
android:background="@color/primarybackground" >
<EditText
<eu.siacs.conversations.ui.EditMessage
android:id="@+id/textinput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -46,10 +46,10 @@
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="12dp"
android:textColor="@color/primarytext">
android:textColor="@color/primarytext"
android:imeOptions="flagNoExtractUi">
<requestFocus />
</EditText>
</eu.siacs.conversations.ui.EditMessage>
<ImageButton
android:id="@+id/textSendButton"

View File

@ -13,6 +13,7 @@ import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.services.XmppConnectionService;
import eu.siacs.conversations.ui.EditMessage.OnEnterPressed;
import eu.siacs.conversations.ui.XmppActivity.OnPresenceSelected;
import eu.siacs.conversations.ui.adapter.MessageAdapter;
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked;
@ -20,6 +21,7 @@ import eu.siacs.conversations.utils.UIHelper;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
@ -30,14 +32,17 @@ import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.Selection;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView.OnScrollListener;
import android.widget.TextView.OnEditorActionListener;
import android.widget.AbsListView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
@ -55,7 +60,7 @@ public class ConversationFragment extends Fragment {
protected String queuedPqpMessage = null;
private EditText chatMsg;
private EditMessage mEditMessage;
private String pastedText = null;
private RelativeLayout snackbar;
private TextView snackbarMessage;
@ -66,21 +71,26 @@ public class ConversationFragment extends Fragment {
private IntentSender askForPassphraseIntent = null;
private OnClickListener sendMsgListener = new OnClickListener() {
private OnEditorActionListener mEditorActionListener = new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
InputMethodManager imm = (InputMethodManager) v.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
} else {
return false;
}
}
};
private OnClickListener mSendButtonListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (chatMsg.getText().length() < 1)
return;
Message message = new Message(conversation, chatMsg.getText()
.toString(), conversation.getNextEncryption());
if (conversation.getNextEncryption() == Message.ENCRYPTION_OTR) {
sendOtrMessage(message);
} else if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) {
sendPgpMessage(message);
} else {
sendPlainTextMessage(message);
}
sendMessage();
}
};
protected OnClickListener clickToDecryptListener = new OnClickListener() {
@ -148,16 +158,31 @@ public class ConversationFragment extends Fragment {
private ConversationActivity activity;
private void sendMessage() {
if (mEditMessage.getText().length() < 1)
return;
Message message = new Message(conversation, mEditMessage.getText()
.toString(), conversation.getNextEncryption());
if (conversation.getNextEncryption() == Message.ENCRYPTION_OTR) {
sendOtrMessage(message);
} else if (conversation.getNextEncryption() == Message.ENCRYPTION_PGP) {
sendPgpMessage(message);
} else {
sendPlainTextMessage(message);
}
}
public void updateChatMsgHint() {
switch (conversation.getNextEncryption()) {
case Message.ENCRYPTION_NONE:
chatMsg.setHint(getString(R.string.send_plain_text_message));
mEditMessage.setHint(getString(R.string.send_plain_text_message));
break;
case Message.ENCRYPTION_OTR:
chatMsg.setHint(getString(R.string.send_otr_message));
mEditMessage.setHint(getString(R.string.send_otr_message));
break;
case Message.ENCRYPTION_PGP:
chatMsg.setHint(getString(R.string.send_pgp_message));
mEditMessage.setHint(getString(R.string.send_pgp_message));
break;
default:
break;
@ -169,8 +194,8 @@ public class ConversationFragment extends Fragment {
ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_conversation,
container, false);
chatMsg = (EditText) view.findViewById(R.id.textinput);
chatMsg.setOnClickListener(new OnClickListener() {
mEditMessage = (EditMessage) view.findViewById(R.id.textinput);
mEditMessage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@ -179,10 +204,18 @@ public class ConversationFragment extends Fragment {
}
}
});
mEditMessage.setOnEditorActionListener(mEditorActionListener);
mEditMessage.setOnEnterPressedListener(new OnEnterPressed() {
@Override
public void onEnterPressed() {
sendMessage();
}
});
ImageButton sendButton = (ImageButton) view
.findViewById(R.id.textSendButton);
sendButton.setOnClickListener(this.sendMsgListener);
sendButton.setOnClickListener(this.mSendButtonListener);
snackbar = (RelativeLayout) view.findViewById(R.id.snackbar);
snackbarMessage = (TextView) view.findViewById(R.id.snackbar_message);
@ -207,14 +240,14 @@ public class ConversationFragment extends Fragment {
}
protected void highlightInConference(String nick) {
String oldString = chatMsg.getText().toString().trim();
String oldString = mEditMessage.getText().toString().trim();
if (oldString.isEmpty()) {
chatMsg.setText(nick + ": ");
mEditMessage.setText(nick + ": ");
} else {
chatMsg.setText(oldString + " " + nick + " ");
mEditMessage.setText(oldString + " " + nick + " ");
}
int position = chatMsg.length();
Editable etext = chatMsg.getText();
int position = mEditMessage.length();
Editable etext = mEditMessage.getText();
Selection.setSelection(etext, position);
}
@ -234,7 +267,7 @@ public class ConversationFragment extends Fragment {
public void onStop() {
super.onStop();
if (this.conversation != null) {
this.conversation.setNextMessage(chatMsg.getText().toString());
this.conversation.setNextMessage(mEditMessage.getText().toString());
}
}
@ -245,18 +278,18 @@ public class ConversationFragment extends Fragment {
}
String oldString = conversation.getNextMessage().trim();
if (this.pastedText == null) {
this.chatMsg.setText(oldString);
this.mEditMessage.setText(oldString);
} else {
if (oldString.isEmpty()) {
chatMsg.setText(pastedText);
mEditMessage.setText(pastedText);
} else {
chatMsg.setText(oldString + " " + pastedText);
mEditMessage.setText(oldString + " " + pastedText);
}
pastedText = null;
}
int position = chatMsg.length();
Editable etext = chatMsg.getText();
int position = mEditMessage.length();
Editable etext = mEditMessage.getText();
Selection.setSelection(etext, position);
updateMessages();
if (activity.getSlidingPaneLayout().isSlideable()) {
@ -371,7 +404,7 @@ public class ConversationFragment extends Fragment {
if (size >= 1) {
messagesView.setSelection(size - 1);
}
chatMsg.setText("");
mEditMessage.setText("");
}
protected void updateStatusMessages() {
@ -560,6 +593,6 @@ public class ConversationFragment extends Fragment {
}
public void clearInputField() {
this.chatMsg.setText("");
this.mEditMessage.setText("");
}
}

View File

@ -0,0 +1,39 @@
package eu.siacs.conversations.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;
public class EditMessage extends EditText {
public EditMessage(Context context, AttributeSet attrs) {
super(context, attrs);
}
public EditMessage(Context context) {
super(context);
}
protected OnEnterPressed mOnEnterPressed;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
if (mOnEnterPressed != null) {
mOnEnterPressed.onEnterPressed();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
public void setOnEnterPressedListener(OnEnterPressed listener) {
this.mOnEnterPressed = listener;
}
public interface OnEnterPressed {
public void onEnterPressed();
}
}