diff --git a/Habitica/res/layout/activity_report_message.xml b/Habitica/res/layout/activity_report_message.xml
index f16c97117..ab39fe2db 100644
--- a/Habitica/res/layout/activity_report_message.xml
+++ b/Habitica/res/layout/activity_report_message.xml
@@ -102,7 +102,7 @@
android:theme="@style/TextInputLayoutAppearanceTheme"
style="@style/TextInputLayoutAppearance"
android:layout_marginTop="@dimen/spacing_large"
- android:hint="@string/reason_for_report"
+ android:hint="@string/report_message_hint"
android:layout_marginBottom="@dimen/spacing_large">
+
diff --git a/Habitica/res/values-b+es+419/strings.xml b/Habitica/res/values-b+es+419/strings.xml
index 70f7c674b..044bf94df 100644
--- a/Habitica/res/values-b+es+419/strings.xml
+++ b/Habitica/res/values-b+es+419/strings.xml
@@ -796,7 +796,7 @@
Conviértete en un %s
Clase %s
Reporta a %s por violación:
- Razón para reportar (opcional)
+ Razón para reportar (opcional)
Conjuntos misteriosos
Descripción del Gremio
Invitar al Gremio
diff --git a/Habitica/res/values-de/strings.xml b/Habitica/res/values-de/strings.xml
index 9eb372c91..53a083d07 100644
--- a/Habitica/res/values-de/strings.xml
+++ b/Habitica/res/values-de/strings.xml
@@ -805,7 +805,7 @@ Die Quest-Schriftrolle wird an den Quest-Besitzer zurückgegeben.
Gilde beitreten
In Gilde einladen
Gildenbeschreibung
- Grund für die Meldung (optional)
+ Grund für die Meldung (optional)
Melde %s wegen eines Verstoßes:
Melde einen Post **nur**, wenn er die [Community-Richtlinien](https://habitica.com/static/community-guidelines) und/oder die [Allgemeinen Geschäftsbedingungen](https://habitica.com/static/terms) verletzt. Zweckwidrige Meldungen können Dir eine Rüge einbringen.
%s-Klasse
diff --git a/Habitica/res/values-en-rGB/strings.xml b/Habitica/res/values-en-rGB/strings.xml
index 5c321cb56..16b99080c 100644
--- a/Habitica/res/values-en-rGB/strings.xml
+++ b/Habitica/res/values-en-rGB/strings.xml
@@ -790,7 +790,7 @@
Defeat
Guild Description
Mystery Sets
- Reason for report (optional)
+ Reason for report (optional)
Report %s for violation:
Invite to Guild
Join Guild
diff --git a/Habitica/res/values-es/strings.xml b/Habitica/res/values-es/strings.xml
index 3ef569b86..419508003 100644
--- a/Habitica/res/values-es/strings.xml
+++ b/Habitica/res/values-es/strings.xml
@@ -834,7 +834,7 @@
Publica un mensaje en el %s para que tus preguntas sean respondidas por otros jugadores.
Atributo Asignado
**Únicamente** reporta una publicación que viole las [Normas de la comunidad](https://habitica.com/static/community-guidelines) y/o los [Términos de servicio](https://habitica.com/static/terms). Reportar inadecuadamente una publicación puede conllevarte una infracción.
- Motivo de la denuncia (opcional)
+ Motivo de la denuncia (opcional)
Texto de la lista
Actividad del equipo
¡Te agrupaste con un miembro del equipo!
diff --git a/Habitica/res/values-fr/strings.xml b/Habitica/res/values-fr/strings.xml
index 3550b00e3..b0342b57b 100644
--- a/Habitica/res/values-fr/strings.xml
+++ b/Habitica/res/values-fr/strings.xml
@@ -742,7 +742,7 @@
Inviter dans la guilde
Description de la guilde
Ensembles mystère
- Motif du signalement (optionnel)
+ Motif du signalement (optionnel)
Signaler %s pour violation :
Ne signalez **que** les messages qui enfreignent les [règles de vie en communauté](https://habitica.com/static/community-guidelines) et/ou les [conditions de service](https://habitica.com/static/terms). Signaler des messages de façon inadéquate pourrait vous valoir une infraction.
Classe %s
diff --git a/Habitica/res/values-hr-rHR/strings.xml b/Habitica/res/values-hr-rHR/strings.xml
index 54cbd3e09..2cb71c34c 100644
--- a/Habitica/res/values-hr-rHR/strings.xml
+++ b/Habitica/res/values-hr-rHR/strings.xml
@@ -790,7 +790,7 @@
Tema aplikacije
Prihvati
Koristi obavijesti e-pošte
- Razlog prijave (neobavezno)
+ Razlog prijave (neobavezno)
Mistični setovi
Napusti Ceh
Opis Ceha
diff --git a/Habitica/res/values-in/strings.xml b/Habitica/res/values-in/strings.xml
index 62c7c9d53..4254f27cf 100644
--- a/Habitica/res/values-in/strings.xml
+++ b/Habitica/res/values-in/strings.xml
@@ -760,7 +760,7 @@
t
Laporkan pelanggaran
Set Misteri
- Alasan pelaporan (opsional)
+ Alasan pelaporan (opsional)
Melaporkan %s atas pelanggaran:
**Laporkan** hanya jika postingan tersebut melanggar [Pedoman Komunitas](https://habitica.com/static/community-guidelines) dan/atau [Syarat Layanan](https://habitica.com/static/terms). Laporan yang tidak sesuai dapat memberimu pelanggaran.
Menjadi %s
diff --git a/Habitica/res/values-it/strings.xml b/Habitica/res/values-it/strings.xml
index 795b01bf6..c91f58fd8 100644
--- a/Habitica/res/values-it/strings.xml
+++ b/Habitica/res/values-it/strings.xml
@@ -672,7 +672,7 @@
Invita nella Gilda
Descrizione della Gilda
Set del Mistero
- Ragioni della segnalazione (facoltativo)
+ Ragioni della segnalazione (facoltativo)
Segnala %s per violazione:
Segnala **SOLO** i messaggi che violano le [Linee Guida della Community](https://habitica.com/static/community-guidelines) and/o i [Termini di Servizio](https://habitica.com/static/terms). Inappropriately reporting a post may give you an infraction. Se la segnalazione è inappropriata, potrai subire una sanzione.
Classe %s
diff --git a/Habitica/res/values-ja/strings.xml b/Habitica/res/values-ja/strings.xml
index 5da6b1b3c..80f4c3036 100644
--- a/Habitica/res/values-ja/strings.xml
+++ b/Habitica/res/values-ja/strings.xml
@@ -708,7 +708,7 @@
くり返し
%s クラス
%sになる
- 報告の理由(任意)
+ 報告の理由(任意)
違反として%sを報告する:
アップデートが利用可能です:%1$s (%2$d)
ギルドを脱退する
diff --git a/Habitica/res/values-ko/strings.xml b/Habitica/res/values-ko/strings.xml
index e26331374..70665549a 100644
--- a/Habitica/res/values-ko/strings.xml
+++ b/Habitica/res/values-ko/strings.xml
@@ -682,7 +682,7 @@
길드에 초대하기
길드 설명
미스터리 세트
- 신고 이유 (생략 가능)
+ 신고 이유 (생략 가능)
%s 을(를) 규정 위반으로 신고하기:
해당 글이 [커뮤니티 방침](https://habitica.com/static/community-guidelines)이나 [이용 약관](https://habitica.com/static/terms)을 **위반했을 때만** 신고하세요. 허위 신고는 규정 위반으로 간주됩니다.
%s 직업
diff --git a/Habitica/res/values-nl/strings.xml b/Habitica/res/values-nl/strings.xml
index de9ae97d6..8053a0df5 100644
--- a/Habitica/res/values-nl/strings.xml
+++ b/Habitica/res/values-nl/strings.xml
@@ -854,7 +854,7 @@
Nodig uit voor Gilde
Gilde Beschrijving
Mysteriesets
- Reden voor melding (optioneel)
+ Reden voor melding (optioneel)
%s melden wegens overtreding:
Meld **alleen** een bericht dat de [Communityrichtlijnen](https://habitica.com/static/community-guidelines) en/of [Servicevoorwaarden](https://habitica.com/static/terms) schendt. Het ongepast melden van een bericht kan een overtreding opleveren.
Je hebt %s een %s-maand Habitica-abonnement gestuurd en hetzelfde abonnement is toegepast op je account voor onze Gift One Get One-promotie!
diff --git a/Habitica/res/values-pl/strings.xml b/Habitica/res/values-pl/strings.xml
index fc00a7bd6..fb4618c7c 100644
--- a/Habitica/res/values-pl/strings.xml
+++ b/Habitica/res/values-pl/strings.xml
@@ -717,7 +717,7 @@
Wszystkich zalogowań
Ostatnie zalogowanie
Tajemnicze zestawy
- Przyczyna zgłoszenia (opcjonalnie)
+ Przyczyna zgłoszenia (opcjonalnie)
Zgłoś %s za naruszenie:
Zgłaszaj **wyłącznie** post który narusza [Standardy Społeczności](https://habitica.com/static/community-guidelines) i/lub [Warunki usługi](https://habitica.com/static/terms). Niewłaściwe zgłoszenie postu może przynieść Ci naganę.
Porażka
diff --git a/Habitica/res/values-pt-rBR/strings.xml b/Habitica/res/values-pt-rBR/strings.xml
index 32022751a..2ebb901fc 100644
--- a/Habitica/res/values-pt-rBR/strings.xml
+++ b/Habitica/res/values-pt-rBR/strings.xml
@@ -784,7 +784,7 @@
Convidar para a Guilda
Descrição da Guilda
Conjuntos Misteriosos
- Motivo para reportar (opcional)
+ Motivo para reportar (opcional)
Reportar %s por violação:
Reporte uma mensagem **apenas** se esta violar as [Diretrizes da Comunidade](https://habitica.com/static/community-guidelines) e/ou os [Termos de Serviço](https://habitica.com/static/terms). Reportar uma postagem inadequadamente pode lhe dar uma infração.
%s Classe
diff --git a/Habitica/res/values-ru/strings.xml b/Habitica/res/values-ru/strings.xml
index d874b286c..83ec9c4ca 100644
--- a/Habitica/res/values-ru/strings.xml
+++ b/Habitica/res/values-ru/strings.xml
@@ -716,7 +716,7 @@
Пригласить в гильдию
Описание гильдии
Таинственные наборы
- Причина (необязательно)
+ Причина (необязательно)
Класс персонажа %s
Стать %s
Нужна помощь\?
diff --git a/Habitica/res/values-tr/strings.xml b/Habitica/res/values-tr/strings.xml
index 230c45680..f5710c2d4 100644
--- a/Habitica/res/values-tr/strings.xml
+++ b/Habitica/res/values-tr/strings.xml
@@ -785,7 +785,7 @@
Loncaya Davet Et
Lonca Açıklaması
Gizem Setleri
- Bildirme nedeni (tercihen)
+ Bildirme nedeni (tercihen)
%s kullanıcısını ihlal nedeniyle bildir:
**Sadece** [Topluluk Kuralları](https://habitica.com/static/community-guidelines)\'nı ve/veya [Kullanım Koşulları](https://habitica.com/static/terms)\' nı ihlal eden gönderileri bildirin. Aksi takdirde ceza alabilirsiniz.
%s Sınıfı
diff --git a/Habitica/res/values-uk/strings.xml b/Habitica/res/values-uk/strings.xml
index 4573bff9d..f0ea7ae91 100755
--- a/Habitica/res/values-uk/strings.xml
+++ b/Habitica/res/values-uk/strings.xml
@@ -747,7 +747,7 @@
Запросити до гільдії
Опис гільдії
Містичний комплект
- Причина (опціонально)
+ Причина (опціонально)
Помітити %s, як порушення за:
Будь ласка, повідомляйте **лише** про публікації, які порушують [Правила спільноти](https://habitica.com/static/community-guidelines) і/або [Умови надання послуг](https://habitica.com/static/terms). Неналежне повідомлення про публікацію може призвести до порушення.
Клас %s
diff --git a/Habitica/res/values-vi/strings.xml b/Habitica/res/values-vi/strings.xml
index 2f6b8c3f7..4731726d0 100755
--- a/Habitica/res/values-vi/strings.xml
+++ b/Habitica/res/values-vi/strings.xml
@@ -644,7 +644,7 @@
Thu lại
Mô tả Bang hội
Bộ Bí ẩn
- Lí do báo cáo (tùy chọn)
+ Lí do báo cáo (tùy chọn)
Báo có %s vì vi phạm:
**Chỉ** báo cáo một bài viết mà vi phạm [Nội quy Cộng đồng](https://habitica.com/static/community-guidelines) và/hoặc [Điều khoản Dịch vụ](https://habitica.com/static/terms). Báo cáo không hợp lí có thể khiến bạn nhận một cảnh cáo.
Chức nghiệp %s
diff --git a/Habitica/res/values-zh-rTW/strings.xml b/Habitica/res/values-zh-rTW/strings.xml
index 3627d2f22..bfad38ed5 100644
--- a/Habitica/res/values-zh-rTW/strings.xml
+++ b/Habitica/res/values-zh-rTW/strings.xml
@@ -839,7 +839,7 @@
邀請加入公會
公會描述
神秘套裝
- 報告原因(可選)
+ 報告原因(可選)
舉報%s違反:
你**只能**舉報違反了【社會準則】(https://habitica.com/static/community-guidelines)和/或者【服務條款】(https://habitica.com/static/terms)的消息。不當的舉報會讓你違規。
%s職業
diff --git a/Habitica/res/values-zh/strings.xml b/Habitica/res/values-zh/strings.xml
index 305f7acce..291cf101b 100644
--- a/Habitica/res/values-zh/strings.xml
+++ b/Habitica/res/values-zh/strings.xml
@@ -772,7 +772,7 @@
邀请加入公会
公会简介
神秘套装
- 报告原因(可选)
+ 报告原因(可选)
举报%s违反:
你**只能**举报违反了【社会准则】(https://habitica.com/static/community-guidelines)和/或者【服务条款】(https://habitica.com/static/terms)的消息。不当的举报会让你违规。
宝石送礼
diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 66644415d..9c46bbf10 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -803,7 +803,16 @@
%s Class
**Only** report a post that violates the [Community Guidelines](https://habitica.com/static/community-guidelines) and/or [Terms of Service](https://habitica.com/static/terms). Inappropriately reporting a post may give you an infraction.
Report %s for violation:
- Reason for report (optional)
+ **Only** report a post that violates the [Community Guidelines](https://habitica.com/static/community-guidelines) and/or [Terms of Service](https://habitica.com/static/terms). Inappropriately reporting a post may give you an infraction.
+ **Only** report for a user that violates the [Community Guidelines](https://habitica.com/static/community-guidelines) and/or [Terms of Service](https://habitica.com/static/terms). Inappropriately reporting a user may give you an infraction.
+ Report %s?
+ Report Player
+ Reason for report (required)
+ This will also block %s - A blocked user cannot send you Private Messages but you will still see their posts.
+ Reason for report (optional)
+ %s Reported
+ Report failed, please try again later
+ Report %s
Mystery Sets
Guild Description
Invite to Guild
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
index f644642bc..f2eb0e363 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
@@ -265,6 +265,9 @@ interface ApiService {
@Body data: Map
): HabitResponse
+ @POST("members/{mid}/flag")
+ suspend fun reportMember(@Path("mid") mid: String, @Body data: Map): HabitResponse
+
@POST("groups/{gid}/chat/seen")
suspend fun seenMessages(@Path("gid") groupId: String): HabitResponse
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
index 0bf465cd8..5711c047c 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
@@ -165,6 +165,8 @@ interface ApiClient {
suspend fun flagMessage(groupId: String, mid: String, data: MutableMap): Void?
suspend fun flagInboxMessage(mid: String, data: MutableMap): Void?
+ suspend fun reportMember(mid: String, data: Map): Void?
+
suspend fun seenMessages(groupId: String): Void?
suspend fun inviteToGroup(groupId: String, inviteData: Map): List?
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt
index 0b5ce7fa3..89ffb71e9 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/SocialRepository.kt
@@ -27,6 +27,8 @@ interface SocialRepository : BaseRepository {
groupID: String? = null
): Void?
+ suspend fun reportMember(memberID: String, data: Map): Void?
+
suspend fun likeMessage(chatMessage: ChatMessage): ChatMessage?
suspend fun deleteMessage(chatMessage: ChatMessage): Void?
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
index 9c5baa902..2f8bee3d3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
@@ -583,6 +583,10 @@ class ApiClientImpl(
return process { apiService.likeMessage(groupId, mid) }
}
+ override suspend fun reportMember(mid: String, data: Map): Void? {
+ return process { apiService.reportMember(mid, data) }
+ }
+
override suspend fun flagMessage(groupId: String, mid: String, data: MutableMap): Void? {
return process { apiService.flagMessage(groupId, mid, data) }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt
index 842701579..bd6c6894d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/SocialRepositoryImpl.kt
@@ -96,6 +96,10 @@ class SocialRepositoryImpl(
}
}
+ override suspend fun reportMember(memberID: String, data: Map): Void? {
+ return apiClient.reportMember(memberID, data)
+ }
+
override suspend fun likeMessage(chatMessage: ChatMessage): ChatMessage? {
if (chatMessage.id.isBlank()) {
return null
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
index 7a4065299..5b1baa111 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/FullProfileActivity.kt
@@ -38,6 +38,7 @@ import com.habitrpg.android.habitica.models.user.Outfit
import com.habitrpg.android.habitica.models.user.Permission
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.ui.adapter.social.AchievementProfileAdapter
+import com.habitrpg.android.habitica.ui.fragments.ReportBottomSheetFragment
import com.habitrpg.android.habitica.ui.theme.HabiticaTheme
import com.habitrpg.android.habitica.ui.views.AppHeaderView
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
@@ -270,6 +271,13 @@ class FullProfileActivity : BaseActivity() {
}
true
}
+ R.id.report_player -> {
+ showReportUserBottomSheet(
+ userIdBeingReported = userID,
+ usernameBeingReported = username ?: "",
+ )
+ true
+ }
R.id.ban_user -> {
banUser()
true
@@ -342,6 +350,20 @@ class FullProfileActivity : BaseActivity() {
alert.show()
}
+ private fun showReportUserBottomSheet(userIdBeingReported : String, usernameBeingReported: String) {
+ val reportBottomSheetFragment = ReportBottomSheetFragment.newInstance(
+ reportType = ReportBottomSheetFragment.REPORT_TYPE_USER,
+ profileName = usernameBeingReported,
+ messageId = "",
+ messageText = "",
+ groupId = "",
+ userIdBeingReported = userIdBeingReported,
+ sourceView = this::class.simpleName ?: ""
+ )
+
+ reportBottomSheetFragment.show(supportFragmentManager, ReportBottomSheetFragment.TAG)
+ }
+
private fun banUser() {
val isBanned = member.value?.authentication?.blocked == true
val alert = HabiticaAlertDialog(this)
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/ReportBottomSheetFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/ReportBottomSheetFragment.kt
new file mode 100644
index 000000000..cdb84be94
--- /dev/null
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/ReportBottomSheetFragment.kt
@@ -0,0 +1,183 @@
+package com.habitrpg.android.habitica.ui.fragments
+
+import android.app.Dialog
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.lifecycle.lifecycleScope
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
+import com.habitrpg.android.habitica.R
+import com.habitrpg.android.habitica.data.SocialRepository
+import com.habitrpg.common.habitica.databinding.FragmentReportMessageBinding
+import com.habitrpg.common.habitica.helpers.ExceptionHandler
+import com.habitrpg.common.habitica.helpers.launchCatching
+import com.habitrpg.common.habitica.helpers.setMarkdown
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class ReportBottomSheetFragment : BottomSheetDialogFragment() {
+
+ private lateinit var binding: FragmentReportMessageBinding
+
+ @Inject
+ lateinit var socialRepository: SocialRepository
+
+ private var reportType: String? = null
+ private var messageID: String? = null
+ private var messageText: String? = null
+ private var profileName: String? = null
+ private var reportingUserId: String? = null
+ private var groupID: String? = null
+ private var isReporting: Boolean = false
+ private var source: String? = null
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentReportMessageBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val bottomSheetDialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
+ bottomSheetDialog.setOnShowListener { dialog: DialogInterface ->
+ val notificationDialog = dialog as BottomSheetDialog
+ notificationDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
+ notificationDialog.behavior.isDraggable = false
+ }
+ return bottomSheetDialog
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ reportType = arguments?.getString(REPORT_TYPE)
+ messageID = arguments?.getString(MESSAGE_ID)
+ groupID = arguments?.getString(GROUP_ID)
+ messageText = arguments?.getString(MESSAGE_TEXT)
+ profileName = arguments?.getString(PROFILE_NAME)
+ reportingUserId = arguments?.getString(REPORTING_USER_ID)
+ source = arguments?.getString(SOURCE_VIEW)
+
+
+ binding.messageTextView.text = arguments?.getString(messageText)
+ binding.reportButton.setOnClickListener {
+ if (reportType == REPORT_TYPE_MESSAGE)
+ reportMessage()
+ else if (reportType == REPORT_TYPE_USER)
+ reportUser()
+ }
+ binding.closeButton.setOnClickListener { dismiss() }
+
+ if (reportType == REPORT_TYPE_USER) {
+ binding.toolbarTitle.text = getString(R.string.report_player_toolbar_title, profileName)
+ binding.additionalExplanationTextview.visibility = View.VISIBLE
+ binding.infoTextInputLayout.hint = getString(R.string.report_player_hint)
+ binding.additionalExplanationTextview.setMarkdown(
+ getString(
+ R.string.report_user_description,
+ profileName
+ )
+ )
+ binding.reportExplanationTextview.setMarkdown(getString(R.string.report_user_explanation))
+ binding.titleTextView.text = getString(R.string.report_player_title, profileName)
+ binding.messageTextView.visibility = View.GONE
+ } else if (reportType == REPORT_TYPE_MESSAGE) {
+ binding.additionalExplanationTextview.visibility = View.GONE
+ binding.infoTextInputLayout.hint = getString(R.string.report_message_hint)
+ binding.reportExplanationTextview.setMarkdown(getString(R.string.report_message_explanation))
+ binding.titleTextView.text = getString(R.string.report_message_title, profileName)
+ binding.messageTextView.text = messageText
+ }
+ }
+
+ private fun reportMessage() {
+ if (isReporting) {
+ return
+ }
+ isReporting = true
+ messageID?.let {
+ lifecycleScope.launch(
+ ExceptionHandler.coroutine {
+ isReporting = false
+ }
+ ) {
+ socialRepository.flagMessage(
+ messageID ?: "",
+ binding.additionalInfoEdittext.text.toString(),
+ groupID
+ )
+ dismiss()
+ }
+ }
+ }
+
+ private fun reportUser() {
+ if (isReporting) {
+ return
+ }
+ val userIdBeingReported = reportingUserId
+ if (userIdBeingReported.isNullOrBlank()) {
+ return
+ }
+ isReporting = true
+ lifecycleScope.launchCatching {
+ val reportReasonInfo = binding.additionalInfoEdittext.text.toString()
+ val updateData = mapOf(
+ "comment" to reportReasonInfo,
+ "source" to (source ?: "")
+ )
+ socialRepository.reportMember(userIdBeingReported, updateData)
+ socialRepository.blockMember(userIdBeingReported)
+ Toast.makeText(context, "$profileName Reported", Toast.LENGTH_SHORT).show()
+ dismiss()
+ }
+ }
+
+ companion object {
+ const val TAG = "ReportBottomSheetFragment"
+ const val REPORT_TYPE_MESSAGE = "report_type_message"
+ const val REPORT_TYPE_USER = "report_type_user"
+
+ private const val REPORTING_USER_ID = "reporting_user_id"
+ private const val REPORT_TYPE = "report_type"
+ private const val PROFILE_NAME = "profile_name"
+ private const val MESSAGE_ID = "message_id"
+ private const val MESSAGE_TEXT = "message_text"
+ private const val GROUP_ID = "group_id"
+ private const val SOURCE_VIEW = "source_view"
+
+
+ fun newInstance(
+ reportType: String,
+ profileName: String = "",
+ userIdBeingReported: String,
+ messageId: String = "",
+ messageText: String,
+ groupId: String,
+ sourceView: String
+ ): ReportBottomSheetFragment {
+ val args = Bundle()
+ args.putString(REPORT_TYPE, reportType)
+ args.putString(PROFILE_NAME, profileName)
+ args.putString(REPORTING_USER_ID, userIdBeingReported)
+ args.putString(MESSAGE_ID, messageId)
+ args.putString(MESSAGE_TEXT, messageText)
+ args.putString(GROUP_ID, groupId)
+ args.putString(SOURCE_VIEW, sourceView)
+ val fragment = ReportBottomSheetFragment()
+ fragment.arguments = args
+ return fragment
+ }
+ }
+}
+
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
index 55c820e82..1c26c0063 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/social/ChatFragment.kt
@@ -25,6 +25,7 @@ import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.adapter.social.ChatRecyclerViewAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseFragment
+import com.habitrpg.android.habitica.ui.fragments.ReportBottomSheetFragment
import com.habitrpg.android.habitica.ui.helpers.AutocompleteAdapter
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.GroupViewModel
@@ -78,7 +79,7 @@ open class ChatFragment : BaseFragment() {
chatAdapter?.let { adapter ->
adapter.onOpenProfile = { userId -> FullProfileActivity.open(userId) }
adapter.onDeleteMessage = { this.showDeleteConfirmationDialog(it) }
- adapter.onFlagMessage = { this.showFlagConfirmationDialog(it) }
+ adapter.onFlagMessage = { this.showFlagMessageBottomSheet(it) }
adapter.onReply = { setReplyTo(it) }
adapter.onCopyMessage = { this.copyMessageToClipboard(it) }
adapter.onMessageLike = { viewModel.likeMessage(it) }
@@ -181,14 +182,18 @@ open class ChatFragment : BaseFragment() {
}
}
- private fun showFlagConfirmationDialog(chatMessage: ChatMessage) {
- val directions = MainNavDirections.actionGlobalReportMessageActivity(
- chatMessage.text ?: "",
- chatMessage.user ?: "",
- chatMessage.id,
- chatMessage.groupId
+ private fun showFlagMessageBottomSheet(chatMessage : ChatMessage) {
+ val reportBottomSheetFragment = ReportBottomSheetFragment.newInstance(
+ reportType = ReportBottomSheetFragment.REPORT_TYPE_MESSAGE,
+ profileName = chatMessage.username ?: "",
+ messageId = chatMessage.id,
+ messageText = chatMessage.text ?: "",
+ groupId = chatMessage.groupId ?: "",
+ userIdBeingReported = chatMessage.userID ?: "",
+ sourceView = this::class.simpleName ?: ""
)
- MainNavigationController.navigate(directions)
+
+ reportBottomSheetFragment.show(childFragmentManager, ReportBottomSheetFragment.TAG)
}
private fun showDeleteConfirmationDialog(chatMessage: ChatMessage) {
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 666080619..c5f7a405f 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
@@ -28,6 +28,7 @@ import com.habitrpg.android.habitica.ui.activities.FullProfileActivity
import com.habitrpg.android.habitica.ui.activities.MainActivity
import com.habitrpg.android.habitica.ui.adapter.social.InboxAdapter
import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment
+import com.habitrpg.android.habitica.ui.fragments.ReportBottomSheetFragment
import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator
import com.habitrpg.android.habitica.ui.viewmodels.InboxViewModel
import com.habitrpg.android.habitica.ui.views.HabiticaSnackbar
@@ -99,7 +100,7 @@ class InboxMessageListFragment : BaseMainFragment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file