Added copy contact email/name to clipboard

pull/213/head
M66B 2 years ago
parent 7c91e4bacc
commit 9276018795

@ -20,6 +20,8 @@ package eu.faircode.email;
*/ */
import android.Manifest; import android.Manifest;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -41,6 +43,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.PopupMenu;
@ -55,11 +58,16 @@ import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import java.io.InputStream; import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import javax.mail.Address;
import javax.mail.internet.InternetAddress;
public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHolder> { public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHolder> {
private Fragment parentFragment; private Fragment parentFragment;
@ -244,6 +252,7 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
contact.type != EntityContact.TYPE_NO_JUNK) contact.type != EntityContact.TYPE_NO_JUNK)
popupMenu.getMenu().add(Menu.NONE, R.string.title_advanced_never_favorite, order++, R.string.title_advanced_never_favorite); popupMenu.getMenu().add(Menu.NONE, R.string.title_advanced_never_favorite, order++, R.string.title_advanced_never_favorite);
popupMenu.getMenu().add(Menu.NONE, R.string.title_share, order++, R.string.title_share); // should be system whitelisted popupMenu.getMenu().add(Menu.NONE, R.string.title_share, order++, R.string.title_share); // should be system whitelisted
popupMenu.getMenu().add(Menu.NONE, R.string.title_clipboard_copy, order++, R.string.title_clipboard_copy); // should be system whitelisted
if (Shortcuts.can(context)) if (Shortcuts.can(context))
popupMenu.getMenu().add(Menu.NONE, R.string.title_pin, order++, R.string.title_pin); popupMenu.getMenu().add(Menu.NONE, R.string.title_pin, order++, R.string.title_pin);
popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_contact, order++, R.string.title_edit_contact); popupMenu.getMenu().add(Menu.NONE, R.string.title_edit_contact, order++, R.string.title_edit_contact);
@ -260,6 +269,9 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
} else if (itemId == R.string.title_share) { } else if (itemId == R.string.title_share) {
onActionShare(); onActionShare();
return true; return true;
} else if (itemId == R.string.title_clipboard_copy) {
onActionCopy();
return true;
} else if (itemId == R.string.title_pin) { } else if (itemId == R.string.title_pin) {
onActionPin(); onActionPin();
return true; return true;
@ -311,6 +323,27 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
} }
} }
private void onActionCopy() {
ClipboardManager clipboard = Helper.getSystemService(context, ClipboardManager.class);
if (clipboard == null)
return;
String copy;
try {
InternetAddress address = new InternetAddress(contact.email, contact.name, StandardCharsets.UTF_8.name());
copy = MessageHelper.formatAddresses(new Address[]{address});
} catch (UnsupportedEncodingException ex) {
Log.e(ex);
copy = contact.email;
}
ClipData clip = ClipData.newPlainText(context.getString(R.string.app_name), copy);
clipboard.setPrimaryClip(clip);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU)
ToastEx.makeText(context, R.string.title_clipboard_copied, Toast.LENGTH_LONG).show();
}
private void onActionPin() { private void onActionPin() {
ShortcutInfoCompat.Builder builder = Shortcuts.getShortcut(context, contact); ShortcutInfoCompat.Builder builder = Shortcuts.getShortcut(context, contact);
Shortcuts.requestPinShortcut(context, builder.build()); Shortcuts.requestPinShortcut(context, builder.build());

Loading…
Cancel
Save