Fix Play "Broken Functionality": pin minSdk 30; refresh docs after native migration - #20
Conversation
The widget's WidgetTheme parent android:Theme.DeviceDefault.DayNight requires API 29, but minSdk was 24, so on Android 7-9 the launcher could not inflate the widget — which Google Play flagged as a Broken Functionality violation. Pin minSdk to 30 (the hard floor is 29; API 30 additionally provides LocationListener default callbacks, letting us drop the onStatusChanged/onProviderEnabled/ onProviderDisabled stubs and the @Suppress in LocationProvider). Document the constraint in CLAUDE.md (Gotcha #9) so minSdk isn't lowered again. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The plugin-free migration (home_widget→WidgetStore, geolocator→native LocationProvider) left the documentation describing the old plugin-based design. Rewrite docs/ai/widget.md around the native AppWidgetProvider + WidgetStore implementation; correct the dependency lists in architecture.md/README/SECURITY (only http + intl remain); update MATERIAL_YOU_COLORS data flow to the native refresh path; remove the dependabot home_widget ignore rule; fix dangling links to the already-removed NATIVE_SVG_RENDERING.md/HOME_WIDGET_VERSION_ISSUE.md; and delete the obsolete EXPEDITED_WORKMANAGER_PLAN.md (that migration is now done). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Worried about impact? Review this PR in Change Stack to explore blast radius before you approve or request changes. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (13)
💤 Files with no reviewable changes (2)
📝 WalkthroughWalkthroughThis PR documents the completion of a native-first architectural migration, removing Flutter plugin dependencies ( ChangesNative-First Architecture Migration
🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Why
Google Play rejected the latest update under the Broken Functionality policy (Jun 5). Root
cause: the home-screen widget's
WidgetThemeinheritsandroid:Theme.DeviceDefault.DayNight,which requires API 29, but
minSdkwas 24. On Android 7.0–9.0 (API 24–28) thelauncher can't resolve that theme, so both widget layouts (
meteogram_widget.xml,meteogram_widget_weekly.xml) fail to inflate → blank / "can't load widget". Android Lintconfirmed it as the only
NewApierror in the project; the app itself launches fine, so thebroken surface is the widget on old Android specifically.
The fix
Pin
minSdk = 30(android/app/build.gradle.kts).Theme.DeviceDefault.DayNightneeds); 30 was chosen because it alsogives
LocationListenerdefault callbacks.onStatusChanged/onProviderEnabled/onProviderDisabledstubs, the
@Suppress("DEPRECATION"), and an unused import inLocationProvider.kt.minSdkisn't lowered again.keep their last compatible release; nothing is uninstalled.
Verification
./gradlew :app:lintDebug→ 0NewApierrors (down from 1; the remaining lint error is apre-existing unused-
app_nametranslation note).make analyze→ no issues;make test→ Dart + Kotlin pass.dumpsysconfirmsminSdk=30.NewApisignalis authoritative.
Docs cleanup (second commit)
The earlier plugin-free migration (
home_widget→WidgetStore,geolocator→nativeLocationProvider) left the docs describing the old plugin design. This rewritesdocs/ai/widget.md, corrects dependency lists (onlyhttp+intlremain), updatesMATERIAL_YOU_COLORS.md, removes the dependabothome_widgetpin, fixes dangling links, anddeletes the now-completed
EXPEDITED_WORKMANAGER_PLAN.md.After merge
Tag
v1.2.2to trigger the release workflow and resubmit.🤖 Generated with Claude Code
Summary by CodeRabbit
Release Notes