diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java index 22331b89d..dbf48bdb7 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java @@ -211,6 +211,9 @@ public class ProfileAdapter extends RecyclerView.Adapter if (data.viewType == ITEM_LAST_SEEN || data.viewType == ITEM_ADDRESS) { int padding = (int)((float)context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding) * 1.2); item.setPadding(item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), padding); + if (data.viewType == ITEM_ADDRESS) { + item.setOnLongClickListener(view -> {clickListener.onAddressLongClicked(); return true;}); + } } else if (data.viewType == ITEM_INTRODUCED_BY) { int padding = context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding); item.setPadding(item.getPaddingLeft(), padding, item.getPaddingRight(), item.getPaddingBottom()); @@ -235,6 +238,7 @@ public class ProfileAdapter extends RecyclerView.Adapter void onMemberClicked(int contactId); void onMemberLongClicked(int contactId); void onAvatarClicked(); + void onAddressLongClicked(); } public void toggleMemberSelection(int contactId) { diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java index 1a1ee6e76..f82be5163 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileFragment.java @@ -153,6 +153,23 @@ public class ProfileFragment extends Fragment .show(); } + @Override + public void onAddressLongClicked() { + Context context = requireContext(); + String address = dcContext.getContact(contactId).getAddr(); + new AlertDialog.Builder(context) + .setTitle(address) + .setItems(new CharSequence[]{ + context.getString(R.string.menu_copy_to_clipboard) + }, + (dialogInterface, i) -> { + Util.writeTextToClipboard(context, address); + Toast.makeText(context, context.getString(R.string.copied_to_clipboard), Toast.LENGTH_SHORT).show(); + }) + .setNegativeButton(R.string.cancel, null) + .show(); + } + @Override public void onMemberLongClicked(int contactId) { if (contactId>DcContact.DC_CONTACT_ID_LAST_SPECIAL || contactId==DcContact.DC_CONTACT_ID_SELF) { diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileTextItem.java b/src/main/java/org/thoughtcrime/securesms/ProfileTextItem.java index d75082c04..6d4f2fbc4 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileTextItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileTextItem.java @@ -18,6 +18,7 @@ public class ProfileTextItem extends LinearLayout { private TextView labelView; private @Nullable TextView valueView; + private final ProfileTextItem.PassthroughClickListener passthroughClickListener = new ProfileTextItem.PassthroughClickListener(); public ProfileTextItem(Context context) { super(context); @@ -31,6 +32,8 @@ public class ProfileTextItem extends LinearLayout { protected void onFinishInflate() { super.onFinishInflate(); labelView = findViewById(R.id.label); + labelView.setOnLongClickListener(passthroughClickListener); + labelView.setOnClickListener(passthroughClickListener); valueView = findViewById(R.id.value); } @@ -54,4 +57,18 @@ public class ProfileTextItem extends LinearLayout { valueView.setVisibility(View.VISIBLE); } } + + private class PassthroughClickListener implements View.OnLongClickListener, View.OnClickListener { + + @Override + public boolean onLongClick(View v) { + performLongClick(); + return true; + } + + @Override + public void onClick(View v) { + performClick(); + } + } }