diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java index 1dd82dd2b..245b30ad1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/MainActivity.java @@ -63,9 +63,12 @@ import com.magicmicky.habitrpgwrapper.lib.models.tasks.TaskTag; import com.mikepenz.materialdrawer.AccountHeader; import com.mikepenz.materialdrawer.Drawer; import com.mikepenz.materialdrawer.DrawerBuilder; +import com.mikepenz.materialdrawer.holder.BadgeStyle; +import com.mikepenz.materialdrawer.holder.StringHolder; import com.mikepenz.materialdrawer.model.PrimaryDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem; import com.mikepenz.materialdrawer.model.interfaces.IProfile; +import com.mikepenz.materialdrawer.model.utils.BadgeDrawableBuilder; import com.raizlabs.android.dbflow.runtime.TransactionManager; import com.raizlabs.android.dbflow.runtime.transaction.BaseTransaction; import com.raizlabs.android.dbflow.runtime.transaction.TransactionListener; @@ -97,6 +100,7 @@ import android.database.sqlite.SQLiteDoneException; import android.databinding.DataBindingUtil; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; @@ -346,6 +350,9 @@ public class MainActivity extends BaseActivity implements Action1, Ha displayDeathDialogIfNeeded(); if (!fromLocalDb) { + + displayNewInboxMessagesBadge(); + // Update the oldEntries new Thread(() -> { @@ -441,6 +448,31 @@ public class MainActivity extends BaseActivity implements Action1, Ha } } + private void displayNewInboxMessagesBadge() { + Integer numberOfUnreadPms = this.user.getInbox().getNewMessages(); + IDrawerItem newInboxItem; + + if (numberOfUnreadPms <= 0) { + newInboxItem = new PrimaryDrawerItem() + .withName(this.getString(R.string.sidebar_inbox)) + .withIdentifier(MainDrawerBuilder.SIDEBAR_INBOX); + } else { + String numberOfUnreadPmsLabel = String.valueOf(numberOfUnreadPms); + BadgeStyle badgeStyle = new BadgeStyle() + .withTextColor(Color.WHITE) + .withColorRes(R.color.md_red_700); + + newInboxItem = new PrimaryDrawerItem() + .withName(this.getString(R.string.sidebar_inbox)) + .withIdentifier(MainDrawerBuilder.SIDEBAR_INBOX) + .withBadge(numberOfUnreadPmsLabel) + .withBadgeStyle(badgeStyle); + } + + this.drawer.updateItemAtPosition(newInboxItem, MainDrawerBuilder.SIDEBAR_INBOX + 2); + } + + private void loadAndRemoveOldChecklists(final List onlineEntries) { final ArrayList onlineChecklistItemIdList = new ArrayList<>(); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java index f331e0a8d..c0d037858 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxFragment.java @@ -43,6 +43,10 @@ public class InboxFragment extends BaseMainFragment Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); + this.apiHelper.apiService.markPrivateMessagesRead() + .compose(apiHelper.configureApiCallObserver()) + .subscribe(aVoid -> {}, throwable -> {}); + View v = inflater.inflate(R.layout.fragment_inbox, container, false); unbinder = ButterKnife.bind(this, v); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index 3be2f1bb0..672c7c64c 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -144,6 +144,9 @@ public interface ApiService { @POST("user/disable-classes") Observable disableClasses(); + @POST("user/mark-pms-read") + Observable markPrivateMessagesRead(); + /* Group API */ @GET("groups")