Fixed baseline tag drift issue: - docs/00-INDEX.md now references docs/progress/00-STATUS.md as canonical baseline - docs/progress/00-STATUS.md marked as canonical baseline authority Created Priority 2.1 mapping and batch planning: - docs/progress/P2.1-METHOD-SERVICE-MAP.md: Complete method-to-service mapping - docs/progress/P2.1-BATCH-1.md: First batch (pure delegation, ~15 methods) - docs/progress/P2.1-BATCH-2.md: Second batch (validation + delegation, ~20 methods) Batch 1 focuses on read-only operations (lowest risk). Batch 2 focuses on validation + delegation (medium risk). Expected reduction: ~1,650-2,000 lines across both platforms. Verification: - Baseline authority fixed ✅ - Method mapping complete ✅ - Batch plans created ✅
7.7 KiB
7.7 KiB
Priority 2.1: Batch 1 - Pure Delegation Methods
Purpose: First refactoring batch focusing on pure delegation (lowest risk).
Owner: Development Team
Last Updated: 2025-12-23
Status: planned
Baseline: See docs/progress/00-STATUS.md
Batch 1 Scope
Goal: Refactor methods that are pure delegation (no transformation, minimal validation).
Risk Level: ⭐ Low (read-only operations, no state mutation)
Estimated Impact: ~15-20 methods across both platforms
Android Methods
Status & Health (Read-Only)
-
getNotificationStatus()- Current: Direct implementation in plugin
- Target:
NotificationStatusChecker.getComprehensiveStatus() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~45 lines → ~5 lines)
-
checkStatus()- Current: Alias for
getNotificationStatus() - Target:
NotificationStatusChecker.getComprehensiveStatus() - Change: Delegate to same service method
- Files:
DailyNotificationPlugin.kt(~55 lines → ~5 lines)
- Current: Alias for
Permission Checks (Read-Only)
-
checkPermissionStatus()- Current: Direct implementation in plugin
- Target:
PermissionManager.checkNotificationPermission() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~53 lines → ~5 lines)
-
checkPermissions()(override)- Current: Direct implementation in plugin
- Target:
PermissionManager.checkAllPermissions() - Change: Delegate to manager
- Files:
DailyNotificationPlugin.kt(~43 lines → ~5 lines)
Exact Alarm Status (Read-Only)
-
getExactAlarmStatus()- Current: Direct implementation in plugin
- Target:
DailyNotificationExactAlarmManager.getStatus() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~43 lines → ~5 lines)
-
checkExactAlarmPermission()- Current: Direct implementation in plugin
- Target:
DailyNotificationExactAlarmManager.checkPermission() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~23 lines → ~5 lines)
Channel Status (Read-Only)
isChannelEnabled()- Current: Direct implementation in plugin
- Target:
ChannelManager.isChannelEnabled(channelId) - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~77 lines → ~5 lines)
Scheduling Queries (Read-Only)
-
isAlarmScheduled()- Current: Direct implementation in plugin
- Target:
DailyNotificationScheduler.isScheduled(...) - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~24 lines → ~5 lines)
-
getNextAlarmTime()- Current: Direct implementation in plugin
- Target:
DailyNotificationScheduler.getNextAlarmTime() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.kt(~26 lines → ~5 lines)
Content Cache (Read-Only)
getContentCache()- Current: Direct database access in plugin
- Target:
DailyNotificationStorage.getContentCache(id) - Change: Replace database access with storage service call
- Files:
DailyNotificationPlugin.kt(~31 lines → ~5 lines)
iOS Methods
Permission Status (Read-Only)
getNotificationPermissionStatus()- Current: Direct
UNUserNotificationCenteraccess - Target: Create
PermissionService.getStatus()(or use existing pattern) - Change: Extract to service, delegate
- Files:
DailyNotificationPlugin.swift(~37 lines → ~5 lines)
- Current: Direct
Background Task Status (Read-Only)
getBackgroundTaskStatus()- Current: Direct
BGTaskScheduleraccess - Target:
DailyNotificationBackgroundTaskManager.getStatus() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.swift(~18 lines → ~5 lines)
- Current: Direct
Scheduling Queries (Read-Only)
getNextScheduledNotificationTime()- Current: Direct scheduler access
- Target:
DailyNotificationScheduler.getNextTime() - Change: Replace implementation with service call
- Files:
DailyNotificationPlugin.swift(~29 lines → ~5 lines)
Content & History (Read-Only)
-
getLastNotification()- Current: Direct storage access
- Target:
DailyNotificationStorage.getLastNotification() - Change: Replace storage access with service call
- Files:
DailyNotificationPlugin.swift(~38 lines → ~5 lines)
-
getScheduledReminders()- Current: Direct UserDefaults access
- Target:
DailyNotificationStorage.getReminders() - Change: Replace UserDefaults access with storage service call
- Files:
DailyNotificationPlugin.swift(~24 lines → ~5 lines)
Implementation Steps
Step 1: Verify Service Methods Exist
- Check
NotificationStatusChecker.getComprehensiveStatus()exists - Check
PermissionManager.checkNotificationPermission()exists - Check
DailyNotificationExactAlarmManager.getStatus()exists - Check
ChannelManager.isChannelEnabled()exists - Check
DailyNotificationScheduler.isScheduled()exists - Check
DailyNotificationScheduler.getNextAlarmTime()exists - Check
DailyNotificationStorage.getContentCache()exists - Check iOS service methods exist or need creation
Step 2: Create Service Instances (if needed)
- Ensure plugin has service instances as private properties
- Initialize services in
load()method - Add null checks where appropriate
Step 3: Refactor Android Methods
- Replace
getNotificationStatus()implementation - Replace
checkStatus()implementation - Replace
checkPermissionStatus()implementation - Replace
checkPermissions()implementation - Replace
getExactAlarmStatus()implementation - Replace
checkExactAlarmPermission()implementation - Replace
isChannelEnabled()implementation - Replace
isAlarmScheduled()implementation - Replace
getNextAlarmTime()implementation - Replace
getContentCache()implementation
Step 4: Refactor iOS Methods
- Replace
getNotificationPermissionStatus()implementation - Replace
getBackgroundTaskStatus()implementation - Replace
getNextScheduledNotificationTime()implementation - Replace
getLastNotification()implementation - Replace
getScheduledReminders()implementation
Step 5: Testing
- Run Android unit tests
- Run iOS unit tests
- Run integration tests
- Manual smoke test on both platforms
- Verify no behavior changes
Step 6: Verification
- Run
./ci/run.sh(must pass) - Check plugin class line count reduction
- Verify service methods are being called
- Update progress docs
Expected Outcomes
Metrics
- Android plugin: ~400-500 lines removed
- iOS plugin: ~150-200 lines removed
- Total reduction: ~550-700 lines across both platforms
- Test coverage: Maintained (no behavior changes)
Benefits
- ✅ Plugin classes become thinner
- ✅ Business logic moves to testable services
- ✅ No breaking API changes
- ✅ Lower risk (read-only operations)
Rollback Plan
If issues arise:
- Revert commits for this batch
- Service methods remain unchanged (no risk)
- Plugin methods can be restored from git history
Next Batch
After Batch 1 completes successfully:
- Batch 2: Validation + Delegation methods (input validation, then delegate)
- Batch 3: Glue methods (orchestration across multiple services)