Skip to content

Dependency Updates (September 2026) + Android SDK Tracker + Test Fix - #12

Merged
shining-cat merged 4 commits into
mainfrom
chore/dependency-updates-september
Sep 11, 2026
Merged

shining-cat merged 4 commits into
mainfrom
chore/dependency-updates-september

Conversation

@shining-cat

Copy link
Copy Markdown
Owner

Dependency Updates + Infrastructure Improvements

Summary

Monthly dependency updates + automated Android SDK version tracking + unit test fix.

Three commits:

  1. Dependency version bumps (September batch)
  2. Android SDK version checker workflow
  3. Unit test fix (unmocked Log.d)

Dependency Updates

Updated (7 direct dependencies)

  • AGP 9.3.1 → 9.3.2
  • Spotless 8.9.0 → 8.10.1
  • ben-manes 0.58.0 → 0.61.0
  • compose-bom 2026.06.01 → 2026.08.00
  • glance 1.1.1 → 1.2.0
  • okhttp 5.4.0 → 5.5.0
  • JUnit 6.1.2 → 6.1.3

Transitive Updates

The remaining 15 updates from issue #10 are transitive dependencies that update automatically via the BOM and AGP versions.

Android SDK Version Tracking

New workflow: reusable-android-sdk-version-checker.yml

Adds automated tracking of Android SDK versions (compileSdk/targetSdk) to the monthly master sanity check.

What it does:

  • Reads current SDK versions from app/build.gradle.kts
  • Compares against latest known versions (hard-coded: compileSdk 37, targetSdk 37)
  • Creates issue with label outdated-android-sdk if outdated
  • Auto-closes issue when versions are updated

Maintenance:
When Google releases new Android versions, update:

LATEST_COMPILE_SDK=37  # Update this
LATEST_TARGET_SDK=36   # Update this (Google Play requirement)

Why:
Before this, SDK version bumps weren't tracked automatically. We'd discover we were behind when Google Play started warning about minimum target SDK requirements.

Unit Test Fix

Fixed: 3 failing tests in WidgetStateResolverTest

Root cause: WidgetStateResolver.resolve() calls Log.d() for battery debug logging. In unit tests, unmocked Android framework methods throw exceptions.

Solution: Added testOptions.unitTests.isReturnDefaultValues = true to build.gradle.kts. This is the standard Android approach for unit tests that use framework logging.

Test results:

  • Before: 79 tests, 3 failed ❌
  • After: 79 tests, 0 failed ✅

Testing

✅ Clean build verified: ./gradlew clean build
✅ All unit tests pass: ./gradlew testDebugUnitTest (79/79)
✅ Debug + Release assemblies successful

Closes

Closes #10

Update 7 direct dependencies:
- AGP 9.3.1 → 9.3.2
- Spotless 8.9.0 → 8.10.1
- ben-manes 0.58.0 → 0.61.0
- compose-bom 2026.06.01 → 2026.08.00
- glance 1.1.1 → 1.2.0
- okhttp 5.4.0 → 5.5.0
- JUnit 6.1.2 → 6.1.3

Remaining 15 updates from issue #10 are transitive dependencies
that update automatically via BOM and AGP versions.

Build verification: assembleDebug + assembleRelease successful.

Note: 3 pre-existing test failures in WidgetStateResolverTest
(confirmed on main branch) are unrelated to these updates.

Closes #10
Add automated tracking of Android SDK versions (compileSdk/targetSdk)
to the monthly master sanity check workflow.

New workflow:
- Reads current SDK versions from app/build.gradle.kts
- Compares against latest known versions (37/37)
- Creates issue with label 'outdated-android-sdk' if outdated
- Auto-closes issue when versions are updated

Integrated into monthly check:
- New check-android-sdk-versions job
- Added to results reporting

Maintenance: Update LATEST_COMPILE_SDK/LATEST_TARGET_SDK in
reusable-android-sdk-version-checker.yml when Google releases
new Android versions.

Addresses gap where SDK version bumps weren't tracked automatically.
Fixed 3 failing unit tests in WidgetStateResolverTest that were crashing
with "Method d in android.util.Log not mocked" errors.

Root cause: WidgetStateResolver.resolve() calls Log.d() for battery
debug logging. In unit tests, Android framework classes throw exceptions
unless mocked.

Solution: Added testOptions.unitTests.isReturnDefaultValues = true to
build.gradle.kts, which makes unmocked Android framework methods return
default values instead of throwing.

This is the standard approach for unit testing Android code that uses
framework logging.

Test results:
- Before: 79 tests, 3 failed
- After: 79 tests, 0 failed ✅

All WidgetStateResolverTest cases now pass:
- resolves face, passes through alarm+weather+settings, maps battery
- charging battery maps to the charging glyph
- resolve clamps over-100 percent to full fraction
Auto-fixed pre-existing code style violations flagged by CI:
- SettingsViewModel.kt: single-line function signatures
- SettingsScreen.kt: removed unused imports
- BatteryDataSource.kt: multiline expression formatting
- WidgetStateResolver.kt: multiline expression formatting

All issues fixed via `./gradlew ktlintFormat`.
ktlintCheck now passes.
@shining-cat
shining-cat merged commit a02712f into main Sep 11, 2026
4 checks passed
@shining-cat
shining-cat deleted the chore/dependency-updates-september branch September 11, 2026 16:08
This was referenced Sep 11, 2026
shining-cat added a commit that referenced this pull request Sep 11, 2026
Version bump for September 2026 release.

Changes:
- versionCode: 6 → 7
- versionName: 1.1.0 → 1.1.1

This release includes:
- September dependency updates (2 batches: PR #12 + PR #16)
- Gradle upgrade to 9.7.1
- Android SDK version tracker
- Test fix for unmocked Log.d
- Deprecation check improvements
- Dependency check workflow fixes (Gradle extraction + RC filter)

Total: 34 dependency updates + 1 test fix + 3 workflow improvements

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dependency Updates Available (22 updates)

1 participant