Refactoring

This commit is contained in:
M66B 2020-04-27 08:46:55 +02:00
parent 2fd58cb1fa
commit 93541c7823
3 changed files with 30 additions and 33 deletions

View File

@ -46,8 +46,6 @@ import androidx.appcompat.app.AlertDialog;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.io.InputStream;
public class ActivitySignature extends ActivityBase { public class ActivitySignature extends ActivityBase {
private EditTextCompose etText; private EditTextCompose etText;
private BottomNavigationView style_bar; private BottomNavigationView style_bar;
@ -188,7 +186,7 @@ public class ActivitySignature extends ActivityBase {
etText.setText(HtmlHelper.fromHtml(html, new Html.ImageGetter() { etText.setText(HtmlHelper.fromHtml(html, new Html.ImageGetter() {
@Override @Override
public Drawable getDrawable(String source) { public Drawable getDrawable(String source) {
return getDrawableByUri(ActivitySignature.this, Uri.parse(source)); return ImageHelper.decodeImage(ActivitySignature.this, -1, source, true, 0, etText);
} }
}, null)); }, null));
dirty = false; dirty = false;
@ -282,7 +280,9 @@ public class ActivitySignature extends ActivityBase {
else { else {
SpannableStringBuilder ssb = new SpannableStringBuilder(etText.getText()); SpannableStringBuilder ssb = new SpannableStringBuilder(etText.getText());
ssb.insert(start, "\uFFFC"); // Object replacement character ssb.insert(start, "\uFFFC"); // Object replacement character
ImageSpan is = new ImageSpan(getDrawableByUri(this, uri), uri.toString(), ImageSpan.ALIGN_BASELINE); String source = uri.toString();
Drawable d = ImageHelper.decodeImage(this, -1, source, true, 0, etText);
ImageSpan is = new ImageSpan(d, source);
ssb.setSpan(is, start, start + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ssb.setSpan(is, start, start + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
etText.setText(ssb); etText.setText(ssb);
etText.setSelection(start + 1); etText.setSelection(start + 1);
@ -291,29 +291,4 @@ public class ActivitySignature extends ActivityBase {
Log.unexpectedError(getSupportFragmentManager(), ex); Log.unexpectedError(getSupportFragmentManager(), ex);
} }
} }
static Drawable getDrawableByUri(Context context, Uri uri) {
if ("content".equals(uri.getScheme())) {
Drawable d;
try {
Log.i("Loading image source=" + uri);
InputStream inputStream = context.getContentResolver().openInputStream(uri);
d = Drawable.createFromStream(inputStream, uri.toString());
} catch (Throwable ex) {
// FileNotFound, Security
Log.w(ex);
d = context.getResources().getDrawable(R.drawable.baseline_broken_image_24);
}
int w = Helper.dp2pixels(context, d.getIntrinsicWidth());
int h = Helper.dp2pixels(context, d.getIntrinsicHeight());
d.setBounds(0, 0, w, h);
return d;
} else {
Drawable d = context.getResources().getDrawable(R.drawable.baseline_image_24);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
}
} }

View File

@ -4567,7 +4567,7 @@ public class FragmentCompose extends FragmentBase {
signature = HtmlHelper.fromHtml(identity.signature, new Html.ImageGetter() { signature = HtmlHelper.fromHtml(identity.signature, new Html.ImageGetter() {
@Override @Override
public Drawable getDrawable(String source) { public Drawable getDrawable(String source) {
return ActivitySignature.getDrawableByUri(getContext(), Uri.parse(source)); return ImageHelper.decodeImage(getContext(), -1, source, true, 0, tvSignature);
} }
}, null); }, null);
tvSignature.setText(signature); tvSignature.setText(signature);

View File

@ -40,6 +40,7 @@ import android.graphics.drawable.LevelListDrawable;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Base64; import android.util.Base64;
@ -58,6 +59,7 @@ import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
@ -225,9 +227,9 @@ class ImageHelper {
boolean embedded = a.source.startsWith("cid:"); boolean embedded = a.source.startsWith("cid:");
boolean data = a.source.startsWith("data:"); boolean data = a.source.startsWith("data:");
boolean content = a.source.startsWith("content:");
Log.d("Image show=" + show + " inline=" + inline + Log.d("Image show=" + show + " inline=" + inline + " source=" + a.source);
" embedded=" + embedded + " data=" + data + " source=" + a.source);
// Embedded images // Embedded images
if (embedded && (show || inline)) { if (embedded && (show || inline)) {
@ -311,7 +313,27 @@ class ImageHelper {
return d; return d;
} }
if (!show) { if (content && (show || inline)) {
Drawable d;
try {
Uri uri = Uri.parse(a.source);
Log.i("Loading image source=" + uri);
InputStream inputStream = context.getContentResolver().openInputStream(uri);
d = Drawable.createFromStream(inputStream, uri.toString());
} catch (Throwable ex) {
// FileNotFound, Security
Log.w(ex);
d = context.getResources().getDrawable(R.drawable.baseline_broken_image_24);
}
int w = Helper.dp2pixels(context, d.getIntrinsicWidth());
int h = Helper.dp2pixels(context, d.getIntrinsicHeight());
d.setBounds(0, 0, w, h);
return d;
}
if (!show || id < 0) {
// Show placeholder icon // Show placeholder icon
int resid = (embedded || data ? R.drawable.baseline_photo_library_24 : R.drawable.baseline_image_24); int resid = (embedded || data ? R.drawable.baseline_photo_library_24 : R.drawable.baseline_image_24);
Drawable d = res.getDrawable(resid, theme); Drawable d = res.getDrawable(resid, theme);