Skip to content

Commit

Permalink
Merge pull request #75 in MML/infobip-mobile-messaging-android from p…
Browse files Browse the repository at this point in the history
…andric-1290-retry-message-sync-error to master

Squashed commit of the following:

commit 7a5364e4b09743e828b5576c5c0d0fd0acfbbd38
Author: pandric <[email protected]>
Date:   Tue Feb 21 16:30:34 2017 +0100

    PR fix

commit b060eddbf8cca7fb7a0d659fdf118cee09380607
Author: sslavin <[email protected]>
Date:   Tue Feb 21 17:11:23 2017 +0300

    Separated scheduling and async task invokation

commit e0c4d5dd144f57cedbb7429ede0cfc6a4f1b404d
Author: pandric <[email protected]>
Date:   Tue Feb 21 13:56:47 2017 +0100

    MM-1290 Retry message sync on Error
  • Loading branch information
stanislavin committed Feb 21, 2017
1 parent f9ea49b commit 37bf72f
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,44 @@

import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;

import org.infobip.mobile.messaging.Message;
import org.infobip.mobile.messaging.MobileMessagingLogger;
import org.infobip.mobile.messaging.dal.bundle.BundleMessageMapper;
import org.infobip.mobile.messaging.gcm.MobileMessageHandler;
import org.infobip.mobile.messaging.stats.MobileMessagingStatsError;
import org.infobip.mobile.messaging.stats.MobileMessagingStats;
import org.infobip.mobile.messaging.MobileMessagingLogger;
import org.infobip.mobile.messaging.stats.MobileMessagingStatsError;

import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;

/**
* @author pandric on 09/09/16.
*/
public class MessagesSynchronizer {

private static final int DEFAULT_MAX_RETRY_COUNT = 3;
private final Handler handler = new Handler();

public void synchronize(Context context, MobileMessagingStats stats, Executor executor) {
syncMessages(context, stats, executor);
scheduleSyncMessagesTask(context, stats, executor, 0);
}

private void syncMessages(final Context context, final MobileMessagingStats stats, Executor executor) {
private void startSyncMessagesTask(final Context context, final MobileMessagingStats stats, final Executor executor, final int numOfAttemptsDone) {
new SyncMessagesTask(context) {

@Override
protected void onPostExecute(SyncMessagesResult syncMessagesResult) {
if (syncMessagesResult.hasError()) {
MobileMessagingLogger.e("MobileMessaging API returned error (synchronizing messages)!");
stats.reportError(MobileMessagingStatsError.SYNC_MESSAGES_ERROR);
scheduleSyncMessagesTask(context, stats, executor, numOfAttemptsDone + 1);
return;
}

handler.removeCallbacksAndMessages(null);
MobileMessageHandler messageHandler = new MobileMessageHandler();
List<Message> messages = syncMessagesResult.getMessages();
if (messages == null) {
Expand All @@ -50,7 +57,22 @@ protected void onPostExecute(SyncMessagesResult syncMessagesResult) {
protected void onCancelled() {
MobileMessagingLogger.e("Error syncing messages!");
stats.reportError(MobileMessagingStatsError.SYNC_MESSAGES_ERROR);
scheduleSyncMessagesTask(context, stats, executor, numOfAttemptsDone + 1);
}
}.executeOnExecutor(executor);
}

private void scheduleSyncMessagesTask(final Context context, final MobileMessagingStats stats, final Executor executor, final int numOfAttemptsDone) {
if (numOfAttemptsDone > DEFAULT_MAX_RETRY_COUNT) {
MobileMessagingLogger.w("No more retries scheduled for message sync");
return;
}

handler.postDelayed(new Runnable() {
@Override
public void run() {
startSyncMessagesTask(context, stats, executor, numOfAttemptsDone);
}
}, TimeUnit.SECONDS.toMillis(numOfAttemptsDone * numOfAttemptsDone * 2));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,20 @@ class SyncMessagesResult extends UnsuccessfulResult {

SyncMessagesResult(SyncMessagesResponse syncMessagesResponse) {
super(null);

if (syncMessagesResponse == null) {
return;
}

List<MessageResponse> payloads = syncMessagesResponse.getPayloads();
mapResponseToMessage(payloads);
}

@Override
public boolean hasError() {
return true;
}

private void mapResponseToMessage(List<MessageResponse> payloads) {
if (payloads == null) return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
import android.os.AsyncTask;

import org.infobip.mobile.messaging.MobileMessagingCore;
import org.infobip.mobile.messaging.MobileMessagingLogger;
import org.infobip.mobile.messaging.api.messages.MessageResponse;
import org.infobip.mobile.messaging.api.messages.SyncMessagesBody;
import org.infobip.mobile.messaging.api.messages.SyncMessagesResponse;
import org.infobip.mobile.messaging.mobile.MobileApiResourceProvider;
import org.infobip.mobile.messaging.MobileMessagingLogger;
import org.infobip.mobile.messaging.util.StringUtils;

import java.util.ArrayList;
Expand Down

0 comments on commit 37bf72f

Please sign in to comment.