diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index e95196bbb..238777cce 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -110,6 +110,10 @@ public class CommonsApplication extends MultiDexApplication { public static final String FEEDBACK_EMAIL_SUBJECT = "Commons Android App Feedback"; + public static final String REPORT_EMAIL = "commons-app-android-private@googlegroups.com"; + + public static final String REPORT_EMAIL_SUBJECT = "Report a violation"; + public static final String NOTIFICATION_CHANNEL_ID_ALL = "CommonsNotificationAll"; public static final String FEEDBACK_EMAIL_TEMPLATE_HEADER = "-- Technical information --"; diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index b1e74b447..eaede2484 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.media; import static fr.free.nrw.commons.Utils.handleWebUrl; import android.annotation.SuppressLint; +import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -12,7 +13,9 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -22,6 +25,7 @@ import androidx.viewpager.widget.ViewPager; import butterknife.BindView; import butterknife.ButterKnife; import com.google.android.material.snackbar.Snackbar; +import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.auth.SessionManager; @@ -33,7 +37,6 @@ import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import fr.free.nrw.commons.profile.ProfileActivity; -import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.DownloadUtils; import fr.free.nrw.commons.utils.ImageUtils; import fr.free.nrw.commons.utils.NetworkUtils; @@ -211,11 +214,83 @@ public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment imple ProfileActivity.startYourself(getActivity(), m.getUser(), !Objects.equals(sessionManager.getUserName(), m.getUser())); } + return true; + case R.id.menu_view_report: + showReportDialog(m); default: return super.onOptionsItemSelected(item); } } + private void showReportDialog(final Media media) { + if (media == null) { + return; + } + final AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); + final String[] values = requireContext().getResources() + .getStringArray(R.array.report_violation_options); + builder.setTitle(R.string.report_violation); + builder.setItems(R.array.report_violation_options, (dialog, which) -> { + sendReportEmail(media, values[which]); + }); + builder.show(); + } + + private void sendReportEmail(final Media media, final String type) { + final String technicalInfo = getTechInfo(media, type); + + final Intent feedbackIntent = new Intent(Intent.ACTION_SENDTO); + feedbackIntent.setType("message/rfc822"); + feedbackIntent.setData(Uri.parse("mailto:")); + feedbackIntent.putExtra(Intent.EXTRA_EMAIL, + new String[]{CommonsApplication.REPORT_EMAIL}); + feedbackIntent.putExtra(Intent.EXTRA_SUBJECT, + CommonsApplication.REPORT_EMAIL_SUBJECT); + feedbackIntent.putExtra(Intent.EXTRA_TEXT, technicalInfo); + try { + startActivity(feedbackIntent); + } catch (final ActivityNotFoundException e) { + Toast.makeText(getActivity(), R.string.no_email_client, Toast.LENGTH_SHORT).show(); + } + } + + private String getTechInfo(final Media media, final String type) { + final StringBuilder builder = new StringBuilder(); + + builder.append("Report type: ") + .append(type) + .append("\n\n"); + + builder.append("Image that you want to report: ") + .append(media.getImageUrl()) + .append("\n\n"); + + builder.append("User that you want to report: ") + .append(media.getAuthor()) + .append("\n\n"); + + if (sessionManager.getUserName() != null) { + builder.append("Your username: ") + .append(sessionManager.getUserName()) + .append("\n\n"); + } + + builder.append("Violation reason: ") + .append("\n"); + + builder.append("----------------------------------------------") + .append("\n") + .append("(please write reason here)") + .append("\n") + .append("----------------------------------------------") + .append("\n\n") + .append("Thank you for your report! Our team will investigate as soon as possible.") + .append("\n") + .append("Please note that images also have a `Nominate for deletion` button."); + + return builder.toString(); + } + /** * Set the media as the device's wallpaper if the imageUrl is not null * Fails silently if setting the wallpaper fails diff --git a/app/src/main/res/menu/fragment_image_detail.xml b/app/src/main/res/menu/fragment_image_detail.xml index c101ae9b2..65ad9ebbe 100644 --- a/app/src/main/res/menu/fragment_image_detail.xml +++ b/app/src/main/res/menu/fragment_image_detail.xml @@ -34,5 +34,9 @@ android:id="@+id/menu_view_user_page" android:title="@string/menu_view_user_page" app:showAsAction="never" /> + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 89ce57701..c09853373 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -70,5 +70,10 @@ yearly all_time - + + @string/report_user + @string/report_content + @string/request_user_block + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a251d21ed..8b165000d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -717,4 +717,9 @@ Upload your first media by tapping on the add button. Error while sending feedback What is your feedback? Your feedback + Report + Report violation + Report this user + Report this content + Request to block this user