extract readTextFromUri into FileHelper

This commit is contained in:
Vincent Breitmoser 2015-06-20 03:34:21 +02:00
parent 25beeaceb5
commit f6bc1dcca3
2 changed files with 40 additions and 32 deletions

View File

@ -18,11 +18,8 @@
package org.sufficientlysecure.keychain.ui; package org.sufficientlysecure.keychain.ui;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -346,40 +343,14 @@ public class DecryptListFragment
intent.putExtra(DisplayTextActivity.EXTRA_METADATA, result); intent.putExtra(DisplayTextActivity.EXTRA_METADATA, result);
intent.setDataAndType(outputUri, "text/plain"); intent.setDataAndType(outputUri, "text/plain");
try {
byte[] decryptedMessage;
{
InputStream in = activity.getContentResolver().openInputStream(outputUri);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[256];
int read;
while ( (read = in.read(buf)) > 0) {
out.write(buf, 0, read);
}
in.close();
out.close();
decryptedMessage = out.toByteArray();
}
String plaintext; String plaintext;
if (result.getCharset() != null) {
try { try {
plaintext = new String(decryptedMessage, result.getCharset()); plaintext = FileHelper.readTextFromUri(activity, outputUri, result.getCharset());
} catch (UnsupportedEncodingException e) {
// if we can't decode properly, just fall back to utf-8
plaintext = new String(decryptedMessage);
}
} else {
plaintext = new String(decryptedMessage);
}
intent.putExtra(Intent.EXTRA_TEXT, plaintext);
} catch (IOException e) { } catch (IOException e) {
Notify.create(activity, R.string.error_preparing_data, Style.ERROR).show(); Notify.create(activity, R.string.error_preparing_data, Style.ERROR).show();
return null; return null;
} }
intent.putExtra(Intent.EXTRA_TEXT, plaintext);
return intent; return intent;
} }

View File

@ -41,7 +41,11 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;
import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
public class FileHelper { public class FileHelper {
@ -234,6 +238,39 @@ public class FileHelper {
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
} }
public static String readTextFromUri(Context context, Uri outputUri, String charset)
throws IOException {
byte[] decryptedMessage;
{
InputStream in = context.getContentResolver().openInputStream(outputUri);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[256];
int read;
while ( (read = in.read(buf)) > 0) {
out.write(buf, 0, read);
}
in.close();
out.close();
decryptedMessage = out.toByteArray();
}
String plaintext;
if (charset != null) {
try {
plaintext = new String(decryptedMessage, charset);
} catch (UnsupportedEncodingException e) {
// if we can't decode properly, just fall back to utf-8
plaintext = new String(decryptedMessage);
}
} else {
plaintext = new String(decryptedMessage);
}
return plaintext;
}
public static interface FileDialogCallback { public static interface FileDialogCallback {
public void onFileSelected(File file, boolean checked); public void onFileSelected(File file, boolean checked);
} }