All checks were successful
CI / ci (push) Successful in 9m16s
Adds crash reporting to Agendula by drawing the kit's new core-crash module (first Android-library module in floret-kit), and finishes the core-time wiring that a Phase 0 staging slip left uncommitted on main. core-crash (NEW capability — Agendula had none): - CrashReporter.install() in AgendulaApp captures uncaught exceptions on-device (allowlist-only report, chains to the platform handler, uploads nothing). - MainActivity routes to a standalone CrashReportActivity on a startup crash-loop, and surfaces a single captured crash as a dialog on next launch; markHealthy on resume. App label + issue-tracker URL flow in via CrashConfig. - Thin app-side CrashReportActivity uses AgendulaTheme; the reusable machinery (reporter, dialog, submit, config) lives in the kit. Submodule re-pinned to the core-crash kit commit. Completes Phase 0 (was only partially committed inec7b696): - Repoint DayWindow + Instant formatting imports to de.jeanlucmakiola.floret.time (the app copies were deleted inec7b696but the imports/includeBuild/dependency were never staged, leaving main non-building). - settings.gradle.kts includeBuild("floret-kit"); app depends on core-time. Also fixes the CI checkout YAML: the submodules block was mis-indented under 'uses:' (invalid step mapping) — dedented to a proper sibling. Clean composite build + unit tests + lintDebug + debug assemble green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
1.8 KiB
Kotlin
52 lines
1.8 KiB
Kotlin
package de.jeanlucmakiola.agendula
|
|
|
|
import android.app.Application
|
|
import dagger.hilt.EntryPoint
|
|
import dagger.hilt.InstallIn
|
|
import dagger.hilt.android.EntryPointAccessors
|
|
import dagger.hilt.android.HiltAndroidApp
|
|
import dagger.hilt.components.SingletonComponent
|
|
import de.jeanlucmakiola.agendula.data.reminders.ReminderScheduler
|
|
import de.jeanlucmakiola.floret.crash.CrashConfig
|
|
import de.jeanlucmakiola.floret.crash.CrashReporter
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.SupervisorJob
|
|
import kotlinx.coroutines.launch
|
|
|
|
/**
|
|
* Application entry point. Registered as android:name=".AgendulaApp". Besides
|
|
* Hilt init, it kicks off a reminder re-sync on launch (independent of any UI),
|
|
* so alarms reflect tasks synced while the app was closed.
|
|
*/
|
|
@HiltAndroidApp
|
|
class AgendulaApp : Application() {
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
// Install first thing so startup crashes are captured too (privacy-
|
|
// respecting, on-device; the user submits the report by hand).
|
|
CrashReporter.install(
|
|
this,
|
|
CrashConfig(
|
|
appLabel = getString(R.string.app_name),
|
|
newIssueUrl = getString(R.string.report_issue_url),
|
|
chooseIssueUrl = getString(R.string.report_issue_url),
|
|
issueTitle = getString(R.string.crash_report_issue_title),
|
|
),
|
|
)
|
|
val scheduler = EntryPointAccessors
|
|
.fromApplication(this, ReminderEntryPoint::class.java)
|
|
.reminderScheduler()
|
|
CoroutineScope(SupervisorJob() + Dispatchers.Default).launch {
|
|
runCatching { scheduler.sync() }
|
|
}
|
|
}
|
|
|
|
@EntryPoint
|
|
@InstallIn(SingletonComponent::class)
|
|
interface ReminderEntryPoint {
|
|
fun reminderScheduler(): ReminderScheduler
|
|
}
|
|
}
|