diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 882e1fb13..824821136 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
+
{
+ //first we need to check if we have the necessary permissions
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (ContextCompat.checkSelfPermission(
+ getActivity(),
+ Manifest.permission.WRITE_EXTERNAL_STORAGE)
+ ==
+ PackageManager.PERMISSION_GRANTED) {
+ sendAppLogsViaEmail();
+ } else {
+ //first get the necessary permission
+ requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
+ REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
+ }
+ } else {
+ sendAppLogsViaEmail();
+ }
+ return true;
+ });
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+ if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) {
+ if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ sendAppLogsViaEmail();
+ }
+ }
+ }
+
+ private void sendAppLogsViaEmail() {
+ String appLogs = Utils.getAppLogs();
+ File appLogsFile = FileUtils.createAndGetAppLogsFile(appLogs);
+ Uri appLogsFilePath = Uri.fromFile(appLogsFile);
+
+ Intent feedbackIntent = new Intent(Intent.ACTION_SEND);
+ feedbackIntent.setType("message/rfc822");
+ feedbackIntent.putExtra(Intent.EXTRA_EMAIL,
+ new String[]{CommonsApplication.FEEDBACK_EMAIL});
+ feedbackIntent.putExtra(Intent.EXTRA_SUBJECT,
+ String.format(CommonsApplication.FEEDBACK_EMAIL_SUBJECT,
+ BuildConfig.VERSION_NAME));
+ feedbackIntent.putExtra(Intent.EXTRA_STREAM,appLogsFilePath);
+
+ try {
+ startActivity(feedbackIntent);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(getActivity(), R.string.no_email_client, Toast.LENGTH_SHORT).show();
+ }
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java
index 1c816b9e1..6c3fc9a90 100644
--- a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java
+++ b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java
@@ -1,11 +1,17 @@
package fr.free.nrw.commons.utils;
+import android.os.Environment;
+
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import fr.free.nrw.commons.CommonsApplication;
+import timber.log.Timber;
public class FileUtils {
/**
@@ -53,5 +59,32 @@ public class FileUtils {
return deletedAll;
}
+ public static File createAndGetAppLogsFile(String logs) {
+ try {
+ File commonsAppDirectory = new File(Environment.getExternalStorageDirectory().toString() + "/CommonsApp");
+ if (!commonsAppDirectory.exists()) {
+ commonsAppDirectory.mkdir();
+ }
+ File logsFile = new File(commonsAppDirectory,"logs.txt");
+ if (logsFile.exists()) {
+ //old logs file is useless
+ logsFile.delete();
+ }
+
+ logsFile.createNewFile();
+
+ FileOutputStream outputStream = new FileOutputStream(logsFile);
+ OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
+ outputStreamWriter.append(logs);
+ outputStreamWriter.close();
+ outputStream.flush();
+ outputStream.close();
+
+ return logsFile;
+ } catch (IOException ioe) {
+ Timber.e(ioe);
+ return null;
+ }
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9e7825b6b..b1d580a34 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -207,4 +207,6 @@ Tap this message (or hit back) to skip this step.
Give permission
Use external storage
Save pictures taken with the in-app camera on your device
+ Send Logs
+ Send logs to developers via email
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index fab5c93e7..2ceffcb8c 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -53,4 +53,9 @@
android:summary="@string/use_external_storage_summary"
/>
+
+
\ No newline at end of file