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. 37
      Clover/app/src/main/java/org/floens/chan/ui/activity/ImagePickActivity.java
  2. 41
      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,36 +65,37 @@ 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();
// Async load the stream into "pickedFileCache", an file in the cache root final String finalName = name;
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
final File cacheFile = new File(getCacheDir() + File.separator + "pickedFileCache"); final File cacheFile = new File(getCacheDir() + File.separator + "picked_file");
if (cacheFile.exists()) { if (cacheFile.exists()) {
cacheFile.delete(); cacheFile.delete();
} }
InputStream is = getContentResolver().openInputStream(uri); ParcelFileDescriptor fileDescriptor = getContentResolver().openFileDescriptor(uri, "r");
FileOutputStream fos = new FileOutputStream(cacheFile);
IOUtils.copy(is, fos); FileInputStream is = new FileInputStream(fileDescriptor.getFileDescriptor());
FileOutputStream os = new FileOutputStream(cacheFile);
IOUtils.copy(is, os);
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
@ -102,12 +106,17 @@ public class ImagePickActivity extends Activity {
}); });
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); 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();
} }
} }
} }

@ -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,23 +370,6 @@ public class ReplyFragment extends DialogFragment {
} else { } else {
fileDeleteButton.setEnabled(true); fileDeleteButton.setEnabled(true);
new Thread(new Runnable() {
@Override
public void run() {
if (context == null)
return;
final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000);
context.runOnUiThread(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); LinearLayout wrapper = new LinearLayout(context);
wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS); wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
wrapper.setOrientation(LinearLayout.VERTICAL); wrapper.setOrientation(LinearLayout.VERTICAL);
@ -397,12 +381,29 @@ public class ReplyFragment extends DialogFragment {
fileNameView.setText(name); fileNameView.setText(name);
wrapper.addView(fileNameView); wrapper.addView(fileNameView);
ImageView imageView = new ImageView(context); final ImageView imageView = new ImageView(context);
imageView.setScaleType(ScaleType.CENTER_INSIDE); imageView.setScaleType(ScaleType.CENTER_INSIDE);
imageView.setImageBitmap(bitmap);
wrapper.addView(imageView); wrapper.addView(imageView);
imageViewContainer.setView(wrapper); 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;
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);
} }
} }
}); });
@ -410,6 +411,8 @@ public class ReplyFragment extends DialogFragment {
}).start(); }).start();
} }
} }
}
}
private void getCaptcha() { private void getCaptcha() {
if (gettingCaptcha) if (gettingCaptcha)

@ -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