diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c28409e0..247af8217 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -101,6 +101,14 @@
android:configChanges="orientation|keyboardHidden|screenSize"
android:windowSoftInputMode="adjustResize|stateHidden"/>
+
+
+
updateCommentVote(
@Path(value = "vote_id") long id,
@Body HashMap params);
+
+
+ @POST("/api/v2.5/discussions/{post_id}/report/")
+ Object reportPost(@Path(value="post_id") long postId, @Body Map options);
}
\ No newline at end of file
diff --git a/app/src/main/java/in/testpress/testpress/core/TestpressService.java b/app/src/main/java/in/testpress/testpress/core/TestpressService.java
index c7648103e..823a5daca 100644
--- a/app/src/main/java/in/testpress/testpress/core/TestpressService.java
+++ b/app/src/main/java/in/testpress/testpress/core/TestpressService.java
@@ -326,6 +326,12 @@ public Vote updateCommentVote(Forum forum, int typeOfVote) {
return getPostService().updateCommentVote(forum.getVoteId(), params);
}
+ public Object reportPost(int postId, String reason) {
+ HashMap params = new HashMap<>();
+ params.put("reason", reason);
+ return getPostService().reportPost(postId, params);
+ }
+
public DashboardResponse getDashboardData() {
return getAuthenticationService().getDashboardData();
}
diff --git a/app/src/main/java/in/testpress/testpress/ui/ForumActivity.java b/app/src/main/java/in/testpress/testpress/ui/ForumActivity.java
index 102c18654..88f7a5ff5 100644
--- a/app/src/main/java/in/testpress/testpress/ui/ForumActivity.java
+++ b/app/src/main/java/in/testpress/testpress/ui/ForumActivity.java
@@ -22,7 +22,9 @@
import android.text.Html;
import android.text.SpannableString;
import android.text.format.DateUtils;
-import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
@@ -216,6 +218,7 @@ protected void onCreate(final Bundle savedInstanceState) {
setEmptyText(R.string.invalid_post, R.string.try_after_sometime,
R.drawable.ic_error_outline_black_18dp);
}
+
}
protected void initializeAnswerFragment() {
@@ -635,6 +638,26 @@ public void onScrollChange(NestedScrollView v, int scrollX, int scrollY,
getSupportLoaderManager().initLoader(PREVIOUS_COMMENTS_LOADER_ID, null, ForumActivity.this);
}
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.forum_action_menu, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.report:
+ Intent intent = new Intent(this, ReportForumThread.class);
+ intent.putExtra("title", forum.getTitle());
+ intent.putExtra("forum_id", forum.getId().intValue());
+ activity.startActivity(intent);
+ break;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
@NonNull
@Override
public Loader> onCreateLoader(int loaderId, Bundle args) {
diff --git a/app/src/main/java/in/testpress/testpress/ui/ReportForumThread.kt b/app/src/main/java/in/testpress/testpress/ui/ReportForumThread.kt
new file mode 100644
index 000000000..9c578f95d
--- /dev/null
+++ b/app/src/main/java/in/testpress/testpress/ui/ReportForumThread.kt
@@ -0,0 +1,104 @@
+package `in`.testpress.testpress.ui
+
+import `in`.testpress.testpress.Injector
+import `in`.testpress.testpress.R
+import `in`.testpress.testpress.TestpressServiceProvider
+import `in`.testpress.testpress.util.SafeAsyncTask
+import android.app.Activity
+import android.os.Bundle
+import android.view.View
+import android.widget.RadioButton
+import android.widget.Toast
+import kotlinx.android.synthetic.main.report_spam_thread.*
+import javax.inject.Inject
+
+
+class ReportForumThread: Activity() {
+ @Inject
+ lateinit var serviceProvider: TestpressServiceProvider
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ Injector.inject(this)
+ setContentView(R.layout.report_spam_thread)
+ forumTitle.text = intent.getStringExtra("title")
+ setOnClickListeners()
+ }
+
+ private fun setOnClickListeners() {
+ toolbar.setNavigationOnClickListener {
+ onBackPressed()
+ }
+
+ cancelButton.setOnClickListener {
+ onBackPressed()
+ }
+
+ spamReasons.setOnCheckedChangeListener { group, checkedId ->
+ submitButton.isEnabled = true
+ showOrHideCustomReasonInput(checkedId)
+ }
+
+ submitButton.setOnClickListener {
+ when (spamReasons.checkedRadioButtonId) {
+ -1 -> Toast.makeText(this, "No option selected", Toast.LENGTH_LONG).show()
+ R.id.customReason -> {
+ if (commentBox.text.toString().length < 10) {
+ Toast.makeText(
+ this,
+ "Please enter atleast 10 characters",
+ Toast.LENGTH_LONG
+ ).show()
+ } else {
+ reportForumThread(commentBox.text.toString())
+ }
+ }
+ else -> {
+ val selectedReason = findViewById(spamReasons.checkedRadioButtonId)
+ reportForumThread(selectedReason.text.toString())
+ }
+ }
+ }
+ }
+
+ private fun showOrHideCustomReasonInput(checkedId: Int) {
+ if (checkedId == R.id.customReason) {
+ commentBox.visibility = View.VISIBLE
+ } else {
+ commentBox.visibility = View.GONE
+ }
+ }
+
+ fun reportForumThread(reason: String) {
+ val forumId = intent.getIntExtra("forum_id", -1)
+ object : SafeAsyncTask() {
+ override fun call(): Boolean {
+ serviceProvider.getService(this@ReportForumThread).reportPost(
+ forumId,
+ reason
+ )
+ return true
+ }
+
+ @Throws(RuntimeException::class)
+ override fun onException(exception: Exception) {
+ exception.printStackTrace()
+ Toast.makeText(
+ baseContext,
+ "You have already reported this post",
+ Toast.LENGTH_LONG
+ ).show()
+ }
+
+ override fun onSuccess(t: Boolean?) {
+ onBackPressed()
+ Toast.makeText(
+ baseContext,
+ "You have successfully reported this post",
+ Toast.LENGTH_LONG
+ ).show()
+ }
+ }.execute()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/color/button_text_states.xml b/app/src/main/res/color/button_text_states.xml
new file mode 100644
index 000000000..4a5a4cd49
--- /dev/null
+++ b/app/src/main/res/color/button_text_states.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_flag_24.xml b/app/src/main/res/drawable/ic_baseline_flag_24.xml
new file mode 100644
index 000000000..026653ce3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_flag_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/rounded_border_edittext.xml b/app/src/main/res/drawable/rounded_border_edittext.xml
index 6e81f283b..68e56bb0e 100644
--- a/app/src/main/res/drawable/rounded_border_edittext.xml
+++ b/app/src/main/res/drawable/rounded_border_edittext.xml
@@ -3,8 +3,8 @@
-
-
diff --git a/app/src/main/res/layout/bottom_sheet_dialog.xml b/app/src/main/res/layout/bottom_sheet_dialog.xml
new file mode 100644
index 000000000..9e71413c2
--- /dev/null
+++ b/app/src/main/res/layout/bottom_sheet_dialog.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/report_spam_thread.xml b/app/src/main/res/layout/report_spam_thread.xml
new file mode 100644
index 000000000..0c18397ea
--- /dev/null
+++ b/app/src/main/res/layout/report_spam_thread.xml
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/forum_action_menu.xml b/app/src/main/res/menu/forum_action_menu.xml
new file mode 100644
index 000000000..cc9aa327c
--- /dev/null
+++ b/app/src/main/res/menu/forum_action_menu.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index f4de3c38d..ed1e49a1e 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -173,4 +173,7 @@
- center_horizontal
+