diff --git a/Habitica/res/layout/fragment_inbox.xml b/Habitica/res/layout/fragment_inbox.xml
index f1071d5a1..0ac3d8998 100644
--- a/Habitica/res/layout/fragment_inbox.xml
+++ b/Habitica/res/layout/fragment_inbox.xml
@@ -9,13 +9,39 @@
+
+
+
+
+
-
+ android:showDividers="middle" />
+
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 36a148204..ac03ad0b2 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1089,4 +1089,7 @@
Block %s?
A blocked user cannot send you Private Messages but you will still see their posts in Tavern or Guilds. This will have no effect if the person is a moderator now or in the future.
Block
+ Disable Private Messages
+ Private Messages are disabled
+ You can still send messages, but no one can send them to you. You can enable again from Settings.
diff --git a/Habitica/res/xml/preferences_fragment.xml b/Habitica/res/xml/preferences_fragment.xml
index 28db3e825..a41d1e925 100644
--- a/Habitica/res/xml/preferences_fragment.xml
+++ b/Habitica/res/xml/preferences_fragment.xml
@@ -160,6 +160,10 @@
android:summary="@string/dailyDueDefaultViewDescription"
android:layout="@layout/preference_child_summary"
/>
+
(R.id.toolbar)?.let {
- ToolbarColorHelper.colorizeToolbar(it, activity, false)
+ ToolbarColorHelper.colorizeToolbar(it, activity, null)
}
super.onCreateOptionsMenu(menu, inflater)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
index bad74004c..42b2f3c52 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/preferences/PreferencesFragment.kt
@@ -8,6 +8,7 @@ import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
+import androidx.preference.CheckBoxPreference
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceScreen
@@ -236,6 +237,13 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
val preference = findPreference(key) as ListPreference
preference.summary = preference.entry
}
+ "disablePMs" -> {
+ val isDisabled = sharedPreferences.getBoolean("disablePMs", false)
+ if (user?.inbox?.optOut != isDisabled) {
+ compositeSubscription.add(userRepository.updateUser(user, "inbox.optOut", isDisabled)
+ .subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
+ }
+ }
}
}
@@ -296,6 +304,10 @@ class PreferencesFragment : BasePreferencesFragment(), SharedPreferences.OnShare
preference.summary = context?.getString(R.string.username_not_confirmed)
}
+ val disablePMsPreference = findPreference("disablePMs") as? CheckBoxPreference
+ val inbox = user?.inbox
+ disablePMsPreference?.isChecked = inbox?.optOut ?: true
+
if (user?.contributor?.admin == true) {
serverUrlPreference?.isVisible = true
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
index 165aef00b..fb6578946 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxMessageListFragment.kt
@@ -111,6 +111,7 @@ class InboxMessageListFragment : BaseMainFragment(), androidx.swiperefreshlayout
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
this.activity?.menuInflater?.inflate(R.menu.inbox_chat, menu)
+ val item = menu.findItem(R.id.open_profile)
super.onCreateOptionsMenu(menu, inflater)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt
index 78914f2ff..8a356865c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/InboxOverviewFragment.kt
@@ -41,6 +41,7 @@ class InboxOverviewFragment : BaseMainFragment(), androidx.swiperefreshlayout.wi
compositeSubscription.add(this.socialRepository.markPrivateMessagesRead(user).subscribe(Consumer { }, RxErrorHandler.handleEmptyError()))
+
return inflater.inflate(R.layout.fragment_inbox, container, false)
}
@@ -49,6 +50,10 @@ class InboxOverviewFragment : BaseMainFragment(), androidx.swiperefreshlayout.wi
inbox_refresh_layout?.setOnRefreshListener(this)
+ compositeSubscription.add(userRepository.getUser().map { user?.inbox?.optOut ?: false }.distinctUntilChanged().subscribe {
+ opt_out_view.visibility = if (it) View.VISIBLE else View.GONE
+ })
+
loadMessages()
retrieveMessages()
}
@@ -66,6 +71,8 @@ class InboxOverviewFragment : BaseMainFragment(), androidx.swiperefreshlayout.wi
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
this.activity?.menuInflater?.inflate(R.menu.inbox, menu)
+ val item = menu.findItem(R.id.send_message)
+ tintMenuIcon(item)
super.onCreateOptionsMenu(menu, inflater)
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
index 2e13a9c46..3ecedab9e 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/tasks/TasksFragment.kt
@@ -79,11 +79,17 @@ class TasksFragment : BaseMainFragment(), SearchView.OnQueryTextListener {
super.onResume()
bottomNavigation?.onTabSelectedListener = {
- when (it) {
- Task.TYPE_HABIT -> viewPager?.currentItem = 0
- Task.TYPE_DAILY -> viewPager?.currentItem = 1
- Task.TYPE_TODO -> viewPager?.currentItem = 2
- Task.TYPE_REWARD -> viewPager?.currentItem = 3
+ val newItem = when (it) {
+ Task.TYPE_HABIT -> 0
+ Task.TYPE_DAILY -> 1
+ Task.TYPE_TODO -> 2
+ Task.TYPE_REWARD -> 3
+ else -> 0
+ }
+ if (newItem == viewPager?.currentItem) {
+ refresh()
+ } else {
+ viewPager?.currentItem = newItem
}
updateBottomBarBadges()
}