From 2eb5253f2ad7010508e9c092d38e23e5f7310453 Mon Sep 17 00:00:00 2001 From: Greg Burch Date: Thu, 23 Aug 2018 22:26:22 -0700 Subject: [PATCH 1/2] Changed provider to scope to all messages. Future update should be able to provide a flag on which scope the user would like to request. All, Sent, Draft, Inbox, Outbox --- app/src/main/java/com/termux/api/SmsInboxAPI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/api/SmsInboxAPI.java b/app/src/main/java/com/termux/api/SmsInboxAPI.java index 04ab81c14..eb6e329bf 100644 --- a/app/src/main/java/com/termux/api/SmsInboxAPI.java +++ b/app/src/main/java/com/termux/api/SmsInboxAPI.java @@ -50,7 +50,7 @@ public void writeJson(JsonWriter out) throws Exception { public static void getAllSms(Context context, JsonWriter out, int offset, int limit) throws IOException { ContentResolver cr = context.getContentResolver(); String sortOrder = "date DESC LIMIT + " + limit + " OFFSET " + offset; - try (Cursor c = cr.query(Telephony.Sms.Inbox.CONTENT_URI, null, null, null, sortOrder)) { + try (Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, null, null, sortOrder)) { c.moveToLast(); From dcd1b75872c370e89bfd7707bd865c9aed627bb2 Mon Sep 17 00:00:00 2001 From: Greg Burch Date: Sat, 25 Aug 2018 11:12:25 -0700 Subject: [PATCH 2/2] Add ability to specify the type of message to query for --- .../main/java/com/termux/api/SmsInboxAPI.java | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/termux/api/SmsInboxAPI.java b/app/src/main/java/com/termux/api/SmsInboxAPI.java index eb6e329bf..c13ef2079 100644 --- a/app/src/main/java/com/termux/api/SmsInboxAPI.java +++ b/app/src/main/java/com/termux/api/SmsInboxAPI.java @@ -37,20 +37,21 @@ public class SmsInboxAPI { static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) { final int offset = intent.getIntExtra("offset", 0); final int limit = intent.getIntExtra("limit", 50); + final Uri contentURI = typeToContentURI(intent.getIntExtra("type", TextBasedSmsColumns.MESSAGE_TYPE_INBOX)); ResultReturner.returnData(apiReceiver, intent, new ResultJsonWriter() { @Override public void writeJson(JsonWriter out) throws Exception { - getAllSms(context, out, offset, limit); + getAllSms(context, out, offset, limit, contentURI); } }); } @SuppressLint("SimpleDateFormat") - public static void getAllSms(Context context, JsonWriter out, int offset, int limit) throws IOException { + public static void getAllSms(Context context, JsonWriter out, int offset, int limit, Uri contentURI) throws IOException { ContentResolver cr = context.getContentResolver(); String sortOrder = "date DESC LIMIT + " + limit + " OFFSET " + offset; - try (Cursor c = cr.query(Telephony.Sms.CONTENT_URI, null, null, null, sortOrder)) { + try (Cursor c = cr.query(contentURI, null, null, null, sortOrder)) { c.moveToLast(); @@ -59,7 +60,7 @@ public static void getAllSms(Context context, JsonWriter out, int offset, int li out.beginArray(); for (int i = 0, count = c.getCount(); i < count; i++) { - // String smsId = c.getString(c.getColumnIndexOrThrow(Telephony.Sms.Inbox._ID)); + int threadID = c.getInt(c.getColumnIndexOrThrow(TextBasedSmsColumns.THREAD_ID)); String smsAddress = c.getString(c.getColumnIndexOrThrow(TextBasedSmsColumns.ADDRESS)); String smsBody = c.getString(c.getColumnIndexOrThrow(TextBasedSmsColumns.BODY)); boolean read = (c.getInt(c.getColumnIndex(TextBasedSmsColumns.READ)) != 0); @@ -67,8 +68,11 @@ public static void getAllSms(Context context, JsonWriter out, int offset, int li // long smsSentDate = c.getLong(c.getColumnIndexOrThrow(TextBasedSmsColumns.DATE_SENT)); String smsSenderName = getContactNameFromNumber(nameCache, context, smsAddress); + String messageType = getMessageType(c.getInt(c.getColumnIndexOrThrow(TextBasedSmsColumns.TYPE))); out.beginObject(); + out.name("threadid").value(threadID); + out.name("type").value(messageType); out.name("read").value(read); if (smsSenderName != null) { @@ -102,4 +106,39 @@ private static String getContactNameFromNumber(Map cache, Contex } } + private static String getMessageType(int type) { + switch (type) + { + case TextBasedSmsColumns.MESSAGE_TYPE_INBOX: + return "inbox"; + case TextBasedSmsColumns.MESSAGE_TYPE_SENT: + return "sent"; + case TextBasedSmsColumns.MESSAGE_TYPE_DRAFT: + return "draft"; + case TextBasedSmsColumns.MESSAGE_TYPE_FAILED: + return "failed"; + case TextBasedSmsColumns.MESSAGE_TYPE_OUTBOX: + return "outbox"; + default: + return ""; + } + } + + private static Uri typeToContentURI(int type) { + switch (type) { + case TextBasedSmsColumns.MESSAGE_TYPE_ALL: + return Telephony.Sms.CONTENT_URI; + case TextBasedSmsColumns.MESSAGE_TYPE_SENT: + return Telephony.Sms.Sent.CONTENT_URI; + case TextBasedSmsColumns.MESSAGE_TYPE_DRAFT: + return Telephony.Sms.Draft.CONTENT_URI; + case TextBasedSmsColumns.MESSAGE_TYPE_OUTBOX: + return Telephony.Sms.Outbox.CONTENT_URI; + case TextBasedSmsColumns.MESSAGE_TYPE_INBOX: + default: + return Telephony.Sms.Inbox.CONTENT_URI; + } + } + + }