diff --git a/app/src/main/java/com/hippo/ehviewer/AppConfig.java b/app/src/main/java/com/hippo/ehviewer/AppConfig.java index 7235e1b37..8e116fc55 100644 --- a/app/src/main/java/com/hippo/ehviewer/AppConfig.java +++ b/app/src/main/java/com/hippo/ehviewer/AppConfig.java @@ -33,6 +33,7 @@ public class AppConfig { private static final String IMAGE = "image"; private static final String CRASH = "crash"; private static final String PARSE_ERROR = "parse_error"; + private static final String LOGCAT = "logcat"; private static Context sContext; @@ -97,6 +98,11 @@ public class AppConfig { return getDirInExternalAppDir(PARSE_ERROR); } + @Nullable + public static File getExternalLogcatDir() { + return getDirInExternalAppDir(LOGCAT); + } + @Nullable public static File createExternalTempFile() { return FileUtils.createTempFile(getExternalTempDir(), null); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java index 45a15de7b..f30ac4cd0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AboutFragment.java @@ -57,6 +57,7 @@ public class AboutFragment extends PreferenceFragment Preference checkForUpdate = findPreference(KEY_CHECK_FOR_UPDATES); author.setSummary(getString(R.string.settings_about_author_summary).replace('$', '@')); + donate.setSummary(getString(R.string.settings_about_donate_summary).replace('$', '@')); author.setOnPreferenceClickListener(this); googlePlus.setOnPreferenceClickListener(this); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index 3d85ab34a..cfae7b2bf 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -16,16 +16,52 @@ package com.hippo.ehviewer.ui.fragment; +import android.content.res.Resources; import android.os.Bundle; +import android.preference.Preference; import android.preference.PreferenceFragment; +import android.widget.Toast; +import com.hippo.ehviewer.AppConfig; import com.hippo.ehviewer.R; +import com.hippo.util.LogCat; +import com.hippo.util.ReadableTime; -public class AdvancedFragment extends PreferenceFragment { +import java.io.File; + +public class AdvancedFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener { + + private static final String KEY_DUMP_LOGCAT = "dump_logcat"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.advanced_settings); + + Preference dumpLogcat = findPreference(KEY_DUMP_LOGCAT); + + dumpLogcat.setOnPreferenceClickListener(this); + } + + @Override + public boolean onPreferenceClick(Preference preference) { + String key = preference.getKey(); + if (KEY_DUMP_LOGCAT.equals(key)) { + boolean ok; + File file = null; + File dir = AppConfig.getExternalLogcatDir(); + if (dir != null) { + file = new File(dir, "logcat-" + ReadableTime.getFilenamableTime(System.currentTimeMillis()) + ".txt"); + ok = LogCat.save(file); + } else { + ok = false; + } + Resources resources = getResources(); + Toast.makeText(getActivity(), + ok ? resources.getString(R.string.settings_about_dump_logcat_to, file.getPath()) : + resources.getString(R.string.settings_about_dump_logcat_failed), Toast.LENGTH_SHORT).show(); + return true; + } + return false; } } diff --git a/app/src/main/java/com/hippo/util/LogCat.java b/app/src/main/java/com/hippo/util/LogCat.java new file mode 100644 index 000000000..b49f421a9 --- /dev/null +++ b/app/src/main/java/com/hippo/util/LogCat.java @@ -0,0 +1,45 @@ +/* + * Copyright 2015 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.util; + +import com.hippo.yorozuya.FileUtils; +import com.hippo.yorozuya.IOUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public final class LogCat { + + private LogCat() { + } + + public static boolean save(File file) { + if (!FileUtils.ensureFile(file)) { + return false; + } + + try { + Process p = Runtime.getRuntime().exec("logcat -d"); + IOUtils.copy(p.getInputStream(), new FileOutputStream(file)); + return true; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 22130042e..68fc29943 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -342,6 +342,10 @@ 高级 解析失败时保存页面内容 页面内容可能含有隐私敏感信息 + 导出日志 + 保存日志至外置存储器 + 导出日志失败 + 已保存日志至 %s 关于 作者 @@ -350,12 +354,15 @@ 源码 更新日志 开源许可 + EhViewer 的诞生离不开许多开源项目 捐赠 + 支付宝:seven332$163.com 你的捐赠能帮助我开发更多更好的应用。\n\n支付宝:seven332$163.com 启用数据统计 关于数据统计 检查更新 更新测试版 + 测试版可能在你的设备上出现不可预知的错误 排除语言 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 2a44c84f4..a43be99c7 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -342,6 +342,10 @@ 高級 解析失敗時保存頁面內容 頁面內容可能含有隱私敏感信息 + 導出日誌 + 保存日誌至外置存儲器 + 導出日誌失敗 + 已保存日誌至 %s 關於 作者 @@ -350,12 +354,15 @@ 源碼 更新日誌 開源許可 + EhViewer 的誕生離不開許多開源項目 捐贈 + 支付寶:seven332$163.com 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com 啟用數據統計 關於數據統計 檢查更新 更新測試版 + 測試版可能在你的設備上出現不可預知的錯誤 排除語言 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0ef55b3b2..2125b99fd 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -342,6 +342,10 @@ 高階 解析失敗時儲存頁面內容 頁面內容可能含有隱私敏感資訊 + 匯出日誌 + 儲存日誌至外接儲存器 + 匯出日誌失敗 + 已儲存日誌至 %s 關於 作者 @@ -350,12 +354,15 @@ 原始碼 更新日誌 開源許可 + EhViewer 的誕生離不開許多開源專案 捐贈 + 支付寶:seven332$163.com 你的捐贈能幫助我開發更多更好的應用。\n\n支付寶:seven332$163.com 啟用資料統計 關於資料統計 檢查更新 更新測試版 + 測試版可能在你的裝置上出現不可預知的錯誤 排除語言 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d3119ac52..070f322a7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -381,21 +381,32 @@ Advanced Save html content when parsing error Html content may be privacy-sensitive + Dump logcat + Save logcat to external storage + Dump logcat failed + Saved logcat to %s About Author Hippo <ehviewersu$gmail.com> Google+ Community + https://plus.google.com/communities/103823982034655188459 Website + http://www.ehviewer.com Source + https://github.com/seven332/EhViewer Changelog + http://www.ehviewer.com/changlog License + EhViewer is made possible by many open source projects Donate + Alipay: seven332$163.com Your donation can help me develop more and better applications.\n\nAlipay: seven332$163.com Enable analytics About analytics Check for updates Beta update channel + Beta release might be broken on your devices Excluded languages diff --git a/app/src/main/res/xml/about_settings.xml b/app/src/main/res/xml/about_settings.xml index a500c6010..be232607f 100644 --- a/app/src/main/res/xml/about_settings.xml +++ b/app/src/main/res/xml/about_settings.xml @@ -25,28 +25,39 @@ + android:title="@string/settings_about_google_plus" + android:summary="@string/settings_about_google_plus_summary"/> + android:title="@string/settings_about_website" + android:summary="@string/settings_about_website_summary"/> + android:title="@string/settings_about_source" + android:summary="@string/settings_about_source_summary"/> + android:title="@string/settings_about_changelog" + android:summary="@string/settings_about_changelog_summary"/> + android:key="check_for_updates" + android:title="@string/settings_about_check_for_updates"/> + + - - + android:key="donate" + android:title="@string/settings_about_donate"/> diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml index 2f169f97d..5c525fca7 100644 --- a/app/src/main/res/xml/advanced_settings.xml +++ b/app/src/main/res/xml/advanced_settings.xml @@ -24,4 +24,9 @@ android:summary="@string/settings_about_save_parse_error_body_summary" android:defaultValue="@bool/beta"/> + +