(long id, Intent intent)
| 311 | } |
| 312 | |
| 313 | private void onReplyDirect(long id, Intent intent) throws IOException { |
| 314 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); |
| 315 | boolean plain_only = prefs.getBoolean("plain_only", false); |
| 316 | |
| 317 | DB db = DB.getInstance(this); |
| 318 | |
| 319 | EntityMessage ref = db.message().getMessage(id); |
| 320 | if (ref == null) |
| 321 | throw new IllegalArgumentException("message not found"); |
| 322 | |
| 323 | EntityIdentity identity = db.identity().getIdentity(ref.identity); |
| 324 | if (identity == null) |
| 325 | throw new IllegalArgumentException("identity not found"); |
| 326 | |
| 327 | EntityFolder outbox = db.folder().getOutbox(); |
| 328 | if (outbox == null) |
| 329 | throw new IllegalArgumentException("outbox not found"); |
| 330 | |
| 331 | |
| 332 | ClipData clip = intent.getClipData(); |
| 333 | Intent inner = (clip != null && clip.getItemCount() > 0 ? clip.getItemAt(0).getIntent() : null); |
| 334 | |
| 335 | Bundle results = RemoteInput.getResultsFromIntent(intent); |
| 336 | EntityLog.log(this, "Reply direct intent=" + intent + |
| 337 | " extras: " + TextUtils.join(" ", Log.getExtras(intent.getExtras())) + |
| 338 | " inner=" + inner + (inner == null ? "" : " extras: " + TextUtils.join(" ", Log.getExtras(inner.getExtras()))) + |
| 339 | " results: " + Log.getExtras(results)); |
| 340 | |
| 341 | Object obj = results.get("text"); |
| 342 | String body = (obj == null ? null : "<p>" + obj.toString().replaceAll("\\r?\\n", "<br>") + "</p>"); |
| 343 | |
| 344 | String text = HtmlHelper.getFullText(this, body); |
| 345 | String language = HtmlHelper.getLanguage(this, ref.subject, text); |
| 346 | String preview = HtmlHelper.getPreview(text); |
| 347 | |
| 348 | try { |
| 349 | db.beginTransaction(); |
| 350 | |
| 351 | EntityMessage reply = new EntityMessage(); |
| 352 | reply.account = identity.account; |
| 353 | reply.folder = outbox.id; |
| 354 | reply.identity = identity.id; |
| 355 | reply.msgid = EntityMessage.generateMessageId(); |
| 356 | reply.inreplyto = ref.msgid; |
| 357 | reply.thread = ref.thread; |
| 358 | reply.to = ref.from; |
| 359 | reply.from = new Address[]{new InternetAddress(identity.email, identity.name, StandardCharsets.UTF_8.name())}; |
| 360 | reply.subject = EntityMessage.getSubject(this, ref.language, ref.subject, false); |
| 361 | reply.received = new Date().getTime(); |
| 362 | reply.seen = true; |
| 363 | reply.ui_seen = true; |
| 364 | reply.id = db.message().insertMessage(reply); |
| 365 | |
| 366 | File file = reply.getFile(this); |
| 367 | Helper.writeText(file, body); |
| 368 | |
| 369 | db.message().setMessageContent(reply.id, |
| 370 | true, |
no test coverage detected