Twidere-App-Android-Twitter.../twidere/src/fdroid/kotlin/org/mariotaku/twidere/util/ACRAAnalyzer.kt

110 lines
4.6 KiB
Kotlin

/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.util
import android.accounts.Account
import android.accounts.AccountManager
import android.accounts.OnAccountsUpdateListener
import android.app.Activity
import android.app.Application
import android.content.SharedPreferences
import android.os.Build
import org.acra.ACRA
import org.acra.config.CoreConfigurationBuilder
import org.acra.config.DialogConfigurationBuilder
import org.acra.config.MailSenderConfigurationBuilder
import org.acra.data.StringFormat
import org.mariotaku.kpreferences.get
import org.mariotaku.ktextension.addOnAccountsUpdatedListenerSafe
import org.mariotaku.twidere.BuildConfig
import org.mariotaku.twidere.R
import org.mariotaku.twidere.TwidereConstants.ACCOUNT_TYPE
import org.mariotaku.twidere.TwidereConstants.TWIDERE_PROJECT_EMAIL
import org.mariotaku.twidere.activity.CrashReportDialogActivity
import org.mariotaku.twidere.constant.themeBackgroundAlphaKey
import org.mariotaku.twidere.constant.themeBackgroundOptionKey
import org.mariotaku.twidere.constant.themeKey
/**
* Created by mariotaku on 2017/5/8.
*/
class ACRAAnalyzer : Analyzer() {
override fun log(priority: Int, tag: String, msg: String) {
}
override fun log(event: Event) {
}
override fun logException(throwable: Throwable) {
}
override fun init(application: Application) {
val builder = CoreConfigurationBuilder(application)
builder.setBuildConfigClass(BuildConfig::class.java).setReportFormat(StringFormat.JSON)
builder.getPluginConfigurationBuilder(DialogConfigurationBuilder::class.java)
.setResText(R.string.message_app_crashed)
.setResTheme(R.style.Theme_Twidere_NoDisplay_DayNight)
.setReportDialogClass(CrashReportDialogActivity::class.java)
.setEnabled(true)
builder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder::class.java)
.setMailTo(TWIDERE_PROJECT_EMAIL)
.setEnabled(true)
ACRA.init(application, builder)
val reporter = ACRA.getErrorReporter()
reporter.putCustomData("debug", BuildConfig.DEBUG.toString())
reporter.putCustomData("build.brand", Build.BRAND)
reporter.putCustomData("build.device", Build.DEVICE)
reporter.putCustomData("build.display", Build.DISPLAY)
reporter.putCustomData("build.hardware", Build.HARDWARE)
reporter.putCustomData("build.manufacturer", Build.MANUFACTURER)
reporter.putCustomData("build.model", Build.MODEL)
reporter.putCustomData("build.product", Build.PRODUCT)
val am = AccountManager.get(application)
try {
am.addOnAccountsUpdatedListenerSafe(OnAccountsUpdateListener { accounts ->
reporter.putCustomData("twidere.accounts", accounts.filter { it.type == ACCOUNT_TYPE }
.joinToString(transform = Account::name))
}, updateImmediately = true)
} catch (e: SecurityException) {
// Permission managers (like some Xposed plugins) may block Twidere from getting accounts
}
}
override fun preferencesChanged(preferences: SharedPreferences) {
val reporter = ACRA.getErrorReporter()
reporter.putCustomData("preferences.theme", preferences[themeKey])
reporter.putCustomData("preferences.theme_bg_option", preferences[themeBackgroundOptionKey])
reporter.putCustomData("preferences.theme_bg_alpha", preferences[themeBackgroundAlphaKey].toString())
}
override fun activityResumed(activity: Activity) {
val reporter = ACRA.getErrorReporter()
val intent = activity.intent ?: run {
reporter.putCustomData("last_activity", "null intent")
return
}
reporter.putCustomData("last_activity", "${intent.action}: ${intent.data} (${activity.javaClass.simpleName})")
}
}