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

@ -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,23 +370,6 @@ public class ReplyFragment extends DialogFragment {
} else {
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);
wrapper.setLayoutParams(Utils.MATCH_WRAP_PARAMS);
wrapper.setOrientation(LinearLayout.VERTICAL);
@ -397,12 +381,29 @@ public class ReplyFragment extends DialogFragment {
fileNameView.setText(name);
wrapper.addView(fileNameView);
ImageView imageView = new ImageView(context);
final ImageView imageView = new ImageView(context);
imageView.setScaleType(ScaleType.CENTER_INSIDE);
imageView.setImageBitmap(bitmap);
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;
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();
}
}
}
}
private void getCaptcha() {
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_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_parsing">Server inaccessible</string>
<string name="thread_load_failed_server">404 not found</string>

Loading…
Cancel
Save