forked from Ivasoft/mattermost-mobile
* Show image paste menu * Get pasted image * Add more info for file * Add custom text input and add extension * Dismiss contextual menu after paste image * Group image info together * Add max file check * Fix max file size text * Add PropTypes * Add support for gif and tiff * add onchange null check * Use onPaste event * Move get image info logic * Clean up listener when no observer * Add android upload * Copy file from google docs * Clean up file after upload * Prevent text pasted in textbox if it's content uri * Rename paste file thread * Move on paste listener logic * Remove the redundant data in ios * Get realpath of item * Clean up * Only download for image * Rename to custom text input * Update RNPasteableEditTextOnPasteListener.java * Handle for download image failed * Fix eslint * Fix test * Allow multiple images to be pasted * Remove additional null check * Add managed control for Android * Disable only copy, cut and paste * Accept image in Android edit text * Add comment for custom text input * Do not upload when more than max file * Stop uplaod when exceed file size * Fix crash when clip data is null * Return error to JS * Move download file logic * Remove console * Add some tests * Add test for handleUploadImages * Add test for file_upload_item * Use ImageCacheManager to cache remote images * Fix crashes from one note * Remove commented code * Update test
77 lines
2.3 KiB
Java
77 lines
2.3 KiB
Java
package com.mattermost.rnbeta;
|
|
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.bridge.ReactContext;
|
|
import com.facebook.react.bridge.WritableArray;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
import com.facebook.react.views.textinput.ReactEditText;
|
|
|
|
import java.io.IOException;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
|
|
public class RNPasteableImageFromUrl implements Runnable {
|
|
|
|
private ReactContext mContext;
|
|
private String mUri;
|
|
private ReactEditText mTarget;
|
|
|
|
RNPasteableImageFromUrl(ReactContext context, ReactEditText target, String uri) {
|
|
mContext = context;
|
|
mUri = uri;
|
|
mTarget = target;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
WritableArray images = null;
|
|
WritableMap error = null;
|
|
|
|
try {
|
|
URL url = new URL(mUri);
|
|
URLConnection u = url.openConnection();
|
|
|
|
// Get type
|
|
String mimeType = u.getHeaderField("Content-Type");
|
|
if (!mimeType.startsWith("image")) {
|
|
return;
|
|
}
|
|
|
|
// Get fileSize
|
|
long fileSize = Long.parseLong(u.getHeaderField("Content-Length"));
|
|
|
|
// Get fileName
|
|
String contentDisposition = u.getHeaderField("Content-Disposition");
|
|
int startIndex = contentDisposition.indexOf("filename=\"") + 10;
|
|
int endIndex = contentDisposition.length() - 1;
|
|
String fileName = contentDisposition.substring(startIndex, endIndex);
|
|
|
|
WritableMap image = Arguments.createMap();
|
|
image.putString("type", mimeType);
|
|
image.putDouble("fileSize", fileSize);
|
|
image.putString("fileName", fileName);
|
|
image.putString("uri", mUri);
|
|
|
|
images = Arguments.createArray();
|
|
images.pushMap(image);
|
|
|
|
} catch (IOException e) {
|
|
error = Arguments.createMap();
|
|
error.putString("message", e.getMessage());
|
|
}
|
|
|
|
WritableMap event = Arguments.createMap();
|
|
event.putArray("data", images);
|
|
event.putMap("error", error);
|
|
|
|
mContext
|
|
.getJSModule(RCTEventEmitter.class)
|
|
.receiveEvent(
|
|
mTarget.getId(),
|
|
"onPaste",
|
|
event
|
|
);
|
|
}
|
|
}
|