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