From 504eb1bacaa616cc8e4a3a42b219a620bbe5c89e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Blot=20=28=40U-Exp=29?= Date: Fri, 12 Dec 2014 15:44:47 +0100 Subject: [PATCH] Event->Connectivity changed: store lastMessageDate to shared preferences --- res/values/strings.xml | 4 ++++ .../engine/OCSMSOwnCloudClient.java | 15 ++++++++++++++- .../owncloud_sms/engine/SmsFetcher.java | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 9da9e2c..d6cfa6c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -38,6 +38,10 @@ fr.unix_experience.owncloud_sms Login logo + + ownCloudSMSPrefs + last_message_date + SMS - Fast diff --git a/src/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java b/src/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java index 9705fdf..dbf3221 100644 --- a/src/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java +++ b/src/fr/unix_experience/owncloud_sms/engine/OCSMSOwnCloudClient.java @@ -32,6 +32,7 @@ import org.json.JSONException; import org.json.JSONObject; import android.content.Context; +import android.content.SharedPreferences; import android.net.Uri; import android.util.Log; @@ -89,7 +90,10 @@ public class OCSMSOwnCloudClient { } } - public void doPushRequestV1(JSONArray smsList) throws OCSyncException { + public void doPushRequestV1(JSONArray smsList) throws OCSyncException { + // We need to save this date as a step for connectivity change + Long lastMsgDate = (long) 0; + if (smsList == null) { GetMethod get = createGetSmsIdListRequest(); JSONObject smsGetObj = doHttpRequest(get); @@ -134,6 +138,9 @@ public class OCSMSOwnCloudClient { fetcher.setExistingDraftsMessages(draftsSmsList); smsList = fetcher.fetchAllMessages(); + + // Get maximum message date present in smsList to keep a step when connectivity changes + lastMsgDate = fetcher.getLastMessageDate(); } if (smsList.length() == 0) { @@ -164,6 +171,12 @@ public class OCSMSOwnCloudClient { throw new OCSyncException(R.string.err_sync_push_request_resp, OCSyncErrorType.PARSE); } + // Push was OK, we can save the lastMessageDate which was saved to server + SharedPreferences sharedPref = _context.getSharedPreferences(_context.getString(R.string.shared_preference_file), Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPref.edit(); + editor.putLong(_context.getString(R.string.pref_lastmsgdate), lastMsgDate); + editor.commit(); + Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage); } diff --git a/src/fr/unix_experience/owncloud_sms/engine/SmsFetcher.java b/src/fr/unix_experience/owncloud_sms/engine/SmsFetcher.java index 7a72067..9d8f466 100644 --- a/src/fr/unix_experience/owncloud_sms/engine/SmsFetcher.java +++ b/src/fr/unix_experience/owncloud_sms/engine/SmsFetcher.java @@ -26,11 +26,11 @@ import fr.unix_experience.owncloud_sms.enums.MailboxID; import fr.unix_experience.owncloud_sms.providers.SmsDataProvider; import android.content.Context; import android.database.Cursor; -import android.net.Uri; import android.util.Log; public class SmsFetcher { public SmsFetcher(Context ct) { + _lastMsgDate = (long) 0; _context = ct; _existingInboxMessages = null; @@ -111,6 +111,13 @@ public class SmsFetcher { entry.put(colName, c.getInt(idx) > 0 ? "true" : "false"); } else { + // Special case for date, we need to record last without searching + if (colName.equals(new String("date"))) { + final Long tmpDate = c.getLong(idx); + if (tmpDate > _lastMsgDate) { + _lastMsgDate = tmpDate; + } + } entry.put(colName, c.getString(idx)); } } @@ -234,13 +241,17 @@ public class SmsFetcher { _existingDraftsMessages = draftMessages; } + public Long getLastMessageDate() { + return _lastMsgDate; + } + private Context _context; private JSONArray _jsonDataDump; private JSONArray _existingInboxMessages; private JSONArray _existingSentMessages; private JSONArray _existingDraftsMessages; - private static final String TAG = SmsFetcher.class.getSimpleName(); - + private Long _lastMsgDate; + private static final String TAG = SmsFetcher.class.getSimpleName(); }