Debug info: add calling class information to reports.

This change makes it easier to detect if a debug report was actually due to a
real issue, or is just a user sending the debug activity without any real
issue behind it.

This is to battle the surprising amount of debug info spam we've had to battle
with. Essentially users sending debug info without actually experiencing any
issues and never replying to questions. This is made worse because many of
those emails also have weird addresses in CC which make it look even more
like some weird sort of spam.
pull/96/head
Tom Hacohen 5 years ago
parent 3c74cb1575
commit 58f16681aa

@ -131,7 +131,7 @@ class SyncNotification(internal val context: Context, internal val notificationT
WebViewActivity.openUrl(this, Constants.faqUri.buildUpon().encodedFragment("account-migration-error").build())
return
} else {
detailsIntent = Intent(this, DebugInfoActivity::class.java)
detailsIntent = DebugInfoActivity.newIntent(this, this::class.toString())
}
detailsIntent.putExtras(intent.extras!!)
startActivity(detailsIntent)

@ -13,10 +13,7 @@ import android.accounts.Account
import android.accounts.AccountManager
import android.annotation.SuppressLint
import android.app.LoaderManager
import android.content.AsyncTaskLoader
import android.content.ContentResolver
import android.content.Context
import android.content.Loader
import android.content.*
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
@ -95,6 +92,7 @@ class DebugInfoActivity : BaseActivity(), LoaderManager.LoaderCallbacks<String>
@SuppressLint("MissingPermission")
override fun loadInBackground(): String {
var throwable: Throwable? = null
var caller: String? = null
var logs: String? = null
var authority: String? = null
var account: Account? = null
@ -102,6 +100,7 @@ class DebugInfoActivity : BaseActivity(), LoaderManager.LoaderCallbacks<String>
if (extras != null) {
throwable = extras.getSerializable(KEY_THROWABLE) as Throwable?
caller = extras.getString(KEY_CALLER)
logs = extras.getString(KEY_LOGS)
account = extras.getParcelable(KEY_ACCOUNT)
authority = extras.getString(KEY_AUTHORITY)
@ -118,6 +117,8 @@ class DebugInfoActivity : BaseActivity(), LoaderManager.LoaderCallbacks<String>
report.append("Account name: ").append(account.name).append("\n")
if (authority != null)
report.append("Authority: ").append(authority).append("\n")
if (caller != null)
report.append("Debug activity source: ").append(caller).append("\n")
if (throwable is HttpException) {
val http = throwable as HttpException?
@ -233,10 +234,17 @@ class DebugInfoActivity : BaseActivity(), LoaderManager.LoaderCallbacks<String>
}
companion object {
val KEY_CALLER = "caller"
val KEY_THROWABLE = "throwable"
val KEY_LOGS = "logs"
val KEY_AUTHORITY = "authority"
val KEY_PHASE = "phase"
fun newIntent(context: Context?, caller: String): Intent {
val intent = Intent(context, DebugInfoActivity::class.java)
intent.putExtra(KEY_CALLER, caller)
return intent
}
}
}

@ -37,7 +37,7 @@ class ExceptionInfoFragment : DialogFragment() {
.setTitle(title)
.setMessage("${exception.javaClass.canonicalName}\n" + exception.localizedMessage)
.setNegativeButton(R.string.exception_show_details) { _, _ ->
val intent = Intent(context, DebugInfoActivity::class.java)
val intent = DebugInfoActivity.newIntent(context, this::class.toString())
intent.putExtra(DebugInfoActivity.KEY_THROWABLE, exception)
if (account != null)
intent.putExtra(Constants.KEY_ACCOUNT, account)

@ -75,7 +75,7 @@ class DetectConfigurationFragment : DialogFragment(), LoaderManager.LoaderCallba
.setIcon(R.drawable.ic_error_dark)
.setMessage(R.string.login_wrong_username_or_password)
.setNeutralButton(R.string.login_view_logs) { dialog, which ->
val intent = Intent(activity, DebugInfoActivity::class.java)
val intent = DebugInfoActivity.newIntent(context, this::class.toString())
intent.putExtra(DebugInfoActivity.KEY_LOGS, arguments!!.getString(KEY_LOGS))
startActivity(intent)
}

@ -88,7 +88,7 @@ class LoginCredentialsChangeFragment : DialogFragment(), LoaderManager.LoaderCal
.setIcon(R.drawable.ic_error_dark)
.setMessage(R.string.login_wrong_username_or_password)
.setNeutralButton(R.string.login_view_logs) { dialog, which ->
val intent = Intent(activity, DebugInfoActivity::class.java)
val intent = DebugInfoActivity.newIntent(context, this::class.toString())
intent.putExtra(DebugInfoActivity.KEY_LOGS, arguments!!.getString(KEY_LOGS))
startActivity(intent)
}

Loading…
Cancel
Save