diff --git a/app/src/page/about/index.js b/app/src/page/about/index.js
index e389db2..fd767ed 100644
--- a/app/src/page/about/index.js
+++ b/app/src/page/about/index.js
@@ -1,4 +1,5 @@
import { connect } from 'react-redux';
+import { doToast } from 'lbry-redux';
import { doFetchAccessToken, selectAccessToken, selectUserEmail } from 'lbryinc';
import AboutPage from './view';
@@ -9,6 +10,7 @@ const select = state => ({
const perform = dispatch => ({
fetchAccessToken: () => dispatch(doFetchAccessToken()),
+ notify: data => dispatch(doToast(data)),
});
export default connect(select, perform)(AboutPage);
\ No newline at end of file
diff --git a/app/src/page/about/view.js b/app/src/page/about/view.js
index 190fe3f..d67b586 100644
--- a/app/src/page/about/view.js
+++ b/app/src/page/about/view.js
@@ -33,7 +33,7 @@ class AboutPage extends React.PureComponent {
}
render() {
- const { accessToken, navigation, userEmail } = this.props;
+ const { accessToken, navigation, notify, userEmail } = this.props;
const loading = 'Loading...';
const ver = this.state.versionInfo ? this.state.versionInfo : null;
@@ -75,7 +75,7 @@ class AboutPage extends React.PureComponent {
@@ -102,6 +102,21 @@ class AboutPage extends React.PureComponent {
{this.state.lbryId ? this.state.lbryId : loading}
+
+
+ Logs
+
+ {
+ if (NativeModules.UtilityModule) {
+ NativeModules.UtilityModule.shareLogFile((error) => {
+ if (error) {
+ notify(error);
+ }
+ });
+ }
+ }} />
+
+
);
diff --git a/app/src/styles/about.js b/app/src/styles/about.js
index 784bb72..d5765b7 100644
--- a/app/src/styles/about.js
+++ b/app/src/styles/about.js
@@ -56,7 +56,7 @@ const aboutStyle = StyleSheet.create({
fontSize: 16,
marginBottom: 24
},
- emailPreferencesLink: {
+ listLink: {
color: Colors.LbryGreen,
fontFamily: 'Metropolis-Regular',
fontSize: 15,
diff --git a/p4a/pythonforandroid/bootstraps/lbry/build/templates/AndroidManifest.tmpl.xml b/p4a/pythonforandroid/bootstraps/lbry/build/templates/AndroidManifest.tmpl.xml
index 198f4a4..f96f8d8 100644
--- a/p4a/pythonforandroid/bootstraps/lbry/build/templates/AndroidManifest.tmpl.xml
+++ b/p4a/pythonforandroid/bootstraps/lbry/build/templates/AndroidManifest.tmpl.xml
@@ -140,6 +140,16 @@
{% endif %}
+
+
+
+
diff --git a/src/main/java/io/lbry/browser/reactmodules/UtilityModule.java b/src/main/java/io/lbry/browser/reactmodules/UtilityModule.java
index 84dee73..39ad814 100644
--- a/src/main/java/io/lbry/browser/reactmodules/UtilityModule.java
+++ b/src/main/java/io/lbry/browser/reactmodules/UtilityModule.java
@@ -2,21 +2,30 @@ package io.lbry.browser.reactmodules;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.Manifest;
+import android.net.Uri;
import android.os.Build;
+import android.support.v4.content.FileProvider;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.WindowManager;
+import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
+import java.io.File;
+
import io.lbry.browser.MainActivity;
+import io.lbry.browser.Utils;
public class UtilityModule extends ReactContextBaseJavaModule {
+ private static final String FILE_PROVIDER = "io.lbry.browser.fileprovider";
+
private Context context;
public UtilityModule(ReactApplicationContext reactContext) {
@@ -139,6 +148,30 @@ public class UtilityModule extends ReactContextBaseJavaModule {
}
}
+ @ReactMethod
+ public void shareLogFile(Callback errorCallback) {
+ String logFileName = "lbrynet.log";
+ File logFile = new File(String.format("%s/%s", Utils.getAppInternalStorageDir(context), "lbrynet"), logFileName);
+ if (!logFile.exists()) {
+ errorCallback.invoke("The lbrynet.log file could not be found.");
+ return;
+ }
+
+ try {
+ Uri fileUri = FileProvider.getUriForFile(context, FILE_PROVIDER, logFile);
+ if (fileUri != null) {
+ Intent shareIntent = new Intent();
+ shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ shareIntent.setAction(Intent.ACTION_SEND);
+ shareIntent.setType("text/plain");
+ shareIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
+ context.startActivity(Intent.createChooser(shareIntent, "Send LBRY log"));
+ }
+ } catch (IllegalArgumentException e) {
+ errorCallback.invoke("The lbrynet.log file cannot be shared due to permission restrictions.");
+ }
+ }
+
private static boolean isEmulator() {
String buildModel = Build.MODEL.toLowerCase();
return (// Check FINGERPRINT
diff --git a/src/main/res/xml/filepaths.xml b/src/main/res/xml/filepaths.xml
new file mode 100644
index 0000000..6c65d1c
--- /dev/null
+++ b/src/main/res/xml/filepaths.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file