From 75fd6691078d2c28fe93597be979a7341f52dbf0 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 26 Aug 2020 16:29:37 +0200 Subject: [PATCH] Implement disabling PMs. Fixes #1331 --- Habitica/res/layout/fragment_inbox.xml | 30 +++++++++++++++++-- Habitica/res/values/strings.xml | 3 ++ Habitica/res/xml/preferences_fragment.xml | 4 +++ .../data/implementation/UserRepositoryImpl.kt | 3 ++ .../ui/fragments/AchievementsFragment.kt | 4 ++- .../preferences/PreferencesFragment.kt | 12 ++++++++ .../social/InboxMessageListFragment.kt | 1 + .../fragments/social/InboxOverviewFragment.kt | 7 +++++ .../ui/fragments/tasks/TasksFragment.kt | 16 ++++++---- 9 files changed, 72 insertions(+), 8 deletions(-) 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() }