diff --git a/app/src/main/java/eu/faircode/email/EditTextCompose.java b/app/src/main/java/eu/faircode/email/EditTextCompose.java index e0c9749e41..0d7f250a89 100644 --- a/app/src/main/java/eu/faircode/email/EditTextCompose.java +++ b/app/src/main/java/eu/faircode/email/EditTextCompose.java @@ -1,12 +1,21 @@ package eu.faircode.email; import android.content.Context; +import android.net.Uri; import android.os.Build; +import android.os.Bundle; import android.util.AttributeSet; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; import androidx.appcompat.widget.AppCompatEditText; +import androidx.core.view.inputmethod.EditorInfoCompat; +import androidx.core.view.inputmethod.InputConnectionCompat; +import androidx.core.view.inputmethod.InputContentInfoCompat; public class EditTextCompose extends AppCompatEditText { + private IInputContentListener listener = null; + public EditTextCompose(Context context) { super(context); } @@ -26,4 +35,41 @@ public class EditTextCompose extends AppCompatEditText { else return super.onTextContextMenuItem(id); } + + @Override + public InputConnection onCreateInputConnection(EditorInfo editorInfo) { + //https://developer.android.com/guide/topics/text/image-keyboard + InputConnection ic = super.onCreateInputConnection(editorInfo); + + EditorInfoCompat.setContentMimeTypes(editorInfo, new String[]{"image/*"}); + + return InputConnectionCompat.createWrapper(ic, editorInfo, new InputConnectionCompat.OnCommitContentListener() { + @Override + public boolean onCommitContent(InputContentInfoCompat info, int flags, Bundle opts) { + Log.i("Uri=" + info.getContentUri()); + try { + if (listener == null) + throw new IllegalArgumentException("InputContent listener not set"); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && + (flags & InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) + info.requestPermission(); + + listener.onInputContent(info.getContentUri()); + return true; + } catch (Throwable ex) { + Log.w(ex); + return false; + } + } + }); + } + + void setInputContentListener(IInputContentListener listener) { + this.listener = listener; + } + + interface IInputContentListener { + void onInputContent(Uri uri); + } } diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 267da94a84..6f1be325de 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -160,7 +160,7 @@ public class FragmentCompose extends FragmentBase { private ImageView ivCcBcc; private RecyclerView rvAttachment; private TextView tvNoInternetAttachments; - private EditText etBody; + private EditTextCompose etBody; private TextView tvNoInternet; private TextView tvSignature; private TextView tvReference; @@ -306,6 +306,13 @@ public class FragmentCompose extends FragmentBase { etBody.setCustomSelectionActionModeCallback(actionCallback); + etBody.setInputContentListener(new EditTextCompose.IInputContentListener() { + @Override + public void onInputContent(Uri uri) { + handleAddAttachment(uri, true); + } + }); + ibReferenceEdit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {