fix(android): resolve prefetch scheduling and permission callback issues
- Add null safety check to permission callback to prevent NPE - Fix fetch time calculation bug that caused double subtraction - scheduleFetch() now accepts pre-calculated fetchTime directly - Calculate scheduledTime back from fetchTime for worker data - Add structured logging (DN|FETCH_SCHEDULING) for better traceability The permission callback was crashing with NullPointerException when Capacitor passed a null call parameter. The prefetch scheduling had a logic error where fetchTime was calculated twice - once in the plugin and once in the fetcher, causing 10-minute delays instead of 5-minute. Both issues are now fixed and verified working: - Permission callback handles null gracefully - Prefetch schedules correctly 5 minutes before notification - WorkManager job fires at the correct time - All structured logs appear in logcat Closes prefetch scheduling investigation.
This commit is contained in:
73
scripts/diagnose-prefetch.sh
Executable file
73
scripts/diagnose-prefetch.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
# Diagnostic script to determine why prefetch logs aren't appearing in APK
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== Prefetch Scheduling Diagnostic ==="
|
||||
echo ""
|
||||
|
||||
# 1. Check source files
|
||||
echo "1. Checking source files..."
|
||||
echo ""
|
||||
SOURCE_FILE="android/plugin/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java"
|
||||
NODEMODS_FILE="test-apps/daily-notification-test/node_modules/@timesafari/daily-notification-plugin/android/plugin/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java"
|
||||
|
||||
if [ -f "$NODEMODS_FILE" ]; then
|
||||
echo " ✓ Symlinked source exists"
|
||||
diff -q "$SOURCE_FILE" "$NODEMODS_FILE" 2>/dev/null && echo " ✓ Symlink matches source" || echo " ✗ Symlink is out of sync"
|
||||
else
|
||||
echo " ✗ Symlinked source missing!"
|
||||
fi
|
||||
|
||||
# 2. Check which log strings exist in source
|
||||
echo ""
|
||||
echo "2. Checking for expected log strings in source..."
|
||||
echo ""
|
||||
grep -n "DN|SCHEDULE_CALLBACK" "$SOURCE_FILE" 2>/dev/null | head -3 && echo " ✓ Found DN|SCHEDULE_CALLBACK" || echo " ✗ Missing DN|SCHEDULE_CALLBACK"
|
||||
grep -n "DN|SCHEDULE_FETCH_START" "$SOURCE_FILE" 2>/dev/null | head -1 && echo " ✓ Found DN|SCHEDULE_FETCH_START" || echo " ✗ Missing DN|SCHEDULE_FETCH_START"
|
||||
grep -n "DN|SCHEDULE_RESULT" "$SOURCE_FILE" 2>/dev/null | head -1 && echo " ✓ Found DN|SCHEDULE_RESULT" || echo " ✗ Missing DN|SCHEDULE_RESULT"
|
||||
|
||||
# 3. Check what's actually compiled in the APK
|
||||
echo ""
|
||||
echo "3. Checking compiled APK..."
|
||||
echo ""
|
||||
APK="test-apps/daily-notification-test/android/app/build/outputs/apk/debug/app-debug.apk"
|
||||
|
||||
if [ -f "$APK" ]; then
|
||||
echo " Checking for log strings in classes.dex..."
|
||||
unzip -p "$APK" classes.dex 2>/dev/null | strings | grep -i "DN|SCHEDULE" | sort -u
|
||||
echo ""
|
||||
HAS_CALLBACK=$(unzip -p "$APK" classes.dex 2>/dev/null | strings | grep -c "DN|SCHEDULE_CALLBACK" || echo "0")
|
||||
HAS_FETCH=$(unzip -p "$APK" classes.dex 2>/dev/null | strings | grep -c "DN|SCHEDULE_FETCH" || echo "0")
|
||||
HAS_RESULT=$(unzip -p "$APK" classes.dex 2>/dev/null | strings | grep -c "DN|SCHEDULE_RESULT" || echo "0")
|
||||
|
||||
[ "$HAS_CALLBACK" -gt "0" ] && echo " ✓ APK contains DN|SCHEDULE_CALLBACK" || echo " ✗ APK missing DN|SCHEDULE_CALLBACK"
|
||||
[ "$HAS_FETCH" -gt "0" ] && echo " ✓ APK contains DN|SCHEDULE_FETCH_*" || echo " ✗ APK missing DN|SCHEDULE_FETCH_*"
|
||||
[ "$HAS_RESULT" -gt "0" ] && echo " ✓ APK contains DN|SCHEDULE_RESULT" || echo " ✗ APK missing DN|SCHEDULE_RESULT"
|
||||
else
|
||||
echo " ✗ APK not found at $APK"
|
||||
echo " Run: cd test-apps/daily-notification-test/android && ./gradlew assembleDebug"
|
||||
fi
|
||||
|
||||
# 4. Check capacitor.settings.gradle
|
||||
echo ""
|
||||
echo "4. Checking capacitor.settings.gradle..."
|
||||
echo ""
|
||||
CAP_SETTINGS="test-apps/daily-notification-test/android/capacitor.settings.gradle"
|
||||
if grep -q "android/plugin" "$CAP_SETTINGS"; then
|
||||
echo " ✓ Points to correct path (android/plugin)"
|
||||
else
|
||||
echo " ✗ Points to wrong path"
|
||||
echo " Current setting:"
|
||||
grep "projectDir" "$CAP_SETTINGS" || echo " Not found"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Diagnosis Complete ==="
|
||||
echo ""
|
||||
echo "If APK is missing the log strings:"
|
||||
echo " 1. Ensure capacitor.settings.gradle points to 'android/plugin'"
|
||||
echo " 2. Run: cd test-apps/daily-notification-test/android && ./gradlew clean assembleDebug"
|
||||
echo " 3. Re-run this diagnostic script"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user