Skip to content

Commit e8acb11

Browse files
committed
refactor: address review feedback for CrashReporter extraction
1 parent 1001569 commit e8acb11

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+84
-67
lines changed

AnkiDroid/src/androidTest/java/com/ichi2/anki/tests/ACRATest.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ import androidx.core.content.edit
2222
import androidx.test.annotation.UiThreadTest
2323
import androidx.test.ext.junit.runners.AndroidJUnit4
2424
import com.ichi2.anki.AnkiDroidApp
25-
import com.ichi2.anki.CrashReportService
26-
import com.ichi2.anki.CrashReporter.Companion.FEEDBACK_REPORT_ALWAYS
27-
import com.ichi2.anki.CrashReporter.Companion.FEEDBACK_REPORT_ASK
28-
import com.ichi2.anki.CrashReporter.Companion.FEEDBACK_REPORT_KEY
29-
import com.ichi2.anki.CrashReporter.Companion.FEEDBACK_REPORT_NEVER
3025
import com.ichi2.anki.R
26+
import com.ichi2.anki.acraCoreConfigBuilder
3127
import com.ichi2.anki.analytics.UsageAnalytics
32-
import com.ichi2.anki.getAcraCoreConfigBuilder
28+
import com.ichi2.anki.common.crash.CrashReportService
29+
import com.ichi2.anki.common.crash.CrashReporter.Companion.FEEDBACK_REPORT_ALWAYS
30+
import com.ichi2.anki.common.crash.CrashReporter.Companion.FEEDBACK_REPORT_ASK
31+
import com.ichi2.anki.common.crash.CrashReporter.Companion.FEEDBACK_REPORT_KEY
32+
import com.ichi2.anki.common.crash.CrashReporter.Companion.FEEDBACK_REPORT_NEVER
3333
import com.ichi2.anki.logging.ProductionCrashReportingTree
3434
import com.ichi2.anki.preferences.sharedPrefs
3535
import com.ichi2.anki.servicelayer.ThrowableFilterService
@@ -78,7 +78,7 @@ class ACRATest : InstrumentedTest() {
7878
setDebugACRAConfig(sharedPrefs)
7979
assertArrayEquals(
8080
"Debug logcat arguments not set correctly",
81-
getAcraCoreConfigBuilder()
81+
CrashReportService.acraCoreConfigBuilder
8282
.build()
8383
.logcatArguments
8484
.toTypedArray(),
@@ -158,12 +158,12 @@ class ACRATest : InstrumentedTest() {
158158
val crashData =
159159
CrashReportDataFactory(
160160
testContext,
161-
getAcraCoreConfigBuilder().build(),
161+
CrashReportService.acraCoreConfigBuilder.build(),
162162
).createCrashData(ReportBuilder().exception(crash))
163163
assertTrue(
164164
LimitingReportAdministrator().shouldSendReport(
165165
testContext,
166-
getAcraCoreConfigBuilder().build(),
166+
CrashReportService.acraCoreConfigBuilder.build(),
167167
crashData,
168168
),
169169
)
@@ -172,7 +172,7 @@ class ACRATest : InstrumentedTest() {
172172
assertFalse(
173173
LimitingReportAdministrator().shouldSendReport(
174174
testContext,
175-
getAcraCoreConfigBuilder().build(),
175+
CrashReportService.acraCoreConfigBuilder.build(),
176176
crashData,
177177
),
178178
)
@@ -184,7 +184,7 @@ class ACRATest : InstrumentedTest() {
184184
assertTrue(
185185
LimitingReportAdministrator().shouldSendReport(
186186
testContext,
187-
getAcraCoreConfigBuilder().build(),
187+
CrashReportService.acraCoreConfigBuilder.build(),
188188
crashData,
189189
),
190190
)
@@ -291,7 +291,7 @@ class ACRATest : InstrumentedTest() {
291291
message: String,
292292
isEnabled: Boolean,
293293
) {
294-
val config = getAcraCoreConfigBuilder().build()
294+
val config = CrashReportService.acraCoreConfigBuilder.build()
295295
for (configuration in config.pluginConfigurations) {
296296
// Make sure the dialog is set to pop up
297297
if (configuration.javaClass.toString().contains("Dialog")) {
@@ -302,7 +302,7 @@ class ACRATest : InstrumentedTest() {
302302

303303
@Throws(ACRAConfigurationException::class)
304304
private fun assertToastIsEnabled() {
305-
val config = getAcraCoreConfigBuilder().build()
305+
val config = CrashReportService.acraCoreConfigBuilder.build()
306306
for (configuration in config.pluginConfigurations) {
307307
if (configuration.javaClass.toString().contains("Toast")) {
308308
assertThat("Toast should be enabled", configuration.enabled(), equalTo(true))
@@ -314,7 +314,7 @@ class ACRATest : InstrumentedTest() {
314314
private fun assertToastMessage(
315315
@StringRes res: Int,
316316
) {
317-
val config = getAcraCoreConfigBuilder().build()
317+
val config = CrashReportService.acraCoreConfigBuilder.build()
318318
for (configuration in config.pluginConfigurations) {
319319
if (configuration.javaClass.toString().contains("Toast")) {
320320
assertEquals(

AnkiDroid/src/main/java/com/ichi2/anki/AcraCrashReporter.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import androidx.webkit.WebViewCompat
2727
import com.ichi2.anki.analytics.AnkiDroidCrashReportDialog
2828
import com.ichi2.anki.analytics.UsageAnalytics
2929
import com.ichi2.anki.analytics.UsageAnalytics.sendAnalyticsException
30+
import com.ichi2.anki.common.crash.CrashReportService
31+
import com.ichi2.anki.common.crash.CrashReporter
3032
import com.ichi2.anki.common.time.TimeManager
3133
import com.ichi2.anki.exception.ManuallyReportedException
3234
import com.ichi2.anki.exception.UserSubmittedException
@@ -45,11 +47,11 @@ import org.acra.sender.HttpSender
4547
import timber.log.Timber
4648

4749
private object AcraCrashReporter : CrashReporter {
48-
// ACRA constants used for stored preferences
49-
const val FEEDBACK_REPORT_KEY = "reportErrorMode"
50-
const val FEEDBACK_REPORT_ASK = "2"
51-
const val FEEDBACK_REPORT_NEVER = "1"
52-
const val FEEDBACK_REPORT_ALWAYS = "0"
50+
// ACRA constants — reference the interface companion
51+
val FEEDBACK_REPORT_KEY = CrashReporter.FEEDBACK_REPORT_KEY
52+
val FEEDBACK_REPORT_ASK = CrashReporter.FEEDBACK_REPORT_ASK
53+
val FEEDBACK_REPORT_NEVER = CrashReporter.FEEDBACK_REPORT_NEVER
54+
val FEEDBACK_REPORT_ALWAYS = CrashReporter.FEEDBACK_REPORT_ALWAYS
5355

5456
/** Our ACRA configurations, initialized during Application.onCreate() */
5557
@JvmStatic
@@ -410,19 +412,20 @@ private object AcraCrashReporter : CrashReporter {
410412
}
411413

412414
/**
413-
* Initializes ACRA crash reporting and returns the reporter
414-
* as a [CrashReporter] for use with [CrashReportService].
415+
* Initializes ACRA crash reporting and wires it up as the
416+
* global [CrashReportService] reporter.
415417
*/
416418
context(application: Application)
417-
fun initializeAcraCrashReporter(): CrashReporter {
419+
fun initializeAcraCrashReporter() {
418420
AcraCrashReporter.initialize(application)
419-
return AcraCrashReporter
421+
CrashReportService.setReporter(AcraCrashReporter)
420422
}
421423

422424
fun isAcraSenderProcess(): Boolean = AcraCrashReporter.isProperServiceProcess()
423425

424426
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
425-
fun getAcraCoreConfigBuilder(): CoreConfigurationBuilder = AcraCrashReporter.acraCoreConfigBuilder
427+
val CrashReportService.acraCoreConfigBuilder: CoreConfigurationBuilder
428+
get() = AcraCrashReporter.acraCoreConfigBuilder
426429

427430
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
428431
fun setDebugACRAConfig(sharedPrefs: SharedPreferences) = AcraCrashReporter.setDebugACRAConfig(sharedPrefs)

AnkiDroid/src/main/java/com/ichi2/anki/AnkiActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import com.ichi2.anki.android.input.ShortcutGroup
6161
import com.ichi2.anki.android.input.ShortcutGroupProvider
6262
import com.ichi2.anki.android.input.shortcut
6363
import com.ichi2.anki.common.annotations.LegacyNotifications
64+
import com.ichi2.anki.common.crash.CrashReportService
6465
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
6566
import com.ichi2.anki.compat.CompatHelper
6667
import com.ichi2.anki.compat.CompatHelper.Companion.registerReceiverCompat

AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@ import androidx.fragment.app.FragmentActivity
3535
import androidx.lifecycle.MutableLiveData
3636
import anki.collection.OpChanges
3737
import com.ichi2.anki.AnkiDroidApp.Companion.sharedPreferencesTestingOverride
38-
import com.ichi2.anki.CrashReportService.sendExceptionReport
3938
import com.ichi2.anki.analytics.UsageAnalytics
4039
import com.ichi2.anki.browser.SharedPreferencesLastDeckIdRepository
4140
import com.ichi2.anki.common.annotations.LegacyNotifications
4241
import com.ichi2.anki.common.annotations.NeedsTest
42+
import com.ichi2.anki.common.crash.CrashReportService.sendExceptionReport
4343
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
4444
import com.ichi2.anki.compat.CompatHelper
4545
import com.ichi2.anki.contextmenu.AnkiCardContextMenu
@@ -134,8 +134,7 @@ open class AnkiDroidApp :
134134
// Ensures any change is propagated to widgets
135135
ChangeManager.subscribe(this)
136136

137-
val crashReporter = initializeAcraCrashReporter()
138-
CrashReportService.setReporter(crashReporter)
137+
initializeAcraCrashReporter()
139138
val logType = LogType.value
140139
when (logType) {
141140
LogType.DEBUG -> Timber.plant(DebugTree())

AnkiDroid/src/main/java/com/ichi2/anki/CoroutineHelpers.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import com.ichi2.anki.CrashReportData.HelpAction
4141
import com.ichi2.anki.CrashReportData.HelpAction.AnkiBackendLink
4242
import com.ichi2.anki.CrashReportData.HelpAction.OpenDeckOptions
4343
import com.ichi2.anki.common.annotations.UseContextParameter
44+
import com.ichi2.anki.common.crash.CrashReportService
4445
import com.ichi2.anki.dialogs.DatabaseErrorDialog
4546
import com.ichi2.anki.dialogs.DatabaseErrorDialog.DatabaseErrorDialogType
4647
import com.ichi2.anki.exception.StorageAccessException

AnkiDroid/src/main/java/com/ichi2/anki/DayRolloverHandler.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import androidx.core.content.ContextCompat.RECEIVER_EXPORTED
3535
import anki.collection.OpChanges
3636
import anki.collection.opChanges
3737
import com.ichi2.anki.CollectionManager.withOpenColOrNull
38+
import com.ichi2.anki.common.crash.CrashReportService
3839
import com.ichi2.anki.exception.ManuallyReportedException
3940
import com.ichi2.anki.libanki.EpochSeconds
4041
import com.ichi2.anki.libanki.sched.Scheduler

AnkiDroid/src/main/java/com/ichi2/anki/DeckPicker.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ import com.ichi2.anki.android.back.exitViaDoubleTapBackCallback
9494
import com.ichi2.anki.android.input.ShortcutGroup
9595
import com.ichi2.anki.android.input.shortcut
9696
import com.ichi2.anki.common.annotations.NeedsTest
97+
import com.ichi2.anki.common.crash.CrashReportService
9798
import com.ichi2.anki.common.time.TimeManager
9899
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
99100
import com.ichi2.anki.compat.CompatHelper.Companion.getSerializableCompat

AnkiDroid/src/main/java/com/ichi2/anki/InitialActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import android.os.Parcelable
2727
import androidx.annotation.CheckResult
2828
import androidx.annotation.RequiresApi
2929
import androidx.core.content.edit
30+
import com.ichi2.anki.common.crash.CrashReportService
3031
import com.ichi2.anki.compat.CompatHelper.Companion.sdkVersion
3132
import com.ichi2.anki.dialogs.DatabaseErrorDialog
3233
import com.ichi2.anki.exception.StorageAccessException

AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import android.graphics.BitmapFactory
2222
import android.net.Uri
2323
import androidx.annotation.CheckResult
2424
import com.ichi2.anki.common.annotations.NeedsTest
25+
import com.ichi2.anki.common.crash.CrashReportService
2526
import com.ichi2.anki.compat.CompatHelper
2627
import com.ichi2.anki.libanki.exception.EmptyMediaException
2728
import com.ichi2.anki.multimediacard.fields.ImageField

AnkiDroid/src/main/java/com/ichi2/anki/NoteEditorFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ import com.ichi2.anki.android.input.ShortcutGroup
9090
import com.ichi2.anki.android.input.ShortcutGroupProvider
9191
import com.ichi2.anki.android.input.shortcut
9292
import com.ichi2.anki.common.annotations.NeedsTest
93+
import com.ichi2.anki.common.crash.CrashReportService
9394
import com.ichi2.anki.common.utils.annotation.KotlinCleanup
9495
import com.ichi2.anki.common.utils.ext.ifZero
9596
import com.ichi2.anki.compat.CompatHelper.Companion.getSerializableCompat

0 commit comments

Comments
 (0)