Added muted errors apps management function and fix i18n translation

This commit is contained in:
2022-06-03 04:46:23 +08:00
parent 66296f9ed4
commit 7024a8c521
20 changed files with 526 additions and 116 deletions

View File

@@ -54,11 +54,9 @@ Added more features to app's crash dialog, fixed custom rom deleted dialog, the
此项目依然在开发中,现在未解决的问题和包含的问题如下
- 排除列表功能
- 应用配置模板功能
- 已忽略异常的 APP 查看功能
- 更多功能
- 更多功能 (计划内)
## License

View File

@@ -59,6 +59,11 @@
android:exported="true"
android:screenOrientation="behind" />
<activity
android:name=".ui.activity.errors.AppErrorsMutedActivity"
android:exported="false"
android:screenOrientation="behind" />
<activity
android:name=".ui.activity.errors.AppErrorsDisplayActivity"
android:excludeFromRecents="true"

View File

@@ -0,0 +1,37 @@
/*
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
* Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com)
* https://github.com/KitsunePie/AppErrorsTracking
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This software 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
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* and eula along with this software. If not, see
* <https://www.gnu.org/licenses/>
*
* This file is Created by fankes on 2022/6/3.
*/
package com.fankes.apperrorstracking.bean
import java.io.Serializable
/**
* 已忽略异常的应用 bean
* @param type 类型
* @param packageName 包名
*/
data class MutedErrorsAppBean(var type: MuteType, var packageName: String) : Serializable {
/**
* 已忽略的异常类型
*/
enum class MuteType { UNTIL_UNLOCKS, UNTIL_REBOOTS }
}

View File

@@ -30,6 +30,7 @@ import android.os.Message
import com.fankes.apperrorstracking.BuildConfig
import com.fankes.apperrorstracking.bean.AppErrorsDisplayBean
import com.fankes.apperrorstracking.bean.AppErrorsInfoBean
import com.fankes.apperrorstracking.bean.MutedErrorsAppBean
import com.fankes.apperrorstracking.data.DataConst
import com.fankes.apperrorstracking.locale.LocaleString
import com.fankes.apperrorstracking.ui.activity.errors.AppErrorsDisplayActivity
@@ -65,10 +66,10 @@ object FrameworkHooker : YukiBaseHooker() {
)
/** 已忽略错误的 APP 数组 - 直到重新解锁 */
private var ignoredErrorsIfUnlockApps = HashSet<String>()
private var mutedErrorsIfUnlockApps = HashSet<String>()
/** 已忽略错误的 APP 数组 - 直到重新启动 */
private var ignoredErrorsIfRestartApps = HashSet<String>()
private var mutedErrorsIfRestartApps = HashSet<String>()
/** 已记录的 APP 异常信息数组 - 直到重新启动 */
private val appErrorsRecords = ArrayList<AppErrorsInfoBean>()
@@ -77,7 +78,7 @@ object FrameworkHooker : YukiBaseHooker() {
private fun register() {
onAppLifecycle {
/** 解锁后清空已记录的忽略错误 APP */
registerReceiver(Intent.ACTION_USER_PRESENT) { _, _ -> ignoredErrorsIfUnlockApps.clear() }
registerReceiver(Intent.ACTION_USER_PRESENT) { _, _ -> mutedErrorsIfUnlockApps.clear() }
/** 刷新模块 Resources 缓存 */
registerReceiver(Intent.ACTION_LOCALE_CHANGED) { _, _ -> refreshModuleAppResources() }
}
@@ -86,8 +87,26 @@ object FrameworkHooker : YukiBaseHooker() {
onPushAppErrorsInfoData { appErrorsRecords }
onRemoveAppErrorsInfoData { appErrorsRecords.remove(it) }
onClearAppErrorsInfoData { appErrorsRecords.clear() }
onIgnoredErrorsIfUnlock { ignoredErrorsIfUnlockApps.add(it) }
onIgnoredErrorsIfRestart { ignoredErrorsIfRestartApps.add(it) }
onMutedErrorsIfUnlock { mutedErrorsIfUnlockApps.add(it) }
onMutedErrorsIfRestart { mutedErrorsIfRestartApps.add(it) }
onPushMutedErrorsAppsData {
arrayListOf<MutedErrorsAppBean>().apply {
mutedErrorsIfUnlockApps.takeIf { it.isNotEmpty() }
?.forEach { add(MutedErrorsAppBean(MutedErrorsAppBean.MuteType.UNTIL_UNLOCKS, it)) }
mutedErrorsIfRestartApps.takeIf { it.isNotEmpty() }
?.forEach { add(MutedErrorsAppBean(MutedErrorsAppBean.MuteType.UNTIL_REBOOTS, it)) }
}
}
onUnmuteErrorsApp {
when (it.type) {
MutedErrorsAppBean.MuteType.UNTIL_UNLOCKS -> mutedErrorsIfUnlockApps.remove(it.packageName)
MutedErrorsAppBean.MuteType.UNTIL_REBOOTS -> mutedErrorsIfRestartApps.remove(it.packageName)
}
}
onUnmuteAllErrorsApps {
mutedErrorsIfUnlockApps.clear()
mutedErrorsIfRestartApps.clear()
}
}
}
@@ -179,7 +198,7 @@ object FrameworkHooker : YukiBaseHooker() {
return@afterHook
}
/** 判断是否为已忽略的 APP */
if (ignoredErrorsIfUnlockApps.contains(packageName) || ignoredErrorsIfRestartApps.contains(packageName)) return@afterHook
if (mutedErrorsIfUnlockApps.contains(packageName) || mutedErrorsIfRestartApps.contains(packageName)) return@afterHook
/** 判断是否为后台进程 */
if ((isBackgroundProcess || context.isAppCanOpened(packageName).not())
&& prefs.get(DataConst.ENABLE_ONLY_SHOW_ERRORS_IN_FRONT)

View File

@@ -144,28 +144,28 @@ object LocaleString {
fun errorDetail(vararg objArrs: Any) = R.string.error_detail.bind(*objArrs)
/** @string Automatic generated */
val ignoreIfUnlock get() = ignoreIfUnlock()
val muteIfUnlock get() = muteIfUnlock()
/** @string Automatic generated */
fun ignoreIfUnlock(vararg objArrs: Any) = R.string.ignore_if_unlock.bind(*objArrs)
fun muteIfUnlock(vararg objArrs: Any) = R.string.mute_if_unlock.bind(*objArrs)
/** @string Automatic generated */
val ignoreIfRestart get() = ignoreIfRestart()
val muteIfRestart get() = muteIfRestart()
/** @string Automatic generated */
fun ignoreIfRestart(vararg objArrs: Any) = R.string.ignore_if_restart.bind(*objArrs)
fun muteIfRestart(vararg objArrs: Any) = R.string.mute_if_restart.bind(*objArrs)
/** @string Automatic generated */
val ignoreIfUnlockTip get() = ignoreIfUnlockTip()
val muteIfUnlockTip get() = muteIfUnlockTip()
/** @string Automatic generated */
fun ignoreIfUnlockTip(vararg objArrs: Any) = R.string.ignore_if_unlock_tip.bind(*objArrs)
fun muteIfUnlockTip(vararg objArrs: Any) = R.string.mute_if_unlock_tip.bind(*objArrs)
/** @string Automatic generated */
val ignoreIfRestartTip get() = ignoreIfRestartTip()
val muteIfRestartTip get() = muteIfRestartTip()
/** @string Automatic generated */
fun ignoreIfRestartTip(vararg objArrs: Any) = R.string.ignore_if_restart_tip.bind(*objArrs)
fun muteIfRestartTip(vararg objArrs: Any) = R.string.mute_if_restart_tip.bind(*objArrs)
/** @string Automatic generated */
val confirm get() = confirm()
@@ -340,4 +340,10 @@ object LocaleString {
/** @string Automatic generated */
fun shareErrorStack(vararg objArrs: Any) = R.string.share_error_stack.bind(*objArrs)
/** @string Automatic generated */
val areYouSureUnmuteAll get() = areYouSureUnmuteAll()
/** @string Automatic generated */
fun areYouSureUnmuteAll(vararg objArrs: Any) = R.string.are_you_sure_unmute_all.bind(*objArrs)
}

View File

@@ -87,14 +87,14 @@ class AppErrorsDisplayActivity : BaseActivity<ActivityAppErrorsDisplayBinding>()
}
}
ignoreIfUnlockItem.setOnClickListener {
FrameworkTool.ignoredErrorsIfUnlock(context, appErrorsDisplay.packageName) {
toast(LocaleString.ignoreIfUnlockTip(appErrorsDisplay.appName))
FrameworkTool.mutedErrorsIfUnlock(context, appErrorsDisplay.packageName) {
toast(LocaleString.muteIfUnlockTip(appErrorsDisplay.appName))
cancel()
}
}
ignoreIfRestartItem.setOnClickListener {
FrameworkTool.ignoredErrorsIfRestart(context, appErrorsDisplay.packageName) {
toast(LocaleString.ignoreIfRestartTip(appErrorsDisplay.appName))
FrameworkTool.mutedErrorsIfRestart(context, appErrorsDisplay.packageName) {
toast(LocaleString.muteIfRestartTip(appErrorsDisplay.appName))
cancel()
}
}

View File

@@ -0,0 +1,90 @@
/*
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
* Copyright (C) 2019-2022 Fankes Studio(qzmmcn@163.com)
* https://github.com/KitsunePie/AppErrorsTracking
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either
* version 3 of the License, or any later version.
*
* This software 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
* Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* and eula along with this software. If not, see
* <https://www.gnu.org/licenses/>
*
* This file is Created by fankes on 2022/6/3.
*/
@file:Suppress("DEPRECATION", "OVERRIDE_DEPRECATION")
package com.fankes.apperrorstracking.ui.activity.errors
import androidx.core.view.isVisible
import com.fankes.apperrorstracking.bean.MutedErrorsAppBean
import com.fankes.apperrorstracking.databinding.ActivityAppErrorsMutedBinding
import com.fankes.apperrorstracking.databinding.AdapterAppErrorsMutedBinding
import com.fankes.apperrorstracking.locale.LocaleString
import com.fankes.apperrorstracking.ui.activity.base.BaseActivity
import com.fankes.apperrorstracking.utils.factory.appIcon
import com.fankes.apperrorstracking.utils.factory.appName
import com.fankes.apperrorstracking.utils.factory.bindAdapter
import com.fankes.apperrorstracking.utils.factory.showDialog
import com.fankes.apperrorstracking.utils.tool.FrameworkTool
class AppErrorsMutedActivity : BaseActivity<ActivityAppErrorsMutedBinding>() {
/** 回调适配器改变 */
private var onChanged: (() -> Unit)? = null
/** 全部的已忽略异常的 APP 信息 */
private val listData = ArrayList<MutedErrorsAppBean>()
override fun onCreate() {
binding.titleBackIcon.setOnClickListener { onBackPressed() }
binding.unmuteAllIcon.setOnClickListener {
showDialog {
title = LocaleString.notice
msg = LocaleString.areYouSureUnmuteAll
confirmButton { FrameworkTool.unmuteAllErrorsApps(context) { refreshData() } }
cancelButton()
}
}
/** 设置列表元素和 Adapter */
binding.listView.bindAdapter {
onBindDatas { listData }
onBindViews<AdapterAppErrorsMutedBinding> { binding, position ->
listData[position].also { bean ->
binding.appIcon.setImageDrawable(appIcon(bean.packageName))
binding.appNameText.text = appName(bean.packageName)
binding.muteTypeText.text = when (bean.type) {
MutedErrorsAppBean.MuteType.UNTIL_UNLOCKS -> LocaleString.muteIfUnlock
MutedErrorsAppBean.MuteType.UNTIL_REBOOTS -> LocaleString.muteIfRestart
}
binding.unmuteButton.setOnClickListener { FrameworkTool.unmuteErrorsApp(context, bean) { refreshData() } }
}
}
}.apply { onChanged = { notifyDataSetChanged() } }
}
/** 更新列表数据 */
private fun refreshData() {
FrameworkTool.fetchMutedErrorsAppsData(context = this) {
listData.clear()
it.takeIf { e -> e.isNotEmpty() }?.forEach { e -> listData.add(e) }
onChanged?.invoke()
binding.unmuteAllIcon.isVisible = listData.isNotEmpty()
binding.listView.isVisible = listData.isNotEmpty()
binding.listNoDataView.isVisible = listData.isEmpty()
}
}
override fun onResume() {
super.onResume()
/** 执行更新 */
refreshData()
}
}

View File

@@ -33,6 +33,7 @@ import com.fankes.apperrorstracking.data.DataConst
import com.fankes.apperrorstracking.databinding.ActivityMainBinding
import com.fankes.apperrorstracking.locale.LocaleString
import com.fankes.apperrorstracking.ui.activity.base.BaseActivity
import com.fankes.apperrorstracking.ui.activity.errors.AppErrorsMutedActivity
import com.fankes.apperrorstracking.ui.activity.errors.AppErrorsRecordActivity
import com.fankes.apperrorstracking.utils.factory.navigate
import com.fankes.apperrorstracking.utils.factory.openBrowser
@@ -72,13 +73,13 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
binding.enableAppsConfigsTemplateSwitch.setOnCheckedChangeListener { btn, b ->
if (b) btn.isChecked = false
toastComingSooon()
toastComingSoon()
}
/** 管理应用配置模板按钮点击事件 */
binding.mgrAppsConfigsTemplateButton.setOnClickListener { toastComingSooon() }
binding.mgrAppsConfigsTemplateButton.setOnClickListener { toastComingSoon() }
/** 功能管理按钮点击事件 */
binding.viewErrorsRecordButton.setOnClickListener { navigate<AppErrorsRecordActivity>() }
binding.viewIgnoredErrorsAppsButton.setOnClickListener { toastComingSooon() }
binding.viewMutedErrorsAppsButton.setOnClickListener { navigate<AppErrorsMutedActivity>() }
/** 重启按钮点击事件 */
binding.titleRestartIcon.setOnClickListener { FrameworkTool.restartSystem(context = this) }
/** 项目地址按钮点击事件 */
@@ -111,7 +112,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
/** 敬请期待 */
private fun toastComingSooon() = toast(msg = "Coming soon")
private fun toastComingSoon() = toast(msg = "Coming soon")
override fun onResume() {
super.onResume()

View File

@@ -25,6 +25,7 @@ package com.fankes.apperrorstracking.utils.tool
import android.content.Context
import com.fankes.apperrorstracking.bean.AppErrorsInfoBean
import com.fankes.apperrorstracking.bean.MutedErrorsAppBean
import com.fankes.apperrorstracking.locale.LocaleString
import com.fankes.apperrorstracking.utils.factory.execShell
import com.fankes.apperrorstracking.utils.factory.isRootAccess
@@ -43,17 +44,23 @@ object FrameworkTool {
private const val SYSTEM_FRAMEWORK_NAME = "android"
private const val CALL_APP_ERRORS_DATA_GET = "call_app_errors_data_get"
private const val CALL_APP_ERRORS_DATA_REMOVE_RESULT = "call_app_errors_data_remove_result"
private const val CALL_MUTED_ERRORS_APP_DATA_GET = "call_muted_app_errors_data_get"
private const val CALL_APP_ERRORS_DATA_CLEAR = "call_app_errors_data_clear"
private const val CALL_UNMUTE_ALL_ERRORS_APPS_DATA = "call_unmute_all_errors_apps_data"
private const val CALL_APP_ERRORS_DATA_REMOVE_RESULT = "call_app_errors_data_remove_result"
private const val CALL_APP_ERRORS_DATA_CLEAR_RESULT = "call_app_errors_data_clear_result"
private const val CALL_IGNORED_ERRORS_IF_UNLOCK_RESULT = "call_ignored_errors_if_unlock_result"
private const val CALL_IGNORED_ERRORS_IF_RESTART_RESULT = "call_ignored_errors_if_restart_result"
private const val CALL_MUTED_ERRORS_IF_UNLOCK_RESULT = "call_muted_errors_if_unlock_result"
private const val CALL_MUTED_ERRORS_IF_RESTART_RESULT = "call_muted_errors_if_restart_result"
private const val CALL_UNMUTE_ERRORS_APP_DATA_RESULT = "call_unmute_errors_app_data_result"
private const val CALL_UNMUTE_ALL_ERRORS_APPS_DATA_RESULT = "call_unmute_all_errors_apps_data_result"
private val CALL_OPEN_SPECIFY_APP = ChannelData<String>("call_open_specify_app")
private val CALL_APP_ERRORS_DATA_REMOVE = ChannelData<AppErrorsInfoBean>("call_app_errors_data_remove")
private val CALL_APP_ERRORS_DATA_GET_RESULT = ChannelData<ArrayList<AppErrorsInfoBean>>("call_app_errors_data_get_result")
private val CALL_IGNORED_ERRORS_IF_UNLOCK = ChannelData<String>("call_ignored_errors_if_unlock")
private val CALL_IGNORED_ERRORS_IF_RESTART = ChannelData<String>("call_ignored_errors_if_restart")
private val CALL_MUTED_ERRORS_APP_DATA_GET_RESULT = ChannelData<ArrayList<MutedErrorsAppBean>>("call_muted_app_errors_data_get_result")
private val CALL_UNMUTE_ERRORS_APP_DATA = ChannelData<MutedErrorsAppBean>("call_unmute_errors_app_data")
private val CALL_MUTED_ERRORS_IF_UNLOCK = ChannelData<String>("call_muted_errors_if_unlock")
private val CALL_MUTED_ERRORS_IF_RESTART = ChannelData<String>("call_muted_errors_if_restart")
/**
* 宿主注册监听
@@ -115,11 +122,11 @@ object FrameworkTool {
* 监听忽略 APP 的错误直到设备重新解锁
* @param result 回调包名
*/
fun onIgnoredErrorsIfUnlock(result: (String) -> Unit) {
fun onMutedErrorsIfUnlock(result: (String) -> Unit) {
instance?.dataChannel?.with {
wait(CALL_IGNORED_ERRORS_IF_UNLOCK) {
wait(CALL_MUTED_ERRORS_IF_UNLOCK) {
result(it)
put(CALL_IGNORED_ERRORS_IF_UNLOCK_RESULT)
put(CALL_MUTED_ERRORS_IF_UNLOCK_RESULT)
}
}
}
@@ -128,11 +135,45 @@ object FrameworkTool {
* 监听忽略 APP 的错误直到设备重新启动
* @param result 回调包名
*/
fun onIgnoredErrorsIfRestart(result: (String) -> Unit) {
fun onMutedErrorsIfRestart(result: (String) -> Unit) {
instance?.dataChannel?.with {
wait(CALL_IGNORED_ERRORS_IF_RESTART) {
wait(CALL_MUTED_ERRORS_IF_RESTART) {
result(it)
put(CALL_IGNORED_ERRORS_IF_RESTART_RESULT)
put(CALL_MUTED_ERRORS_IF_RESTART_RESULT)
}
}
}
/**
* 监听发送已忽略异常的 APP 信息数组
* @param result 回调数据
*/
fun onPushMutedErrorsAppsData(result: () -> ArrayList<MutedErrorsAppBean>) {
instance?.dataChannel?.with { wait(CALL_MUTED_ERRORS_APP_DATA_GET) { put(CALL_MUTED_ERRORS_APP_DATA_GET_RESULT, result()) } }
}
/**
* 监听取消指定已忽略异常的 APP
* @param result 回调数据
*/
fun onUnmuteErrorsApp(result: (MutedErrorsAppBean) -> Unit) {
instance?.dataChannel?.with {
wait(CALL_UNMUTE_ERRORS_APP_DATA) {
result(it)
put(CALL_UNMUTE_ERRORS_APP_DATA_RESULT)
}
}
}
/**
* 监听取消全部已忽略异常的 APP
* @param callback 回调
*/
fun onUnmuteAllErrorsApps(callback: () -> Unit) {
instance?.dataChannel?.with {
wait(CALL_UNMUTE_ALL_ERRORS_APPS_DATA) {
callback()
put(CALL_UNMUTE_ALL_ERRORS_APPS_DATA_RESULT)
}
}
}
@@ -217,10 +258,10 @@ object FrameworkTool {
* @param packageName APP 包名
* @param callback 成功后回调
*/
fun ignoredErrorsIfUnlock(context: Context, packageName: String, callback: () -> Unit) {
fun mutedErrorsIfUnlock(context: Context, packageName: String, callback: () -> Unit) {
context.dataChannel(SYSTEM_FRAMEWORK_NAME).with {
wait(CALL_IGNORED_ERRORS_IF_UNLOCK_RESULT) { callback() }
put(CALL_IGNORED_ERRORS_IF_UNLOCK, packageName)
wait(CALL_MUTED_ERRORS_IF_UNLOCK_RESULT) { callback() }
put(CALL_MUTED_ERRORS_IF_UNLOCK, packageName)
}
}
@@ -230,10 +271,47 @@ object FrameworkTool {
* @param packageName APP 包名
* @param callback 成功后回调
*/
fun ignoredErrorsIfRestart(context: Context, packageName: String, callback: () -> Unit) {
fun mutedErrorsIfRestart(context: Context, packageName: String, callback: () -> Unit) {
context.dataChannel(SYSTEM_FRAMEWORK_NAME).with {
wait(CALL_IGNORED_ERRORS_IF_RESTART_RESULT) { callback() }
put(CALL_IGNORED_ERRORS_IF_RESTART, packageName)
wait(CALL_MUTED_ERRORS_IF_RESTART_RESULT) { callback() }
put(CALL_MUTED_ERRORS_IF_RESTART, packageName)
}
}
/**
* 获取已忽略异常的 APP 信息数组
* @param context 实例
* @param result 回调数据
*/
fun fetchMutedErrorsAppsData(context: Context, result: (ArrayList<MutedErrorsAppBean>) -> Unit) {
context.dataChannel(SYSTEM_FRAMEWORK_NAME).with {
wait(CALL_MUTED_ERRORS_APP_DATA_GET_RESULT) { result(it) }
put(CALL_MUTED_ERRORS_APP_DATA_GET)
}
}
/**
* 取消指定已忽略异常的 APP
* @param context 实例
* @param mutedErrorsApp 指定已忽略异常的 APP 信息
* @param callback 成功后回调
*/
fun unmuteErrorsApp(context: Context, mutedErrorsApp: MutedErrorsAppBean, callback: () -> Unit) {
context.dataChannel(SYSTEM_FRAMEWORK_NAME).with {
wait(CALL_UNMUTE_ERRORS_APP_DATA_RESULT) { callback() }
put(CALL_UNMUTE_ERRORS_APP_DATA, mutedErrorsApp)
}
}
/**
* 取消全部已忽略异常的 APP
* @param context 实例
* @param callback 成功后回调
*/
fun unmuteAllErrorsApps(context: Context, callback: () -> Unit) {
context.dataChannel(SYSTEM_FRAMEWORK_NAME).with {
wait(CALL_UNMUTE_ALL_ERRORS_APPS_DATA_RESULT) { callback() }
put(CALL_UNMUTE_ALL_ERRORS_APPS_DATA)
}
}
}

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorThemeBackground"
android:orientation="vertical"
tools:context=".ui.activity.errors.AppErrorsRecordActivity"
tools:ignore="ContentDescription,UseCompoundDrawables">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="0dp"
android:gravity="center|start"
android:paddingLeft="15dp"
android:paddingTop="15dp"
android:paddingRight="15dp"
android:paddingBottom="15dp">
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/title_back_icon"
style="?android:attr/selectableItemBackgroundBorderless"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:src="@mipmap/ic_back"
android:tint="@color/colorTextGray"
android:tooltipText="@string/back" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="2.5dp"
android:layout_weight="1"
android:singleLine="true"
android:text="@string/muted_errors_apps"
android:textColor="@color/colorTextGray"
android:textSize="19sp"
android:textStyle="bold" />
<androidx.constraintlayout.utils.widget.ImageFilterView
android:id="@+id/unmute_all_icon"
android:layout_width="26dp"
android:layout_height="26dp"
android:layout_marginEnd="10dp"
android:src="@drawable/ic_clear"
android:tint="@color/colorTextGray"
android:tooltipText="@string/unmute_all"
android:visibility="gone" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp">
<TextView
android:id="@+id/list_no_data_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:lineSpacingExtra="6dp"
android:text="@string/no_list_data"
android:textColor="@color/colorTextDark"
android:textSize="17sp" />
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/trans"
android:dividerHeight="15dp"
android:fadingEdgeLength="10dp"
android:listSelector="@color/trans"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingBottom="15dp"
android:requiresFadingEdge="vertical"
android:scrollbars="none"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>

View File

@@ -73,7 +73,7 @@
android:layout_gravity="center"
android:gravity="center"
android:lineSpacingExtra="6dp"
android:text="@string/no_errors_data"
android:text="@string/no_list_data"
android:textColor="@color/colorTextDark"
android:textSize="17sp" />

View File

@@ -387,7 +387,7 @@
android:textSize="12sp" />
<TextView
android:id="@+id/view_ignored_errors_apps_button"
android:id="@+id/view_muted_errors_apps_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="13dp"
@@ -397,7 +397,7 @@
android:gravity="center"
android:padding="10dp"
android:singleLine="true"
android:text="@string/view_ignored_errors_apps"
android:text="@string/view_muted_errors_apps"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
@@ -409,7 +409,7 @@
android:layout_marginBottom="10dp"
android:alpha="0.6"
android:lineSpacingExtra="6dp"
android:text="@string/view_ignored_errors_apps_tip"
android:text="@string/view_muted_errors_apps_tip"
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
</LinearLayout>
@@ -453,7 +453,7 @@
android:id="@+id/hide_icon_in_launcher_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hide_app_icon_on_desktop"
android:text="@string/hide_app_icon_on_launcher"
android:textAllCaps="false"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
@@ -464,7 +464,7 @@
android:layout_marginBottom="10dp"
android:alpha="0.6"
android:lineSpacingExtra="6dp"
android:text="@string/hide_app_icon_on_desktop_tip"
android:text="@string/hide_app_icon_on_launcher_tip"
android:textColor="@color/colorTextDark"
android:textSize="12sp" />
@@ -474,7 +474,7 @@
android:layout_marginBottom="10dp"
android:alpha="0.6"
android:lineSpacingExtra="6dp"
android:text="@string/hide_app_icon_on_desktop_notice"
android:text="@string/hide_app_icon_on_launcher_notice"
android:textColor="#FF5722"
android:textSize="12sp" />
</LinearLayout>

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_permotion_ripple"
android:gravity="center|start"
android:orientation="horizontal"
android:padding="10dp"
tools:ignore="ContentDescription,UseCompoundDrawables,SmallSp">
<androidx.cardview.widget.CardView
android:layout_width="45dp"
android:layout_height="45dp"
app:cardBackgroundColor="@color/trans"
app:cardCornerRadius="10dp"
app:cardElevation="0dp">
<ImageView
android:id="@+id/app_icon"
android:layout_width="45dp"
android:layout_height="45dp" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<TextView
android:id="@+id/app_name_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:layout_marginBottom="4dp"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
<TextView
android:id="@+id/mute_type_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/colorTextDark"
android:textSize="11sp" />
</LinearLayout>
<TextView
android:id="@+id/unmute_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_button_round"
android:gravity="center"
android:padding="10dp"
android:singleLine="true"
android:text="@string/unmute"
android:textColor="@color/colorTextGray"
android:textSize="14sp" />
</LinearLayout>

View File

@@ -125,7 +125,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ignore_if_unlock"
android:text="@string/mute_if_unlock"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
</com.fankes.apperrorstracking.ui.view.ItemLinearLayout>
@@ -147,7 +147,7 @@
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ignore_if_restart"
android:text="@string/mute_if_restart"
android:textColor="@color/colorTextGray"
android:textSize="15sp" />
</com.fankes.apperrorstracking.ui.view.ItemLinearLayout>

View File

@@ -5,13 +5,13 @@
<string name="app_info">アプリ情報</string>
<string name="reopen_app">アプリをリスタート</string>
<string name="error_detail">エラーの詳細</string>
<string name="ignore_if_unlock">無視(ロックが解除されるまで)</string>
<string name="ignore_if_restart">無視(システイムが再起動するまで)</string>
<string name="mute_if_unlock">無視(ロックが解除されるまで)</string>
<string name="mute_if_restart">無視(システイムがリスタートまで)</string>
<string name="close_app">アプリを閉じる</string>
<string name="aerr_title">%1$s がエラー</string>
<string name="aerr_repeated_title">%1$s が再びエラー</string>
<string name="ignore_if_restart_tip">システイムが再起動するまで、「%1$s」のエラーを無視します</string>
<string name="ignore_if_unlock_tip">ロックが解除されるまで、「%1$s」のエラーを無視します</string>
<string name="mute_if_restart_tip">システイムがリスタートするまで、「%1$s」のエラーを無視します</string>
<string name="mute_if_unlock_tip">ロックが解除されるまで、「%1$s」のエラーを無視します</string>
<string name="back">戻る</string>
<string name="copy_error_stack">エラースタックをコピーする</string>
<string name="export_to_file">ファイルにエクスポート</string>
@@ -31,7 +31,7 @@
<string name="export_all">すべてエクスポート</string>
<string name="clear_all">すべてクリア</string>
<string name="errors_record">エラー履歴記錄</string>
<string name="no_errors_data">一時的にエラーなデータレコードはありません</string>
<string name="no_list_data">一時的にデータレコードはありません</string>
<string name="confirm">確認</string>
<string name="cancel">キャンセル</string>
<string name="more">モア</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">モジュールが有効化でした</string>
<string name="after_some_settings_need_restart">一部の設定を変更した後、リスタートシステムして有効にするには、右上隅をクリックする必要がある場合があります。</string>
<string name="display_settings">表示設定</string>
<string name="hide_app_icon_on_desktop">デスクトップ上のアプリアイコンを非表示</string>
<string name="hide_app_icon_on_desktop_tip">モジュールアイコンを非表示にすると、インターフェイスが閉じてデスクトップに表示されなくなります。モジュール設定は、EdXposedまたはLSPosedで検索して開くことができます。</string>
<string name="hide_app_icon_on_desktop_notice">LSPosedの「Force apps to show launcher icons」機能を必ずオフにしてください</string>
<string name="hide_app_icon_on_launcher">デスクトップ上のアプリアイコンを非表示</string>
<string name="hide_app_icon_on_launcher_tip">モジュールアイコンを非表示にすると、インターフェイスが閉じてデスクトップに表示されなくなります。モジュール設定は、EdXposedまたはLSPosedで検索して開くことができます。</string>
<string name="hide_app_icon_on_launcher_notice">LSPosedの「Force apps to show launcher icons」機能を必ずオフにしてください</string>
<string name="about_module">このモジュールは、YukiHookAPIを使用して構築できます。 \n詳細 https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">モジュールが不完全に有効化でした</string>
<string name="are_your_sure_restart_system">リスタートシステムしてもよろしいですか</string>
@@ -78,10 +78,14 @@
<string name="enable_apps_config_template">アプリ設定テンプレートを有効にする</string>
<string name="mgr_apps_config_template">アプリ設定テンプレートを管理する</string>
<string name="view_errors_record">エラー履歴を表示する</string>
<string name="view_ignored_errors_apps">エラーを無視したアプリを表示する</string>
<string name="view_muted_errors_apps">エラーを無視したアプリを表示する</string>
<string name="only_show_errors_in_front_tip">有効にすると、エラーが発生したアプリがフォアグラウンド(使用中)の場合にのみエラーダイアログが表示されます。エラーが発生したバックグラウンドアプリではエラーダイアログは表示されませんが、すべてがに記録されます。エラー履歴。</string>
<string name="only_show_errors_in_main_process_tip">有効にすると、エラーダイアログは、アプリで発生したエラーがメインプロセス(最初のアプリケーションインスタンスオブジェクト)にある場合にのみ表示されます。</string>
<string name="apps_config_template_tip">ここでは、アプリごとに個別にエラーが発生したときにエラーダイアログを表示するかどうかを設定できます。</string>
<string name="view_errors_record_tip">ここでは、システムの電源を入れてから現在までのすべてのアプリエラーレコードを確認できます。エラー履歴はリスタート後に自動的にクリアされます。レコードの表示、エクスポート、共有、およびクリアが可能です。</string>
<string name="view_ignored_errors_apps_tip">ここでは、さまざまな形式のエラーを手動で無視したアプリを見つけることができます。このリストは、リスタート後に自動的にクリアされます。これらの無視されたアプリを管理し、無視リストから削除できます。</string>
<string name="view_muted_errors_apps_tip">ここでは、さまざまな形式のエラーを手動で無視したアプリを見つけることができます。このリストは、リスタート後に自動的にクリアされます。これらの無視されたアプリを管理し、無視リストから削除できます。</string>
<string name="muted_errors_apps">エラーを無視したアプリ</string>
<string name="unmute">無視を解除</string>
<string name="unmute_all">無視を全部解除</string>
<string name="are_you_sure_unmute_all">エラーを無視したすべてのアプリを解除してもよろしいですか</string>
</resources>

View File

@@ -5,13 +5,13 @@
<string name="app_info">应用信息</string>
<string name="reopen_app">重新打开</string>
<string name="error_detail">错误详情</string>
<string name="ignore_if_unlock">忽略(直到设备重新解锁)</string>
<string name="ignore_if_restart">忽略(直到设备重新启动)</string>
<string name="mute_if_unlock">忽略(直到设备重新解锁)</string>
<string name="mute_if_restart">忽略(直到设备重新启动)</string>
<string name="close_app">关闭应用</string>
<string name="aerr_title">%1$s 已停止运行</string>
<string name="aerr_repeated_title">%1$s 屡次停止运行</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的错误直到设备重新解锁</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的错误直到设备重新启动</string>
<string name="mute_if_unlock_tip">忽略“%1$s”的错误直到设备重新解锁</string>
<string name="mute_if_restart_tip">忽略“%1$s”的错误直到设备重新启动</string>
<string name="back">返回</string>
<string name="copy_error_stack">复制异常堆栈</string>
<string name="export_to_file">导出到文件</string>
@@ -31,7 +31,7 @@
<string name="export_all">导出全部</string>
<string name="clear_all">清空全部</string>
<string name="errors_record">异常历史记录</string>
<string name="no_errors_data">暂时没有异常数据记录</string>
<string name="no_list_data">暂时没有记录</string>
<string name="confirm">确定</string>
<string name="cancel">取消</string>
<string name="more">更多</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">模块已激活</string>
<string name="after_some_settings_need_restart">部分设置修改后可能需要点击右上角重启系统才能生效。</string>
<string name="display_settings">显示设置</string>
<string name="hide_app_icon_on_desktop">在桌面隐藏模块图标</string>
<string name="hide_app_icon_on_desktop_tip">隐藏模块图标后界面可能会被关闭,将不会再在桌面显示,你可以在 EdXposed、LSPosed 中找到模块设置并打开。</string>
<string name="hide_app_icon_on_desktop_notice">注意:请务必在 LSPosed 中关闭“强制显示桌面图标”功能</string>
<string name="hide_app_icon_on_launcher">在桌面隐藏模块图标</string>
<string name="hide_app_icon_on_launcher_tip">隐藏模块图标后界面可能会被关闭,将不会再在桌面显示,你可以在 EdXposed、LSPosed 中找到模块设置并打开。</string>
<string name="hide_app_icon_on_launcher_notice">注意:请务必在 LSPosed 中关闭“强制显示桌面图标”功能</string>
<string name="about_module">此模块使用 YukiHookAPI 构建。\n了解更多 https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">模块未完全激活,请重启系统</string>
<string name="are_your_sure_restart_system">你确定要重启系统吗?</string>
@@ -78,10 +78,14 @@
<string name="enable_apps_config_template">启用应用配置模板</string>
<string name="mgr_apps_config_template">管理应用配置模板</string>
<string name="view_errors_record">查看异常历史记录</string>
<string name="view_ignored_errors_apps">查看已忽略异常的应用</string>
<string name="view_muted_errors_apps">查看已忽略异常的应用</string>
<string name="only_show_errors_in_front_tip">启用后,只有发生异常的应用处于前台(正在使用中)时才会展示错误对话框,发生异常的后台应用虽然不会展示错误对话框,但是它们都会被记录到异常历史记录中。</string>
<string name="only_show_errors_in_main_process_tip">启用后,只有应用发生的异常位于主进程(第一个 Application 实例对象)时才会展示错误对话框。</string>
<string name="apps_config_template_tip">你可以在这里对每个应用发生异常时,单独配置其在发生异常时是否展示错误对话框。</string>
<string name="view_errors_record_tip">在这里,你可以找到从系统开机以来到现在为止的全部应用异常记录,异常历史记录在重新启动后会自动清空,你可以对记录进行查看、导出和分享以及清空。</string>
<string name="view_ignored_errors_apps_tip">在这里,你可以找到已被你以不同形式手动忽略异常的应用,这个列表将会在重新启动后自动清空,你可以对这些已忽略的应用进行管理以及从忽略列表中移除它们。</string>
<string name="view_muted_errors_apps_tip">在这里,你可以找到已被你以不同形式手动忽略异常的应用,这个列表将会在重新启动后自动清空,你可以对这些已忽略的应用进行管理以及从忽略列表中移除它们。</string>
<string name="muted_errors_apps">已忽略异常的应用</string>
<string name="unmute">取消忽略</string>
<string name="unmute_all">取消全部忽略</string>
<string name="are_you_sure_unmute_all">你确定要取消全部已忽略异常的应用吗?</string>
</resources>

View File

@@ -5,13 +5,13 @@
<string name="app_info">程式情報</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="mute_if_unlock">忽略(直到設備重新開屏)</string>
<string name="mute_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="mute_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="mute_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
<string name="copy_error_stack">複製異常堆棧</string>
<string name="export_to_file">導出到副案</string>
@@ -31,7 +31,7 @@
<string name="export_all">導出全部</string>
<string name="clear_all">清空全部</string>
<string name="errors_record">異常歷史記錄</string>
<string name="no_errors_data">暫時沒有異常數據紀錄</string>
<string name="no_list_data">暫時沒有紀錄</string>
<string name="confirm">確認</string>
<string name="cancel">取消</string>
<string name="more">更多</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">模組已激活</string>
<string name="after_some_settings_need_restart">部分設置修改後可能需要點擊右上角重啟系統才能生效。</string>
<string name="display_settings">顯示設置</string>
<string name="hide_app_icon_on_desktop">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_desktop_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_desktop_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="hide_app_icon_on_launcher">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_launcher_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_launcher_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="about_module">此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">模組未完全激活,請重新開機</string>
<string name="are_your_sure_restart_system">你確定要重新開機嗎?</string>
@@ -78,10 +78,14 @@
<string name="enable_apps_config_template">啟用程式配置模板</string>
<string name="mgr_apps_config_template">管理程式配置模板</string>
<string name="view_errors_record">查看異常歷史記錄</string>
<string name="view_ignored_errors_apps">查看已忽略異常的程式</string>
<string name="view_muted_errors_apps">查看已忽略異常的程式</string>
<string name="only_show_errors_in_front_tip">啟用後,只有發生異常的程式處於前台(正在使用中)時才會展示錯誤對話框,發生異常的後台程式雖然不會展示錯誤對話框,但是它們都會被記錄到異常歷史記錄中。</string>
<string name="only_show_errors_in_main_process_tip">啟用後,只有程式發生的異常位於主進程(第一個 Application 實例對象)時才會展示錯誤對話框。</string>
<string name="apps_config_template_tip">你可以在這裡對每個程式發生異常時,單獨配置其在發生異常時是否展示錯誤對話框。</string>
<string name="view_errors_record_tip">在這裡,你可以找到從系統開機以來到現在為止的全部程式異常記錄,異常歷史記錄在重新啟動後會自動清空,你可以對記錄進行查看、導出和分享以及清空。</string>
<string name="view_ignored_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="view_muted_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="muted_errors_apps">已忽略異常的程式</string>
<string name="unmute">取消忽略</string>
<string name="unmute_all">取消全部忽略</string>
<string name="are_you_sure_unmute_all">你確認要取消全部已忽略異常的程式嗎?</string>
</resources>

View File

@@ -5,13 +5,13 @@
<string name="app_info">程式詳情</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="mute_if_unlock">忽略(直到設備重新開屏)</string>
<string name="mute_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="mute_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="mute_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
<string name="copy_error_stack">複製異常堆棧</string>
<string name="export_to_file">導出到副案</string>
@@ -31,7 +31,7 @@
<string name="export_all">導出全部</string>
<string name="clear_all">清空全部</string>
<string name="errors_record">異常歷史記錄</string>
<string name="no_errors_data">暫時沒有異常數據紀錄</string>
<string name="no_list_data">暫時沒有紀錄</string>
<string name="confirm">確認</string>
<string name="cancel">取消</string>
<string name="more">更多</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">模組已激活</string>
<string name="after_some_settings_need_restart">部分設置修改後可能需要點擊右上角重啟系統才能生效。</string>
<string name="display_settings">顯示設置</string>
<string name="hide_app_icon_on_desktop">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_desktop_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_desktop_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="hide_app_icon_on_launcher">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_launcher_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_launcher_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="about_module">此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">模組未完全激活,請重新開機</string>
<string name="are_your_sure_restart_system">你確定要重新開機嗎?</string>
@@ -78,10 +78,14 @@
<string name="enable_apps_config_template">啟用程式配置模板</string>
<string name="mgr_apps_config_template">管理程式配置模板</string>
<string name="view_errors_record">查看異常歷史記錄</string>
<string name="view_ignored_errors_apps">查看已忽略異常的程式</string>
<string name="view_muted_errors_apps">查看已忽略異常的程式</string>
<string name="only_show_errors_in_front_tip">啟用後,只有發生異常的程式處於前台(正在使用中)時才會展示錯誤對話框,發生異常的後台程式雖然不會展示錯誤對話框,但是它們都會被記錄到異常歷史記錄中。</string>
<string name="only_show_errors_in_main_process_tip">啟用後,只有程式發生的異常位於主進程(第一個 Application 實例對象)時才會展示錯誤對話框。</string>
<string name="apps_config_template_tip">你可以在這裡對每個程式發生異常時,單獨配置其在發生異常時是否展示錯誤對話框。</string>
<string name="view_errors_record_tip">在這裡,你可以找到從系統開機以來到現在為止的全部程式異常記錄,異常歷史記錄在重新啟動後會自動清空,你可以對記錄進行查看、導出和分享以及清空。</string>
<string name="view_ignored_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="view_muted_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="muted_errors_apps">已忽略異常的程式</string>
<string name="unmute">取消忽略</string>
<string name="unmute_all">取消全部忽略</string>
<string name="are_you_sure_unmute_all">你確認要取消全部已忽略異常的程式嗎?</string>
</resources>

View File

@@ -5,13 +5,13 @@
<string name="app_info">程式情報</string>
<string name="reopen_app">重新開啟</string>
<string name="error_detail">異常詳解</string>
<string name="ignore_if_unlock">忽略(直到設備重新開屏)</string>
<string name="ignore_if_restart">忽略(直到設備重新開機)</string>
<string name="mute_if_unlock">忽略(直到設備重新開屏)</string>
<string name="mute_if_restart">忽略(直到設備重新開機)</string>
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="ignore_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="ignore_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="mute_if_unlock_tip">忽略“%1$s”的錯誤直到設備重新開屏</string>
<string name="mute_if_restart_tip">忽略“%1$s”的錯誤直到設備重新開機</string>
<string name="back">回退</string>
<string name="copy_error_stack">複製異常堆棧</string>
<string name="export_to_file">導出到副案</string>
@@ -31,7 +31,7 @@
<string name="export_all">導出全部</string>
<string name="clear_all">清空全部</string>
<string name="errors_record">異常歷史記錄</string>
<string name="no_errors_data">暫時沒有異常數據紀錄</string>
<string name="no_list_data">暫時沒有紀錄</string>
<string name="confirm">確認</string>
<string name="cancel">取消</string>
<string name="more">更多</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">模組已激活</string>
<string name="after_some_settings_need_restart">部分設置修改後可能需要點擊右上角重啟系統才能生效。</string>
<string name="display_settings">顯示設置</string>
<string name="hide_app_icon_on_desktop">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_desktop_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_desktop_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="hide_app_icon_on_launcher">在桌面隱藏模組圖標</string>
<string name="hide_app_icon_on_launcher_tip">隱藏模組圖標後界面可能會被關閉,將不會再在桌面顯示,你可以在 EdXposed、LSPosed 中找到模組設置並打開。</string>
<string name="hide_app_icon_on_launcher_notice">注意:請務必在 LSPosed 中關閉“強制顯示桌面圖標”功能</string>
<string name="about_module">此模組使用 YukiHookAPI 構建。 \n了解更多 https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">模組未完全激活,請重新開機</string>
<string name="are_your_sure_restart_system">你確定要重新開機嗎?</string>
@@ -78,10 +78,14 @@
<string name="enable_apps_config_template">啟用程式配置模板</string>
<string name="mgr_apps_config_template">管理程式配置模板</string>
<string name="view_errors_record">查看異常歷史記錄</string>
<string name="view_ignored_errors_apps">查看已忽略異常的程式</string>
<string name="view_muted_errors_apps">查看已忽略異常的程式</string>
<string name="only_show_errors_in_front_tip">啟用後,只有發生異常的程式處於前台(正在使用中)時才會展示錯誤對話框,發生異常的後台程式雖然不會展示錯誤對話框,但是它們都會被記錄到異常歷史記錄中。</string>
<string name="only_show_errors_in_main_process_tip">啟用後,只有程式發生的異常位於主進程(第一個 Application 實例對象)時才會展示錯誤對話框。</string>
<string name="apps_config_template_tip">你可以在這裡對每個程式發生異常時,單獨配置其在發生異常時是否展示錯誤對話框。</string>
<string name="view_errors_record_tip">在這裡,你可以找到從系統開機以來到現在為止的全部程式異常記錄,異常歷史記錄在重新啟動後會自動清空,你可以對記錄進行查看、導出和分享以及清空。</string>
<string name="view_ignored_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="view_muted_errors_apps_tip">在這裡,你可以找到已被你以不同形式手動忽略異常的程式,這個列表將會在重新啟動後自動清空,你可以對這些已忽略的程式進行管理以及從忽略列表中移除它們。</string>
<string name="muted_errors_apps">已忽略異常的程式</string>
<string name="unmute">取消忽略</string>
<string name="unmute_all">取消全部忽略</string>
<string name="are_you_sure_unmute_all">你確認要取消全部已忽略異常的程式嗎?</string>
</resources>

View File

@@ -2,16 +2,16 @@
<string name="app_name">AppErrorsTracking</string>
<string name="xposed_desc">Added more features to app\'s crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.</string>
<string name="empty_lable" translatable="false" />
<string name="app_info">App\'s Info</string>
<string name="app_info">App Info</string>
<string name="reopen_app">Reopen App</string>
<string name="error_detail">Error Detail</string>
<string name="ignore_if_unlock">Mute until device unlocks</string>
<string name="ignore_if_restart">Mute until device restarts</string>
<string name="mute_if_unlock">Mute until device unlocks</string>
<string name="mute_if_restart">Mute until device restarts</string>
<string name="close_app">Close App</string>
<string name="aerr_title">%1$s has stopped</string>
<string name="aerr_repeated_title">%1$s keeps stopping</string>
<string name="ignore_if_unlock_tip">Ignore errors for \'%1$s\' until device is re-unlocked</string>
<string name="ignore_if_restart_tip">Ignore errors for \'%1$s\' until device reboots</string>
<string name="mute_if_unlock_tip">Muted errors for \'%1$s\' until device is re-unlocked</string>
<string name="mute_if_restart_tip">Muted errors for \'%1$s\' until device reboots</string>
<string name="back">Back</string>
<string name="copy_error_stack">Copy error stack</string>
<string name="export_to_file">Export to file</string>
@@ -30,8 +30,8 @@
<string name="output_stack_fail">Failed to export exception stack</string>
<string name="export_all">Export all</string>
<string name="clear_all">Clear all</string>
<string name="errors_record">AppErrorsRecord</string>
<string name="no_errors_data">No errors data for now</string>
<string name="errors_record">App Errors Record</string>
<string name="no_list_data">No data for now</string>
<string name="confirm">Confirm</string>
<string name="cancel">Cancel</string>
<string name="more">More</string>
@@ -54,9 +54,9 @@
<string name="module_is_activated">Module is activated</string>
<string name="after_some_settings_need_restart">After some settings are modified, you may need to click the upper right corner to restart the system to take effect.</string>
<string name="display_settings">Display settings</string>
<string name="hide_app_icon_on_desktop">Hide app icons on desktop</string>
<string name="hide_app_icon_on_desktop_tip">After hiding the app icon, the interface may be closed and will no longer be displayed on the desktop. You can find and open the module settings in EdXposed or LSPosed.</string>
<string name="hide_app_icon_on_desktop_notice">Note: Be sure to turn off the \"Force apps to show launcher icons\" feature in LSPosed</string>
<string name="hide_app_icon_on_launcher">Hide app icons on launcher</string>
<string name="hide_app_icon_on_launcher_tip">After hiding the app icon, the interface may be closed and will no longer be displayed on the launcher. You can find and open the module settings in EdXposed or LSPosed.</string>
<string name="hide_app_icon_on_launcher_notice">Note: Be sure to turn off the \"Force apps to show launcher icons\" feature in LSPosed</string>
<string name="about_module">This module is made by YukiHookAPI. \nLearn more https://github.com/fankes/YukiHookAPI</string>
<string name="module_not_fully_activated">Module not fully activated</string>
<string name="are_your_sure_restart_system">Are you sure you want to restart system?</string>
@@ -77,11 +77,15 @@
<string name="only_show_errors_in_main_process">Show error dialogs only for main process apps</string>
<string name="enable_apps_config_template">Enable apps config template</string>
<string name="mgr_apps_config_template">Management apps config template</string>
<string name="view_errors_record">View apps errors record</string>
<string name="view_ignored_errors_apps">View ignored errors apps</string>
<string name="view_errors_record">View app errors record</string>
<string name="view_muted_errors_apps">View muted errors apps</string>
<string name="only_show_errors_in_front_tip">After enabling, the error dialog will only be displayed when the abnormal apps is in the foreground (in use). Although the abnormal background application will not display the error dialog, they will be recorded in the errors history.</string>
<string name="only_show_errors_in_main_process_tip">After enabling, the error dialog will only be displayed if the exception occurred in the application is in the main process (the first Application instance object).</string>
<string name="apps_config_template_tip">Here you can individually configure whether to display an error dialog when an exception occurs for each apps.</string>
<string name="view_errors_record_tip">Here you can find all apps exception records since the system was turned on until now. The exception history will be automatically cleared after restarting. You can view, export, share and clear the records.</string>
<string name="view_ignored_errors_apps_tip">Here you can find apps that you have manually ignored exceptions in different forms. This list will be automatically cleared after restarting. You can manage these ignored applications and remove them from the ignore list.</string>
<string name="view_errors_record_tip">Here you can find all apps errors records since the system was turned on until now. The exception history will be automatically cleared after restarting. You can view, export, share and clear the records.</string>
<string name="view_muted_errors_apps_tip">Here you can find apps that you have manually muted errors in different forms. This list will be automatically cleared after restarting. You can manage these ignored applications and remove them from the mute list.</string>
<string name="muted_errors_apps">Muted Errors Apps</string>
<string name="unmute">Unmute</string>
<string name="unmute_all">Unmute all</string>
<string name="are_you_sure_unmute_all">Are you sure you want to unmute all apps?</string>
</resources>