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 @@ + + + + + + + + + + + + + + + + + + + + + +