diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/AndroidSmsFetcher.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/AndroidSmsFetcher.java index 1bce3c4..a00a1c6 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/engine/AndroidSmsFetcher.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/AndroidSmsFetcher.java @@ -23,7 +23,6 @@ import android.util.Log; import org.json.JSONArray; import org.json.JSONException; -import org.json.JSONObject; import fr.unix_experience.owncloud_sms.enums.MailboxID; import fr.unix_experience.owncloud_sms.jni.SmsBuffer; @@ -47,7 +46,7 @@ public class AndroidSmsFetcher { private void readMailBox(Cursor c, SmsBuffer smsBuffer, MailboxID mbID) { do { - JSONObject entry = new JSONObject(); + SmsEntry entry = new SmsEntry(); try { for (int idx = 0; idx < c.getColumnCount(); idx++) { @@ -55,7 +54,7 @@ public class AndroidSmsFetcher { } // Mailbox ID is required by server - entry.put("mbox", mbID.ordinal()); + entry.mailboxId = mbID.ordinal(); smsBuffer.push(mbID, entry); } catch (JSONException e) { @@ -104,7 +103,7 @@ public class AndroidSmsFetcher { } // We create a list of strings to store results - JSONObject entry = new JSONObject(); + SmsEntry entry = new SmsEntry(); SmsBuffer results = new SmsBuffer(); try { @@ -121,7 +120,7 @@ public class AndroidSmsFetcher { * mboxId is greater than server mboxId by 1 because types * aren't indexed in the same mean */ - entry.put("mbox", (mboxId - 1)); + entry.mailboxId = mboxId - 1; results.push(mbID, entry); } catch (JSONException e) { Log.e(AndroidSmsFetcher.TAG, "JSON Exception when reading SMS Mailbox", e); @@ -161,16 +160,16 @@ public class AndroidSmsFetcher { c.close(); } - private Integer handleProviderColumn(Cursor c, int idx, JSONObject entry) throws JSONException { + private Integer handleProviderColumn(Cursor c, int idx, SmsEntry entry) throws JSONException { String colName = c.getColumnName(idx); // Id column is must be an integer switch (colName) { case "_id": - entry.put(colName, c.getInt(idx)); + entry.id = c.getInt(idx); break; case "type": - entry.put(colName, c.getInt(idx)); + entry.type = c.getInt(idx); return c.getInt(idx); /* For debug purpose case "length(address)": @@ -178,8 +177,10 @@ public class AndroidSmsFetcher { break;*/ // Seen and read must be pseudo boolean case "read": + entry.read = (c.getInt(idx) > 0); + break; case "seen": - entry.put(colName, (c.getInt(idx) > 0) ? "true" : "false"); + entry.seen = (c.getInt(idx) > 0); break; case "date": // Special case for date, we need to record last without searching @@ -187,10 +188,16 @@ public class AndroidSmsFetcher { if (tmpDate > _lastMsgDate) { _lastMsgDate = tmpDate; } - entry.put(colName, c.getLong(idx)); + entry.date = c.getLong(idx); + break; + case "address": + entry.address = c.getString(idx); + break; + case "body": + entry.body = c.getString(idx); break; default: - entry.put(colName, c.getString(idx)); + // Unhandled column break; } diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/SmsEntry.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/SmsEntry.java new file mode 100644 index 0000000..5319c7a --- /dev/null +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/SmsEntry.java @@ -0,0 +1,29 @@ +package fr.unix_experience.owncloud_sms.engine; + +/* + * Copyright (c) 2014-2016, Loic Blot + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +public class SmsEntry { + public int id; + public int mailboxId; + public int type; + public boolean read; + public boolean seen; + public long date; + public String address; + public String body; +} diff --git a/src/main/java/fr/unix_experience/owncloud_sms/jni/SmsBuffer.java b/src/main/java/fr/unix_experience/owncloud_sms/jni/SmsBuffer.java index 5a88a49..dd82f65 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/jni/SmsBuffer.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/jni/SmsBuffer.java @@ -1,8 +1,8 @@ package fr.unix_experience.owncloud_sms.jni; import org.json.JSONException; -import org.json.JSONObject; +import fr.unix_experience.owncloud_sms.engine.SmsEntry; import fr.unix_experience.owncloud_sms.enums.MailboxID; /** @@ -48,15 +48,15 @@ public class SmsBuffer { public native void print(); public native String asRawJsonString(); - public void push (MailboxID mbid, JSONObject jsonObject) throws JSONException { - push(jsonObject.getInt("_id"), + public void push(MailboxID mbid, SmsEntry smsEntry) throws JSONException { + push(smsEntry.id, mbid.ordinal(), - jsonObject.getInt("type"), - jsonObject.getLong("date"), - jsonObject.getString("address"), - jsonObject.getString("body"), - jsonObject.getString("read"), - jsonObject.getString("seen")); + smsEntry.type, + smsEntry.date, + smsEntry.address, + smsEntry.body, + smsEntry.read ? "true" : "false", + smsEntry.seen ? "true" : "false"); } public void clear() {