diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java
index 28e73564..08ac888f 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/DeveloperSettingsController.java
@@ -55,6 +55,17 @@ public class DeveloperSettingsController extends Controller {
LinearLayout wrapper = new LinearLayout(context);
wrapper.setOrientation(LinearLayout.VERTICAL);
+ Button logsButton = new Button(context);
+ logsButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ navigationController.pushController(new LogsController(context));
+ }
+ });
+ logsButton.setText(R.string.settings_open_logs);
+
+ wrapper.addView(logsButton);
+
Button crashButton = new Button(context);
crashButton.setOnClickListener(new View.OnClickListener() {
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java
new file mode 100644
index 00000000..4f602070
--- /dev/null
+++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java
@@ -0,0 +1,107 @@
+/*
+ * Clover - 4chan browser https://github.com/Floens/Clover/
+ * Copyright (C) 2014 Floens
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.floens.chan.ui.controller;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import org.floens.chan.R;
+import org.floens.chan.controller.Controller;
+import org.floens.chan.ui.toolbar.ToolbarMenu;
+import org.floens.chan.ui.toolbar.ToolbarMenuItem;
+import org.floens.chan.ui.view.FloatingMenuItem;
+import org.floens.chan.utils.AndroidUtils;
+import org.floens.chan.utils.IOUtils;
+import org.floens.chan.utils.Logger;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.floens.chan.utils.AndroidUtils.getAttrColor;
+
+public class LogsController extends Controller implements ToolbarMenuItem.ToolbarMenuItemCallback {
+ private static final String TAG = "LogsController";
+
+ private static final int COPY_ID = 101;
+
+ private TextView logTextView;
+
+ private String logText;
+
+ public LogsController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ navigationItem.setTitle(org.floens.chan.R.string.settings_logs_screen);
+
+ navigationItem.menu = new ToolbarMenu(context);
+ List items = new ArrayList<>();
+ items.add(new FloatingMenuItem(COPY_ID, R.string.settings_logs_copy));
+ navigationItem.createOverflow(context, this, items);
+
+ ScrollView container = new ScrollView(context);
+ container.setBackgroundColor(getAttrColor(context, org.floens.chan.R.attr.backcolor));
+ logTextView = new TextView(context);
+ container.addView(logTextView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
+
+ view = container;
+
+ loadLogs();
+ }
+
+ @Override
+ public void onMenuItemClicked(ToolbarMenuItem item) {
+ }
+
+ @Override
+ public void onSubMenuItemClicked(ToolbarMenuItem parent, FloatingMenuItem item) {
+ if ((int) item.getId() == COPY_ID) {
+ ClipboardManager clipboard = (ClipboardManager) AndroidUtils.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE);
+ ClipData clip = ClipData.newPlainText("Logs", logText);
+ clipboard.setPrimaryClip(clip);
+ Toast.makeText(context, R.string.settings_logs_copied_to_clipboard, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ private void loadLogs() {
+ Process process;
+ try {
+ process = new ProcessBuilder()
+ .command("logcat", "-d", "-v", "tag")
+ .start();
+ } catch (IOException e) {
+ Logger.e(TAG, "Error starting logcat", e);
+ return;
+ }
+
+ InputStream outputStream = process.getInputStream();
+ logText = IOUtils.readString(outputStream);
+ logTextView.setText(logText);
+ }
+}
diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml
index ee207c29..f0a1bdff 100644
--- a/Clover/app/src/main/res/values/strings.xml
+++ b/Clover/app/src/main/res/values/strings.xml
@@ -386,6 +386,10 @@ Re-enable this permission in the app settings if you permanently disabled it."
Open Source Licenses
Legal information about licenses
Developer settings
+ View logs
+ Logs
+ Copy
+ Copied to clipboard
Advanced settings
Advanced settings