aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/eu/siacs/conversations/ui/ConversationFragment.java')
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 761f8054..27b12ae2 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -11,6 +11,8 @@ import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.os.Handler;
+import android.support.v13.view.inputmethod.InputConnectionCompat;
+import android.support.v13.view.inputmethod.InputContentInfoCompat;
import android.text.Editable;
import android.text.InputType;
import android.util.Log;
@@ -285,6 +287,37 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
}
};
+ private EditMessage.OnCommitContentListener mEditorContentListener = new EditMessage.OnCommitContentListener() {
+ @Override
+ public boolean onCommitContent(InputContentInfoCompat inputContentInfo, int flags, Bundle opts, String[] contentMimeTypes) {
+ // try to get permission to read the image, if applicable
+ if ((flags & InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) {
+ try {
+ inputContentInfo.requestPermission();
+ } catch (Exception e) {
+ Log.e(Config.LOGTAG, "InputContentInfoCompat#requestPermission() failed.", e);
+ Toast.makeText(
+ activity,
+ activity.getString(R.string.no_permission_to_access_x, inputContentInfo.getDescription()),
+ Toast.LENGTH_LONG
+ ).show();
+ return false;
+ }
+ }
+
+ // send the image
+ activity.attachImageToConversation(inputContentInfo.getContentUri());
+
+ // TODO: revoke permissions?
+ // since uploading an image is async its tough to wire a callback to when
+ // the image has finished uploading.
+ // According to the docs: "calling IC#releasePermission() is just to be a
+ // good citizen. Even if we failed to call that method, the system would eventually revoke
+ // the permission sometime after inputContentInfo object gets garbage-collected."
+ // See: https://developer.android.com/samples/CommitContentSampleApp/src/com.example.android.commitcontent.app/MainActivity.html#l164
+ return true;
+ }
+ };
private OnClickListener mSendButtonListener = new OnClickListener() {
@Override
@@ -416,6 +449,8 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_conversation, container, false);
view.setOnClickListener(null);
+
+ String[] allImagesMimeType = {"image/*"};
mEditMessage = (EditMessage) view.findViewById(R.id.textinput);
mEditMessage.setOnClickListener(new OnClickListener() {
@@ -427,6 +462,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
});
mEditMessage.setOnEditorActionListener(mEditorActionListener);
+ mEditMessage.setRichContentListener(allImagesMimeType, mEditorContentListener);
mSendButton = (ImageButton) view.findViewById(R.id.textSendButton);
mSendButton.setOnClickListener(this.mSendButtonListener);