From 64b5ee16daaec81909f3a21680f558c392341bfe Mon Sep 17 00:00:00 2001 From: Floens Date: Wed, 14 Jun 2017 19:03:45 +0200 Subject: [PATCH] Add option to view logcat in the developer options. 1000 commits party --- .../DeveloperSettingsController.java | 11 ++ .../chan/ui/controller/LogsController.java | 107 ++++++++++++++++++ Clover/app/src/main/res/values/strings.xml | 4 + 3 files changed, 122 insertions(+) create mode 100644 Clover/app/src/main/java/org/floens/chan/ui/controller/LogsController.java 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