diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
index 0e83fb1a..184d01e7 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
@@ -23,17 +23,19 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns;
import android.widget.Toast;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.utils.IOUtils;
+import org.floens.chan.utils.Utils;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
public class ImagePickActivity extends Activity {
private static final int IMAGE_RESULT = 1;
@@ -43,13 +45,14 @@ public class ImagePickActivity extends Activity {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("image/*");
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("*/*");
try {
startActivityForResult(intent, IMAGE_RESULT);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
- Toast.makeText(this, R.string.image_open_failed, Toast.LENGTH_LONG).show();
+ Toast.makeText(this, R.string.file_open_failed, Toast.LENGTH_LONG).show();
finish();
}
}
@@ -62,52 +65,58 @@ public class ImagePickActivity extends Activity {
if (data != null) {
final Uri uri = data.getData();
+ String name = "file";
+
Cursor returnCursor = getContentResolver().query(uri, null, null, null, null);
if (returnCursor != null) {
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
returnCursor.moveToFirst();
- String name = "image";
if (nameIndex > -1) {
name = returnCursor.getString(nameIndex);
}
returnCursor.close();
+ }
- final String finalName = name;
+ ChanApplication.getReplyManager()._onPickedFileLoading();
- ChanApplication.getReplyManager()._onPickedFileLoading();
+ final String finalName = name;
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ final File cacheFile = new File(getCacheDir() + File.separator + "picked_file");
- // Async load the stream into "pickedFileCache", an file in the cache root
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- final File cacheFile = new File(getCacheDir() + File.separator + "pickedFileCache");
+ if (cacheFile.exists()) {
+ cacheFile.delete();
+ }
- if (cacheFile.exists()) {
- cacheFile.delete();
- }
+ ParcelFileDescriptor fileDescriptor = getContentResolver().openFileDescriptor(uri, "r");
- InputStream is = getContentResolver().openInputStream(uri);
- FileOutputStream fos = new FileOutputStream(cacheFile);
+ FileInputStream is = new FileInputStream(fileDescriptor.getFileDescriptor());
+ FileOutputStream os = new FileOutputStream(cacheFile);
+ IOUtils.copy(is, os);
- IOUtils.copy(is, fos);
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ChanApplication.getReplyManager()._onPickedFile(finalName, cacheFile);
+ }
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- ChanApplication.getReplyManager()._onPickedFile(finalName, cacheFile);
- }
+ });
+ } catch (IOException e) {
+ e.printStackTrace();
- });
- } catch (IOException e) {
- e.printStackTrace();
- }
+ Utils.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ChanApplication.getReplyManager()._onPickedFile("", null);
+ Toast.makeText(ImagePickActivity.this, R.string.file_open_failed, Toast.LENGTH_LONG).show();
+ }
+ });
}
- }).start();
- } else {
- Toast.makeText(this, R.string.image_open_failed, Toast.LENGTH_LONG).show();
- }
+ }
+ }).start();
}
}
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
index 3ea24dcb..2ac629bc 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
@@ -32,6 +32,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.WindowManager;
+import android.webkit.MimeTypeMap;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
@@ -369,45 +370,47 @@ public class ReplyFragment extends DialogFragment {
} else {
fileDeleteButton.setEnabled(true);
- new Thread(new Runnable() {
- @Override
- public void run() {
- if (context == null)
- return;
+ LinearLayout wrapper = new LinearLayout(context);
+ wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
+ wrapper.setOrientation(LinearLayout.VERTICAL);
- final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000);
+ fileNameView = new EditText(context);
+ fileNameView.setSingleLine();
+ fileNameView.setHint(R.string.reply_file_name);
+ fileNameView.setTextSize(16f);
+ fileNameView.setText(name);
+ wrapper.addView(fileNameView);
- context.runOnUiThread(new Runnable() {
+ final ImageView imageView = new ImageView(context);
+ imageView.setScaleType(ScaleType.CENTER_INSIDE);
+ wrapper.addView(imageView);
+
+ imageViewContainer.setView(wrapper);
+
+ String extension = MimeTypeMap.getFileExtensionFromUrl(name);
+ if (extension != null) {
+ String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ if (mimeType != null && mimeType.contains("image")) {
+ new Thread(new Runnable() {
@Override
public void run() {
if (context == null)
return;
- if (bitmap == null) {
- Toast.makeText(context, R.string.image_preview_failed, Toast.LENGTH_LONG).show();
- } else {
- LinearLayout wrapper = new LinearLayout(context);
- wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
- wrapper.setOrientation(LinearLayout.VERTICAL);
-
- fileNameView = new EditText(context);
- fileNameView.setSingleLine();
- fileNameView.setHint(R.string.reply_file_name);
- fileNameView.setTextSize(16f);
- fileNameView.setText(name);
- wrapper.addView(fileNameView);
-
- ImageView imageView = new ImageView(context);
- imageView.setScaleType(ScaleType.CENTER_INSIDE);
- imageView.setImageBitmap(bitmap);
- wrapper.addView(imageView);
-
- imageViewContainer.setView(wrapper);
- }
+ final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000);
+
+ context.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (context != null && bitmap != null) {
+ imageView.setImageBitmap(bitmap);
+ }
+ }
+ });
}
- });
+ }).start();
}
- }).start();
+ }
}
}
diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml
index 2dd66ada..b621753a 100644
--- a/Clover/app/src/main/res/values/strings.xml
+++ b/Clover/app/src/main/res/values/strings.xml
@@ -64,6 +64,8 @@ along with this program. If not, see .
Image not found
Failed to open image
+ Failed to open file
+
No network
Server inaccessible
404 not found