link to account details when touching own avatar
This commit is contained in:
		
							parent
							
								
									ff10b094a0
								
							
						
					
					
						commit
						88c0793694
					
				| 
						 | 
				
			
			@ -1,27 +1,5 @@
 | 
			
		|||
package eu.siacs.conversations.ui;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.ConcurrentLinkedQueue;
 | 
			
		||||
 | 
			
		||||
import net.java.otr4j.session.SessionStatus;
 | 
			
		||||
import eu.siacs.conversations.R;
 | 
			
		||||
import eu.siacs.conversations.crypto.PgpEngine;
 | 
			
		||||
import eu.siacs.conversations.entities.Account;
 | 
			
		||||
import eu.siacs.conversations.entities.Contact;
 | 
			
		||||
import eu.siacs.conversations.entities.Conversation;
 | 
			
		||||
import eu.siacs.conversations.entities.Message;
 | 
			
		||||
import eu.siacs.conversations.entities.MucOptions;
 | 
			
		||||
import eu.siacs.conversations.entities.Presences;
 | 
			
		||||
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.XmppActivity.OnValueEdited;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked;
 | 
			
		||||
import eu.siacs.conversations.utils.UIHelper;
 | 
			
		||||
import android.app.AlertDialog;
 | 
			
		||||
import android.app.Fragment;
 | 
			
		||||
import android.app.PendingIntent;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,18 +22,41 @@ 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.AbsListView.OnScrollListener;
 | 
			
		||||
import android.widget.AdapterView;
 | 
			
		||||
import android.widget.AdapterView.AdapterContextMenuInfo;
 | 
			
		||||
import android.widget.ListView;
 | 
			
		||||
import android.widget.ImageButton;
 | 
			
		||||
import android.widget.ListView;
 | 
			
		||||
import android.widget.RelativeLayout;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import android.widget.TextView.OnEditorActionListener;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import net.java.otr4j.session.SessionStatus;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.ConcurrentLinkedQueue;
 | 
			
		||||
 | 
			
		||||
import eu.siacs.conversations.R;
 | 
			
		||||
import eu.siacs.conversations.crypto.PgpEngine;
 | 
			
		||||
import eu.siacs.conversations.entities.Account;
 | 
			
		||||
import eu.siacs.conversations.entities.Contact;
 | 
			
		||||
import eu.siacs.conversations.entities.Conversation;
 | 
			
		||||
import eu.siacs.conversations.entities.Message;
 | 
			
		||||
import eu.siacs.conversations.entities.MucOptions;
 | 
			
		||||
import eu.siacs.conversations.entities.Presences;
 | 
			
		||||
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.XmppActivity.OnValueEdited;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureClicked;
 | 
			
		||||
import eu.siacs.conversations.ui.adapter.MessageAdapter.OnContactPictureLongClicked;
 | 
			
		||||
import eu.siacs.conversations.utils.UIHelper;
 | 
			
		||||
 | 
			
		||||
public class ConversationFragment extends Fragment {
 | 
			
		||||
 | 
			
		||||
	protected Conversation conversation;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +180,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
 | 
			
		||||
		@Override
 | 
			
		||||
		public void onScroll(AbsListView view, int firstVisibleItem,
 | 
			
		||||
				int visibleItemCount, int totalItemCount) {
 | 
			
		||||
							 int visibleItemCount, int totalItemCount) {
 | 
			
		||||
			if (firstVisibleItem == 0 && messagesLoaded) {
 | 
			
		||||
				long timestamp = messageList.get(0).getTimeSent();
 | 
			
		||||
				messagesLoaded = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -238,25 +239,25 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
					conversation.getNextPresence()));
 | 
			
		||||
		} else {
 | 
			
		||||
			switch (conversation.getNextEncryption(activity.forceEncryption())) {
 | 
			
		||||
			case Message.ENCRYPTION_NONE:
 | 
			
		||||
				mEditMessage
 | 
			
		||||
						.setHint(getString(R.string.send_plain_text_message));
 | 
			
		||||
				break;
 | 
			
		||||
			case Message.ENCRYPTION_OTR:
 | 
			
		||||
				mEditMessage.setHint(getString(R.string.send_otr_message));
 | 
			
		||||
				break;
 | 
			
		||||
			case Message.ENCRYPTION_PGP:
 | 
			
		||||
				mEditMessage.setHint(getString(R.string.send_pgp_message));
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				break;
 | 
			
		||||
				case Message.ENCRYPTION_NONE:
 | 
			
		||||
					mEditMessage
 | 
			
		||||
							.setHint(getString(R.string.send_plain_text_message));
 | 
			
		||||
					break;
 | 
			
		||||
				case Message.ENCRYPTION_OTR:
 | 
			
		||||
					mEditMessage.setHint(getString(R.string.send_otr_message));
 | 
			
		||||
					break;
 | 
			
		||||
				case Message.ENCRYPTION_PGP:
 | 
			
		||||
					mEditMessage.setHint(getString(R.string.send_pgp_message));
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public View onCreateView(final LayoutInflater inflater,
 | 
			
		||||
			ViewGroup container, Bundle savedInstanceState) {
 | 
			
		||||
							 ViewGroup container, Bundle savedInstanceState) {
 | 
			
		||||
		final View view = inflater.inflate(R.layout.fragment_conversation,
 | 
			
		||||
				container, false);
 | 
			
		||||
		mEditMessage = (EditMessage) view.findViewById(R.id.textinput);
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +312,11 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
											.getConversation());
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}  else {
 | 
			
		||||
							Account account = message.getConversation().getAccount();
 | 
			
		||||
							Intent intent = new Intent(activity, EditAccountActivity.class);
 | 
			
		||||
							intent.putExtra("jid", account.getJid());
 | 
			
		||||
							startActivity(intent);
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
| 
						 | 
				
			
			@ -339,7 +345,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onCreateContextMenu(ContextMenu menu, View v,
 | 
			
		||||
			ContextMenuInfo menuInfo) {
 | 
			
		||||
									ContextMenuInfo menuInfo) {
 | 
			
		||||
		super.onCreateContextMenu(menu, v, menuInfo);
 | 
			
		||||
		AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
 | 
			
		||||
		this.selectedMessage = this.messageList.get(acmi.position);
 | 
			
		||||
| 
						 | 
				
			
			@ -383,23 +389,23 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
	@Override
 | 
			
		||||
	public boolean onContextItemSelected(MenuItem item) {
 | 
			
		||||
		switch (item.getItemId()) {
 | 
			
		||||
		case R.id.share_image:
 | 
			
		||||
			shareImage(selectedMessage);
 | 
			
		||||
			return true;
 | 
			
		||||
		case R.id.copy_text:
 | 
			
		||||
			copyText(selectedMessage);
 | 
			
		||||
			return true;
 | 
			
		||||
		case R.id.send_again:
 | 
			
		||||
			resendMessage(selectedMessage);
 | 
			
		||||
			return true;
 | 
			
		||||
		case R.id.copy_url:
 | 
			
		||||
			copyUrl(selectedMessage);
 | 
			
		||||
			return true;
 | 
			
		||||
		case R.id.download_image:
 | 
			
		||||
			downloadImage(selectedMessage);
 | 
			
		||||
			return true;
 | 
			
		||||
		default:
 | 
			
		||||
			return super.onContextItemSelected(item);
 | 
			
		||||
			case R.id.share_image:
 | 
			
		||||
				shareImage(selectedMessage);
 | 
			
		||||
				return true;
 | 
			
		||||
			case R.id.copy_text:
 | 
			
		||||
				copyText(selectedMessage);
 | 
			
		||||
				return true;
 | 
			
		||||
			case R.id.send_again:
 | 
			
		||||
				resendMessage(selectedMessage);
 | 
			
		||||
				return true;
 | 
			
		||||
			case R.id.copy_url:
 | 
			
		||||
				copyUrl(selectedMessage);
 | 
			
		||||
				return true;
 | 
			
		||||
			case R.id.download_image:
 | 
			
		||||
				downloadImage(selectedMessage);
 | 
			
		||||
				return true;
 | 
			
		||||
			default:
 | 
			
		||||
				return super.onContextItemSelected(item);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -533,7 +539,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
						});
 | 
			
		||||
			} else if (!contact.showInRoster()
 | 
			
		||||
					&& contact
 | 
			
		||||
							.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
 | 
			
		||||
					.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
 | 
			
		||||
				showSnackbar(R.string.contact_added_you, R.string.add_back,
 | 
			
		||||
						new OnClickListener() {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -548,7 +554,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
			for (Message message : this.conversation.getMessages()) {
 | 
			
		||||
				if (message.getEncryption() == Message.ENCRYPTION_PGP
 | 
			
		||||
						&& (message.getStatus() == Message.STATUS_RECEIVED || message
 | 
			
		||||
								.getStatus() >= Message.STATUS_SEND)
 | 
			
		||||
						.getStatus() >= Message.STATUS_SEND)
 | 
			
		||||
						&& message.getDownloadable() == null) {
 | 
			
		||||
					if (!mEncryptedMessages.contains(message)) {
 | 
			
		||||
						mEncryptedMessages.add(message);
 | 
			
		||||
| 
						 | 
				
			
			@ -574,32 +580,32 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
						&& conversation.getAccount().getStatus() == Account.STATUS_ONLINE) {
 | 
			
		||||
					int error = conversation.getMucOptions().getError();
 | 
			
		||||
					switch (error) {
 | 
			
		||||
					case MucOptions.ERROR_NICK_IN_USE:
 | 
			
		||||
						showSnackbar(R.string.nick_in_use, R.string.edit,
 | 
			
		||||
								clickToMuc);
 | 
			
		||||
						break;
 | 
			
		||||
					case MucOptions.ERROR_ROOM_NOT_FOUND:
 | 
			
		||||
						showSnackbar(R.string.conference_not_found,
 | 
			
		||||
								R.string.leave, leaveMuc);
 | 
			
		||||
						break;
 | 
			
		||||
					case MucOptions.ERROR_PASSWORD_REQUIRED:
 | 
			
		||||
						showSnackbar(R.string.conference_requires_password,
 | 
			
		||||
								R.string.enter_password, enterPassword);
 | 
			
		||||
						break;
 | 
			
		||||
					case MucOptions.ERROR_BANNED:
 | 
			
		||||
						showSnackbar(R.string.conference_banned,
 | 
			
		||||
								R.string.leave, leaveMuc);
 | 
			
		||||
						break;
 | 
			
		||||
					case MucOptions.ERROR_MEMBERS_ONLY:
 | 
			
		||||
						showSnackbar(R.string.conference_members_only,
 | 
			
		||||
								R.string.leave, leaveMuc);
 | 
			
		||||
						break;
 | 
			
		||||
					case MucOptions.KICKED_FROM_ROOM:
 | 
			
		||||
						showSnackbar(R.string.conference_kicked, R.string.join,
 | 
			
		||||
								joinMuc);
 | 
			
		||||
						break;
 | 
			
		||||
					default:
 | 
			
		||||
						break;
 | 
			
		||||
						case MucOptions.ERROR_NICK_IN_USE:
 | 
			
		||||
							showSnackbar(R.string.nick_in_use, R.string.edit,
 | 
			
		||||
									clickToMuc);
 | 
			
		||||
							break;
 | 
			
		||||
						case MucOptions.ERROR_ROOM_NOT_FOUND:
 | 
			
		||||
							showSnackbar(R.string.conference_not_found,
 | 
			
		||||
									R.string.leave, leaveMuc);
 | 
			
		||||
							break;
 | 
			
		||||
						case MucOptions.ERROR_PASSWORD_REQUIRED:
 | 
			
		||||
							showSnackbar(R.string.conference_requires_password,
 | 
			
		||||
									R.string.enter_password, enterPassword);
 | 
			
		||||
							break;
 | 
			
		||||
						case MucOptions.ERROR_BANNED:
 | 
			
		||||
							showSnackbar(R.string.conference_banned,
 | 
			
		||||
									R.string.leave, leaveMuc);
 | 
			
		||||
							break;
 | 
			
		||||
						case MucOptions.ERROR_MEMBERS_ONLY:
 | 
			
		||||
							showSnackbar(R.string.conference_members_only,
 | 
			
		||||
									R.string.leave, leaveMuc);
 | 
			
		||||
							break;
 | 
			
		||||
						case MucOptions.KICKED_FROM_ROOM:
 | 
			
		||||
							showSnackbar(R.string.conference_kicked, R.string.join,
 | 
			
		||||
									joinMuc);
 | 
			
		||||
							break;
 | 
			
		||||
						default:
 | 
			
		||||
							break;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -660,30 +666,30 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
				&& c.getAccount().getStatus() == Account.STATUS_ONLINE) {
 | 
			
		||||
			if (c.getMode() == Conversation.MODE_SINGLE) {
 | 
			
		||||
				switch (c.getContact().getMostAvailableStatus()) {
 | 
			
		||||
				case Presences.CHAT:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_online);
 | 
			
		||||
					break;
 | 
			
		||||
				case Presences.ONLINE:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_online);
 | 
			
		||||
					break;
 | 
			
		||||
				case Presences.AWAY:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_away);
 | 
			
		||||
					break;
 | 
			
		||||
				case Presences.XA:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_away);
 | 
			
		||||
					break;
 | 
			
		||||
				case Presences.DND:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_dnd);
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					this.mSendButton
 | 
			
		||||
							.setImageResource(R.drawable.ic_action_send_now_offline);
 | 
			
		||||
					break;
 | 
			
		||||
					case Presences.CHAT:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_online);
 | 
			
		||||
						break;
 | 
			
		||||
					case Presences.ONLINE:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_online);
 | 
			
		||||
						break;
 | 
			
		||||
					case Presences.AWAY:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_away);
 | 
			
		||||
						break;
 | 
			
		||||
					case Presences.XA:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_away);
 | 
			
		||||
						break;
 | 
			
		||||
					case Presences.DND:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_dnd);
 | 
			
		||||
						break;
 | 
			
		||||
					default:
 | 
			
		||||
						this.mSendButton
 | 
			
		||||
								.setImageResource(R.drawable.ic_action_send_now_offline);
 | 
			
		||||
						break;
 | 
			
		||||
				}
 | 
			
		||||
			} else if (c.getMode() == Conversation.MODE_MULTI) {
 | 
			
		||||
				if (c.getMucOptions().online()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -723,9 +729,9 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
		Set<String> knownFingerprints = conversation.getContact()
 | 
			
		||||
				.getOtrFingerprints();
 | 
			
		||||
		if (conversation.hasValidOtrSession()
 | 
			
		||||
						&& (!conversation.isMuted())
 | 
			
		||||
						&& (conversation.getOtrSession().getSessionStatus() == SessionStatus.ENCRYPTED) && (!knownFingerprints
 | 
			
		||||
							.contains(conversation.getOtrFingerprint()))) {
 | 
			
		||||
				&& (!conversation.isMuted())
 | 
			
		||||
				&& (conversation.getOtrSession().getSessionStatus() == SessionStatus.ENCRYPTED) && (!knownFingerprints
 | 
			
		||||
				.contains(conversation.getOtrFingerprint()))) {
 | 
			
		||||
			showSnackbar(R.string.unknown_otr_fingerprint, R.string.verify,
 | 
			
		||||
					new OnClickListener() {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -744,7 +750,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	protected void showSnackbar(int message, int action,
 | 
			
		||||
			OnClickListener clickListener) {
 | 
			
		||||
								OnClickListener clickListener) {
 | 
			
		||||
		snackbar.setVisibility(View.VISIBLE);
 | 
			
		||||
		snackbar.setOnClickListener(null);
 | 
			
		||||
		snackbarMessage.setText(message);
 | 
			
		||||
| 
						 | 
				
			
			@ -775,7 +781,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
 | 
			
		||||
								@Override
 | 
			
		||||
								public void userInputRequried(PendingIntent pi,
 | 
			
		||||
										Contact contact) {
 | 
			
		||||
															  Contact contact) {
 | 
			
		||||
									activity.runIntent(
 | 
			
		||||
											pi,
 | 
			
		||||
											ConversationActivity.REQUEST_ENCRYPT_MESSAGE);
 | 
			
		||||
| 
						 | 
				
			
			@ -799,7 +805,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
 | 
			
		||||
								@Override
 | 
			
		||||
								public void onClick(DialogInterface dialog,
 | 
			
		||||
										int which) {
 | 
			
		||||
													int which) {
 | 
			
		||||
									conversation
 | 
			
		||||
											.setNextEncryption(Message.ENCRYPTION_NONE);
 | 
			
		||||
									xmppService.databaseBackend
 | 
			
		||||
| 
						 | 
				
			
			@ -828,7 +834,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
 | 
			
		||||
								@Override
 | 
			
		||||
								public void onClick(DialogInterface dialog,
 | 
			
		||||
										int which) {
 | 
			
		||||
													int which) {
 | 
			
		||||
									conversation
 | 
			
		||||
											.setNextEncryption(Message.ENCRYPTION_NONE);
 | 
			
		||||
									message.setEncryption(Message.ENCRYPTION_NONE);
 | 
			
		||||
| 
						 | 
				
			
			@ -846,7 +852,7 @@ public class ConversationFragment extends Fragment {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	public void showNoPGPKeyDialog(boolean plural,
 | 
			
		||||
			DialogInterface.OnClickListener listener) {
 | 
			
		||||
								   DialogInterface.OnClickListener listener) {
 | 
			
		||||
		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 | 
			
		||||
		builder.setIconAttribute(android.R.attr.alertDialogIcon);
 | 
			
		||||
		if (plural) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue