From fb9657384f577198a732db4bb8a741746ea0cb1e Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 28 Feb 2024 08:02:15 +0100 Subject: [PATCH] Prevent NPE --- .../eu/faircode/email/AdapterMessage.java | 231 ++++++++++-------- 1 file changed, 124 insertions(+), 107 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 217e0ad5ce..e3990c6f31 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -6402,137 +6402,154 @@ public class AdapterMessage extends RecyclerView.Adapter() { - @Override - protected Uri onExecute(Context context, Bundle args) throws Throwable { - long id = args.getLong("id"); + Bundle args = new Bundle(); + args.putLong("id", message.id); - File source = EntityMessage.getFile(context, id); + new SimpleTask() { + @Override + protected Uri onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); - File dir = Helper.ensureExists(context, "shared"); - File target = new File(dir, id + ".html"); + File source = EntityMessage.getFile(context, id); - Helper.copy(source, target); + File dir = Helper.ensureExists(context, "shared"); + File target = new File(dir, id + ".html"); - return FileProviderEx.getUri(context, BuildConfig.APPLICATION_ID, target); - } + Helper.copy(source, target); - @Override - protected void onExecuted(Bundle args, Uri uri) { - Helper.share(context, uri, "text/html", null); - } + return FileProviderEx.getUri(context, BuildConfig.APPLICATION_ID, target); + } - @Override - protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); - } - }.execute(context, owner, args, "message:external"); + @Override + protected void onExecuted(Bundle args, Uri uri) { + Helper.share(context, uri, "text/html", null); + } - return true; - } + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(parentFragment.getParentFragmentManager(), ex); + } + }.execute(context, owner, args, "message:external"); - if ("cid".equals(uri.getScheme()) || "data".equals(uri.getScheme())) - return false; + return true; + } - boolean confirm_links = prefs.getBoolean("confirm_links", true); + if ("cid".equals(uri.getScheme()) || "data".equals(uri.getScheme())) + return false; - String chost = FragmentDialogOpenLink.getConfirmHost(uri); - boolean confirm_link = (chost == null || prefs.getBoolean(chost + ".confirm_link", true)); - if (always_confirm || (confirm_links && confirm_link)) { - Bundle args = new Bundle(); - args.putParcelable("uri", uri); - args.putString("title", title); - args.putBoolean("always_confirm", always_confirm); + boolean confirm_links = prefs.getBoolean("confirm_links", true); - FragmentDialogOpenLink fragment = new FragmentDialogOpenLink(); - fragment.setArguments(args); - fragment.show(parentFragment.getParentFragmentManager(), "open:link"); - } else { - boolean link_view = prefs.getBoolean(chost + ".link_view", false); - boolean link_sanitize = prefs.getBoolean(chost + ".link_sanitize", false); - - if (link_sanitize && UriHelper.isHyperLink(uri)) { - Uri sanitized = UriHelper.sanitize(context, uri); - if (sanitized != null) - uri = sanitized; - Log.i("Open sanitized=" + uri); - } + String chost = FragmentDialogOpenLink.getConfirmHost(uri); + boolean confirm_link = (chost == null || prefs.getBoolean(chost + ".confirm_link", true)); + if (always_confirm || (confirm_links && confirm_link)) { + Bundle args = new Bundle(); + args.putParcelable("uri", uri); + args.putString("title", title); + args.putBoolean("always_confirm", always_confirm); - if (link_view) { - Log.i("Open view=" + uri); - Intent view = new Intent(Intent.ACTION_VIEW, UriHelper.fix(uri)); - Intent chooser = Intent.createChooser(view, context.getString(R.string.title_select_app)); - try { - context.startActivity(chooser); - } catch (ActivityNotFoundException ex) { - Log.w(ex); - Helper.view(context, uri, true, true); - } + FragmentDialogOpenLink fragment = new FragmentDialogOpenLink(); + fragment.setArguments(args); + fragment.show(parentFragment.getParentFragmentManager(), "open:link"); } else { - boolean tabs = prefs.getBoolean("open_with_tabs", true); - Helper.view(context, UriHelper.guessScheme(uri), !tabs, !tabs); + boolean link_view = prefs.getBoolean(chost + ".link_view", false); + boolean link_sanitize = prefs.getBoolean(chost + ".link_sanitize", false); + + if (link_sanitize && UriHelper.isHyperLink(uri)) { + Uri sanitized = UriHelper.sanitize(context, uri); + if (sanitized != null) + uri = sanitized; + Log.i("Open sanitized=" + uri); + } + + if (link_view) { + Log.i("Open view=" + uri); + Intent view = new Intent(Intent.ACTION_VIEW, UriHelper.fix(uri)); + Intent chooser = Intent.createChooser(view, context.getString(R.string.title_select_app)); + try { + context.startActivity(chooser); + } catch (ActivityNotFoundException ex) { + Log.w(ex); + Helper.view(context, uri, true, true); + } + } else { + boolean tabs = prefs.getBoolean("open_with_tabs", true); + Helper.view(context, UriHelper.guessScheme(uri), !tabs, !tabs); + } } } - } - return true; + return true; + } catch (Throwable ex) { + /* + Exception java.lang.NullPointerException: + at eu.faircode.email.AdapterMessage$ViewHolder.onOpenLink (AdapterMessage.java:6506) + at eu.faircode.email.AdapterMessage$ViewHolder.access$900 (AdapterMessage.java:354) + at eu.faircode.email.AdapterMessage$ViewHolder$2$1.onClick (AdapterMessage.java:670) + at eu.faircode.email.AdapterMessage$ViewHolder$2$1.onLongPress (AdapterMessage.java:632) + at android.view.GestureDetector.dispatchLongPress (GestureDetector.java:1014) + at android.view.GestureDetector.-$$Nest$mdispatchLongPress + at android.view.GestureDetector$GestureHandler.handleMessage (GestureDetector.java:358) + at android.os.Handler.dispatchMessage (Handler.java:106) + */ + Log.e(ex); + return false; + } } private boolean isActivate(Uri uri) {