diff --git a/iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/inbox/IterableInboxFragment.java b/iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/inbox/IterableInboxFragment.java index 7a0eb4fb3..3c5f2aa1e 100644 --- a/iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/inbox/IterableInboxFragment.java +++ b/iterableapi-ui/src/main/java/com/iterable/iterableapi/ui/inbox/IterableInboxFragment.java @@ -244,7 +244,7 @@ public void onInboxUpdated() { @Override public void onListItemTapped(@NonNull IterableInAppMessage message) { - IterableApi.getInstance().getInAppManager().setRead(message, true, null); + IterableApi.getInstance().getInAppManager().setRead(message, true, null, null); if (inboxMode == InboxMode.ACTIVITY) { startActivity(new Intent(getContext(), IterableInboxMessageActivity.class).putExtra(IterableInboxMessageActivity.ARG_MESSAGE_ID, message.getMessageId())); @@ -255,7 +255,7 @@ public void onListItemTapped(@NonNull IterableInAppMessage message) { @Override public void onListItemDeleted(@NonNull IterableInAppMessage message, @NonNull IterableInAppDeleteActionType source) { - IterableApi.getInstance().getInAppManager().removeMessage(message, source, IterableInAppLocation.INBOX, null, null); + IterableApi.getInstance().getInAppManager().removeMessage(message, source, IterableInAppLocation.INBOX); } @Override diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java index 05c292a6d..d5c06bfc8 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableInAppManager.java @@ -128,13 +128,16 @@ public synchronized int getUnreadInboxMessagesCount() { return unreadInboxMessageCount; } + public synchronized void setRead(@NonNull IterableInAppMessage message, boolean read) { + setRead(message, read, null, null); + } /** * Set the read flag on an inbox message * @param message Inbox message object retrieved from {@link IterableInAppManager#getInboxMessages()} * @param read Read state flag. true = read, false = unread * @param successHandler The callback which returns `success`. */ - public synchronized void setRead(@NonNull IterableInAppMessage message, boolean read, @Nullable IterableHelper.SuccessHandler successHandler) { + public synchronized void setRead(@NonNull IterableInAppMessage message, boolean read, @Nullable IterableHelper.SuccessHandler successHandler, @Nullable IterableHelper.FailureHandler failureHandler) { message.setRead(read); if (successHandler != null) { successHandler.onSuccess(new JSONObject()); // passing blank json object here as onSuccess is @Nonnull @@ -243,7 +246,7 @@ public void execute(Uri url) { scheduleProcessing(); } })) { - setRead(message, true, null); + setRead(message, true, null, null); if (consume) { message.markForDeletion(true); } @@ -253,16 +256,30 @@ public void execute(Uri url) { /** * Remove message from the list * @param message The message to be removed - * @param successHandler The callback which returns `success`. - * @param failureHandler The callback which returns `failure`. */ - public synchronized void removeMessage(@NonNull IterableInAppMessage message, @Nullable IterableHelper.SuccessHandler successHandler, @Nullable IterableHelper.FailureHandler failureHandler) { - message.setConsumed(true); - api.inAppConsume(message.getMessageId(), successHandler, failureHandler); - notifyOnChange(); + public synchronized void removeMessage(@NonNull IterableInAppMessage message) { + removeMessage(message, null, null, null, null); } - public synchronized void removeMessage(@NonNull IterableInAppMessage message, @NonNull IterableInAppDeleteActionType source, @NonNull IterableInAppLocation clickLocation, @Nullable IterableHelper.SuccessHandler successHandler, @Nullable IterableHelper.FailureHandler failureHandler) { + /** + * Remove message from the list + * @param message The message to be removed + * @param source Source from where the message removal occured. Use IterableInAppDeleteActionType for available sources + * @param clickLocation Where was the message clicked. Use IterableInAppLocation for available Click Locations + */ + public synchronized void removeMessage(@NonNull IterableInAppMessage message, @NonNull IterableInAppDeleteActionType source, @NonNull IterableInAppLocation clickLocation) { + removeMessage(message, source, clickLocation, null, null); + } + + /** + * Remove message from the list + * @param message The message to be removed + * @param source Source from where the message removal occured. Use IterableInAppDeleteActionType for available sources + * @param clickLocation Where was the message clicked. Use IterableInAppLocation for available Click Locations + * @param successHandler The callback which returns `success`. + * @param failureHandler The callback which returns `failure`. + */ + public synchronized void removeMessage(@NonNull IterableInAppMessage message, @Nullable IterableInAppDeleteActionType source, @Nullable IterableInAppLocation clickLocation, @Nullable IterableHelper.SuccessHandler successHandler, @Nullable IterableHelper.FailureHandler failureHandler) { IterableLogger.printInfo(); message.setConsumed(true); api.inAppConsume(message, source, clickLocation, successHandler, failureHandler); diff --git a/iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java b/iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java index 1697c381d..868cb12b6 100644 --- a/iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java +++ b/iterableapi/src/test/java/com/iterable/iterableapi/IterableInboxTest.java @@ -98,7 +98,7 @@ public void testRemoveMessageSuccessCallbackOnSuccessfulResponse() throws Except final JSONObject responseData = new JSONObject("{\"key\":\"value\"}"); dispatcher.enqueueResponse("/events/inAppConsume", new MockResponse().setResponseCode(200).setBody(responseData.toString())); - inAppManager.removeMessage(inboxMessages.get(0), new IterableHelper.SuccessHandler() { + inAppManager.removeMessage(inboxMessages.get(0), null, null, new IterableHelper.SuccessHandler() { @Override public void onSuccess(@NonNull JSONObject data) { signal.countDown(); @@ -127,7 +127,7 @@ public void testRemoveMessageFailureCallbackOnFailedResponse() throws Exception final JSONObject responseData = new JSONObject("{\"key\":\"value\"}"); dispatcher.enqueueResponse("/events/inAppConsume", new MockResponse().setResponseCode(500).setBody(responseData.toString())); - inAppManager.removeMessage(inboxMessages.get(0), new IterableHelper.SuccessHandler() { + inAppManager.removeMessage(inboxMessages.get(0), null, null, new IterableHelper.SuccessHandler() { @Override public void onSuccess(@NonNull JSONObject data) { assertFalse(true); @@ -169,6 +169,11 @@ public void onSuccess(@NonNull JSONObject data) { callbackCalled[0] = true; assertTrue(callbackCalled[0]); } + }, new IterableHelper.FailureHandler() { + @Override + public void onFailure(@NonNull String reason, @Nullable JSONObject data) { + assertFalse(true); + } }); // Wait for callback to be called