Fix some file picking issues.

Little bit crummy until the reply screen gets an overhaul.
captchafix
Florens Douwes 11 years ago
parent c9ee07da24
commit a93fcb8be4
  1. 71
      Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
  2. 63
      Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
  3. 2
      Clover/app/src/main/res/values/strings.xml

@ -23,17 +23,19 @@ import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns; import android.provider.OpenableColumns;
import android.widget.Toast; import android.widget.Toast;
import org.floens.chan.ChanApplication; import org.floens.chan.ChanApplication;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.utils.IOUtils; import org.floens.chan.utils.IOUtils;
import org.floens.chan.utils.Utils;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
public class ImagePickActivity extends Activity { public class ImagePickActivity extends Activity {
private static final int IMAGE_RESULT = 1; private static final int IMAGE_RESULT = 1;
@ -43,13 +45,14 @@ public class ImagePickActivity extends Activity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*"); intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
try { try {
startActivityForResult(intent, IMAGE_RESULT); startActivityForResult(intent, IMAGE_RESULT);
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
e.printStackTrace(); 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(); finish();
} }
} }
@ -62,52 +65,58 @@ public class ImagePickActivity extends Activity {
if (data != null) { if (data != null) {
final Uri uri = data.getData(); final Uri uri = data.getData();
String name = "file";
Cursor returnCursor = getContentResolver().query(uri, null, null, null, null); Cursor returnCursor = getContentResolver().query(uri, null, null, null, null);
if (returnCursor != null) { if (returnCursor != null) {
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
returnCursor.moveToFirst(); returnCursor.moveToFirst();
String name = "image";
if (nameIndex > -1) { if (nameIndex > -1) {
name = returnCursor.getString(nameIndex); name = returnCursor.getString(nameIndex);
} }
returnCursor.close(); 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 if (cacheFile.exists()) {
new Thread(new Runnable() { cacheFile.delete();
@Override }
public void run() {
try {
final File cacheFile = new File(getCacheDir() + File.separator + "pickedFileCache");
if (cacheFile.exists()) { ParcelFileDescriptor fileDescriptor = getContentResolver().openFileDescriptor(uri, "r");
cacheFile.delete();
}
InputStream is = getContentResolver().openInputStream(uri); FileInputStream is = new FileInputStream(fileDescriptor.getFileDescriptor());
FileOutputStream fos = new FileOutputStream(cacheFile); 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 } catch (IOException e) {
public void run() { e.printStackTrace();
ChanApplication.getReplyManager()._onPickedFile(finalName, cacheFile);
}
}); Utils.runOnUiThread(new Runnable() {
} catch (IOException e) { @Override
e.printStackTrace(); public void run() {
} ChanApplication.getReplyManager()._onPickedFile("", null);
Toast.makeText(ImagePickActivity.this, R.string.file_open_failed, Toast.LENGTH_LONG).show();
}
});
} }
}).start(); }
} else { }).start();
Toast.makeText(this, R.string.image_open_failed, Toast.LENGTH_LONG).show();
}
} }
} }
} }

@ -32,6 +32,7 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager; import android.view.WindowManager;
import android.webkit.MimeTypeMap;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.widget.Button; import android.widget.Button;
@ -369,45 +370,47 @@ public class ReplyFragment extends DialogFragment {
} else { } else {
fileDeleteButton.setEnabled(true); fileDeleteButton.setEnabled(true);
new Thread(new Runnable() { LinearLayout wrapper = new LinearLayout(context);
@Override wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
public void run() { wrapper.setOrientation(LinearLayout.VERTICAL);
if (context == null)
return;
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 @Override
public void run() { public void run() {
if (context == null) if (context == null)
return; return;
if (bitmap == null) { final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000);
Toast.makeText(context, R.string.image_preview_failed, Toast.LENGTH_LONG).show();
} else { context.runOnUiThread(new Runnable() {
LinearLayout wrapper = new LinearLayout(context); @Override
wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS); public void run() {
wrapper.setOrientation(LinearLayout.VERTICAL); if (context != null && bitmap != null) {
imageView.setImageBitmap(bitmap);
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);
}
} }
}); }).start();
} }
}).start(); }
} }
} }

@ -64,6 +64,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="image_not_found">Image not found</string> <string name="image_not_found">Image not found</string>
<string name="image_open_failed">Failed to open image</string> <string name="image_open_failed">Failed to open image</string>
<string name="file_open_failed">Failed to open file</string>
<string name="thread_load_failed_network">No network</string> <string name="thread_load_failed_network">No network</string>
<string name="thread_load_failed_parsing">Server inaccessible</string> <string name="thread_load_failed_parsing">Server inaccessible</string>
<string name="thread_load_failed_server">404 not found</string> <string name="thread_load_failed_server">404 not found</string>

Loading…
Cancel
Save