From a336b39754270fc06cf064905cce796be2d2c90f Mon Sep 17 00:00:00 2001 From: Matthew Raymer <mraymer@osinetwork.net> Date: Fri, 28 Mar 2025 12:47:10 +0000 Subject: [PATCH] refactor(plugin): modernize plugin architecture and improve type definitions - Update package.json with modern build tooling and dependencies - Streamline and enhance TypeScript definitions for better type safety - Reorganize plugin structure for better maintainability - Add comprehensive interface definitions for notification features - Implement proper build configuration with rollup - Update tsconfig.json for stricter type checking and ES2020 modules Breaking Changes: - Changed module structure to use ES modules - Updated interface definitions with stricter typing - Removed redundant notification options - Simplified API surface while maintaining core functionality Dependencies: - Upgrade @capacitor dependencies to v5.7.8 - Add rollup and typescript build tools - Update test framework configuration --- .eslintrc.json | 19 + .gitignore | 66 +- .gradle/8.13/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/8.13/checksums/md5-checksums.bin | Bin 0 -> 23097 bytes .gradle/8.13/checksums/sha1-checksums.bin | Bin 0 -> 28163 bytes .../executionHistory/executionHistory.bin | Bin 0 -> 46283 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/8.13/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.13/fileHashes/fileHashes.bin | Bin 0 -> 19647 bytes .gradle/8.13/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../8.13/fileHashes/resourceHashesCache.bin | Bin 0 -> 18599 bytes .gradle/8.13/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 19127 bytes .../.globals.work.bin | Bin 0 -> 62 bytes .../.strings.work.bin | Bin 0 -> 12250 bytes .../_.work.bin | Bin 0 -> 1901 bytes .../buildfingerprint.bin | Bin 0 -> 1831 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 566 bytes .../work.bin | 1 + .../.globals.work.bin | Bin 0 -> 62 bytes .../.strings.work.bin | Bin 0 -> 12237 bytes .../_.work.bin | Bin 0 -> 1900 bytes .../buildfingerprint.bin | Bin 0 -> 1831 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 566 bytes .../work.bin | Bin 0 -> 357 bytes .../4hvyddttlxo92r0wto9feha2i/candidates.bin | 1 + .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 3106 bytes .../_.work.bin | Bin 0 -> 285 bytes .../buildfingerprint.bin | Bin 0 -> 2113 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 447 bytes .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 5632 bytes .../_lib.work.bin | Bin 0 -> 1020 bytes .../buildfingerprint.bin | Bin 0 -> 2113 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 456 bytes .../685mgn6n09vojr2sffwrpu5ai/candidates.bin | 1 + .../6b2wdv4910jdk5r1pwy2wgbme/candidates.bin | 1 + .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 13375 bytes .../_lib.work.bin | Bin 0 -> 4248 bytes .../buildfingerprint.bin | Bin 0 -> 3094 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 661 bytes .../6czuitwtho9y27nvd4eawu40i/candidates.bin | 1 + .../7kdhbijltiwsjnddlavxu2zpa/candidates.bin | 1 + .../8x4ypt5nue0899in5q5whr6kb/candidates.bin | 1 + .../.globals.work.bin | 3 + .../.strings.work.bin | Bin 0 -> 14997 bytes .../_lib.work.bin | Bin 0 -> 5268 bytes .../build.work.bin | 1 + .../buildfingerprint.bin | Bin 0 -> 3094 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 796 bytes .../amg1wvcaaabrt4jjzabw7fe5w/candidates.bin | 1 + .../configuration-cache.lock | Bin 0 -> 17 bytes .../csrr7nvdo4rldjtfl3c2jferq/candidates.bin | 1 + .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 12246 bytes .../_.work.bin | Bin 0 -> 1901 bytes .../buildfingerprint.bin | Bin 0 -> 1831 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 566 bytes .../work.bin | 4 + .../erwtyj4abzfi70xys5njdh4cd/candidates.bin | 1 + .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 14949 bytes .../_lib.work.bin | Bin 0 -> 5131 bytes .../buildfingerprint.bin | Bin 0 -> 3094 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 751 bytes .../.globals.work.bin | 1 + .../.strings.work.bin | Bin 0 -> 13356 bytes .../_lib.work.bin | Bin 0 -> 4159 bytes .../buildfingerprint.bin | Bin 0 -> 3094 bytes .../entry.bin | Bin 0 -> 92 bytes .../projectfingerprint.bin | Bin 0 -> 823 bytes .../work.bin | Bin 0 -> 632 bytes .gradle/configuration-cache/gc.properties | 0 .gradle/file-system.probe | Bin 0 -> 8 bytes .gradle/vcs-1/gc.properties | 0 .prettierrc | 10 + README.md | 199 ++--- android/Configure | 0 android/app/build.gradle | 100 +-- android/app/capacitor.build.gradle | 11 +- .../.LCKDailyNotificationPluginTest.java~ | 1 - .../DailyNotificationConfigTest.java | 104 --- .../DailyNotificationConstantsTest.java | 126 --- .../DailyNotificationLoggerTest.java | 84 -- .../DailyNotificationPluginTest.java | 227 ----- .../DailyNotificationReceiverTest.java | 102 --- android/app/src/main/AndroidManifest.xml | 32 +- android/app/src/main/java/README.md | 39 - .../BatteryOptimizationSettings.java | 225 ----- .../DailyNotificationConfig.java | 87 -- .../DailyNotificationConstants.java | 79 -- .../DailyNotificationLogger.java | 92 -- .../DailyNotificationPlugin.java | 736 ---------------- .../DailyNotificationReceiver.java | 186 ---- .../dailynotification}/MainActivity.java | 2 +- .../dailynotification/MaintenanceWorker.java | 51 -- .../timesafari/dailynotification/README.md | 423 --------- android/app/src/main/java/index.ts | 52 -- android/app/src/main/res/values/strings.xml | 8 +- .../BatteryOptimizationSettingsTest.java | 150 ---- .../DailyNotificationLoggerTest.java | 134 --- .../DailyNotificationPluginTest.java | 194 ---- .../DailyNotificationReceiverTest.java | 162 ---- android/build.gradle | 102 +-- android/capacitor.settings.gradle | 2 +- android/gradlew.bat | 184 ++-- android/settings.gradle | 7 +- android/variables.gradle | 7 +- capacitor.config.ts | 4 +- package-lock.json | 826 ++++++++---------- package.json | 76 +- rollup.config.js | 25 + src/definitions.ts | 115 +-- src/index.ts | 3 +- src/web.ts | 63 ++ tsconfig.json | 27 +- 133 files changed, 918 insertions(+), 4250 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .gradle/8.13/checksums/checksums.lock create mode 100644 .gradle/8.13/checksums/md5-checksums.bin create mode 100644 .gradle/8.13/checksums/sha1-checksums.bin create mode 100644 .gradle/8.13/executionHistory/executionHistory.bin create mode 100644 .gradle/8.13/executionHistory/executionHistory.lock create mode 100644 .gradle/8.13/fileChanges/last-build.bin create mode 100644 .gradle/8.13/fileHashes/fileHashes.bin create mode 100644 .gradle/8.13/fileHashes/fileHashes.lock create mode 100644 .gradle/8.13/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/8.13/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.globals.work.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.strings.work.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/_.work.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/entry.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/work.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.globals.work.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.strings.work.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/_.work.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/entry.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/work.bin create mode 100644 .gradle/configuration-cache/4hvyddttlxo92r0wto9feha2i/candidates.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.globals.work.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.strings.work.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/_.work.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/entry.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/work.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.globals.work.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.strings.work.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/_lib.work.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/entry.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/work.bin create mode 100644 .gradle/configuration-cache/685mgn6n09vojr2sffwrpu5ai/candidates.bin create mode 100644 .gradle/configuration-cache/6b2wdv4910jdk5r1pwy2wgbme/candidates.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.globals.work.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.strings.work.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/_lib.work.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/entry.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/work.bin create mode 100644 .gradle/configuration-cache/6czuitwtho9y27nvd4eawu40i/candidates.bin create mode 100644 .gradle/configuration-cache/7kdhbijltiwsjnddlavxu2zpa/candidates.bin create mode 100644 .gradle/configuration-cache/8x4ypt5nue0899in5q5whr6kb/candidates.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.globals.work.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.strings.work.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/_lib.work.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/build.work.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/entry.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/work.bin create mode 100644 .gradle/configuration-cache/amg1wvcaaabrt4jjzabw7fe5w/candidates.bin create mode 100644 .gradle/configuration-cache/configuration-cache.lock create mode 100644 .gradle/configuration-cache/csrr7nvdo4rldjtfl3c2jferq/candidates.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.globals.work.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.strings.work.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/_.work.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/entry.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/work.bin create mode 100644 .gradle/configuration-cache/erwtyj4abzfi70xys5njdh4cd/candidates.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.globals.work.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.strings.work.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/_lib.work.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/entry.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/work.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.globals.work.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.strings.work.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/_lib.work.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/buildfingerprint.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/entry.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/projectfingerprint.bin create mode 100644 .gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/work.bin create mode 100644 .gradle/configuration-cache/gc.properties create mode 100644 .gradle/file-system.probe create mode 100644 .gradle/vcs-1/gc.properties create mode 100644 .prettierrc create mode 100644 android/Configure delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/.LCKDailyNotificationPluginTest.java~ delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConfigTest.java delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConstantsTest.java delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java delete mode 100644 android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java delete mode 100644 android/app/src/main/java/README.md delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/BatteryOptimizationSettings.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConfig.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConstants.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationLogger.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationReceiver.java rename android/app/src/main/java/com/{example/app => timesafari/dailynotification}/MainActivity.java (69%) delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/MaintenanceWorker.java delete mode 100644 android/app/src/main/java/com/timesafari/dailynotification/README.md delete mode 100644 android/app/src/main/java/index.ts delete mode 100644 android/app/src/test/java/com/timesafari/dailynotification/BatteryOptimizationSettingsTest.java delete mode 100644 android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java delete mode 100644 android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java delete mode 100644 android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java create mode 100644 rollup.config.js create mode 100644 src/web.ts diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..4fdc0a3 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "env": { + "node": true, + "jest": true + }, + "rules": { + "@typescript-eslint/explicit-function-return-type": "warn", + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "no-console": ["warn", { "allow": ["warn", "error"] }] + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 34d3813..b8ad22e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,61 @@ -dist/ +# Dependencies node_modules/ -.DS_Store -Pods/ -*.iml +npm-debug.log +yarn-debug.log +yarn-error.log + +# Build output +dist/ +build/ +*.tsbuildinfo + +# IDE .idea/ .vscode/ -build/ -*.tgz +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Android +android/app/build/ +android/build/ +android/gradle/ +android/gradlew +android/gradlew.bat +android/.gradle/ +android/local.properties +android/.idea/ +android/*.iml + +# iOS +ios/Pods/ +ios/build/ +ios/Podfile.lock +ios/.xcode.env.local +ios/DerivedData/ +ios/*.xcworkspace/ +ios/*.xcodeproj/* +!ios/*.xcodeproj/project.pbxproj +!ios/*.xcodeproj/xcshareddata/ +!ios/*.xcworkspace/contents.xcworkspacedata + +# Testing +coverage/ +.nyc_output/ + +# Logs +logs/ +*.log -# Ignore Gradle project-specific cache directory -.gradle +# Environment +.env +.env.local +.env.*.local -# Ignore Gradle build output directory -build +# Temporary files +*.tmp +*.temp +.cache/ diff --git a/.gradle/8.13/checksums/checksums.lock b/.gradle/8.13/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..949a81a8603f74300ddd22cd90799d1df05874c8 GIT binary patch literal 17 VcmZSX(RL9%bKPJ$0~j#M001id1FHZ4 literal 0 HcmV?d00001 diff --git a/.gradle/8.13/checksums/md5-checksums.bin b/.gradle/8.13/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..ca795661ec73ff7dbfcb430084abe7b832ed1512 GIT binary patch literal 23097 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.13/checksums/sha1-checksums.bin b/.gradle/8.13/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..47cfebfd7fb91158fbbd054bd15b625afd7d179f GIT binary patch literal 28163 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 literal 0 HcmV?d00001 diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..94410c50683dfaef9d61cf08f818b9b75ea65a6b GIT binary patch literal 46283 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 IXx%;k5A^hWp8x;= literal 0 HcmV?d00001 diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..947e9de7b78eadab32fd6c38826efcb95f30e4bd GIT binary patch literal 17 TcmZQxXeI2t!?Ur90RkidCt3qZ literal 0 HcmV?d00001 diff --git a/.gradle/8.13/fileChanges/last-build.bin b/.gradle/8.13/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.13/fileHashes/fileHashes.bin b/.gradle/8.13/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..922f5605a2f6c405a6c5456f00faa9e3e4f65a98 GIT binary patch literal 19647 zcmeI3{ZCU@7{_lZgH%8Xq@f@gy4f;@wxSkcXoSSr(n`cKn8alZEWmU@#Uj{ZfuLL6 zi1P&zaUyI~k(VKFf<p!~QBl|&B?cTF3}Im#I*STY-emXooHIl3AFyP3PI6!J?en?M zJ)ics=Gjb90@r!Gs8@^s>K5+602lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE z41j_Ei-Bl*Ba6^x1S{>Bn<eQKwc44!@i_cb%>n<bWjW~Mtvkv82YOMyzBW!aigI}` z$&0B!E0(Smg`r%LMDmiYzh_zGchBMH`2Cw3cMI2hj;T-{o=ozu6&YKWwMS0j`eP(7 zAGjZVa?Ij@pFc<Pwz{Z>x)`r+oOhDEXF6iUpKIEKa`{D)KM>97R%AS=K)EuH<d0hI zePo&ZMwEveN&ceCVOwN_Pau9y7|EwX_xJUT=n`>#G0A7DqqQ4zswZ&HBe~;PZ>IjQ z_dh_n@)pTmhj`be1rf<8S4c_Dm*~%)2uaGu^%9ax1Ejv(!O>MH4-X-^T&q5-I^Caw z>*Gki{dtM{&7*E!C|4AcT$MT*wfB6_30yx(^7wwQHJdw}j-XtwCi%xl+<lG7&v^Jb zT#}P3McD<T&)^IOzyKHk17H9QfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR? z02lxRU;qq&0WbgtzyKHk17H9QfB`T72EYIq00aM(fwgpFKl)hC9IkC!0*6{J?z(gN z#$vsE(C9`{oP5*Vw|CIn*?mY~#S004p*b}zTf8dr;Njr%x~D-43F<kU_^e{3=!=ZR zkUunfWtZ?4Jyl@s@i*$hImjlQQ&gUs(vni?`lbY);-Sb&jPHJl2&$b;JiDeDEqLTz zWmpz_U-P;{74GpE5%wlF5f?O6BisH)pzza}d1-#uMoc`!J($@6o1O1VzgFt*{nn4) zSJk^&-c3D&h!=P&ffLUr8Wh@EU**K5;P6Vv`X{<^L|E{AgL5yNNO)T|Z1|zbXG4rw zc)=xd#ln4Xj<E^DxypCK_+QDc_fJX6$2SNV;@8(Cd+ADMdD4f?KEiG`CCRf!YZO;h z%>|Nnt1FsNTk9!q0GmkHx=V!<g&ynlo#xWk$CuGtO))#Bm)%|ZWYgo+(dAzXo{Ebs zC%x}ox#VyF6Kz(2a%CnqY>3L?kmD)cJ90IK-1JkjIeJ!w`IXF!A%fztiHVfFkniO0 zW%v}YPMbO2ej5?fJ21gqY<eW*Ep6ZVn^SF9O;OW@dr^yRdT7~%%jtCu0Y+c-{+3NS z{2Tjph?sRkJ$Q%ML{EHUVs59tzlB@2%ecseu4MKxi$`<pneWBst$sEh8os)wuRBZE z++qIa_5ddEbOz6ZO$2%7#g<nqlT*sf_1lz%^xTKF2YxHTM{I)E;{Um!*)$Td$Fzid zzLB2Du@bn4V>X-UsB&m~nGl}&By_&sZ_^<D&Swd6lTGBr_Dyns84gYR#5`aYOcT4) MbS1qwh4e}M54&S!`Tzg` literal 0 HcmV?d00001 diff --git a/.gradle/8.13/fileHashes/fileHashes.lock b/.gradle/8.13/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..fa8e103200126026ff1ccb5fdec261d751bef0a6 GIT binary patch literal 17 UcmZS9y7_(Uuhl(k86ZF%07Vl8xBvhE literal 0 HcmV?d00001 diff --git a/.gradle/8.13/fileHashes/resourceHashesCache.bin b/.gradle/8.13/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..de858ac4548c115d34ba4fcf6c80261ed7fb3d59 GIT binary patch literal 18599 zcmeI%u`5MU90%~*Gd;b$YoM$2Oa?K~8%&Ba$f$Rf!Ss5QG705vB7XxGC96ypgA|k9 zB$M4pc--5)x0lQoeNLToetplcQ|Ggu`5=hGuY3gEG0-hl1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+z<&{llZW(XkBKHqX;Iw@g2_r!^n}OdjnmH4O?JG{EdCFs+M}iY_~0<l z_lkTw8X3D>AAZmCxgsz2BwxwStON)UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+z+VW|lS_w^*`Lnv>?oS8PhXXTm-GAU@m4DdYd<^g m`j$E$%QI`QpM#B^=I+Jsj%uyZev2!s&kynD<H_P}+VKrnU{8Vo literal 0 HcmV?d00001 diff --git a/.gradle/8.13/gc.properties b/.gradle/8.13/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..043502cfb2e42de5ec7300345deef06c7140ecec GIT binary patch literal 17 UcmZSnGyQ~5e}n871_<y606pRb8UO$Q literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..9219816 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Fri Mar 28 09:01:29 UTC 2025 +gradle.version=8.13 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..088ea7b0ad73642f19ac849b29e074a008e613e1 GIT binary patch literal 19127 zcmeI%Z%7ky9LMpiHN+H?=*l8SDwdEB1kqe5YH7{W{>-vWl+;Kx6IljQC{}2tLI1=g zf>F^#B_|Ujb4G!L3W{lSnHc?7qF6H-kr8Wl-)|B=5n&IC&%td!-uJsNcdtEMyde1b zI_VH*4{>&h6$Bsv0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY>&i$JRDMV87h;}^1c zX0fb95JJ6Oi@>TcpPbVf#~bC#lA8ZNs5z@1H(im2<gTgW-mF`@^J`R$oP|U)cjIti zlQu$ck}o7?b2lY)hX>e=y)<9s-kPc$NPF5}K=b!-f1nR(vg}^DkM<{V?|9vQ(4k82 zqW$l<KXX{()j{Pga!;(}ZmExXJd!z8OZ!W>5BGI_J`;OCocbf~FMFSKR_9h(X^sc? zH-+NG>La!-)OT^WJ-6A7{aH@xtGQ2Zt5yYNZ=(594fpS{$40H=Wx2G!j=Lhjs<-4D zw#r@8%w3t1Rhm(MDOm1O5qA&qLaR9HJwf{ix%<BLG>6yiD5UxQ+(qx9a$AHdih42k z^+glfy=6Z4sK4SKoOC-sdh?QTnjiP4pLp1IYF&Z9+$9C~$jeH5o}zAy=0tN(7<kdy z6RGT>IXAc`x8<aK*nYj6=45i$PTedHJimMm^$pz9u7;(5>#Inn`IFo;J1TW|r&eXj zU2~XwUg(N*75lIKp#2-U7nI!5876NXlDl-8`%$l-nwEyRY3c^<x{v0;_V;=(n(yFV zI+oK}>pyam<~MTZZ$VHTkgwqr0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P*RD1j1aSJzeJ_It8D<%1r*(itCZx^vnyJ Y?7q9^PF`4<`zz09&V25gyXSZL1pwRMRsaA1 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.globals.work.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.globals.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..56771ba7b42642eb9eb4077686fd10d1081cb4e0 GIT binary patch literal 62 zcmV-E0KxxXk2CR0rjo+4e}HyDwI*4M`<Q@-bwRU?VvZs457CYBz9u#57vYz@I%fI2 Ux9a2jMB-TKV1od$D$ES@e;5oR00000 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.strings.work.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..81ddf9942dc4689522f2676656f92c112e529733 GIT binary patch literal 12250 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/_.work.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/_.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..a91fa75d5e00fdaf847c697bb7d34cac83c4e09c GIT binary patch literal 1901 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/buildfingerprint.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..fd359cd61db5f74400e7c5d227379080f26aad7d GIT binary patch literal 1831 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 VYs{jInF%pn_kAmWcN4RQEJWyBi9G-S literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/entry.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..995b5434fdddcfc36cd4006465ea6cc774162507 GIT binary patch literal 92 zcmV~$!3}^Q3;;kFh&0iM^AtrX3T>c97}o`y!MoX}F;#9^df86#LpsT${qW0cEkw=% lGOEV#fK*Ol)dosAG~BTgY)IE|g_U+%QHhI_>pti+#{6z?BO(9* literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/projectfingerprint.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..3808dc2d7502a6bd2f552584e3a0bb9b3921e13e GIT binary patch literal 566 zcmV-60?GZ9TjLH#jk6P{%v%z73~q6L_})3q%G2lr)#ThNGV2`UF<;+z>{WBJ+($&l zFFw>H#1^xNnlWosK%19);=5y@%HU=d1s>q&ny6F-kQ2}=grc}1WG;+cB|C)HaLdN} z+*IT6FAT&lK+5)F2TEW(T6GI)=@U?ZB_1y5Im>l>(jCZy$|*;Dd(}1=_900OGuvF{ z#WoG%y?4(OenS(hxT6;PLQ{^%n{k_-G={f^%tmDzrfE}p146w!Rz-kl!@~h{y^odY zwh?SQ{0R}Xy;gLK@ON*b=av;?(3A?44SpeHKP&pGf-Sse$)HIr$A6Re(Px917rKWV zpMImNDW<`5@?p*1My%ywd`ds|LYMOrf1aKR#``t}oDEs>Y~q{UFv@2_Wi(4M$#o08 z9{E$3-(u~&uAno5;hw@Cg>&@k=T(_<qikAD@OOp!R`^$-kM`EJ2M|bl6F7~KvG@Z5 zRCx`nchH{cCo*o~0ZCjSepRptit7M0v1lsX^X){{hq1=eJRF+&{5EMk`qc>}lAu}% zXbjYhq;ye4IAdb2Z=ZVjYIBK<=)|yvsuhO&WTE)Kmt^2=YcRWqBfLStL~aU6YecT_ zuotn;>YqxZ{V=zC>h9(5pgubKpd;0KkC>3K4FRJz7^2DQ`?Dk<0f7rIWYrDOMcT$I zS+`uOEA>-*Db!(L^348BhhwW&FzNUx85om8pz|OoHRZ}c9XOoU9szmOP8Y*GTOlC% Ez=nw#r~m)} literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/work.bin b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/work.bin new file mode 100644 index 0000000..7d6ba1e --- /dev/null +++ b/.gradle/configuration-cache/0809f6f5-185b-4807-b8df-47cb0fd70765/work.bin @@ -0,0 +1 @@ +_{��=lLg͒���w�xD=��H���z�QbK6�E�+Il/b��zj����B4����`S��8�Oo}]��y�~��u�\�t�ĞqT�DVEq�G�5�b�*r��D� �L��-d��C��1�'��K���%�e��A'p����9�]jPor�z�T��b_�OūxٙW�6-��V�i�y�?�ؐAB'��z'����P:�B���c���\Q�*�2��[��+ pTvmo��ٿ�AJ����yG�ؒ�P@f�k���`%w ��Wh�\ӻn?��D⏭���ł˂�����ټD�r]��9�<l�X�7�4o����q?ξ�e-�J��?��* \ No newline at end of file diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.globals.work.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.globals.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..0fe3095155868f3059e3e7ef13e8501b0e2e0ee7 GIT binary patch literal 62 zcmV-E0Kxy>TwLo5QjKiuZ6dz4YrxC0XrsBF85qC1bgipF>kpyNB+PeW(xM=tQZH>` UO$vL{&F)4EFA6~ubpQaBxb4>+Jpcdz literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.strings.work.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..dec084bdec9856cf91be60945156de9c2037eb50 GIT binary patch literal 12237 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 bUI{oWmEs|Y0+04%2cr-ps66sfA^k$o={AjS literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/_.work.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/_.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..04a0f7a4ed0a5cfe2720e4c5429847d653f51307 GIT binary patch literal 1900 zcmV-y2b1`gMW&{AMt}h{aM=B@2^rWw3@8mn5=r`WIr>XM(>^XD;Sx(IGJv255<2dv zQ*2$>PFtC=w~F77RB}sQXJyqhmY4~LM~QE1M`9(lKi@n!Stv&PiDsRqrwJVJWNy}V z_?l))#v|9(bGye)PQx$`42ulMR$yA6J;A#}HFgiw^Mo>PW=A9JZ(p`KJ4JeKJF*Yf z)WLdty`lTt$s6fWDp)xTZ<ayHy(6Ll46)w%oUG4aXs1uD02izLtP?RRc4J6s*o65W zsT~+w7o}|s!&MHy3d#^L9VNeKs5Egr=v?}<5NL-Kv&TPE-8oLojr$XujMV=F9#ccl z`ur4j0&ttpT&ce!k^A;aP3hL4J*2D%LF$JBVwaOqKhu#MpbykQ^PRN-exm_Km<^kX z=BGMPr!1*v15J>z=<IL~RllW$?zE?b$PsA==yDdCryb4Okr?tqK}?4QnB=TXV%9rv zr7NLXLT``&I3Z>+EaTFQlhq?am^(RSn1w;vL!4>cLeF1*yCv+QfT<qK8!uiZ0w?EZ zfqgpdth$;?-|uM7W&Suto-3$B8~YwfSa4<lHHa^PxV3I0)1iuRc5q_b<=%w&#V$Nc zFM;z*DIU@maKFP0n&0JgjEd;x8`nzs4;#<+Ce^AW$uWj!--AC3y6%D@#DjwtO^3P? z84SLBq)k+vIpYHCle(l?e4}SbCw-pxGGHXmf>94q_#FZt#~g+&*&&;z=cxa0!ZH6b zmI90l>{J_S1C;>yIo$mY(P8l(y!S~Z(U9u^SSj76uh{Ww_Xrm=zIWAd)-RsO8|8Gv z*UySek(y_bwX3ccQ-s5qy9f+v`l}~K$(3e&trA%>jvcwbP8xpaOJH!CSqCP5cxvih zyGHsHu6p>DLDxtTOGT;N{?-%N)=U@hHMFC7xO}VnhAc~7{6yoid4l&a>hi=c>_{rv zfK8)$?&unNPmcrKUsFQH>!#hF`oHo9?KPB4dTkPC_rz~H`I1HiRQ+Q^43sS@{cQ{6 z$jY09x%P^XAD#y+wW(df5riV8fAFSw*#xtmHTFfc1^-2QweEFm7Yv$sEmH)@Ilb01 zP3V!if{2qX>;KyH5??2aUZU+8os{)8HL=;Q{CDeXj6^NKe$P<&7*8quxLc*!GVy}0 z!bcFZyVpC#Da^!hu6^o0FPs<v%EesU=K#o(zZ;rEVS;@|gzN3U=a#uP#+uaXKihoj zQGI?`U@ixq=6pGXMM+n*KSCfcU?Lca8(p)~2m7)~J1?R$<^Y0xNe-X-$$IC_3Vl#2 z!`tefdG$y9qZNZpfGiSsF_w0QV2M;ELkur#E2fdsn^<_hxI>kZ<}-9Q0v*y*_VhJ& z$a*0hs%K@LJ*Q3c#0iw{=D<4phmia;O#!-)p*R~K0?d$wNiiyE=R~Q^xtW1+2<w}e zg5I<gjwn}HhFzR77gXWOI*Rm>4K5`}k%jq(t3WJ!5IoG+a%19aO4A|M1a62@Bnc!c zdc?@d;joA#fFjkDYbGQyVIYT1H~V+=Vslf_#m19U&Kz|FISr5I&A%Yi^m}4;>VL^? zkc29Zw+a)#-AS`6yk%t{=*1)?p-z#NmD^?9G1X742wng#t4k^%%>d_2PaY2RhME*? z@BvT+xYXjjZL(>}eUYf@Lmyhm2!*9)YHAy(Q7E&y{z3QGPx3gP;gvE`Y9VG#6CBR4 zB(8}5EkwR1tzH;odI;u#DJjyCFtX6}(Sw*$ru<+`v$tZ%Nu{W^C~QjwX#RVy_yk{t zFa?~sYgw+K0~x%NlTj6Yt%YBn79fsjT7}X`NLgS)D)D_o?I1DTwKU7f9SLa|;);wc zRLOw&vDpYhl?!zn(tMUyw@LWih)6I+bteQ-tZt2rztgAitEw7@agRhrP)!7BbZj#& zX7b5V+|ajnTKEU~7<lns6=2MYy856Dxzu9+Nhp<dnkZyf#D!>_yt*b>?4j<nJ<ZF9 z+YwHK+qL_DxBg9BkQ8ue3PPHVXkzouxnK8Tq-yqV)m!Bl5y`#D<Yr^9Zf!<rM`HSh z$|@q7Lh!+ryn17A(gh>kdZY9qK|E3wa;G)Uwbhf`Q3z1(GG*q}y1B@B<YppT!WV5n zDg+dLz9UKG1f?43!FZVm@v|=*NzR<<>U>|jI@!a7*YMeRn!4M@Vif;0Mls)c`^sEf zXIkp#lIT>;ZV*e4rRaf`9$Pv!ZmU3mITeXSd-*oVq36jjG&M(vVQ4eN+u(pjDVmbH zKR02Xf}GcxlS}{4K^?5r^r;rmEgW9)+fOj{NMG>A|NJN(#3rbCl=n}YjsBb2h&YFk z6V@(-VV$hG9uf%_)UO{!&Q>!InzdfJfn@{aGew;KGOa72lzP>BiwqblJ_=CO9RKe{ zBZV($Sa<WhnHaiutya@}8QsMnAf1wugDMGvt!W$<U_TTM=(G4I0pA^9B+aDS5gWn! mHzT|6>sEbT$IRCuKzub43vytyctxUroW%-#15xSE_s<YNBB0m+ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/buildfingerprint.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..f36aa391bdd6f1319cf8c51c0e5c5963bfef1013 GIT binary patch literal 1831 zcmV+?2iW*6L#rX9=byb*d|Q<R5$uFwAF+F4j%f{#pRnxb9t$JizqhG1lx*2VhWu2> z|BC9&<*v|M^d>N+7o@&($goFP@&jsA2xo$yGs%~BcM;^jnamsj>P)mGL@#%oWwPl1 z_xg0*6QkmX=1BDEPr7h4b~q}R8J&QVBKng3CKZNJnY`QQsD>TCg8eXP0nCC?E-Lhr z{+x>HKGP_cxM85OVY&Tw&1;Dv&9f0I%jsS}{Y1%tA|pV)0Vn^w&W0Tqd%jRNyTGa# zEIE0XNCxXxOnVKWu~Ozry%y;|>?oS$s$WOWkN^DZHZl$D8jc&l4f@3kSE!p(`_QW; zw?6WG^+<}0=T|if1c8RBBv1T01bJZhQmHYF=~m^b6X57%6$=gH#;k^f$1>+l&ONv~ zwuVfH%-r!G^Oa8aIx1I!J``coGP(f8#vOwyNx-E(Ri5k8y9AN8n|6aIfGDVXUjB7Q zJh1)hEU8m}O2#TiqzKe=l9iWBl_6$~U5rfw>XJt9603mrS2dZg`)PjONB&DQCG1>9 z7x<f$t@b>0m=43en$KeQ6Z)u6g_f>=JAhAiBe`ci(L@r+Km3jT%~-dPDGf1-DIuG~ zxiVY^6p5krxlKZ?Z4^n&g{G4uW)8z+u`=s>xAQw1x<Ec;zTV*p%*DkUWiXedhSKUI z(3fzwjH^3cT2CsG3mUlyuFCIbHw6`Cm6cvu1-0w6S*93|cEe%d{pkAbpNwoY(T_|O z2xg@Nu6eSZPI>OhL^Sq2hpQrhP9-NqQ!YpF;+Rk)ng5vcQS2T)mIZjQkw}+u+9}c) zbzz0Ljkd2b+Q<bI&iPDJ*Qmeeou9TuY*^c6am`Oddmi_ux^5ndX21ASFd6|97Gfj~ z>Fz<JV$(Alt`;Wf*xCO6;OV!;TKSz|g=QmyX_0^(mca+b6hpbKm5Pb%O&Rf~O^S+> zEO41Cq;x>7%Xu+l)Ig0^Gy-#PdzLRSM>{6T@KxCsQQevz@g++JBv@8IEHM7jvl++G zB)ofsiPOl3lFb@AnZvRs?`;XpI^1Zkxx}2Ugz|YSZZJHsVIswDZT>Xj>IbLR-)lqg z&^<Lu>k;)Z<RQbGE7X4CM;(kg8s$sPFI$1o<S&AM3}v9?SIB}ZphPs`eD1A)_YPKq z0>MaqTwhyQ9v6lBw7GZ5jdyfzE7L-m04&fcNl5||+?uDE%U#*aL55V15NP8dFZC|0 zrnCmskj301!W}+<^42a_E_sLCRmLO$24mCJrT74Gwj18-O{OsT>J27?q7OE4gs_LL zo{W2+NO5-DuG&s-qoGz9>kJO0AD-GWl-Am(0VsmPb4@Ja3*fp~+XZ!cB5wIJFPCs9 z75Y6hM-la0<bi?f{Mjl6nefGYO@Qh>K{J%YBdAo`!_^b;Kxxt<S;T&6II@9!?9__* zR%ko1wgl_lgp)#{2l=_{T8c2T_>RzHMreoWg<y;cD`8A%gmUUxF&O%}h|jxySeP`u zcV=_o@&TG=%Cq0ghN;t8Axen7P-+zYqGCSmws-m5;WblkoM@eT%wt1)hzylMk|mvM zs^N+&t1N8poj#jBtt)*3jc|(M5gVYDj$fQ7Gx3wHid&>@briXyCS}3G8?C%^26gj5 zpkp6Agx{;ZwH~^ja-VhusC_o8Ao1D2U2(Oo@G3`xjQO!Ro-W5&+iEdu^-(&w@7<CQ z70ZMomc!rKb$@1#{<L*epG|c%OQ*@u%5LsyCR)H2=8y`CDNg`m*LC;vQL31?S^zaH zfG%LKi|Ku~`Cmna-p2?eqLO*f#`*sdx*{j1EU9S!+A{MyEH<|%QTYg#ByvK%4|Fb1 z?j$JdC}yo}SglG%y5YQY>i*8Ci8PNn@&B|g{IwvbK}n$moj<I@16oKPU-||^%VG90 z#CeH^h5{_P5tddCtjJp&ty4@O(i547Co15IoMx5za-o87$h)S~ki6KY3zv3o)EA!2 z>K}v6XyP2K-gaU#krfL9g1s*!gIZ@;xqY#HS<b_`?pa{j2%#fx6s(5iY*R9g9H0*Q zT`||zB#gX`eJjZ0-`(bjRyN`7s1OL!c2v=4=WGucK8O9TTlVGx7=;a6P2tun38L|< zF9qAze$C2f9s)xF@R0r;K|%Xa&jKcfDoez$KCfm<xN{tU4&c`p>?ny6w~Ur0uD>^U zlJ>uBzu(uSmu^3+B2GZTzv@NrnG?i&)r9FLY|Q%|MurK6bv?%daYi0#2ocAs+{p&u zF?=*y>o%3^r6yJ5-|FoOC>3gT<X|Ar?SQYWn7>VWP;8EkJf(Od@}&DlBK_k41i_5a z@?BD1r`X%Aqf0L)9f;NMzQhBj)HWcx!I_1C9eg0*TdE73P(v{MZMI9C(Dfun?l(qN VT{P9?PdEJonc^dkxdqMOv4y#>ma6~& literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/entry.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..f3a323170209ca53b89891defc689279c542189b GIT binary patch literal 92 zcmV~$F%Ezr3;;lQkZB?V?<ojUrGip5_-J=G?~ES1b<du1biQ8B@YT$@+sNyuHKf7; m7)4UJp&n%kUK$8-Xc+Mzn2>TGwjvbCqfps~n$MYDrPL2EOCntW literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/projectfingerprint.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..16739eb93b2296e2310170b499a2d75a256c83c8 GIT binary patch literal 566 zcmV-60?GaA%*z@ko2`RS4?Wn}xB6O{b6#_x6ZqjDUDLXz;jtTW=;(UhspWd5^fZa& zPdMSo=+GggIp(fpnYc!zjC@pvSwZ61Y8FQ-Qb?8}9HjK9>>Zab3Clft*Z*Q{H|l9x zr?lkKkna?v?*17^!*4c0=Tf}0b}S<jR1Pk}EqiB<<OEu*AOjozL*_87`U#nzn!m&P zduwF|D@*<-{}&Q^yXWCeeCIhJ@2G6D#Kx3AM3tGdL!cC{1LKNTe6k@4@*OV`hy|+b zrAmlp^Wb!QB|`mv2Z%}@cyZUl1i8F#ce@}zqov?GwIsHt6DMAzR|Iy!w_Nctu#GA% z4r_2p<$|${L+m451M#w4@0I*qHWZ?*AJVO?qTnlT5blpNL$j93j>pE<ssA1TxFHGO z&>!cw*cf&|dfQtS9d!Re$ZcpfVnSsloYe1REE{%RBCO|NTznv)?C$4DC5GrJp9%p7 zd1Xh=h2Qr=$8@rwF`wdw{<$gWB~x$_uqUy=+i7uYT7<GUAcx<v-8Z5@n>t1w`ZU^N zONNR;7D~7)?2zx0HO1(C0%I6%%_me-xo_^uc(6Y-vXcMug4hUDr*p&2XGW5bK2e1@ z$!{;Y%8j-Mdk=cjyJc+>oeYC!@#pS{Pb~P7#PVM*^_kY?4L<e(Ky0Sb6o&(Q-=jTt z_WIe3a}L`e&{B(2QA_3*%lz~%4}a&a#Bg6_xpaAfjku4Stc-QBzrhWaU%_vxPO3Cl Eoq0qb6#xJL literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/work.bin b/.gradle/configuration-cache/102cc785-1d0d-4dbb-a688-2153e21cdbf9/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..0e0287aaf7d122352a557e3cecc291f1f6015295 GIT binary patch literal 357 zcmV-r0h<0I>p#$_OE3XH8NA5ZW)MkeWRtaV9RAl=M7UNWg8=~S&MBLKf~j&zPv0Q8 zeeMjJo)~LvxA)^hVMo5Dcn#&bv&WZdx2{lRH^DFwCph5?3k21kPD&j`xp<WR+<Xm| z=mh4nlk{vse&0v-<HWaTR6bINWP<|OX%IIFMM=Hg5jhup@$2@={ew6(pc^|Hvdd`@ zj3Aytqk17P{^+Y{k`dk<wnfdhNl!Un)8Cpj)6*v~FNs%-PB}8lq2q`VjGttLz1Mbw zb&uo^n~sg^nKgyE3V>OEF=F_5(G-;x;Hp*n!`CGBfV1ul9&i>0|M_=nY~jOlGL_w$ zSxpdT(XvN-k!qNSx8jf9KxoSJjSOy+pl}4UudFjJb*tdhhuM?;cn8)nYt8Y7TEYm8 zXKBmcg<lJillg-pbt?sj0D1(?H7#J~OJk<yBV<YsAMUM6{u6m1`;c2H;Erry3{qIH DJV>r~ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/4hvyddttlxo92r0wto9feha2i/candidates.bin b/.gradle/configuration-cache/4hvyddttlxo92r0wto9feha2i/candidates.bin new file mode 100644 index 0000000..b8814b3 --- /dev/null +++ b/.gradle/configuration-cache/4hvyddttlxo92r0wto9feha2i/candidates.bin @@ -0,0 +1 @@ +6c6d7154-1c12-44da-bab9-788cea5132b� \ No newline at end of file diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.globals.work.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.globals.work.bin new file mode 100644 index 0000000..acc1a84 --- /dev/null +++ b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.globals.work.bin @@ -0,0 +1 @@ +T�lX卆^)~c�����D \ No newline at end of file diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.strings.work.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..e48c164cdbe0edae362d556eebfdcdc20c291aa8 GIT binary patch literal 3106 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/_.work.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/_.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..4c4b1a9314b8abf58047161180d0825b5c6a3af1 GIT binary patch literal 285 zcmV+&0pk8?kQHu2Vn&~Ng0eC-JcuvR#*Gy{dU_2+nX8r)=1Mk0dUgQS6%K5Tf{<#! zNH0yELbQ1xixSlY5^C1D@N}Z^Nt&9eiUMkJ?S1OOy{A%vei=S}Xkg=%eO0V9sI@0a z?dbW1&^^ZUDH4O{v>zy3xTtc2Uh_QiX_u{GZ02VJ2ny`ud&)~T&`HfseW)%q4(Mw! za(3lAJ((B-J*9fxy`!F1A%JDGPlSe+PT%_$fuq|Awl33hQG|F&4)4w&1~+zTG#!2X zSPB+Qp*uvr#jw&MYe$_tHY-im>44?bWM5HtsHN(b>m6ofRHs@2Eh2`c3B^j}j=rW2 jH46|!;~v)Vs@6k{n?jkIAZn_44=Z+G@jM|bos@z`4|jx; literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/buildfingerprint.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..deca93148dd0927674acc14de54b2027555e2f3c GIT binary patch literal 2113 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/entry.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..744792af84196650e0afc947ae118d598c9a1ac3 GIT binary patch literal 92 zcmV~$3l4xF2mnw$P-CkTkzwFeSkdp$b%x%XBHN8P7opB$wr4%>q$lTMZ;Zg&2pYOG iU0|CQO1^_jqa8DD0t-rghORDI61r#~tRAa;A%q`g1S1Rp literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/projectfingerprint.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..935e9b23c4cdf4f3064d8fcc52a3511ed5a479d2 GIT binary patch literal 823 zcmV-71IYYvPw1vu&;23ohJ^-(N0~A*9Q)3=QT@|F0qBtlH{A8wqg)%aK!X2-G+G+F zrUYn+m=`-e;~Ebfskcmcd05H~QMUpQ{vJ6Iwmurd|50z<EXSZX*3oRC{OMi~Q_ini zGowIe-^o^XG&Xbt|EJJPa;*1EJP+)e(zu&qlfdjdrRpMYG|p7{DYU*H8C^R0E|9LI zd10|mc7d|L4@UcM{er8EBJwR0K`*Jm@hpYK_F_v9+J8{dKN|X5*8NucQdRlEa?Wsd zp!Nc5I)Q?ACakil$S7vw$J}>xb2}uZnyhzIOI-c;Mv`8xg;5(4l;NrSKPQ36#av0{ z&@;XCHDJ?EhD4B8bCM#Ul(zJsr+e9*1}**MQ&>bw{&>&;OGTB9;hkmEj(kbppW))< zO7mV+=G_IJw+UPmcH!kUnbBi%XfEo!-%Q&1-)C)hk02>2>eCMS_bu9={psD1w>@Er z4siCb@{@g}ir?6)jiXBfGhlO)Ez>||`v@h`j%&cPlZ^Y{qIk@zNH~)iKu&vR+H`Ij z&mmu8x-EhT`@WX@DHw$V%Fph^ItT-lR=&?>VAA+T|6_t-+iC=T(ckRawhopW*E}mq z%60$C4@l=q&_|05F(o!D0S})*BFX;@%`D9Os;dzWF*-$tcM=psy2hu91VsyPM|x5q z7(Z89{sUhIPpE7ETn(J#TULiDpWy$44F`6Msx+P$!C+j(Mu9F;I)7VVTV15~1<!OQ zBM1ND-b6mRP$;xQFV|$TD>1>tTS-jWUzQItTd>6S(w=;1WIfHzwKr5M$|ve9v%8N4 zXN95?B?i^UtD`BLYO#UQ6bEnf1N3--`&Aj<0RZLkgJDT&#T1HOxY@<<PIESSnKxqd z0~B}sMIbsM;Y;A13!v~Tcv@nY5gJ-CsohUX(hMh{Sn+nd%x;3dgNhMer;hU0C)~Aa zV}H|Gx`<+6XS}k_IYa+;)J-FT86peOUGSIZw6hdQdWhGzlFKpP!ir&M`XhJb>OV*H zOLFW`hih9YDmoqD%mHzLIa+JH&r-$+$iBIP*_F^r{L)sSiM2|2IDNku1Oz1#NFhtT Bn5_T+ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/work.bin b/.gradle/configuration-cache/5dbbc9a7-8a29-4ae7-b3f0-33b5a5e52031/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..a2c3290e43a5025e347c74ee6bd03026c4f14694 GIT binary patch literal 447 zcmV;w0YLtg&fZ`ACp9qiw{@I#Uymg^@qQYUTvIWrlBV<}%a-uZi^DMtq&sbrp#=DO z&@c|_F+fh~j{G9vQ;X3VhkKZyC_OtV=Lzp~AAr$a)doVW+b~%7k^ky$sJ;1Fti_vp zz_BN$-y%&6m<2S59nO;uP>+*_C(_=T{<Ytj7%AfB)XNE|Tb&i|4n(Ho0ZR5$xl&ka zUDHcIS|ut|%DCA0?iuDGUs1Ul_XaGri7lk0=?ZbXR@WfWxE+{S7`H29i`ACj<FDP} z%yXw(PwwTi@3{UN_|0Zl*-G*sD%;8(VuSEqH!`EeXsJI$>L9Y5f3w`5c-R1TY?>Wo z7ZJ-`%7I+t>DXn>xOXrGVT{%{7`EARg;4L}*tIUUTDv4<a-Rx+g@S{MwNTb-uvGy+ zl`D;LD_v(#<TFd>8(K!k*wWyY1Mq5~RAxO>F6UD<U!sbi5+~=Ukl?<8TY|%|`e<rW z!TxS^(NyTq=7bk~%-JZ>luZ5=lEZ;U`<Z_nzAPt=SL)W%Z#79Yg*UgBLzI}J&kxS6 pdqcr>>oViGfMan8m%*lFb~ut|uiy;oc&k%7WNd$kIjDknVS)>_=HdVV literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.globals.work.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.globals.work.bin new file mode 100644 index 0000000..3457b7d --- /dev/null +++ b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.globals.work.bin @@ -0,0 +1 @@ +^�ꩫ�ev�a�r����+ \ No newline at end of file diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.strings.work.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..162a1828c11217e02a2b15a3335265692f104a32 GIT binary patch literal 5632 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 aB1k5As%(KnLM1wfGyXLxs@EqHgrB|`KK&#B literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/_lib.work.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/_lib.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..58234edaabbc1df8c7ddda2a6dac7259706addd2 GIT binary patch literal 1020 zcmV<Y0|Weyk1t8_P!76cQ_$!CG_MNWUb;g0YdT{fDp=xUB%z_U#@7JH(zumh?5C%C zhiW6bW}=O@$;(f*z(Gxv;V$)%d4m7SdpY(l0OW*h1?ecm>Ymu{sd&GXq}#Rg9U@t> z%Dq$FwbiB@)WOB>bRat#POm7ewLFyYLnt8HIhTM3uJAZ|=}(%yl$<*u{s;;_`Q8gN zA9*kP&{KtCjrY-QdD-;TGRS<IZ%tAbGWXf^H{w`YD$sq03K)75NCSzntk=jv78l#K z8~B?H`f}l^4MW=yT6zNFIW*F>$U9dP2ChJ<P08V_e`Y1N8U;mEyX?4xwK5Xwg_~U? z?}9x_YDLr|!3qB7lhw9Kj@>yk@85(?tX7A=<M_FEx3m>x6XbHm(&lS@Mun;=1!KWZ zUs%BHD++v&;KjN@l~l%nPJuvVP1L6`pfFC*I|dDe3hD=)1G&cv*Klk?tJn?lVH5S{ z@-Vlgpy;(ga#TmYTbLZLzP!=1dz@Bx&8sE!hGX+0M%oG_2`csJmPEfzjih~l=uDSi zDm56j!xlw|;VSHbCd0oUIN(i;rYqw(w|bkY+&b0gGdqlI-48SIyxhqA2dtw0BrcK~ zXX4qBIO0!$o(ax{a(I1_e`J}*poFZ;r<o}Ts?pVXZ-(a+>1Ma-^PSNLB<f0p!YIrM zOk8$I*9l`}Pe2ow<ubL_m~Bb(t{D%&FennQ9TQ+VG0It__~tl6i_#LDb^(k=WEt!Z zR?yq*Xy@&LkihEIUxSNo9x!tt0^DZvAlD+ML<nEEv~)$R4@m9Cb|6bI*?1O@2B_~8 zza$P2yVXLv2@1tQA_Dds5!}OL4%>5Tj93=V32xD&eMCj~ycvK>M}Eap;F%m#O8roU z9kYRcPy%?lAe=LGC=ymmH%-Cp84;D(-6=We@D}QMeYp}y9SFA~39#GA8!X9=$tc=L zu2l7AjUY@#{)|{h?;rUb9AEee#B+IH|Kjhi0>eB)Z2{ubTu=^qfp}|3*9sH+9iV@Z z*b%O~fe(j;p64L3?t9<Zu2N$Ia||nw#+P{_s`(hh)o$2B3LB-%l0lgZMSOhYJU)-U z<|RCSpV#r?xjERmut!rCrO(U!@K{~|6XotAlE1_31otkc$=6KdD`;-JrLFPeg0dre zTv9ODT^etLP*jJ8T7*fK<vN2VB@k!RT>d75Ir8y|mxVGYho<E>*}S=u2Hq^Xo8e=y z{&&4E$L|m=8<}OnqFZh1`5^T!=S7kc=SrYt@(Ay$K%<1_flQzzZV9AVQbi<F=fb&8 qldTRP)>yrqK5R7V)J<Ay@uji)WM0yM&dTH!o5-Wln4yx5OCGuGTL4i2 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/buildfingerprint.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..201b4841227fa6099013ac190d0e0db1052d8139 GIT binary patch literal 2113 zcmV-H2)_5>EAU3*cn#}MStqkH?<#uu!EAuTRmT$76=`=!g%@#)CDaNLaOi{mvgt5l zG@iGjPVj^e@@gvkUiuBimY;yaTD*7^8fJ?Df~@H99q+mZJqD$~6~T1KK01QH1dbUq zYDKNR2^^+ZDe<fM89P6}1Pf+MXcXAl@+Y$Ai&XT{W3X|&#)(q#CrM*`T2|TrT~E2p zFWFCEjn#=H&|H;&qjo#@rcv?&$4fmcS(QO+&Z<LoFtBXHbBG}~6rAbIwbOeO31)!= z*HlH{u~+Kdjg!c5z<ybRJ?qkPoX__#(f_RGZVTcSBlI4d<{9!}kERC!vQK(@p)&xM zEZj)}6VkgEul^Hvd!JerMGHFQ9;ZWzj5Yk{42k@M=|1f12H^y+Ak5iV=+(f`pX2?l z()3o%eoF^zUi=?fT>K}!MQY^5|7SU%fY(RXG|S%CzL0bY(gd*))9~q#4qufd8^N|( zf}D88p8&l(5s33!S8^K?tCd$G?~cJE$kX~${j3x1_3VTn*BJrU{AUQyFo)b8@I18= z9REns_+p<H+QvZ!qPi39(ppxFn_~{2#e*;k!rj?w{UnOxl3KFBYjIycp5cz{JLK%T zlhQceeVLM--l$f~9=zS<=rNiK_Y-$;!#}-Dj=ra3eXDJ$Oo{@jgaSZ`$B{B3uP_ZF z00+5F$0}nojq6uH2|ybYJ(#{}>OsSlq!h}|z90k^j0SW4-u<fT`xB1Rem;lTQ_~tl zEDf^uBvfJ`dV`Vk&gk{+cQuX_B#~U?=sfkYheu|)mQs?_6MFdYm>E;xD>3n~qyb7% z!uZ96a`NJ*=ElbB*>(?ZI8Dr#FoagvJpbfB|4TTqlQxsy-O8X9iuex*1jDM1TGORu z`~l#HR=U!z?<nZuW`;>UC`H+3#j5*f7nEkfUvO1K&01Y;a!6&zV%rU;^OAz+6UHmJ zAznWgV0hfx3;V-QR9|nReBVUGf2EeL-#~(fV!vAwl35xZk1h6U&5(MYPDu3&&HnHl zxI~Hj?uiAKiPm(Lp(VMN7|ZBp4Uj!PI=JvdmVr2Z`%a9S9|L)mHccWS3ZRWOjzza0 zbG-E9hTt{B6KS8RUVT?sYU(sp2sT!CuNK2XCgGoGRn5~=&{RNn`DzN81zm1+FJ4ET z^^8ZzRHLB+i)Lq*_oT(JacueXdZGWj7Q7n~_Z*a;D{*!9;Gm*zb3vIU%@8ybl{P^C zTBl`TC2nB*FWbMt04|Ru(~DT6VabFC&<N%h8CV*=T1Xfb57crR25%*EPl`P|t*paU zetz-Hv@z<5p8Sw=S@Nw1O6|V9r627q+$)U=uLV&`W2s^P{EFSrVtCyE&cU3DwlaJT zP6^}Ii@=i#YYNBC(GUkIOn!hV<-iZ#-D3?I&jAD%{iKsi)B?+x!&62l)R_$rzccpZ zcV-PRpX5#%cfe!3hh0tYTdDx#4Xr`1GDcX->w^EM)l8rx)1UU9M%cHJe-1<NO%j5z zeSKt7J!Qn!UhG9S{%8ZQs=%F7+s_5Hf=^C)P4W|LZ4VR^?06Z;{`9m`kAj)~OYZd^ z3E@Ij+i9EYwaiZ@8Zp>yfa{dPE5hIxM3q8+$WqcmzQUX84t@@c<>lc0t>JbbJczRt z$H;sOo#n0Zd`?M;#r50Mb9%s7f^L3Cn3brL?llE}Y+DQfegI!evUbyXZ|8sa%DsNb zn6zuI5)UND*<ku*=fJo5RXQrZi*gOLTbOz6yA6p3SWO1mDa&rQhK0WEG$#%mhy8*x zQjshnyj4IRau8mhu4i5vKtRJ!(~-Aerd2fexgB3<Ayh|z{4L5fVwp0HQf}O>hDZBN z4SBTlTuIoTBiRd9;gvZF_UFI{LutvGa5q4J5l+4-k@~=u@U}bQ8u9N_Yvnm(sp81} zjJNQXDz)VB;p@tFHq)*GrF~|Py<iEqo@Mk79FdH#J$**C|H65jk2^1dt!jF}m~jNx zQ}=t8D3(n^1y#KE=m_)YcWFIomO?~nldi%>^gXVF3c$p4;fTKD60(j?AE$XHT}kFM zlv)j~{<fG6)bE#>_irigtKPR>+ryAQpG>IsIw@mYSskJdVr#3!M2@_!TNL=@7Mfkd z>iQLzvvzu5zQ#B*+)KE}Ws>mD_||p*?`#bdt`fLUv{yXT60a|<S_ch1nC3$@3hZ3z zoDfbc?h|gj>7XGpwnD=tRDEx(BU_uti?a-+G0c5&AJ%0tgu-cY58!{g!8`AwMcOa! z3{>?6&JrJA>IOp!@+$UZ4i>bvrv|(4>IO7Cgyh6T+as>pug(+2)E<FX&4&<7v0E7i z1^S!dRg7ZzgBv=|l}D3J=>HMfE`exAG%jq8P^j8ZuC|x7moBhf0}NXr5cye<S<Vr$ z4Kzvl7|WfR0b_e_{H6`=0U@3W^P;XB<J}^>z$njya1T%>!ydPjfT#<;^=3TV$w)2) zOXC=AM|eINCP3Cz(hQN@<o4E)e`AZ_SSc_%j4QNeWJ4|P9*G<#WA&-V^0yXCrpkcD zWYC=ev?4usO(?dOfPJu2d+6<@CNICU5>i4Ur_T7y65b5P3=VLM8sJ7kJ-30OR0IXW zRec3he|-G4meJRIoCU--ph0i?X&Dw2W=U>^BQz(q&@0nMA{cEPoTy~LrcGe<SOcVv zu}+J8OTi-GyWkCnLc{t=8)+p}Kn>JVy^D$Z6L829J?PpZ*>B@jtC1@mvfX9DrZC5w r%G+bOttUB}rJ2r{Phh<gARRZ=B&4Ze?dn*mbg|&Y?RWh1)t513991IS literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/entry.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..d96d4f63d88205a53dfc897b739f743891b2b19e GIT binary patch literal 92 zcmV~$K@NZ*3<N-Ukm<oF?`Z_=q6lJ*(MNmt=1gxFh>Dl$k{?oRZUoQES)cv0mZaoB lnN=lRR9i`5(t{K^92~iUJY&7PttcWUR+O!)>p9~!#{4)AB6$D+ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/projectfingerprint.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..aefb5684b669ba38cb4a5f5c06587b8ce7caf94d GIT binary patch literal 823 zcmV-71IYZh|FVclV5e)C4z)!k5=Wkf=+Ndsq%w^U8znsuEkf)kUIrU0b(NObD^hnt zFu%{>wf$9fKEOB$5TiV*t&PORD-PrN`J!w{(_G)w`c+~MRkUXKs+x3K4Z`@_OQ2bx zQzE%m!Arp`T2YbtQ8G`Rod;&uW;)a|g!+w#XHt0)Sx8s)INN#e`nHa{fN;jSs)Q>1 zi&{e~0c3$Jd-^Fu^^v-&hs!FF&o&<?<QbAJjY^s1X#hQ!v8$XO_(@N+bpis4vAt<Q zRUqrdk9Oj2Wpiav*Mu_&KGH0Pz`#lJ#RPaWRaVB0A7hLY{uo{~-qBpLwy<IZbD?m? z;R`i94Ye`Ee93Re(WMOdy|}8-{lA1X*l_~BuO}i&>vUCa65<JRnZ*9Nyyk(xz+7p2 z6B+A%>sw0MbpJG>TrI@E)bQI5d93B#fCMH9$;f5~2GGrO1NbHJeOl-$Kmdbh=E&TC zALK(WANhD?VLZidT7RWPnwfy#Rr@cyujZcguRyQ2R`Ax#&tU^hM$vo;2Kv0C^>VRq z$l&}MJbU^AMmC2od_@6Ur=^x_M1!mHJE*X*oGj7YX~EaI+S~A{&cYc&vuJe7ITDmv zCuQLn6x^3Qtga^9!)MZK!?}FkzDy?Ht8*e|N;NHRKyTyO5S8T$v!4Oa4`mHoBO{3d zp3VKyn0`Lwe+yuB_xUq>E!C~kO=rdXRT}v8fALvdG0&$EF#^$iFs}g^w=sqAk$#;| z3>ey_iWTB(_uN*Og@qTV4gKA)o!^*}jX~vsq|e(Fy~p~D<NtXDkdu~t9Cb;%Dz+E5 zK;hW4*kAxgvk8`^q65iAFmEZi21Kp_NylgWW}pBERPRD3x$g46hg*!~)_{tHO(pA! zSP)Vy&mk`r@nYz4dz(w!gXM&(&X$K0tGeGZV-vy|iB$l1iwRPfan{5=RV`_w_Rh+` z$}nQiOK*;np&#Ju1rJqr6Ufv2<u;p;<B5LuyTWY9M_J=%%%+|vkNsgA9m^SEo#VP> zO&k*L2@^zF2+62d_8Cz1s?sAr4CnK}PkrRIM#@U8YCS{Y)WP1pfKkv{oG!@60xdT| BpsoM_ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/work.bin b/.gradle/configuration-cache/6277d4cb-02d2-4a97-aa8b-c333720dfd7a/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..258e7a24f0ee238baf2f953adfe0c7aa75f90086 GIT binary patch literal 456 zcmV;(0XP0QeGY@}#1XyOakc#&*g1FF^D-WfDShLTC{A*%<BVyW=y8LrRGH!1&d>}B z;gIdqZ91~bKx<x~M}bC7_-YNlc;mmy;4B8i|29x;=!zv#jQ;(QMLYqwTEUN663-vE z82)fD%LZb8o>kD3=6OQ)fZJAblPu{(deS6-+;%jIkD!z}4}<;4hZ(NakJH}p{y&P3 z>Emz>G6}KNts5+&(>8e<;`VcuY1tGv@{yg#Qn5COZ>z&+K9LGUaqQ_on)QlNXuT@t z=SEMnWsgUOZUVxSW7DBkR0A~YXFKcBIcH>8mzyRIw7WnAIQ_I)iQ(N@ulFR~w8EnD zQD=A_Q8_z4n3OcwRbxR%<<i%-83{PJV)sS$KrVPh`uR27QbTb+-9l8^d7(Ant6rF8 zym0JfvuegY@Oe!Lu-t_2TU@`25CMrPkPg}8M3rk1m{AJkK(i~vRR9ZfVC&yE7_;lI zzunGstY@q`NPTgpfp^>c@URu|$q5D_NdG@haTg&*uqHAuKqWdnVLH{WfT)Irau~2% ypf5+t;cr{kPubSUNR62S(HfZst|pTE1d;vACbX0q<r;iff<XX}O<K+4>ik`f&*t#} literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/685mgn6n09vojr2sffwrpu5ai/candidates.bin b/.gradle/configuration-cache/685mgn6n09vojr2sffwrpu5ai/candidates.bin new file mode 100644 index 0000000..e949960 --- /dev/null +++ b/.gradle/configuration-cache/685mgn6n09vojr2sffwrpu5ai/candidates.bin @@ -0,0 +1 @@ +96e7369f-9457-47f1-8304-05bf876b89f� \ No newline at end of file diff --git a/.gradle/configuration-cache/6b2wdv4910jdk5r1pwy2wgbme/candidates.bin b/.gradle/configuration-cache/6b2wdv4910jdk5r1pwy2wgbme/candidates.bin new file mode 100644 index 0000000..3fb71fd --- /dev/null +++ b/.gradle/configuration-cache/6b2wdv4910jdk5r1pwy2wgbme/candidates.bin @@ -0,0 +1 @@ +102cc785-1d0d-4dbb-a688-2153e21cdbf� \ No newline at end of file diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.globals.work.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.globals.work.bin new file mode 100644 index 0000000..0dcbcbe --- /dev/null +++ b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.globals.work.bin @@ -0,0 +1 @@ +- �f0���Jj�R&�Ν+��� \ No newline at end of file diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.strings.work.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..9b91f1008a19f7a4e52c47f56368f07e4b3a884d GIT binary patch literal 13375 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 VefO^8v{bxdfBkHBj!ZPaLf%<82Fd^c literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/_lib.work.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/_lib.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ddfba18607678744b01c8696ad2924cd4fdde0f GIT binary patch literal 4248 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/buildfingerprint.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..a54b5c49d679360496d9650e995e6897434c63e0 GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/entry.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..86a4fbdf27d325288d519314219e8ef90c106abc GIT binary patch literal 92 zcmV~$+YNvq3;;kF$TZQ!eM%`(BbH!&FtR_+;N9efW}<ZU65<rYsezWBpL^ujd&pWC l3YulUp*CHa>;RL(2PSL+5oPPct|mzcO>`gXb}sTc=YBfBB7gt@ literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/projectfingerprint.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1ec97848c846ae9f9377d7078b70eaf5d57e0a8 GIT binary patch literal 823 zcmV-71IYZS?G=NAtl>9#N~v$oejN!T`Smt@`911=AV1JjmM}Ii4Oc$+ZCN})4h_`Y z`!$z&Yu!5=8*ZhH<V2ffh9glAn7#pMq%usZ+y84=07Mi+pyZ0kn0B0#$mIJ(95V7t zR10)d;(xcPFpAKPJU3xHE#m&+^A0wPMvPcm1$W&fm0!&G7tT-#xOi5+=;d#Uo4Txj zc+T_R>eFV%!aShyDwmo&H||<^$4w{KX5ZkgsRp&!*hRBs%WSAJWhgvGO})n|1<E|G zE`nTfh;s1&wWmsl{=&!N&~xoui7RbTzK7e6jo+YQhZ{ZCOZ0<O0bv$6Yh`+~=xaOr z)`hOB`KM{oCw{=q^uS9aLMWCo0)*6HYFmI=w1B7Wkmx%dG0{s^S69A0hxljQsN_wC z`;2UGH<C<z$)UC25SsJ_&nM%oRq0dU9<aTz`GRxQMo@K~Ua1Wmw7RQ6y#!hvR(oK5 z;FR4Sq~_utjEt3o<_vh4rk>`Sgll~|^&L<pP7}EAB`7eeMve0TcXJcvZictDzY?~~ z1!;kj>Mx9#4%FyhTa!BN&q8Trrx?Iv%FAwgJK6BGAOM*_$#b8v+Vud^By%BaHSgjV zV9(K^g3#hYPQ3Ms;ORJW%jQMADODbA5vR_M8eaSA;bh3G0WuT~diNKGM~CbOFVVP| zhy+9IR`Jh(Y2tzQBBq=1?oO{qL?n|YQPIe(Ur16<s%=>yZhB#0+v{)_tSPh54OX8x z<dmj$|H|P3k^JkAg+oF?Yp90wqJTL?qkdV1`GOwB-4Mp`36n*J<wYe}9Ed!@rQdnJ zd<#yQ-RG&=_p%PVw^%q+z-Z+1rV)$qmgvD|JEXzEd<uI^%Dd+66I#$vwn%xJSIVg3 zV4jfuO;vS_&3GXHo5H@lT`pS<rk^A*U>T@BXq3-cwyp%0r`i4tS`?e}Aev!M!za{- z7jWKzuV+9Jo-xT&RSLz@u=yPzt(h^z)S*O4&=4C?R!zn2O3oyeXs1eAvd$G*As9SG zN+pbkGa<CQcGtudJC%we8VXboqbQyf1<i43jU=_=LyQNdPzd*YSh$ciZFa=41<Cfd BpGE)x literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/work.bin b/.gradle/configuration-cache/6c6d7154-1c12-44da-bab9-788cea5132be/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..dc9386c4abcf1e3ae11c1601e75a026f9154ee9f GIT binary patch literal 661 zcmV;G0&4vud|J@PH6EY23-$$z$6HH5+ERT3`;eGZ0YWOa&WAp6CMBMIYr!u%Th%uR zf9CQx8!)zfsU$-d-<ENO#=~A*`)&Fl9*5-1^Rc{wsy&CXx=)OG{;nyhH}ke*Hz%sq zXzW03aQnkE<2Rhk7pSD7l|?1^dAk!j=rrxJnd@&PmmfP>a3%C?Tn<>AbM+5Zn;0|w zN=e=Iu;yd<ydD%6=~rLI7!-t$7uG*hkKXbT<>0OArY4F_v0u^JNI$Lps#oP^gmu9L z1a<V_*#P#$s{W>)Y#LOOC)rl_#u+FVQi_BIz($dBP)0tJ7-%NU7fP~t@(?rN#IT#g zG_M|049Gb&b}m|D2WQ&%`7DI1H6lQK_W7|+kzdTYXF9<Ye)kJnGn;@UB00tKE$4SW z?(Pl=Kqoso_k?jGb#MUGy*zAw?j??^x7DfO_L8{ckKM*5<DW;kX=%L?Z%D`K+nN&b zHN<^D(`$C(7ja?-ka1v1jaRQ%%A!av8S2AD`<W%RVfTXHg%$jjaqYJwtv{De2=pHf z4Z&=uinSyAf%rnGc*{Ij7=Rh8^Os;jRJvxO6ZLzj3W(gg1E%o@cs9TIS{(QzO<yh~ zWV2ds_T`*0(<OE869&I}Lu^qT<{0dGUK2!c(}Z?Hcd?3!u37S)LYr*l7v*>7K6)2h zJdaZLuK+_el5x8nvO0x%Uo(&wV??UO{97dWB`W03_5vQSyR0))Fgw`WwHy5a0KcuP zV<Fpg-w?@Jz<{fa+(&XO{#&_e;0)S*!8Y3`phZ`6R`)$~U*d_>s*tMytU$^N-0V1& vzSP)fLcY;2u$weIEbmX0Y-3=#Hn1q2ydvozl)$?i=9T~THs{9bcUmns7iCFb literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/6czuitwtho9y27nvd4eawu40i/candidates.bin b/.gradle/configuration-cache/6czuitwtho9y27nvd4eawu40i/candidates.bin new file mode 100644 index 0000000..6d73c1e --- /dev/null +++ b/.gradle/configuration-cache/6czuitwtho9y27nvd4eawu40i/candidates.bin @@ -0,0 +1 @@ +5dbbc9a7-8a29-4ae7-b3f0-33b5a5e5203� \ No newline at end of file diff --git a/.gradle/configuration-cache/7kdhbijltiwsjnddlavxu2zpa/candidates.bin b/.gradle/configuration-cache/7kdhbijltiwsjnddlavxu2zpa/candidates.bin new file mode 100644 index 0000000..383b907 --- /dev/null +++ b/.gradle/configuration-cache/7kdhbijltiwsjnddlavxu2zpa/candidates.bin @@ -0,0 +1 @@ +f93c619e-5608-44c0-ae77-793c324d124� \ No newline at end of file diff --git a/.gradle/configuration-cache/8x4ypt5nue0899in5q5whr6kb/candidates.bin b/.gradle/configuration-cache/8x4ypt5nue0899in5q5whr6kb/candidates.bin new file mode 100644 index 0000000..18052fb --- /dev/null +++ b/.gradle/configuration-cache/8x4ypt5nue0899in5q5whr6kb/candidates.bin @@ -0,0 +1 @@ +0809f6f5-185b-4807-b8df-47cb0fd7076� \ No newline at end of file diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.globals.work.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.globals.work.bin new file mode 100644 index 0000000..dd0a55b --- /dev/null +++ b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.globals.work.bin @@ -0,0 +1,3 @@ +M�4�YG�4#���� +1z� + \ No newline at end of file diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.strings.work.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..8fb1e5b95e2e2c29b70d27d680ff574ee6218df2 GIT binary patch literal 14997 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%0Dc$W#qO5 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/_lib.work.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/_lib.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..eacef73970dec7093b9e4c9833dcd6796791162c GIT binary patch literal 5268 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 aJxe82N_>p0Bthx}w{?0(SRT3Ddj^&085KeR literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/build.work.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/build.work.bin new file mode 100644 index 0000000..c9a5b92 --- /dev/null +++ b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/build.work.bin @@ -0,0 +1 @@ +�U2 C��'���?��s�9Т� \ No newline at end of file diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/buildfingerprint.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..dfdeb78383531889ecc08356060e9bd6fca41066 GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/entry.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..749104dc118df8f64b2f39c8738a8fb00092c6a6 GIT binary patch literal 92 zcmV~$+YNvq3;;kFi1dRvP(>=m0tV`9Xq~}3Z)u|;{#nPlkc2wjGR=}Hhu2z2twboO jn&Jg}Z#f1Xpj_fW!p^WD%j0TOCJw0Fs@vsQ`7_4+L%<@I literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/projectfingerprint.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..b24c3ecca41c0347b093e575f39ec2012c273124 GIT binary patch literal 823 zcmV-71IYYjBlqC`&)GIET+e%0wy1eDeJ3;M4*oYYAk@*%Pfu7iN%8^00$3616+=H1 z({FWSC7LKgfm?zw5Nmt<O&m^pCw7TCQp%&!nwNAi4|y7j{re)ceBmIKW1Nnk?ff$@ zQU8q<qj6FJgD(ycfGDG$@a<cml`{6JuYOFS(cnIx|GsX$C*58zs$mQV>eK=!DQS|Q zM&o2NYCypniZ}ZKilC5*<kV3!(KTTdp%7%Nkhlj+3?HLcQFQ?Hfi@YPl-B-DdM}u6 z@fhF~S#vms+Dt$I{y?lpT`r_*qA`qaihWK_tpE=cL*pmWSeqGT`GvILXsHi)ByclR zZJtJ3Yb`ZG=S<NyY35eZpiN!i%zUy3-{tHr-cF-RX<8#cTAg;f-_m6qEy)l;kXn<= zdnifhH&@%Y&DNem=x#|Gv*KIh{{)M<#j&UcsZCI3ynrOPW3)-osn%)VA;9d5l#~?& zCa+|2#GK2BF~#u;)wmj}0wKV7;McYUvVwTFap3OhsSn)#jH?X}SA(BRgw&nnbXkH| zoXyE3JI94+>)^PB9-MM#v9sO0_Sj%;PNt#|Rk#ThYn1D+vQScrNBqdVC8;4|B@kH= zUIxs5KyBilC6IQVwbRMII(8~8(bv@8w?KC(ryDRB{!@xoz^V}e%=A=6fX}I$g12q? z&Zqv5Lg_C3Fw>5V;+@#oEf~L$E_2hYZ16iv18h7)DNv+vl`6oZS{PV8{S@h!O$_+H zE=fPvzNFO;%@?2lG6~(+IER)<1gHG+m`qQ}DIZXS0C6Y+7;MHYD@y^5A3|A4u;Wnc zF@R(@SlorPcs|>%4cv?Oy8)j%s=|zw*Y)n4tGWfhU5cjK&wlutW9&~g5p>iOK1u}* z7>I&VHnaAR6L9@nqu(*{aP0Lr$XaIMeU<v0yaIb`O`d70JUTorfyl1{Jka-qgLu6u zbdzk0noJeyQejrIT0Omim=OUWftHHiirm*)9;1$&SU-imNat)&4ZBDb=)8x9vd^fm zfAjRs{EwFFgR^+~7lkQF=}>o_R!c5iey>7+vS8w;8*Aq7Y5^Esf{FZS>oJ?lY?;;i BmDm6P literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/work.bin b/.gradle/configuration-cache/96e7369f-9457-47f1-8304-05bf876b89ff/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..98d85b816853665a46f44fa04cc61a6edf41c3dd GIT binary patch literal 796 zcmV+%1LOQbiu6HcHyrgHZvD}Pe)A!q#Fm8(6eRuEBy8dxsB8yv5Q7Z~s=+E{!h58Y zxb4N1;<8)2H@${rTxLAF_n9yw;Fq@zNk~b&dxz8z&@McKBQ){4?l3|Ihg7ue;m`R1 zyi@hd1i}mV$3FP7)_NWEGK7f(ef)#a1SGKV`DPVuPXeBZA(UI|`gy$zs1(H2SLlSd zbx5OQLd_Toa(>4RlMxAl4iXTl1#q_TXpq+ZPArgQ#4a+%R|_<Hr3Fl$mli{8ylKvO z7gY2fHa!jBJM&(5dKNY8orS2!6ObO(Z$tmlNZmJ^1$$e}CG2h6K0dRskZ70qHifQ6 zUoPG!neezT&i5+>)X~ZvJ$Ue+)kp?D<oOnM4XVow5VJsYE-&4IF3-)qt{Td#ayXu@ zGmkZ5U!R>x<m49rQTamAY`?7!5sQPL$K0APvFj=?;P%ZFvt_v1n7fE(6!!L)fkokc zt${=T4V)Gh1e0+C24M?Foy@|SVEB(2PrNFlO;w!90@t{P?L)z;G-;~JYA>4G2KDjY zVk8Yft~X8V_z7VvIHGqQCTGXHrgo7)!NO`22(5}$-aY`-9ek7yx!+(q1XF}tm?x@L z9mcFye!qukP}HOgjr~Oa=`2LPVzwpe2HphmNMY8-Mm7w>;Y=4z&nmz=yRdNu8H+nj zb*m#m(5K&}KkLo&=a?N8dA-ZO+xl4uG!8ViY~4K1j5IYfG9r^{o3*11u&;A}EDLn9 z=Kr0RM!l=d${)t$kz2>?*lfvXG%kz<(Y!6FtyReTGd)tm(&IKEMHGzZtMY31)V8sS zX3hO!*qisZ-XEldR_;IL!FMz?0R8r)gbl#!yu??RKfA$d>`s(5`&QT)7<xb6OJ8UC z!f)JUzVYq{@;haH@y*EWQ<;Gvvt@f>P2YOg6o-xO-*xC!(pMr;2EO-|BiXFtirph3 z2m+g-lT2szogAy$t^7q;|1x^o3YT_{6z_&65jh4@=lJ06v}t&JKy_R7_Tu4&|9!Ax a`8%)bsoFnjF}UAVw6XDCmOJM)%}U4<kd@^C literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/amg1wvcaaabrt4jjzabw7fe5w/candidates.bin b/.gradle/configuration-cache/amg1wvcaaabrt4jjzabw7fe5w/candidates.bin new file mode 100644 index 0000000..ca4d8de --- /dev/null +++ b/.gradle/configuration-cache/amg1wvcaaabrt4jjzabw7fe5w/candidates.bin @@ -0,0 +1 @@ +6277d4cb-02d2-4a97-aa8b-c333720dfd7� \ No newline at end of file diff --git a/.gradle/configuration-cache/configuration-cache.lock b/.gradle/configuration-cache/configuration-cache.lock new file mode 100644 index 0000000000000000000000000000000000000000..3fd0edea0291aaff6ff7c5f83c28aab825baba75 GIT binary patch literal 17 TcmZR+Z}jV+_O^YC7@z<EKaT|w literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/csrr7nvdo4rldjtfl3c2jferq/candidates.bin b/.gradle/configuration-cache/csrr7nvdo4rldjtfl3c2jferq/candidates.bin new file mode 100644 index 0000000..3156cc9 --- /dev/null +++ b/.gradle/configuration-cache/csrr7nvdo4rldjtfl3c2jferq/candidates.bin @@ -0,0 +1 @@ +da5353e4-2da1-4b2a-8d76-9f7a80dfac3� \ No newline at end of file diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.globals.work.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.globals.work.bin new file mode 100644 index 0000000..d2721d3 --- /dev/null +++ b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.globals.work.bin @@ -0,0 +1 @@ +����6�ԩ&U���,�bj��a\���JLne���kh�?���b� ���?UF��nܜ��^ \ No newline at end of file diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.strings.work.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..fae0e8b0bfebbf8f1d1f3cbbef200ea058f53f10 GIT binary patch literal 12246 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/_.work.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/_.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..071cb74a2eabb52656bc03cd7986c81470ff15d5 GIT binary patch literal 1901 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/buildfingerprint.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..e0803264681d3dad6f32cad2ba16ac809dab0def GIT binary patch literal 1831 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 V%a+52^%EF_Ft4y5jJ}ld&&{S|pd$bP literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/entry.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..60d7d1a12bbada14d3c431e7ed34b45285830df7 GIT binary patch literal 92 zcmV~$Q4&BP5CG6Rkl7E6^Q>%HwxYH%+?g|Yuea`A(m*n+$7jNMJd1=~nhUSBu;xe* lQFWyYj*>TWT0uEdMURDHL6*BqS=qBg<(#@hTHwzZ^8-CVB8dP1 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/projectfingerprint.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..2202fa37e6b64fd98d9c06e6d344481425b3598d GIT binary patch literal 566 zcmV-60?GYS3_bZ=gmYaprDQ=<vn&>adlyU4Z8;X3l80N6>hg6R(4y5t#UB^($!2Mg zdK=bbbw(k!KbCR$#D%PM^~l-L19-#Yq;+F`Cca(s#@2PzrE_(`#$`naIc{1-c~5Tl z!+Zj;kD0F=*TxZWGMAo03B^pX3Bt2dKJkQ>iT7Ha129x7mhYY3b=Jw6Ynav7d;p>@ zx#2f+Fmqq;@CCKPjs|Ta^Dbo7U%JXN=uNtmxp&Jc>{j@K>~ImDVfK6afCDBEO)UED z*X`6z)>cNK<lGLC8TX8ILB?%e3JnjPVIPpMjiJLRydRZ^Fx=SZHIZWa8V8t{pY{?T zJo_pZboNuT3X91I=@&8jhNZ0S86tQ#=&R*+vF$fVrOLDEJO5)BQ3~tK@>4-)a`m8y zGDHS~Tp2@@^u!~&#G<Ep&^73fiZ%7Bk$_=~Wp@`GY+ofOzAg=RH_Jg@kxiZRF7^&E zF=ie#LD<bXg>jcIhDH5#BOVr?6W1)*P%A=+1Bt==cHes?tcX)|rSW6#%q;q0m4UaY zQQv5eE<@a~^CAC>%Di-;6Q}f!8cWvc*0Fw+F(K$*xbw~gtjfwdo+11HIzEPPQHr_N zFSIzFsk5VRL9?&xEOzWmaaV=ooeTnfC~VkS=ztnfW^M+=tWe{tHkR51<Nq*WzrP@y zG_4{_>c4P?Rw8?Wpp>a&?O~iPYcs3vm39Ys{$*erzCvRSxzf1o$dxksnq`~1zLqs; Ebec*YumAu6 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/work.bin b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/work.bin new file mode 100644 index 0000000..0fabf48 --- /dev/null +++ b/.gradle/configuration-cache/da5353e4-2da1-4b2a-8d76-9f7a80dfac3d/work.bin @@ -0,0 +1,4 @@ +E[�$��qQ����>b�Ԃ�X�^C�RK�� ��U�pY��hΖ��p����*�R�ze��@dV�e_WKy=T$��_Wf��n���!|�R��_� �ɘ7���2�w�4|�\��:�}�H�-����y@2Q��K�Ȑ�B@YT� +yh�G�l��s�e�, +p���e�.�Έ��<��b�� +T�`������.@�";�6��<�����Hܿ�z M1P}���9s?�ו,�'tG��W��:w���|ɪ�����������=e�2�|��74�]�C����]��dT)Bh���Ufa�⌐5����R)r��)���KR��F����cC�.h(ڹ�A� \ No newline at end of file diff --git a/.gradle/configuration-cache/erwtyj4abzfi70xys5njdh4cd/candidates.bin b/.gradle/configuration-cache/erwtyj4abzfi70xys5njdh4cd/candidates.bin new file mode 100644 index 0000000..389ee6c --- /dev/null +++ b/.gradle/configuration-cache/erwtyj4abzfi70xys5njdh4cd/candidates.bin @@ -0,0 +1 @@ +f64db575-a480-4fdc-82c4-6fc81d961b4� \ No newline at end of file diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.globals.work.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.globals.work.bin new file mode 100644 index 0000000..82e8315 --- /dev/null +++ b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.globals.work.bin @@ -0,0 +1 @@ +����R�P<-Op2�0�X�| \ No newline at end of file diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.strings.work.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..7d9a2d6e415efc655ea94cb22e504a643027409d GIT binary patch literal 14949 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/_lib.work.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/_lib.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..be1b036f2261e6e77d7bfa9bfee8040747ef64a8 GIT binary patch literal 5131 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/buildfingerprint.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..808685e648b7f7ced10e8b40077f064d4656372b GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/entry.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..f934950902c133bc20c36663e3a545d364fa1685 GIT binary patch literal 92 zcmV~$NeX~43;@9PK@w1WP-tQsv35yB?4!MTcV_V!BS)PF4eG>8i)*-pG@U>1A(hOK l(Jb)|wU?cPDVStd+^`D}%JEERG1(-bNjax_Tv1-<+z&NDB4q#o literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/projectfingerprint.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..923edfea6006b78c5bb03f30af4dc8f141230489 GIT binary patch literal 823 zcmV-71IYZCiNnuueGmVgG#ZVbWlse$62aOY(o&fEYF_hd0#K;9&g4r`@16}Qn)Fif zy}*W4AAm-0-44;w#bBy+o6y3c-nq;zi@mw-^A`4lUiN%+Dz02xnV>sulpLX_I=dv^ zekyqzRlaG@Mssy;$FMEbKqFR0P#o?(?+o`qL-0cG2-F}ul{29hdw%LFJ~Aid+fcBv zd{$|^5zEj71rM)hoMWuz!QBkOy@eLJ#e)rHLN&B~JW3c6{68wD2M>4CvwDm+7d^x| zvL)jTrw8$XT||_K2aRR_I>;ot1{Ls{eI)a^-X@KT;lIa`hlKI#5j2Rsmj*hdFCwz3 zGA7@SPdw=Tcf)pm>qqH*R8CKHJC7N1aU@<yj!}98ZVUxA5^kz_!eIM4X;an&AdS{3 zUubwb_-z{ChpO<dyYh6*^iS;@p6DFaIOE#V+M#a&Zr+fEhy>nLr94~@e6lqHS4x62 zCMk@!JHEKIJWQOIp;&Tc&CkCyga=8WHz)N!U_EQB-OIIWOn7<IG01p2=&M1ylKnvg z6}MQhnCY&?)6--}HKZ5LU(N5x6DLdvAXivzPbUU1Ks8a4CWS!`)<ojFJXYHF^8Ved zEw)O(oE<wJ>HK~1d28shQzOLGW~chTDQ%<;1X%b*9+F;%X4UJwS%)VOO8|BJl%Yk> zHG@xgXRds1!`gMjwDdXU{iVdqaU{oR!o$)t1uX+wWAB1~;$$;3E0RpnJS%}Vr;1bn z%%&Fjv87OV<Z~&jYFKME5>a{w7B4X^63DT@V<=j31NypvJbi1!D8G_++}+4NQ1)1a zy`SfOO5rqoJ5~eiX{e?{qr;n7UC%O{9{THJ7q&huX|VBtQ|op4*b$#Sw}gR_95TRC z9IX-jn1Onch|s7ylKpYEweMhQm7EQtEA)Xxe$_0drteVuXruL9!KFM+@)-Msfq)?i z3B6jIF>eW0^>D@}sud02p)`bz!RR}{IBhMDoi)uFqNx`r#(Ye^K8Ge;Y3u>SpLy$0 zsI<J17t9i*L}XPj6%JFMJsLLUtyn-vnJ3@sLki6k`~=xjF?Kb#H}6M2^7>q!#5%e| Bk$nIF literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/work.bin b/.gradle/configuration-cache/f64db575-a480-4fdc-82c4-6fc81d961b4c/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e22f193680549e999f2c92fc73f4d1cc79d0cad GIT binary patch literal 751 zcmV<L0ucS+2f!g~@;)BL%w5T!OKJNco7PJP29Xyk-sWv`+O%Oab_8c4Fj`UxgjVg> ztW}r{sDba(GaY1P(h4Ft-Sg9>=2gk4E1k{N%Y>$3fQW9>JL=S9k#Co0o3eu)P54_5 z-SOw9MxL4U^SWb2ko;BT7YWmNN?Pv)<Vc}m2{^fLpMUvM!l%Rk$C}~=^{V7oYQr<Q zgGW2-rxg@3M;-RiSq^~BZ4JSu$F)VQo1OW5zg5_(-xB~A?uUn^dB9zVXJr0l%0y%O za!(McL<&b<@~$^KDcC(O_m_m7cj?fzKEM|2&^jcr?Efk0RIWW_<}unMcJ|BLLk@JR z9mtHP7Hh-aB|8uQhHqq2#Y1!VbbzjIY*>7QIp$dw_$L=lMsvTLO0zE|sIfuU2r7Ih z5JzxDhx~BkK6PtmRI=5hms<JE5YF509<b+*cwv)zQIf|n5_4I>d|n29s8(HJj3z?2 zJFVoNI;Jy1O#&u>k|NHl4K!f$YMgWyc&tFhUGj)@-cYMJRr15$Gn_)RG!D*}JWUC? zyw1}kZK7aVnN{nAypeq<lbP>_0=2_1_eriPJJ2=g{rq~MxS1pKHCO!+pC9{xx>8c{ zl2w=~KST$0*s|`baMqE*8+n}Z&pqb|J~~cvW)`I#B{`OHYZoHOm-VNXcR5cvM`h^D zA)Q)FTBOHfR`nkYSZ~<~D{BDju0%!hY}-v%XX}$eFIh`sFHUM^3Z-!H|KsBVIXx=` zp$qk6Nr?&wTBnLqxE!PAvrm9+gZZxXF<PMJT1*{0mV+Uxfdx*9H|4yR;-G=RwEzfV z%75xue3JYJvm)?cOROWNfBDp(PGxbIQH?7?Kv-(`1tvu@@D#x43KVZm$G3Ppl9qa9 zs5ie6WJwlWWLOnwM^r%%@y2GkfiBIG1!#FEqtkpA0&&Hk79%U_2j~*3i}D63(yS<D h!=wimjyaq$p6M_MT=pR;e<nP!0i3m2W@?(e=(#yiZ1VsB literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.globals.work.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.globals.work.bin new file mode 100644 index 0000000..c2b168d --- /dev/null +++ b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.globals.work.bin @@ -0,0 +1 @@ +o���m�c-�����u1�G \ No newline at end of file diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.strings.work.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/.strings.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..72b07155bfacc564846aead07fece4599b4fc63e GIT binary patch literal 13356 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 C;`_M( literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/_lib.work.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/_lib.work.bin new file mode 100644 index 0000000000000000000000000000000000000000..d5aaeed2e05ac82dc45c6abe335e84e44527a97e GIT binary patch literal 4159 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 J1E=_RPV9cS2;cw! literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/buildfingerprint.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/buildfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..009d9e10b03bb840cdb1287468c9bb32596bfce0 GIT binary patch literal 3094 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 literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/entry.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/entry.bin new file mode 100644 index 0000000000000000000000000000000000000000..d6427877c28112354548ec7b60b68c913426af65 GIT binary patch literal 92 zcmV~$!3}^Q3;;kF$TX2KP{E=#QV0}`OZ)ThowHMdYdz%Y6P+?zNUJB|pr5sHluVFO k^`IMSD<?(mpq!~=!p5*6U(X^%IdMegB1^r-&aW}%2RAe#ZvX%Q literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/projectfingerprint.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/projectfingerprint.bin new file mode 100644 index 0000000000000000000000000000000000000000..d94ab1bbf28c2d25da31a4797374e05b6d16eb53 GIT binary patch literal 823 zcmV-71IYY;^`vu%2{rwUBo8T2N}-u|QaSv06+nZ*3F{%*870PZrJNMa7J%Bb8umO3 zyJ$=^Dn^QsLKp1rynir4b2B@fYnw|;I(xM8le-P$!ma~p0WepJkg`t;TTjH4S6hf> zeOp2sTjFolC@kn5?n{#a-sf`E<XpM%Kp=8={GB>JHt@{*R`WV(!B2mrlBuFQL}iVy z)-tpkq*8}9`=3))Dmnk1Cpmt)pNI9Ip06(Ov2$)id=FNf`4gmt1MXxXG3z4t>}ecR zqdbxXyS`SEnDQltE?WIvk%V8FW!N5*<fV7x@--iPHl+`ZB7WFT?GMjXkJ3KnZ@VCT zjrfm->GG(;=*Kg{=!4s4meRlSa+&jS3*9HR;;j}u@jcmw&>Hlz@9VIB4rRA5+#!yd z!}L@dCB-kb#(>FFA*K~iJ+IK#oniW$oK+dI3$PTL_v~*zfk~SKL<=|cOvCz~f9Ir| zZioVT4w6wkXqMlXnJigsmsb-1Mz@*`;=~smHTm$)*C3qimIjP2M~g?8a1sG{h^IG9 zJeUyZf>GXCtzDQq{!n5B1_V%@RVVL}4i0nuj<+97EoW!j91Auk$C^E5jcit2(VG^L zZ}sLQA}?2<<1@x>KvyOV#*@Cf(rEdInu%Wa_xWFxy{mKCF0YJM;y-q=m0CdZ-hSrj zUjYoSr=%XUEih;UgaV31et`L<u5uiScCSpUbo}2Pe&v9y3k~c2`B}4I61anuJ0!~X zX_vEQLM-F7$aDhIEoMy07;rNHz-xWA0~GYW_fm7eVuytun`t)nIc64@iN08lBH^em z2SxtuEXMukG@&LGgrBFB9wcP^b8Kb36C!qGvVWuuYOU)UVvti5u5wekUN{MSYaOXc zdN4&Imaapmx?!Bh)BobycjwDgV@Zuo^d{<qj)i)xtp*dp2XcNuLL6Mgy=XwZlr_H; z{0(6Q1K_M<+AW=L$4si{9hzeAL}SIf>AZ+m&<O@kTYZ>HvWM!uMhSO>-&k(!X=59K z&Nc?3MFY9F={@F~z4{T?i;dV+{|95%(6`r4{{)HAuWxi-o>4Ou2KMamq-t=#`?_St Bm&X7A literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/work.bin b/.gradle/configuration-cache/f93c619e-5608-44c0-ae77-793c324d124e/work.bin new file mode 100644 index 0000000000000000000000000000000000000000..413771a23b1d0eaa927f04b6b5cdeb8673c406a4 GIT binary patch literal 632 zcmV-;0*C#=kLK;weU_MOn9+6W9kO3JTG7mUL^aeraF(rL0bK~I+EneRj<_I=d2dGF z87|^z<h%Iic~RbI(f&<UQV!xl3^zgBIRLR53kW!pJZ<LG0Nr+>rnJ1HUbT1z{fZE$ zmH0;Z(9oys2|C33RGZC;JmfRl*>dU*qiMmSU{YD2B_q}9Dd{s`xcOT5m1q<>I*?iC zgWq4O=+fymVv<2z7vhQ*@-?^UWay}=O$vb})u?U$zf;u<f2z>s0t-|0pSH7UpCPXa zkV|qaSM26uMD?8&e9YNZxh_)_iiaWX;&g%S1Q~ULX@)choUdJXLQ{&vI|ao~@wqo1 z6W5R0aV$m>>bRouQ8}M(V|WB6N^mv%&vQpwWT75lwh+P_rI+n8Ti!~0MI$|0VSKoQ zUZ^wVN$23UTL>5W{rhc1Y+b5CkHt!q)TEqdQywamx^}UIkQwFF)lh|VH04TI+zP9* zj}FG_)RTaT;)BqZzjFY@nhN@Ffk^6Fwh%<JV?;2jF#oWHZ~LzXdl&PVYtDBQ#2qK) z7d8N=`G)I=9bTs8ZBe?J*2ASR$cJx~ku;{GXa;9NJagd4wCih`YJ`5#oH@{FocMRX zQ^tDwg&QDo!|+-4?6I*n43yssDZ{^P3TFdN*`oqpTA|u+fw~x9J<<4G?9avjlj;mY zG#kmJ;}owzxWx_(6U_$tm2bIrgwCeL^Z+6}?D4VSlS(<WdmGp+#P*GTo_g9P#QHlI zPA5-bbu(P6M=XLOK=BF@kMe!;A0Mgpb7@Y3^!Y+eg_X-`<i4UYFzzFr26_j5RI#TK SOqN4e^V2?U6)iG>*m@L%U_dDV literal 0 HcmV?d00001 diff --git a/.gradle/configuration-cache/gc.properties b/.gradle/configuration-cache/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe new file mode 100644 index 0000000000000000000000000000000000000000..20ba08c7b7d4cb61cc3d0e8b825f5bda4882dea5 GIT binary patch literal 8 PcmZQzV4QmUkLqs#3Y-Iu literal 0 HcmV?d00001 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..aa870fa --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "bracketSpacing": true, + "arrowParens": "avoid" +} \ No newline at end of file diff --git a/README.md b/README.md index 6b8b5d6..1fddc91 100644 --- a/README.md +++ b/README.md @@ -1,143 +1,146 @@ -# Daily Notification Plugin for Capacitor +# Daily Notification Plugin -A Capacitor plugin for scheduling and managing daily notifications with advanced features and robust error handling. +A Capacitor plugin for scheduling and managing daily notifications on Android devices. ## Features -- Schedule daily notifications with custom time and content -- Support for different priority levels -- Timezone-aware scheduling -- Offline support with caching -- Comprehensive permission handling -- Automatic retry logic -- Detailed notification status tracking -- Configurable settings management +- Schedule daily notifications with precise timing +- Handle system state changes (battery, power, etc.) +- Support for adaptive scheduling based on device state +- Background task management +- Battery optimization support +- Rich logging system +- Comprehensive error handling ## Installation ```bash -npm install daily-notification-plugin -npx cap sync +npm install @timesafari/daily-notification-plugin ``` -## iOS Setup - -No additional setup required for iOS. The plugin automatically handles all necessary configurations. - ## Usage -### Basic Usage - ```typescript -import { DailyNotification } from 'daily-notification-plugin'; +import { DailyNotification } from '@timesafari/daily-notification-plugin'; + +// Initialize the plugin +const dailyNotification = new DailyNotification(); // Schedule a daily notification -await DailyNotification.scheduleDailyNotification({ - url: 'https://api.example.com/updates', - time: '09:00', - title: 'Daily Update', - body: 'Your daily update is ready' +await dailyNotification.scheduleDailyNotification({ + sound: true, + priority: 'default', + timezone: 'UTC' }); -``` -### Advanced Features +// Get notification status +const status = await dailyNotification.getNotificationStatus(); -#### Custom Priority - -```typescript -await DailyNotification.scheduleDailyNotification({ - url: 'https://api.example.com/updates', - time: '09:00', +// Update settings +await dailyNotification.updateSettings({ + sound: false, priority: 'high' }); -``` -#### Timezone Support +// Cancel all notifications +await dailyNotification.cancelAllNotifications(); -```typescript -await DailyNotification.scheduleDailyNotification({ - url: 'https://api.example.com/updates', - time: '09:00', - timezone: 'America/New_York' -}); +// Get battery status +const batteryStatus = await dailyNotification.getBatteryStatus(); + +// Request battery optimization exemption +await dailyNotification.requestBatteryOptimizationExemption(); ``` -#### Check Notification Status +## Configuration -```typescript -const status = await DailyNotification.getNotificationStatus(); -console.log('Notification status:', status); -``` +### Android -#### Update Settings +Add the following permissions to your `AndroidManifest.xml`: -```typescript -await DailyNotification.updateSettings({ - sound: true, - priority: 'high', - timezone: 'America/Los_Angeles' -}); +```xml +<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> +<uses-permission android:name="android.permission.USE_EXACT_ALARM" /> +<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> +<uses-permission android:name="android.permission.WAKE_LOCK" /> +<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> +<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> +<uses-permission android:name="android.permission.INTERNET" /> +<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ``` -## API Documentation +## Development -### Methods +### Prerequisites -#### scheduleDailyNotification(options: ScheduleOptions) -Schedule a new daily notification. +- Node.js 14 or later +- Android Studio +- Android SDK +- Gradle -#### getLastNotification() -Get information about the last delivered notification. +### Building -#### cancelAllNotifications() -Cancel all pending notifications. +```bash +# Install dependencies +npm install -#### getNotificationStatus() -Get current notification status and settings. +# Build the plugin +npm run build -#### updateSettings(settings: NotificationSettings) -Update notification settings. +# Run tests +npm test +``` -#### checkPermissions() -Check current notification permissions. +### Project Structure -#### requestPermissions() -Request notification permissions. +``` +daily-notification-plugin/ +├── android/ # Android implementation +│ ├── app/ # Main application module +│ └── build.gradle # Root build configuration +├── src/ # TypeScript source +├── tests/ # Test files +├── package.json # Package configuration +└── README.md # This file +``` -### Types +## Contributing -```typescript -interface ScheduleOptions { - url: string; - time: string; - title?: string; - body?: string; - sound?: boolean; - priority?: 'high' | 'default' | 'low'; - timezone?: string; -} - -interface NotificationSettings { - sound?: boolean; - priority?: string; - timezone?: string; -} -``` +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add some amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request -## Error Handling +## License -The plugin provides detailed error messages for various scenarios: -- Invalid parameters -- Permission issues -- Scheduling failures -- Invalid time formats -- Invalid timezone identifiers -- Invalid priority values +This project is licensed under the MIT License - see the LICENSE file for details. -## Contributing +## Author -Contributions are welcome! Please read our contributing guidelines and submit pull requests to our GitHub repository. +Matthew Raymer -## License +## Security + +This plugin follows security best practices: + +- Uses AndroidX for modern security features +- Implements proper permission handling +- Follows Android security guidelines +- Uses secure storage for sensitive data +- Implements proper error handling +- Logs security-relevant events +- Uses secure communication channels +- Implements proper access control +- Follows Android's security model +- Uses secure defaults + +## Changelog -MIT License - see LICENSE file for details +### 1.0.0 +- Initial release +- Basic notification scheduling +- System state handling +- Battery optimization support +- Background task management +- Rich logging system diff --git a/android/Configure b/android/Configure new file mode 100644 index 0000000..e69de29 diff --git a/android/app/build.gradle b/android/app/build.gradle index 0bb3814..43b3d51 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,15 +1,12 @@ apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'jacoco' android { namespace "com.timesafari.dailynotification" - compileSdkVersion 33 - buildToolsVersion "33.0.2" + compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId "com.timesafari.dailynotification" - minSdkVersion 22 - targetSdkVersion 33 + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -22,98 +19,27 @@ android { buildTypes { release { minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - testOptions { - unitTests.all { - useJUnitPlatform() + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } repositories { - google() - mavenCentral() - maven { - url "${project.rootDir}/capacitor-cordova-android-plugins/src/main/libs" - } - maven { - url "${project.rootDir}/libs" + flatDir{ + dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs' } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion" + implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion" + implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion" implementation project(':capacitor-android') + testImplementation "junit:junit:$junitVersion" + androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion" + androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion" implementation project(':capacitor-cordova-android-plugins') - - // Android SDK - implementation 'com.android.support:support-v4:28.0.0' - implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support:design:28.0.0' - - // AndroidX Core - implementation 'androidx.core:core:1.9.0' - implementation 'androidx.core:core-ktx:1.12.0' - - // AndroidX AppCompat - implementation 'androidx.appcompat:appcompat:1.6.1' - - // AndroidX Test - testImplementation 'androidx.test:core:1.5.0' - testImplementation 'androidx.test:runner:1.5.2' - testImplementation 'androidx.test.ext:junit:1.1.5' - testImplementation 'androidx.test.espresso:espresso-core:3.5.1' - testImplementation 'androidx.test:rules:1.5.0' - testImplementation 'androidx.test:core-ktx:1.5.0' - - // JUnit - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.2' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.2' - - // Mockito - testImplementation 'org.mockito:mockito-core:4.5.1' - testImplementation 'org.mockito:mockito-inline:4.5.1' - - // AndroidX WorkManager - implementation 'androidx.work:work-runtime:2.8.1' - - // AndroidX Room (for local storage) - implementation 'androidx.room:room-runtime:2.6.1' - annotationProcessor 'androidx.room:room-compiler:2.6.1' - - // AndroidX Lifecycle - implementation 'androidx.lifecycle:lifecycle-runtime:2.7.0' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.7.0' - - // AndroidX Security - implementation 'androidx.security:security-crypto:1.1.0-alpha06' - - // AndroidX Notification - implementation 'androidx.media:media:1.7.0' - - // AndroidX Broadcast - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' - - // Capacitor dependencies - implementation 'com.getcapacitor:capacitor:5.0.0' - implementation 'com.getcapacitor:capacitor-android:5.0.0' - - // Testing dependencies - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - androidTestImplementation 'androidx.test:runner:1.5.2' - androidTestImplementation 'androidx.test:rules:1.5.0' - androidTestImplementation 'org.mockito:mockito-android:4.5.1' } apply from: 'capacitor.build.gradle' @@ -124,5 +50,5 @@ try { apply plugin: 'com.google.gms.google-services' } } catch(Exception e) { - logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work") + logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work") } diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index 42df55f..fdb4970 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -9,6 +9,11 @@ android { apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { - implementation project(':capacitor-android') - implementation project(':capacitor-cordova-android-plugins') -} \ No newline at end of file + + +} + + +if (hasProperty('postBuildExtras')) { + postBuildExtras() +} diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/.LCKDailyNotificationPluginTest.java~ b/android/app/src/androidTest/java/com/timesafari/dailynotification/.LCKDailyNotificationPluginTest.java~ deleted file mode 100644 index 146077b..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/.LCKDailyNotificationPluginTest.java~ +++ /dev/null @@ -1 +0,0 @@ -/home/matthew/projects/timesafari/daily-notification-plugin/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java \ No newline at end of file diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConfigTest.java b/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConfigTest.java deleted file mode 100644 index bde1c97..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConfigTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * DailyNotificationConfigTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the DailyNotificationConfig - * - * Features: - * - Unit tests - * - Singleton pattern - * - Configuration management - * - Default values - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.TimeZone; - -import static org.junit.Assert.*; - -@RunWith(MockitoJUnitRunner.class) -public class DailyNotificationConfigTest { - private DailyNotificationConfig config; - - @Before - public void setUp() { - config = DailyNotificationConfig.getInstance(); - } - - @Test - public void testSingletonPattern() { - DailyNotificationConfig config2 = DailyNotificationConfig.getInstance(); - assertSame("Config instances should be the same", config, config2); - } - - @Test - public void testDefaultValues() { - assertEquals("Default max notifications should be 10", 10, - config.getMaxNotificationsPerDay()); - assertEquals("Default timezone should be system default", - TimeZone.getDefault(), config.getDefaultTimeZone()); - assertTrue("Default logging should be enabled", config.isLoggingEnabled()); - assertEquals("Default retention days should be 7", 7, - config.getRetentionDays()); - } - - @Test - public void testMaxNotificationsPerDay() { - config.setMaxNotificationsPerDay(5); - assertEquals("Max notifications should be 5", 5, - config.getMaxNotificationsPerDay()); - } - - @Test - public void testDefaultTimeZone() { - TimeZone newTimeZone = TimeZone.getTimeZone("America/New_York"); - config.setDefaultTimeZone(newTimeZone); - assertEquals("Default timezone should be America/New_York", - newTimeZone, config.getDefaultTimeZone()); - } - - @Test - public void testLoggingEnabled() { - config.setLoggingEnabled(false); - assertFalse("Logging should be disabled", config.isLoggingEnabled()); - - config.setLoggingEnabled(true); - assertTrue("Logging should be enabled", config.isLoggingEnabled()); - } - - @Test - public void testRetentionDays() { - config.setRetentionDays(14); - assertEquals("Retention days should be 14", 14, - config.getRetentionDays()); - } - - @Test - public void testResetToDefaults() { - // Change values - config.setMaxNotificationsPerDay(5); - config.setDefaultTimeZone(TimeZone.getTimeZone("America/New_York")); - config.setLoggingEnabled(false); - config.setRetentionDays(14); - - // Reset to defaults - config.resetToDefaults(); - - // Verify defaults - assertEquals("Max notifications should be reset to 10", 10, - config.getMaxNotificationsPerDay()); - assertEquals("Default timezone should be reset to system default", - TimeZone.getDefault(), config.getDefaultTimeZone()); - assertTrue("Logging should be reset to enabled", config.isLoggingEnabled()); - assertEquals("Retention days should be reset to 7", 7, - config.getRetentionDays()); - } -} \ No newline at end of file diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConstantsTest.java b/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConstantsTest.java deleted file mode 100644 index 7d91baa..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationConstantsTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/** - * DailyNotificationConstantsTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the DailyNotificationConstants - * - * Features: - * - Unit tests - * - Constant validation - * - Default values - * - Error messages - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; - -import static org.junit.Assert.*; - -@RunWith(MockitoJUnitRunner.class) -public class DailyNotificationConstantsTest { - - @Test - public void testDefaultValues() { - assertEquals("Default title should be 'Daily Notification'", - "Daily Notification", DailyNotificationConstants.DEFAULT_TITLE); - assertEquals("Default body should be 'Your daily update is ready'", - "Your daily update is ready", DailyNotificationConstants.DEFAULT_BODY); - } - - @Test - public void testNotificationIdentifiers() { - assertTrue("Notification ID prefix should start with 'daily-notification-'", - DailyNotificationConstants.NOTIFICATION_ID_PREFIX.startsWith("daily-notification-")); - assertEquals("Event name should be 'notification'", - "notification", DailyNotificationConstants.EVENT_NAME); - } - - @Test - public void testSettingsKeys() { - assertEquals("Sound setting key should be 'sound'", - "sound", DailyNotificationConstants.Settings.SOUND); - assertEquals("Priority setting key should be 'priority'", - "priority", DailyNotificationConstants.Settings.PRIORITY); - assertEquals("Timezone setting key should be 'timezone'", - "timezone", DailyNotificationConstants.Settings.TIMEZONE); - assertEquals("Retry count setting key should be 'retryCount'", - "retryCount", DailyNotificationConstants.Settings.RETRY_COUNT); - assertEquals("Retry interval setting key should be 'retryInterval'", - "retryInterval", DailyNotificationConstants.Settings.RETRY_INTERVAL); - } - - @Test - public void testSettingsDefaultValues() { - assertTrue("Default sound should be true", - DailyNotificationConstants.Settings.DEFAULT_SOUND); - assertEquals("Default priority should be 'default'", - "default", DailyNotificationConstants.Settings.DEFAULT_PRIORITY); - assertEquals("Default retry count should be 3", - 3, DailyNotificationConstants.Settings.DEFAULT_RETRY_COUNT); - assertEquals("Default retry interval should be 1000", - 1000, DailyNotificationConstants.Settings.DEFAULT_RETRY_INTERVAL); - } - - @Test - public void testPluginMethodKeys() { - assertEquals("URL key should be 'url'", - "url", DailyNotificationConstants.Keys.URL); - assertEquals("Time key should be 'time'", - "time", DailyNotificationConstants.Keys.TIME); - assertEquals("Title key should be 'title'", - "title", DailyNotificationConstants.Keys.TITLE); - assertEquals("Body key should be 'body'", - "body", DailyNotificationConstants.Keys.BODY); - assertEquals("Sound key should be 'sound'", - "sound", DailyNotificationConstants.Keys.SOUND); - assertEquals("Priority key should be 'priority'", - "priority", DailyNotificationConstants.Keys.PRIORITY); - assertEquals("Timezone key should be 'timezone'", - "timezone", DailyNotificationConstants.Keys.TIMEZONE); - } - - @Test - public void testChannelSettings() { - assertEquals("Channel ID should be 'daily_notification_channel'", - "daily_notification_channel", DailyNotificationConstants.Channel.ID); - assertEquals("Channel name should be 'Daily Notifications'", - "Daily Notifications", DailyNotificationConstants.Channel.NAME); - assertEquals("Channel description should be 'Daily notification updates'", - "Daily notification updates", DailyNotificationConstants.Channel.DESCRIPTION); - assertTrue("Channel should enable vibration", - DailyNotificationConstants.Channel.ENABLE_VIBRATION); - assertTrue("Channel should enable lights", - DailyNotificationConstants.Channel.ENABLE_LIGHTS); - } - - @Test - public void testTimeConstants() { - assertEquals("Milliseconds per day should be 86400000", - 86400000, DailyNotificationConstants.Time.MILLIS_PER_DAY); - assertEquals("Maximum hours should be 24", - 24, DailyNotificationConstants.Time.MAX_HOURS); - assertEquals("Maximum minutes should be 60", - 60, DailyNotificationConstants.Time.MAX_MINUTES); - } - - @Test - public void testErrorMessages() { - assertEquals("Missing parameters error message should be correct", - "Missing required parameters", DailyNotificationConstants.Errors.MISSING_PARAMS); - assertEquals("Invalid time error message should be correct", - "Invalid time format", DailyNotificationConstants.Errors.INVALID_TIME); - assertEquals("Invalid timezone error message should be correct", - "Invalid timezone", DailyNotificationConstants.Errors.INVALID_TIMEZONE); - assertEquals("Invalid priority error message should be correct", - "Invalid priority value", DailyNotificationConstants.Errors.INVALID_PRIORITY); - assertEquals("Scheduling failed error message should be correct", - "Failed to schedule notification", DailyNotificationConstants.Errors.SCHEDULING_FAILED); - assertEquals("Permission denied error message should be correct", - "Notification permission denied", DailyNotificationConstants.Errors.PERMISSION_DENIED); - } -} \ No newline at end of file diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java b/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java deleted file mode 100644 index b831caf..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * DailyNotificationLoggerTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the DailyNotificationLogger - * - * Features: - * - Unit tests - * - Log level testing - * - Logging configuration - * - Error handling - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -import static org.mockito.Mockito.*; - -@RunWith(MockitoJUnitRunner.class) -public class DailyNotificationLoggerTest { - private DailyNotificationLogger logger; - - @Before - public void setUp() { - logger = new DailyNotificationLogger(); - MockitoAnnotations.openMocks(this); - } - - @Test - public void testLogLevels() { - // Test each log level - logger.log("Debug message", DailyNotificationLogger.Level.DEBUG); - logger.log("Info message", DailyNotificationLogger.Level.INFO); - logger.log("Warning message", DailyNotificationLogger.Level.WARNING); - logger.log("Error message", DailyNotificationLogger.Level.ERROR); - - // Note: Actual verification would require capturing log output - } - - @Test - public void testLogWithThrowable() { - Exception e = new Exception("Test exception"); - logger.log("Error with exception", DailyNotificationLogger.Level.ERROR, e); - - // Note: Actual verification would require capturing log output - } - - @Test - public void testLoggingEnabled() { - // Test logging enabled - assertTrue(DailyNotificationLogger.isLoggingEnabled()); - - // Disable logging - DailyNotificationLogger.setLoggingEnabled(false); - assertFalse(DailyNotificationLogger.isLoggingEnabled()); - - // Re-enable logging - DailyNotificationLogger.setLoggingEnabled(true); - assertTrue(DailyNotificationLogger.isLoggingEnabled()); - } - - @Test - public void testLogMessageFormat() { - String message = "Test message"; - logger.log(message, DailyNotificationLogger.Level.INFO); - - // Note: Actual verification would require capturing log output - } - - @Test - public void testNullMessage() { - logger.log(null, DailyNotificationLogger.Level.INFO); - - // Note: Actual verification would require capturing log output - } -} \ No newline at end of file diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java b/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java deleted file mode 100644 index 98ee38c..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java +++ /dev/null @@ -1,227 +0,0 @@ -/** - * DailyNotificationPluginTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the DailyNotification plugin - * - * Features: - * - Unit tests - * - Integration tests - * - Edge cases - * - Error scenarios - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Build; -import android.os.PowerManager; -import android.os.BatteryManager; - -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import com.getcapacitor.JSObject; -import com.getcapacitor.PluginCall; -import com.getcapacitor.PluginMethod; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - -@RunWith(AndroidJUnit4.class) -public class DailyNotificationPluginTest { - private DailyNotificationPlugin plugin; - private Context context; - private SharedPreferences settings; - - @Mock - private PluginCall mockCall; - - @Before - public void setUp() { - context = ApplicationProvider.getApplicationContext(); - settings = context.getSharedPreferences("test_settings", Context.MODE_PRIVATE); - plugin = new DailyNotificationPlugin(); - MockitoAnnotations.openMocks(this); - } - - @Test - public void testTimeValidation() { - // Valid time - assertTrue(plugin.isValidTime("09:00")); - assertTrue(plugin.isValidTime("00:00")); - assertTrue(plugin.isValidTime("23:59")); - - // Invalid times - assertFalse(plugin.isValidTime("24:00")); - assertFalse(plugin.isValidTime("12:60")); - assertFalse(plugin.isValidTime("9:00")); - assertFalse(plugin.isValidTime("13:5")); - } - - @Test - public void testTimezoneValidation() { - assertTrue(plugin.isValidTimezone("America/New_York")); - assertTrue(plugin.isValidTimezone("Europe/London")); - assertTrue(plugin.isValidTimezone("Asia/Kolkata")); - - assertFalse(plugin.isValidTimezone("Invalid/Timezone")); - assertFalse(plugin.isValidTimezone("America/Invalid")); - } - - @Test - public void testNotificationScheduling() { - when(mockCall.getString("url")).thenReturn("https://example.com"); - when(mockCall.getString("time")).thenReturn("09:00"); - when(mockCall.getString("title")).thenReturn("Test Notification"); - when(mockCall.getString("body")).thenReturn("Test Body"); - - plugin.scheduleDailyNotification(mockCall); - - // Verify notification was scheduled - // Note: Actual verification would require mocking AlarmManager - } - - @Test - public void testSettingsManagement() { - when(mockCall.hasOption("sound")).thenReturn(true); - when(mockCall.getBoolean("sound")).thenReturn(false); - when(mockCall.hasOption("priority")).thenReturn(true); - when(mockCall.getString("priority")).thenReturn("high"); - - plugin.updateSettings(mockCall); - - // Verify settings were updated - assertEquals(false, settings.getBoolean("sound", true)); - assertEquals("high", settings.getString("priority", "default")); - } - - @Test - public void testNotificationCancellation() { - plugin.cancelAllNotifications(mockCall); - - // Verify notifications were cancelled - // Note: Actual verification would require mocking NotificationManager - } - - @Test - public void testNotificationStatus() { - plugin.getNotificationStatus(mockCall); - - // Verify status was retrieved - // Note: Actual verification would require mocking NotificationManager - } - - @Test - public void testErrorHandling() { - when(mockCall.getString("url")).thenReturn(null); - when(mockCall.getString("time")).thenReturn(null); - - plugin.scheduleDailyNotification(mockCall); - - // Verify error was handled - verify(mockCall).reject(contains("Missing required parameters")); - } - - @Test - public void testBackgroundTaskHandling() { - // Test background task scheduling - // Note: Actual verification would require mocking WorkManager - } - - @Test - public void testBatteryOptimization() { - // Mock PowerManager - PowerManager mockPowerManager = mock(PowerManager.class); - when(context.getSystemService(Context.POWER_SERVICE)).thenReturn(mockPowerManager); - - // Test battery optimization exemption check - when(mockPowerManager.isIgnoringBatteryOptimizations(anyString())).thenReturn(true); - plugin.checkBatteryOptimization(); - - // Test Doze mode detection - when(mockPowerManager.isDeviceIdleMode()).thenReturn(true); - assertTrue(plugin.isDeviceInDozeMode()); - - // Test wake lock acquisition and release - PowerManager.WakeLock mockWakeLock = mock(PowerManager.WakeLock.class); - when(mockPowerManager.newWakeLock(anyInt(), anyString())).thenReturn(mockWakeLock); - when(mockWakeLock.isHeld()).thenReturn(false); - - plugin.acquireWakeLock(); - verify(mockWakeLock).acquire(anyLong()); - - when(mockWakeLock.isHeld()).thenReturn(true); - plugin.releaseWakeLock(); - verify(mockWakeLock).release(); - - // Test battery optimization exemption request - PluginCall mockCall = mock(PluginCall.class); - plugin.requestBatteryOptimizationExemption(mockCall); - verify(context).startActivity(any(Intent.class)); - } - - @Test - public void testNotificationChannelCreation() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - // Verify notification channel was created - // Note: Actual verification would require mocking NotificationManager - } - } - - @Test - public void testRetryLogic() { - // Test retry mechanism - // Note: Actual verification would require mocking network calls - } - - @Test - public void testEventHandling() { - // Test notification event handling - // Note: Actual verification would require mocking event system - } - - @Test - public void testResourceCleanup() { - // Test resource cleanup - // Note: Actual verification would require monitoring system resources - } - - @Test - public void testBatteryMonitoring() { - // Mock battery status intent - Intent batteryStatus = new Intent(Intent.ACTION_BATTERY_CHANGED); - batteryStatus.putExtra(BatteryManager.EXTRA_LEVEL, 75); - batteryStatus.putExtra(BatteryManager.EXTRA_SCALE, 100); - batteryStatus.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_HEALTH_CHARGING); - - // Send battery status broadcast - context.sendBroadcast(batteryStatus); - - // Verify battery status was updated - assertEquals(75, plugin.getBatteryLevel()); - assertTrue(plugin.isCharging()); - - // Test battery status retrieval - PluginCall mockCall = mock(PluginCall.class); - plugin.getBatteryStatus(mockCall); - verify(mockCall).resolve(any(JSObject.class)); - - // Verify battery stats were stored - SharedPreferences prefs = context.getSharedPreferences(SETTINGS_KEY, Context.MODE_PRIVATE); - assertEquals(75, prefs.getInt("last_battery_level", -1)); - assertTrue(prefs.getBoolean("last_charging_state", false)); - assertTrue(prefs.getLong("last_battery_check", 0) > 0); - } -} \ No newline at end of file diff --git a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java b/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java deleted file mode 100644 index 0fe1193..0000000 --- a/android/app/src/androidTest/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * DailyNotificationReceiverTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the DailyNotificationReceiver - * - * Features: - * - Unit tests - * - Integration tests - * - Edge cases - * - Error scenarios - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; - -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -@RunWith(AndroidJUnit4.class) -public class DailyNotificationReceiverTest { - private DailyNotificationReceiver receiver; - private Context context; - - @Before - public void setUp() { - context = ApplicationProvider.getApplicationContext(); - receiver = new DailyNotificationReceiver(); - } - - @Test - public void testValidNotificationData() { - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - intent.putExtra("title", "Test Notification"); - intent.putExtra("body", "Test Body"); - intent.putExtra("sound", true); - intent.putExtra("priority", "high"); - - receiver.onReceive(context, intent); - - // Note: Actual verification would require mocking NotificationManager - } - - @Test - public void testMissingNotificationData() { - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - // Missing title and body - - receiver.onReceive(context, intent); - - // Note: Actual verification would require checking logs - } - - @Test - public void testInvalidPriority() { - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - intent.putExtra("title", "Test Notification"); - intent.putExtra("body", "Test Body"); - intent.putExtra("priority", "invalid"); - - receiver.onReceive(context, intent); - - // Note: Actual verification would require checking logs - } - - @Test - public void testNotificationTap() { - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - intent.putExtra("title", "Test Notification"); - intent.putExtra("body", "Test Body"); - - // Note: Actual verification would require mocking PendingIntent - } - - @Test - public void testSoundSettings() { - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - intent.putExtra("title", "Test Notification"); - intent.putExtra("body", "Test Body"); - intent.putExtra("sound", false); - - receiver.onReceive(context, intent); - - // Note: Actual verification would require mocking NotificationManager - } -} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 13ff14c..4d7ca38 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,21 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - package="com.timesafari.dailynotification"> - - <uses-sdk android:minSdkVersion="22" android:targetSdkVersion="33" /> - - <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> - - <!-- Battery optimization permissions --> - <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> - <uses-permission android:name="android.permission.WAKE_LOCK" /> - - <!-- Background task permissions --> - <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> - <uses-permission android:name="android.permission.USE_EXACT_ALARM" /> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:allowBackup="true" @@ -23,15 +7,15 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme" - tools:targetApi="31"> + android:theme="@style/AppTheme"> <activity + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:name=".MainActivity" - android:exported="true" - android:label="@string/app_name" + android:label="@string/title_activity_main" + android:theme="@style/AppTheme.NoActionBarLaunch" android:launchMode="singleTask" - android:theme="@style/AppTheme.NoActionBarLaunch"> + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -50,4 +34,8 @@ android:resource="@xml/file_paths"></meta-data> </provider> </application> + + <!-- Permissions --> + + <uses-permission android:name="android.permission.INTERNET" /> </manifest> diff --git a/android/app/src/main/java/README.md b/android/app/src/main/java/README.md deleted file mode 100644 index 29e89d5..0000000 --- a/android/app/src/main/java/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# Android Implementation - -This directory contains the Android-specific implementation of the DailyNotification plugin. - -## Implementation Details - -The Android implementation uses: - -- `WorkManager` for periodic data fetching -- `AlarmManager` for precise notification scheduling -- `SharedPreferences` for local data storage -- Android's notification channels for proper notification display - -## Native Code Location - -The native Android implementation is located in the `android/` directory at the project root. - -## Key Components - -1. `DailyNotificationAndroid.java`: Main plugin class -2. `FetchWorker.java`: Background work for data fetching -3. `NotificationReceiver.java`: Handles notification display -4. `NotificationHelper.java`: Manages notification creation and display - -## Implementation Notes - -- Uses Android's WorkManager for reliable background tasks -- Implements proper battery optimization handling -- Supports Android 8.0+ notification channels -- Handles Doze mode and battery optimizations -- Uses SharedPreferences for lightweight data storage - -## Testing - -Run Android-specific tests with: - -```bash -npm run test:android -``` \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/BatteryOptimizationSettings.java b/android/app/src/main/java/com/timesafari/dailynotification/BatteryOptimizationSettings.java deleted file mode 100644 index 41c9afc..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/BatteryOptimizationSettings.java +++ /dev/null @@ -1,225 +0,0 @@ -/** - * BatteryOptimizationSettings.java - * Daily Notification Plugin for Capacitor - * - * Manages battery optimization settings and power state monitoring - * - * Features: - * - Battery optimization exemption management - * - Power state monitoring - * - Adaptive scheduling based on power state - * - Battery level monitoring - * - Doze mode handling - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.BatteryManager; -import android.os.Build; -import android.os.PowerManager; -import android.provider.Settings; -import android.content.SharedPreferences; - -import androidx.work.Constraints; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; - -import java.util.concurrent.TimeUnit; - -public class BatteryOptimizationSettings { - private static final String TAG = "BatteryOptimizationSettings"; - private static final String BATTERY_OPTIMIZATION_KEY = "battery_optimization_exempt"; - private static final String POWER_STATE_KEY = "power_state"; - private static final String BATTERY_CHECK_INTERVAL = "battery_check_interval"; - private static final long DEFAULT_CHECK_INTERVAL = TimeUnit.HOURS.toMillis(1); - - private final Context context; - private final PowerManager powerManager; - private final SharedPreferences settings; - private final DailyNotificationLogger logger; - - private boolean isOptimizationExempt = false; - private int powerState = PowerManager.POWER_STATE_NORMAL; - private int batteryLevel = 0; - private boolean isCharging = false; - private long lastBatteryCheck = 0; - - public BatteryOptimizationSettings(Context context, SharedPreferences settings) { - this.context = context; - this.settings = settings; - this.powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - this.logger = new DailyNotificationLogger(); - - // Load saved state - isOptimizationExempt = settings.getBoolean(BATTERY_OPTIMIZATION_KEY, false); - powerState = settings.getInt(POWER_STATE_KEY, PowerManager.POWER_STATE_NORMAL); - lastBatteryCheck = settings.getLong(BATTERY_CHECK_INTERVAL, 0); - } - - public boolean requestBatteryOptimizationExemption() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - try { - // Check if already exempt - if (isOptimizationExempt) { - logger.log("App already exempt from battery optimization", - DailyNotificationLogger.Level.INFO); - return true; - } - - // Create intent for battery optimization settings - Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); - intent.setData(Uri.parse("package:" + context.getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - // Store request time - long requestTime = System.currentTimeMillis(); - SharedPreferences.Editor editor = settings.edit(); - editor.putLong("last_optimization_request", requestTime); - editor.apply(); - - // Start settings activity - context.startActivity(intent); - - // Schedule a check for the optimization status - scheduleOptimizationCheck(); - - logger.log("Battery optimization exemption requested", - DailyNotificationLogger.Level.INFO); - return true; - } catch (Exception e) { - logger.log("Error requesting battery optimization exemption: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - return false; - } - } - return false; - } - - private void scheduleOptimizationCheck() { - OneTimeWorkRequest checkWork = new OneTimeWorkRequest.Builder(BatteryCheckWorker.class) - .setInitialDelay(5, TimeUnit.SECONDS) - .setConstraints(new Constraints.Builder() - .setRequiresBatteryNotLow(true) - .build()) - .build(); - - WorkManager.getInstance(context).enqueue(checkWork); - } - - public void updatePowerState() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - try { - int newPowerState = powerManager.getPowerState(); - if (newPowerState != powerState) { - powerState = newPowerState; - SharedPreferences.Editor editor = settings.edit(); - editor.putInt(POWER_STATE_KEY, powerState); - editor.apply(); - - logger.log("Power state changed to: " + getPowerStateString(powerState), - DailyNotificationLogger.Level.INFO); - - adjustSchedulingForPowerState(); - } - } catch (Exception e) { - logger.log("Error updating power state: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - } - } - } - - public void updateBatteryStatus() { - try { - Intent batteryStatus = context.registerReceiver(null, - new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - - if (batteryStatus != null) { - int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); - int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); - float batteryPct = level * 100 / (float)scale; - - int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); - boolean charging = status == BatteryManager.BATTERY_HEALTH_CHARGING || - status == BatteryManager.BATTERY_HEALTH_FULL; - - batteryLevel = (int)batteryPct; - isCharging = charging; - lastBatteryCheck = System.currentTimeMillis(); - - // Store battery stats - SharedPreferences.Editor editor = settings.edit(); - editor.putInt("last_battery_level", batteryLevel); - editor.putBoolean("last_charging_state", isCharging); - editor.putLong("last_battery_check", lastBatteryCheck); - editor.apply(); - - logger.log(String.format("Battery status updated: %d%% (%s)", - batteryLevel, - isCharging ? "charging" : "not charging"), - DailyNotificationLogger.Level.DEBUG); - } - } catch (Exception e) { - logger.log("Error updating battery status: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - } - } - - private void adjustSchedulingForPowerState() { - switch (powerState) { - case PowerManager.POWER_STATE_SAVE: - // In power save mode, increase the interval between checks - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2); - break; - case PowerManager.POWER_STATE_NORMAL: - // In normal mode, use standard intervals - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(30); - break; - case PowerManager.POWER_STATE_OPTIMIZED: - // In optimized mode, use longer intervals - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(4); - break; - } - } - - private String getPowerStateString(int state) { - switch (state) { - case PowerManager.POWER_STATE_SAVE: - return "POWER_SAVE"; - case PowerManager.POWER_STATE_NORMAL: - return "NORMAL"; - case PowerManager.POWER_STATE_OPTIMIZED: - return "OPTIMIZED"; - default: - return "UNKNOWN"; - } - } - - public boolean isOptimizationExempt() { - return isOptimizationExempt; - } - - public int getPowerState() { - return powerState; - } - - public int getBatteryLevel() { - return batteryLevel; - } - - public boolean isCharging() { - return isCharging; - } - - public long getLastBatteryCheck() { - return lastBatteryCheck; - } - - public boolean shouldCheckBattery() { - return System.currentTimeMillis() - lastBatteryCheck > DEFAULT_CHECK_INTERVAL; - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConfig.java b/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConfig.java deleted file mode 100644 index c881f90..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConfig.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * DailyNotificationConfig.java - * Daily Notification Plugin for Capacitor - * - * Configuration manager for the Daily Notification plugin - * - * Features: - * - Singleton pattern - * - Configuration options - * - Default values - * - Settings persistence - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import java.util.TimeZone; - -public class DailyNotificationConfig { - private static DailyNotificationConfig instance; - - private int maxNotificationsPerDay; - private TimeZone defaultTimeZone; - private boolean loggingEnabled; - private int retentionDays; - - private DailyNotificationConfig() { - resetToDefaults(); - } - - public static synchronized DailyNotificationConfig getInstance() { - if (instance == null) { - instance = new DailyNotificationConfig(); - } - return instance; - } - - public void resetToDefaults() { - maxNotificationsPerDay = 10; - defaultTimeZone = TimeZone.getDefault(); - loggingEnabled = true; - retentionDays = 7; - } - - public int getMaxNotificationsPerDay() { - return maxNotificationsPerDay; - } - - public void setMaxNotificationsPerDay(int maxNotificationsPerDay) { - if (maxNotificationsPerDay < 1) { - throw new IllegalArgumentException("Max notifications per day must be greater than 0"); - } - this.maxNotificationsPerDay = maxNotificationsPerDay; - } - - public TimeZone getDefaultTimeZone() { - return defaultTimeZone; - } - - public void setDefaultTimeZone(TimeZone defaultTimeZone) { - if (defaultTimeZone == null) { - throw new IllegalArgumentException("Default timezone cannot be null"); - } - this.defaultTimeZone = defaultTimeZone; - } - - public boolean isLoggingEnabled() { - return loggingEnabled; - } - - public void setLoggingEnabled(boolean loggingEnabled) { - this.loggingEnabled = loggingEnabled; - DailyNotificationLogger.setLoggingEnabled(loggingEnabled); - } - - public int getRetentionDays() { - return retentionDays; - } - - public void setRetentionDays(int retentionDays) { - if (retentionDays < 1) { - throw new IllegalArgumentException("Retention days must be greater than 0"); - } - this.retentionDays = retentionDays; - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConstants.java b/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConstants.java deleted file mode 100644 index 1389ef9..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationConstants.java +++ /dev/null @@ -1,79 +0,0 @@ -/** - * DailyNotificationConstants.java - * Daily Notification Plugin for Capacitor - * - * Constants used throughout the Daily Notification plugin - * - * Features: - * - Default values - * - Notification identifiers - * - Settings keys - * - Channel settings - * - Time constants - * - Error messages - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -public class DailyNotificationConstants { - // Default values - public static final String DEFAULT_TITLE = "Daily Notification"; - public static final String DEFAULT_BODY = "Your daily update is ready"; - - // Notification identifiers - public static final String NOTIFICATION_ID_PREFIX = "daily-notification-"; - public static final String EVENT_NAME = "notification"; - - // Settings class - public static class Settings { - public static final String SOUND = "sound"; - public static final String PRIORITY = "priority"; - public static final String TIMEZONE = "timezone"; - public static final String RETRY_COUNT = "retryCount"; - public static final String RETRY_INTERVAL = "retryInterval"; - - public static final boolean DEFAULT_SOUND = true; - public static final String DEFAULT_PRIORITY = "default"; - public static final int DEFAULT_RETRY_COUNT = 3; - public static final int DEFAULT_RETRY_INTERVAL = 1000; - } - - // Plugin method keys - public static class Keys { - public static final String URL = "url"; - public static final String TIME = "time"; - public static final String TITLE = "title"; - public static final String BODY = "body"; - public static final String SOUND = "sound"; - public static final String PRIORITY = "priority"; - public static final String TIMEZONE = "timezone"; - } - - // Channel settings - public static class Channel { - public static final String ID = "daily_notification_channel"; - public static final String NAME = "Daily Notifications"; - public static final String DESCRIPTION = "Daily notification updates"; - public static final boolean ENABLE_VIBRATION = true; - public static final boolean ENABLE_LIGHTS = true; - } - - // Time constants - public static class Time { - public static final long MILLIS_PER_DAY = 86400000; - public static final int MAX_HOURS = 24; - public static final int MAX_MINUTES = 60; - } - - // Error messages - public static class Errors { - public static final String MISSING_PARAMS = "Missing required parameters"; - public static final String INVALID_TIME = "Invalid time format"; - public static final String INVALID_TIMEZONE = "Invalid timezone"; - public static final String INVALID_PRIORITY = "Invalid priority value"; - public static final String SCHEDULING_FAILED = "Failed to schedule notification"; - public static final String PERMISSION_DENIED = "Notification permission denied"; - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationLogger.java b/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationLogger.java deleted file mode 100644 index 76d7bcd..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationLogger.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * DailyNotificationLogger.java - * Daily Notification Plugin for Capacitor - * - * Logging utility for the Daily Notification plugin - * - * Features: - * - Log levels (DEBUG, INFO, WARNING, ERROR) - * - Throwable support - * - Enable/disable logging - * - Tag-based logging - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.util.Log; - -public class DailyNotificationLogger { - private static final String TAG = "DailyNotification"; - private static boolean loggingEnabled = true; - - public enum Level { - DEBUG, - INFO, - WARNING, - ERROR - } - - public static void setLoggingEnabled(boolean enabled) { - loggingEnabled = enabled; - } - - public static boolean isLoggingEnabled() { - return loggingEnabled; - } - - public void log(String message, Level level) { - log(message, level, null); - } - - public void log(String message, Level level, Throwable throwable) { - if (!loggingEnabled) { - return; - } - - String formattedMessage = formatMessage(message); - - switch (level) { - case DEBUG: - if (throwable != null) { - Log.d(TAG, formattedMessage, throwable); - } else { - Log.d(TAG, formattedMessage); - } - break; - - case INFO: - if (throwable != null) { - Log.i(TAG, formattedMessage, throwable); - } else { - Log.i(TAG, formattedMessage); - } - break; - - case WARNING: - if (throwable != null) { - Log.w(TAG, formattedMessage, throwable); - } else { - Log.w(TAG, formattedMessage); - } - break; - - case ERROR: - if (throwable != null) { - Log.e(TAG, formattedMessage, throwable); - } else { - Log.e(TAG, formattedMessage); - } - break; - } - } - - private String formatMessage(String message) { - if (message == null) { - return "null"; - } - - return String.format("[%s] %s", TAG, message); - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java b/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java deleted file mode 100644 index 7bd6bca..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java +++ /dev/null @@ -1,736 +0,0 @@ -/** - * DailyNotificationPlugin.java - * Daily Notification Plugin for Capacitor - * - * Handles daily notification scheduling and management on Android - * - * Features: - * - Daily notification scheduling with precise timing - * - Notification channel management - * - Settings persistence - * - Background task handling - * - Battery optimization support - * - Error handling and logging - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.app.AlarmManager; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.os.BatteryManager; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.PowerManager; -import android.os.SystemClock; -import android.provider.Settings; -import android.util.Log; - -import com.getcapacitor.JSObject; -import com.getcapacitor.Plugin; -import com.getcapacitor.PluginCall; -import com.getcapacitor.PluginMethod; -import com.getcapacitor.annotation.CapacitorPlugin; - -import java.util.Calendar; -import java.util.TimeZone; -import java.util.concurrent.TimeUnit; - -import androidx.work.Constraints; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; - -@CapacitorPlugin(name = "DailyNotification") -public class DailyNotificationPlugin extends Plugin { - private static final String TAG = "DailyNotificationPlugin"; - private static final String CHANNEL_ID = "daily_notification_channel"; - private static final String CHANNEL_NAME = "Daily Notifications"; - private static final String CHANNEL_DESCRIPTION = "Daily notification updates"; - private static final String SETTINGS_KEY = "daily_notification_settings"; - private static final String BATTERY_STATS_KEY = "battery_stats"; - private static final String BATTERY_OPTIMIZATION_KEY = "battery_optimization_status"; - private static final String BATTERY_CHECK_INTERVAL = "battery_check_interval"; - private static final String LAST_NOTIFICATION_KEY = "last_notification_time"; - private static final String POWER_STATE_KEY = "power_state"; - private static final String ADAPTIVE_SCHEDULING_KEY = "adaptive_scheduling"; - - private NotificationManager notificationManager; - private AlarmManager alarmManager; - private PowerManager powerManager; - private PowerManager.WakeLock wakeLock; - private Context context; - private SharedPreferences settings; - private DailyNotificationLogger logger; - private boolean isOptimizationExempt = false; - private long lastBatteryCheck; - private int batteryLevel; - private boolean isCharging; - private long lastOptimizationCheck; - private boolean adaptiveSchedulingEnabled = true; - private int powerState = PowerManager.POWER_STATE_NORMAL; - - @Override - public void load() { - context = getContext(); - notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - settings = context.getSharedPreferences(SETTINGS_KEY, Context.MODE_PRIVATE); - logger = new DailyNotificationLogger(); - - createNotificationChannel(); - initializeSettings(); - checkBatteryOptimization(); - initializeBatteryMonitoring(); - logger.log("Plugin loaded successfully", DailyNotificationLogger.Level.INFO); - } - - private void initializeSettings() { - SharedPreferences.Editor editor = settings.edit(); - if (!settings.contains("sound")) editor.putBoolean("sound", true); - if (!settings.contains("priority")) editor.putString("priority", "default"); - if (!settings.contains("retryCount")) editor.putInt("retryCount", 3); - if (!settings.contains("retryInterval")) editor.putInt("retryInterval", 1000); - editor.apply(); - } - - private void createNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel channel = new NotificationChannel( - CHANNEL_ID, - CHANNEL_NAME, - NotificationManager.IMPORTANCE_DEFAULT - ); - channel.setDescription(CHANNEL_DESCRIPTION); - channel.enableVibration(true); - channel.enableLights(true); - notificationManager.createNotificationChannel(channel); - logger.log("Notification channel created", DailyNotificationLogger.Level.INFO); - } - } - - private void checkBatteryOptimization() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - String packageName = context.getPackageName(); - isOptimizationExempt = powerManager.isIgnoringBatteryOptimizations(packageName); - lastOptimizationCheck = System.currentTimeMillis(); - - // Store optimization status - SharedPreferences.Editor editor = settings.edit(); - editor.putBoolean(BATTERY_OPTIMIZATION_KEY, isOptimizationExempt); - editor.putLong("last_optimization_check", lastOptimizationCheck); - editor.apply(); - - logger.log("Battery optimization status: " + (isOptimizationExempt ? "exempt" : "not exempt"), - DailyNotificationLogger.Level.INFO); - - // If not exempt and haven't checked recently, request exemption - if (!isOptimizationExempt && - System.currentTimeMillis() - lastOptimizationCheck > BATTERY_CHECK_INTERVAL) { - requestBatteryOptimizationExemption(null); - } - } - } - - @PluginMethod - public void requestBatteryOptimizationExemption(PluginCall call) { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - // Check if we already have exemption - if (isOptimizationExempt) { - logger.log("App already exempt from battery optimization", - DailyNotificationLogger.Level.INFO); - if (call != null) { - call.resolve(); - } - return; - } - - // Create intent for battery optimization settings - Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); - intent.setData(android.net.Uri.parse("package:" + context.getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - // Store current time for tracking - long requestTime = System.currentTimeMillis(); - SharedPreferences.Editor editor = settings.edit(); - editor.putLong("last_optimization_request", requestTime); - editor.apply(); - - // Start the activity - context.startActivity(intent); - - // Schedule a check for the optimization status after a delay - new Handler(Looper.getMainLooper()).postDelayed(() -> { - checkBatteryOptimization(); - if (call != null) { - JSObject result = new JSObject(); - result.put("isExempt", isOptimizationExempt); - result.put("requestTime", requestTime); - result.put("checkTime", System.currentTimeMillis()); - call.resolve(result); - } - }, 5000); // Check after 5 seconds - - logger.log("Battery optimization exemption requested", - DailyNotificationLogger.Level.INFO); - } else { - if (call != null) { - call.reject("Battery optimization exemption not supported on this Android version"); - } - } - } catch (Exception e) { - logger.log("Error requesting battery optimization exemption: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - if (call != null) { - call.reject("Failed to request battery optimization exemption: " + e.getMessage()); - } - } - } - - private void acquireWakeLock() { - if (wakeLock == null) { - wakeLock = powerManager.newWakeLock( - PowerManager.PARTIAL_WAKE_LOCK, - "DailyNotification:WakeLock" - ); - } - - if (!wakeLock.isHeld()) { - // Adjust wake lock duration based on battery level - long duration = TimeUnit.MINUTES.toMillis(1); - if (batteryLevel < 15) { - duration = TimeUnit.SECONDS.toMillis(30); - } else if (batteryLevel < 30) { - duration = TimeUnit.SECONDS.toMillis(45); - } - - wakeLock.acquire(duration); - logger.log("Wake lock acquired for " + duration + "ms", DailyNotificationLogger.Level.DEBUG); - } - } - - private void releaseWakeLock() { - if (wakeLock != null && wakeLock.isHeld()) { - wakeLock.release(); - logger.log("Wake lock released", DailyNotificationLogger.Level.DEBUG); - } - } - - private boolean isDeviceInDozeMode() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - return powerManager.isDeviceIdleMode(); - } - return false; - } - - private void handleDozeMode() { - if (isDeviceInDozeMode()) { - logger.log("Device is in Doze mode", DailyNotificationLogger.Level.WARNING); - - // If not exempt from battery optimization, try to request exemption - if (!isOptimizationExempt) { - requestBatteryOptimizationExemption(null); - } - - // Schedule a maintenance window for the next time the device exits Doze mode - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - // Use WorkManager for more reliable scheduling during Doze - OneTimeWorkRequest maintenanceWork = new OneTimeWorkRequest.Builder(MaintenanceWorker.class) - .setInitialDelay(15, TimeUnit.MINUTES) - .setConstraints(new Constraints.Builder() - .setRequiresDeviceIdle(false) - .setRequiresBatteryNotLow(true) - .build()) - .build(); - - WorkManager.getInstance(context).enqueue(maintenanceWork); - - // Also set an alarm as backup - alarmManager.setAndAllowWhileIdle( - AlarmManager.RTC_WAKEUP, - System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(15), - createMaintenancePendingIntent() - ); - } - } - } - - private PendingIntent createMaintenancePendingIntent() { - Intent intent = new Intent(context, DailyNotificationReceiver.class); - intent.setAction("MAINTENANCE_WINDOW"); - return PendingIntent.getBroadcast( - context, - 0, - intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - } - - @PluginMethod - public void scheduleDailyNotification(PluginCall call) { - try { - // Check battery optimization status - if (!isOptimizationExempt) { - logger.log("Warning: App is not exempt from battery optimization", - DailyNotificationLogger.Level.WARNING); - } - - // Check Doze mode - handleDozeMode(); - - // Acquire wake lock for scheduling - acquireWakeLock(); - - String url = call.getString("url"); - String time = call.getString("time"); - - if (url == null || time == null) { - throw new IllegalArgumentException("Missing required parameters"); - } - - // Parse time string (HH:mm format) - String[] timeComponents = time.split(":"); - if (timeComponents.length != 2) { - throw new IllegalArgumentException("Invalid time format"); - } - - int hour = Integer.parseInt(timeComponents[0]); - int minute = Integer.parseInt(timeComponents[1]); - - if (hour < 0 || hour >= 24 || minute < 0 || minute >= 60) { - throw new IllegalArgumentException("Invalid time values"); - } - - // Create calendar instance for the specified time - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minute); - calendar.set(Calendar.SECOND, 0); - - // If the time has already passed today, schedule for tomorrow - if (calendar.getTimeInMillis() <= System.currentTimeMillis()) { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } - - // Create intent for the notification - Intent intent = new Intent(context, DailyNotificationReceiver.class); - intent.putExtra("url", url); - intent.putExtra("title", call.getString("title", "Daily Notification")); - intent.putExtra("body", call.getString("body", "Your daily update is ready")); - intent.putExtra("sound", call.getBoolean("sound", settings.getBoolean("sound", true))); - intent.putExtra("priority", call.getString("priority", settings.getString("priority", "default"))); - - PendingIntent pendingIntent = PendingIntent.getBroadcast( - context, - url.hashCode(), - intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - // Schedule the alarm with exact timing - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - if (alarmManager.canScheduleExactAlarms()) { - alarmManager.setExactAndAllowWhileIdle( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis(), - pendingIntent - ); - } else { - throw new SecurityException("Cannot schedule exact alarms"); - } - } else { - alarmManager.setExactAndAllowWhileIdle( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis(), - pendingIntent - ); - } - - // Set repeating alarm for subsequent days - alarmManager.setRepeating( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis() + TimeUnit.DAYS.toMillis(1), - TimeUnit.DAYS.toMillis(1), - pendingIntent - ); - - // Release wake lock after scheduling - releaseWakeLock(); - - // Store the scheduled time and URL for potential rescheduling - SharedPreferences.Editor editor = settings.edit(); - editor.putString("scheduled_time", time); - editor.putString("notification_url", url); - editor.putString("notification_title", call.getString("title", "Daily Notification")); - editor.putString("notification_body", call.getString("body", "Your daily update is ready")); - editor.apply(); - - logger.log("Notification scheduled for " + time, DailyNotificationLogger.Level.INFO); - call.resolve(); - - } catch (Exception e) { - releaseWakeLock(); - logger.log("Error scheduling notification: " + e.getMessage(), DailyNotificationLogger.Level.ERROR); - call.reject("Failed to schedule notification: " + e.getMessage()); - } - } - - @PluginMethod - public void getLastNotification(PluginCall call) { - try { - // TODO: Implement last notification retrieval from local storage - JSObject result = new JSObject(); - result.put("id", ""); - result.put("title", ""); - result.put("body", ""); - result.put("timestamp", 0); - call.resolve(result); - } catch (Exception e) { - logger.log("Error getting last notification: " + e.getMessage(), DailyNotificationLogger.Level.ERROR); - call.reject("Failed to get last notification: " + e.getMessage()); - } - } - - @PluginMethod - public void cancelAllNotifications(PluginCall call) { - try { - Intent intent = new Intent(context, DailyNotificationReceiver.class); - PendingIntent pendingIntent = PendingIntent.getBroadcast( - context, - 0, - intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - alarmManager.cancel(pendingIntent); - notificationManager.cancelAll(); - logger.log("All notifications cancelled", DailyNotificationLogger.Level.INFO); - call.resolve(); - } catch (Exception e) { - logger.log("Error cancelling notifications: " + e.getMessage(), DailyNotificationLogger.Level.ERROR); - call.reject("Failed to cancel notifications: " + e.getMessage()); - } - } - - @PluginMethod - public void getNotificationStatus(PluginCall call) { - try { - JSObject result = new JSObject(); - result.put("nextNotificationTime", getNextNotificationTime()); - result.put("isEnabled", isNotificationEnabled()); - result.put("settings", getCurrentSettings()); - call.resolve(result); - } catch (Exception e) { - logger.log("Error getting notification status: " + e.getMessage(), DailyNotificationLogger.Level.ERROR); - call.reject("Failed to get notification status: " + e.getMessage()); - } - } - - @PluginMethod - public void updateSettings(PluginCall call) { - try { - SharedPreferences.Editor editor = settings.edit(); - - if (call.hasOption("sound")) { - editor.putBoolean("sound", call.getBoolean("sound")); - } - - if (call.hasOption("priority")) { - String priority = call.getString("priority"); - if (isValidPriority(priority)) { - editor.putString("priority", priority); - } else { - throw new IllegalArgumentException("Invalid priority value"); - } - } - - if (call.hasOption("timezone")) { - String timezone = call.getString("timezone"); - if (TimeZone.getTimeZone(timezone) != null) { - editor.putString("timezone", timezone); - } else { - throw new IllegalArgumentException("Invalid timezone"); - } - } - - editor.apply(); - logger.log("Settings updated successfully", DailyNotificationLogger.Level.INFO); - call.resolve(getCurrentSettings()); - } catch (Exception e) { - logger.log("Error updating settings: " + e.getMessage(), DailyNotificationLogger.Level.ERROR); - call.reject("Failed to update settings: " + e.getMessage()); - } - } - - private long getNextNotificationTime() { - // TODO: Implement next notification time retrieval - return 0; - } - - private boolean isNotificationEnabled() { - return notificationManager.areNotificationsEnabled(); - } - - private JSObject getCurrentSettings() { - JSObject settings = new JSObject(); - settings.put("sound", this.settings.getBoolean("sound", true)); - settings.put("priority", this.settings.getString("priority", "default")); - settings.put("timezone", this.settings.getString("timezone", TimeZone.getDefault().getID())); - return settings; - } - - private boolean isValidPriority(String priority) { - return priority != null && - (priority.equals("high") || - priority.equals("default") || - priority.equals("low")); - } - - private void initializeBatteryMonitoring() { - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_BATTERY_CHANGED); - filter.addAction(Intent.ACTION_POWER_CONNECTED); - filter.addAction(Intent.ACTION_POWER_DISCONNECTED); - filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED); - context.registerReceiver(batteryReceiver, filter); - updateBatteryStatus(); - updatePowerState(); - } - - private final BroadcastReceiver batteryReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - updateBatteryStatus(); - } - }; - - private void updateBatteryStatus() { - Intent batteryStatus = context.registerReceiver(null, - new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - - if (batteryStatus != null) { - int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); - int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); - float batteryPct = level * 100 / (float)scale; - - int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); - boolean charging = status == BatteryManager.BATTERY_HEALTH_CHARGING || - status == BatteryManager.BATTERY_HEALTH_FULL; - - batteryLevel = (int)batteryPct; - isCharging = charging; - lastBatteryCheck = System.currentTimeMillis(); - - logger.log(String.format("Battery status updated: %d%% (%s)", - batteryLevel, - isCharging ? "charging" : "not charging"), - DailyNotificationLogger.Level.DEBUG); - - // Store battery stats - SharedPreferences.Editor editor = settings.edit(); - editor.putInt("last_battery_level", batteryLevel); - editor.putBoolean("last_charging_state", isCharging); - editor.putLong("last_battery_check", lastBatteryCheck); - editor.apply(); - - // Adjust scheduling based on battery level if adaptive scheduling is enabled - if (adaptiveSchedulingEnabled) { - adjustSchedulingForBatteryLevel(); - } - } - } - - private void adjustSchedulingForBatteryLevel() { - if (batteryLevel < 15) { - // Critical battery level - reduce frequency - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(4); - } else if (batteryLevel < 30) { - // Low battery level - moderate frequency - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2); - } else if (batteryLevel < 50) { - // Medium battery level - standard frequency - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1); - } - } - - private void updatePowerState() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - powerState = powerManager.getPowerState(); - SharedPreferences.Editor editor = settings.edit(); - editor.putInt(POWER_STATE_KEY, powerState); - editor.apply(); - - // Adjust scheduling based on power state - if (adaptiveSchedulingEnabled) { - adjustSchedulingForPowerState(); - } - } - } - - private void adjustSchedulingForPowerState() { - if (powerState == PowerManager.POWER_STATE_SAVE) { - // In power save mode, increase the interval between checks - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2); - } else if (powerState == PowerManager.POWER_STATE_NORMAL) { - // In normal mode, use standard intervals - lastBatteryCheck = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(30); - } - } - - @PluginMethod - public void getBatteryStatus(PluginCall call) { - try { - // Check battery optimization status if needed - if (System.currentTimeMillis() - lastOptimizationCheck > BATTERY_CHECK_INTERVAL) { - checkBatteryOptimization(); - } - - JSObject result = new JSObject(); - result.put("level", batteryLevel); - result.put("isCharging", isCharging); - result.put("lastCheck", lastBatteryCheck); - result.put("isOptimizationExempt", isOptimizationExempt); - result.put("lastOptimizationCheck", lastOptimizationCheck); - result.put("isInDozeMode", isDeviceInDozeMode()); - call.resolve(result); - } catch (Exception e) { - logger.log("Error getting battery status: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - call.reject("Failed to get battery status: " + e.getMessage()); - } - } - - @Override - protected void handleOnDestroy() { - try { - context.unregisterReceiver(batteryReceiver); - } catch (Exception e) { - logger.log("Error unregistering battery receiver: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - } - super.handleOnDestroy(); - } - - public void rescheduleMissedNotifications() { - try { - long lastNotificationTime = settings.getLong(LAST_NOTIFICATION_KEY, 0); - long currentTime = System.currentTimeMillis(); - - // If more than 24 hours have passed since the last notification - if (currentTime - lastNotificationTime > TimeUnit.DAYS.toMillis(1)) { - logger.log("Missed notifications detected, rescheduling", DailyNotificationLogger.Level.WARNING); - - // Get the scheduled time from settings - String scheduledTime = settings.getString("scheduled_time", null); - if (scheduledTime != null) { - // Parse the scheduled time - String[] timeComponents = scheduledTime.split(":"); - if (timeComponents.length == 2) { - int hour = Integer.parseInt(timeComponents[0]); - int minute = Integer.parseInt(timeComponents[1]); - - // Create calendar instance for the scheduled time - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.HOUR_OF_DAY, hour); - calendar.set(Calendar.MINUTE, minute); - calendar.set(Calendar.SECOND, 0); - - // If the time has already passed today, schedule for tomorrow - if (calendar.getTimeInMillis() <= currentTime) { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } - - // Get the notification URL from settings - String url = settings.getString("notification_url", null); - if (url != null) { - // Create intent for the notification - Intent intent = new Intent(context, DailyNotificationReceiver.class); - intent.putExtra("url", url); - intent.putExtra("title", settings.getString("notification_title", "Daily Notification")); - intent.putExtra("body", settings.getString("notification_body", "Your daily update is ready")); - intent.putExtra("sound", settings.getBoolean("sound", true)); - intent.putExtra("priority", settings.getString("priority", "default")); - - PendingIntent pendingIntent = PendingIntent.getBroadcast( - context, - url.hashCode(), - intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - // Schedule the notification - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - if (alarmManager.canScheduleExactAlarms()) { - alarmManager.setExactAndAllowWhileIdle( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis(), - pendingIntent - ); - } - } else { - alarmManager.setExactAndAllowWhileIdle( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis(), - pendingIntent - ); - } - - logger.log("Missed notification rescheduled for " + scheduledTime, - DailyNotificationLogger.Level.INFO); - } - } - } - } - } catch (Exception e) { - logger.log("Error rescheduling missed notifications: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - } - } - - @PluginMethod - public void setAdaptiveScheduling(PluginCall call) { - try { - boolean enabled = call.getBoolean("enabled", true); - adaptiveSchedulingEnabled = enabled; - - SharedPreferences.Editor editor = settings.edit(); - editor.putBoolean(ADAPTIVE_SCHEDULING_KEY, enabled); - editor.apply(); - - logger.log("Adaptive scheduling " + (enabled ? "enabled" : "disabled"), - DailyNotificationLogger.Level.INFO); - call.resolve(); - } catch (Exception e) { - logger.log("Error setting adaptive scheduling: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - call.reject("Failed to set adaptive scheduling: " + e.getMessage()); - } - } - - @PluginMethod - public void getPowerState(PluginCall call) { - try { - JSObject result = new JSObject(); - result.put("powerState", powerState); - result.put("adaptiveScheduling", adaptiveSchedulingEnabled); - result.put("batteryLevel", batteryLevel); - result.put("isCharging", isCharging); - result.put("lastCheck", lastBatteryCheck); - call.resolve(result); - } catch (Exception e) { - logger.log("Error getting power state: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - call.reject("Failed to get power state: " + e.getMessage()); - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationReceiver.java b/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationReceiver.java deleted file mode 100644 index 0a7d05b..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/DailyNotificationReceiver.java +++ /dev/null @@ -1,186 +0,0 @@ -/** - * DailyNotificationReceiver.java - * Daily Notification Plugin for Capacitor - * - * Broadcast receiver for handling daily notifications - * - * Features: - * - Notification display with custom actions - * - Rich notification content - * - Event broadcasting - * - Error recovery - * - Notification categories - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; - -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; - -public class DailyNotificationReceiver extends BroadcastReceiver { - private static final String TAG = "DailyNotificationReceiver"; - private DailyNotificationLogger logger; - - // Notification categories - private static final String CATEGORY_DAILY = "DAILY_NOTIFICATION"; - - // Action identifiers - private static final String ACTION_VIEW = "VIEW"; - private static final String ACTION_DISMISS = "DISMISS"; - private static final String ACTION_SNOOZE = "SNOOZE"; - - @Override - public void onReceive(Context context, Intent intent) { - logger = new DailyNotificationLogger(); - - try { - String url = intent.getStringExtra("url"); - String title = intent.getStringExtra("title"); - String body = intent.getStringExtra("body"); - boolean sound = intent.getBooleanExtra("sound", true); - String priority = intent.getStringExtra("priority"); - - if (url == null || title == null || body == null) { - throw new IllegalArgumentException("Missing required notification parameters"); - } - - showNotification(context, title, body, url, sound, priority); - logger.log("Notification displayed successfully", DailyNotificationLogger.Level.INFO); - - } catch (Exception e) { - logger.log("Error displaying notification: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR, e); - } - } - - private void showNotification(Context context, String title, String body, - String url, boolean sound, String priority) { - NotificationManager notificationManager = - (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - - // Create notification channel if needed - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel channel = new NotificationChannel( - DailyNotificationConstants.Channel.ID, - DailyNotificationConstants.Channel.NAME, - NotificationManager.IMPORTANCE_DEFAULT - ); - channel.setDescription(DailyNotificationConstants.Channel.DESCRIPTION); - channel.enableVibration(DailyNotificationConstants.Channel.ENABLE_VIBRATION); - channel.enableLights(DailyNotificationConstants.Channel.ENABLE_LIGHTS); - notificationManager.createNotificationChannel(channel); - } - - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, - DailyNotificationConstants.Channel.ID) - .setSmallIcon(android.R.drawable.ic_dialog_info) - .setContentTitle(title) - .setContentText(body) - .setPriority(getNotificationPriority(priority)) - .setCategory(CATEGORY_DAILY) - .setAutoCancel(true) - .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - .setStyle(new NotificationCompat.BigTextStyle().bigText(body)); - - if (sound) { - builder.setDefaults(NotificationCompat.DEFAULT_SOUND); - } - - // Create intent for notification tap - Intent contentIntent = new Intent(context, context.getClass()); - contentIntent.setData(Uri.parse(url)); - - PendingIntent pendingIntent = PendingIntent.getActivity( - context, - 0, - contentIntent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - builder.setContentIntent(pendingIntent); - - // Add custom actions - addCustomActions(builder, context, url); - - Notification notification = builder.build(); - - // Use NotificationManagerCompat for better compatibility - NotificationManagerCompat notificationManagerCompat = - NotificationManagerCompat.from(context); - - try { - notificationManagerCompat.notify(url.hashCode(), notification); - } catch (SecurityException e) { - logger.log("Security exception while showing notification: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - } - } - - private void addCustomActions(NotificationCompat.Builder builder, Context context, String url) { - // View action - Intent viewIntent = new Intent(context, context.getClass()); - viewIntent.setAction(ACTION_VIEW); - viewIntent.setData(Uri.parse(url)); - - PendingIntent viewPendingIntent = PendingIntent.getActivity( - context, - 1, - viewIntent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - builder.addAction(android.R.drawable.ic_menu_view, "View", viewPendingIntent); - - // Snooze action - Intent snoozeIntent = new Intent(context, context.getClass()); - snoozeIntent.setAction(ACTION_SNOOZE); - snoozeIntent.putExtra("url", url); - - PendingIntent snoozePendingIntent = PendingIntent.getBroadcast( - context, - 2, - snoozeIntent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - builder.addAction(android.R.drawable.ic_menu_revert, "Snooze", snoozePendingIntent); - - // Dismiss action - Intent dismissIntent = new Intent(context, context.getClass()); - dismissIntent.setAction(ACTION_DISMISS); - dismissIntent.putExtra("url", url); - - PendingIntent dismissPendingIntent = PendingIntent.getBroadcast( - context, - 3, - dismissIntent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE - ); - - builder.addAction(android.R.drawable.ic_menu_close_clear_cancel, "Dismiss", dismissPendingIntent); - } - - private int getNotificationPriority(String priority) { - switch (priority.toLowerCase()) { - case "high": - return NotificationCompat.PRIORITY_HIGH; - case "low": - return NotificationCompat.PRIORITY_LOW; - default: - return NotificationCompat.PRIORITY_DEFAULT; - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/example/app/MainActivity.java b/android/app/src/main/java/com/timesafari/dailynotification/MainActivity.java similarity index 69% rename from android/app/src/main/java/com/example/app/MainActivity.java rename to android/app/src/main/java/com/timesafari/dailynotification/MainActivity.java index 966f32d..7f561c0 100644 --- a/android/app/src/main/java/com/example/app/MainActivity.java +++ b/android/app/src/main/java/com/timesafari/dailynotification/MainActivity.java @@ -1,4 +1,4 @@ -package com.example.app; +package com.timesafari.dailynotification; import com.getcapacitor.BridgeActivity; diff --git a/android/app/src/main/java/com/timesafari/dailynotification/MaintenanceWorker.java b/android/app/src/main/java/com/timesafari/dailynotification/MaintenanceWorker.java deleted file mode 100644 index e6b0c07..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/MaintenanceWorker.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.timesafari.dailynotification; - -import android.content.Context; -import androidx.annotation.NonNull; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -public class MaintenanceWorker extends Worker { - private final DailyNotificationLogger logger; - - public MaintenanceWorker(@NonNull Context context, @NonNull WorkerParameters params) { - super(context, params); - logger = new DailyNotificationLogger(); - } - - @NonNull - @Override - public Result doWork() { - try { - logger.log("Maintenance work started", DailyNotificationLogger.Level.INFO); - - // Perform maintenance tasks - performMaintenance(); - - logger.log("Maintenance work completed successfully", DailyNotificationLogger.Level.INFO); - return Result.success(); - } catch (Exception e) { - logger.log("Error during maintenance work: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - return Result.failure(); - } - } - - private void performMaintenance() { - // Check and update battery optimization status - DailyNotificationPlugin plugin = DailyNotificationPlugin.getInstance(); - if (plugin != null) { - plugin.checkBatteryOptimization(); - } - - // Update battery status - if (plugin != null) { - plugin.updateBatteryStatus(); - } - - // Reschedule any missed notifications - if (plugin != null) { - plugin.rescheduleMissedNotifications(); - } - } -} \ No newline at end of file diff --git a/android/app/src/main/java/com/timesafari/dailynotification/README.md b/android/app/src/main/java/com/timesafari/dailynotification/README.md deleted file mode 100644 index e58d875..0000000 --- a/android/app/src/main/java/com/timesafari/dailynotification/README.md +++ /dev/null @@ -1,423 +0,0 @@ -# DailyNotification Android Implementation - -This directory contains the Android-specific implementation of the DailyNotification plugin for Capacitor. - -## Overview - -The DailyNotification plugin provides functionality for scheduling and managing daily notifications on Android devices. It uses Android's native notification system and background task scheduling to ensure reliable delivery of notifications. - -## Features - -- Daily notification scheduling with precise timing -- Notification channel management (Android 8.0+) -- Background task handling with WorkManager -- Battery optimization support -- Settings persistence -- Rich logging capabilities -- Comprehensive error handling -- Extensive test coverage - -## Architecture - -### Core Components - -1. **DailyNotificationPlugin** - - Main plugin class handling all notification operations - - Manages notification scheduling and settings - - Handles plugin method calls from JavaScript - -2. **DailyNotificationReceiver** - - Broadcast receiver for handling notification display - - Manages notification content and presentation - -3. **DailyNotificationLogger** - - Structured logging system - - Multiple log levels (DEBUG, INFO, WARNING, ERROR) - - Configurable logging behavior - -4. **DailyNotificationConstants** - - Centralized constants management - - Default values and configuration - - Error messages and keys - -5. **DailyNotificationConfig** - - Configuration management - - Settings persistence - - Default values - -### Key Features - -#### Notification Scheduling -- Uses AlarmManager for precise timing -- Handles timezone changes -- Supports multiple notifications per day -- Battery-optimized scheduling - -#### Background Processing -- WorkManager for reliable background tasks -- Battery optimization handling -- Network state monitoring -- Retry mechanism - -#### Settings Management -- Persistent storage using SharedPreferences -- Default values management -- Settings validation -- Real-time updates - -#### Error Handling -- Comprehensive error catching -- Detailed error messages -- Logging integration -- Recovery mechanisms - -## Testing - -### Test Structure - -1. **Unit Tests** - - Core functionality testing - - Settings management - - Time validation - - Error handling - -2. **Integration Tests** - - Notification scheduling - - Background tasks - - Settings persistence - - Event handling - -3. **Edge Cases** - - Timezone changes - - Battery optimization - - Network issues - - Resource cleanup - -### Running Tests - -```bash -# Run all tests -./gradlew test - -# Run specific test class -./gradlew test --tests "com.timesafari.dailynotification.DailyNotificationPluginTest" - -# Run with coverage -./gradlew test jacocoTestReport -``` - -## Security Considerations - -1. **Data Storage** - - Encrypted SharedPreferences for sensitive data - - Secure notification content handling - - Safe URL handling - -2. **Permissions** - - Runtime permission handling - - Permission validation - - Graceful degradation - -3. **Background Tasks** - - Battery optimization compliance - - Resource usage monitoring - - Task scheduling limits - -## Performance Optimization - -1. **Battery Usage** - - Efficient scheduling - - Background task optimization - - Wake lock management - -2. **Memory Management** - - Resource cleanup - - Memory leak prevention - - Cache management - -3. **Network Usage** - - Efficient data fetching - - Caching strategies - - Retry optimization - -## Best Practices - -1. **Code Organization** - - Clear package structure - - Consistent naming conventions - - Comprehensive documentation - -2. **Error Handling** - - Graceful degradation - - User-friendly messages - - Logging integration - -3. **Testing** - - Comprehensive test coverage - - Edge case handling - - Performance testing - -## Dependencies - -- AndroidX Core -- AndroidX AppCompat -- AndroidX WorkManager -- AndroidX Room -- AndroidX Lifecycle -- AndroidX Security -- JUnit -- Mockito - -## Contributing - -1. Fork the repository -2. Create a feature branch -3. Commit your changes -4. Push to the branch -5. Create a Pull Request - -## License - -This project is licensed under the MIT License - see the LICENSE file for details. - -## Author - -Matthew Raymer - -# Daily Notification Plugin - Battery Optimization Guide - -## Battery Overview - -The Daily Notification Plugin implements sophisticated battery optimization features to ensure reliable notification delivery while minimizing battery impact. This guide covers the implementation details and best practices for battery optimization. - -## Battery Optimization Features - -### 1. Adaptive Scheduling - -- Adjusts notification timing based on battery level and power state -- Reduces frequency during low battery conditions -- Optimizes wake lock duration based on battery status -- Implements smart rescheduling for missed notifications - -### 2. Power State Management - -- Monitors device power state (normal, power save, etc.) -- Adapts notification behavior based on power mode -- Implements Doze mode handling -- Manages wake locks efficiently - -### 3. Battery Level Monitoring - -- Real-time battery level tracking -- Charging state detection -- Battery health monitoring -- Adaptive thresholds based on battery status - -## API Methods - -### Battery Optimization - -```typescript -interface BatteryOptimizationStatus { - isExempt: boolean; - requestTime: number; - checkTime: number; -} - -// Request battery optimization exemption -requestBatteryOptimizationExemption(): Promise<BatteryOptimizationStatus>; - -// Get current battery status -getBatteryStatus(): Promise<{ - level: number; - isCharging: boolean; - lastCheck: number; - isOptimizationExempt: boolean; - lastOptimizationCheck: number; - isInDozeMode: boolean; -}>; - -// Get power state information -getPowerState(): Promise<{ - powerState: number; - adaptiveScheduling: boolean; - batteryLevel: number; - isCharging: boolean; - lastCheck: number; -}>; - -// Configure adaptive scheduling -setAdaptiveScheduling(enabled: boolean): Promise<void>; -``` - -## Implementation Details - -### Battery Optimization Exemption - -```java -@PluginMethod -public void requestBatteryOptimizationExemption(PluginCall call) { - // Implementation details... -} -``` - -### Power State Monitoring - -```java -private void updatePowerState() { - // Implementation details... -} -``` - -### Adaptive Scheduling - -```java -private void adjustSchedulingForBatteryLevel() { - // Implementation details... -} -``` - -## Best Practices - -### 1. Battery Optimization Exemption -- Request exemption only when necessary -- Check exemption status before scheduling notifications -- Implement fallback mechanisms when exemption is not granted - -### 2. Wake Lock Usage -- Use minimal wake lock duration -- Release wake locks promptly -- Implement battery-aware wake lock duration - -### 3. Doze Mode Handling - -- Schedule maintenance windows during Doze mode -- Use WorkManager for reliable background tasks -- Implement backup alarms for critical notifications - -### 4. Battery Level Monitoring - -- Monitor battery level changes -- Adjust notification frequency based on battery status -- Implement battery-saving thresholds - -### 5. Power State Adaptation - -- Adapt to power save mode -- Optimize resource usage during low power -- Implement graceful degradation - -## Battery Error Handling - -### Battery Optimization during Error Handling - -```java -try { - // Battery optimization code -} catch (Exception e) { - logger.log("Error in battery optimization: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - // Handle error appropriately -} -``` - -### Wake Lock - -```java -try { - // Wake lock code -} catch (Exception e) { - logger.log("Error managing wake lock: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - // Handle error appropriately -} -``` - -### Doze Mode - -```java -try { - // Doze mode handling code -} catch (Exception e) { - logger.log("Error handling Doze mode: " + e.getMessage(), - DailyNotificationLogger.Level.ERROR); - // Handle error appropriately -} -``` - -## Performance Considerations - -### Battery Impact - -- Minimize wake lock usage -- Optimize background task scheduling -- Implement efficient battery monitoring - -### Resource Usage - -- Use WorkManager for background tasks -- Implement efficient wake lock management -- Optimize notification scheduling - -### Storage - -- Efficient battery stats storage -- Optimized settings persistence -- Minimal logging overhead - -## Security - -### Wake Lock Security - -- Use appropriate wake lock flags -- Implement timeout mechanisms -- Handle wake lock failures gracefully - -### Data Security - -- Secure storage of battery stats -- Protected settings access -- Safe logging practices - -## Testing - -### Battery Optimization Tests - -```java -@Test -void testBatteryOptimizationExemptionRequest() { - // Test implementation -} -``` - -### Power State Tests - -```java -@Test -void testPowerStateMonitoring() { - // Test implementation -} -``` - -### Performance Tests -```java -@Test -void testBatteryImpact() { - // Test implementation -} -``` - -## Contributing - -### Documentation -- Keep documentation up to date -- Document all battery optimization features -- Include usage examples - -### Code -- Follow battery optimization best practices -- Implement comprehensive tests -- Maintain backward compatibility - -## License -MIT License - See LICENSE file for details \ No newline at end of file diff --git a/android/app/src/main/java/index.ts b/android/app/src/main/java/index.ts deleted file mode 100644 index 0686b27..0000000 --- a/android/app/src/main/java/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Android implementation of the DailyNotification plugin - * @module DailyNotificationAndroid - */ - -import { Capacitor } from '@capacitor/core'; -import type { DailyNotificationPlugin, DailyNotificationOptions, PermissionStatus } from '../definitions'; - -export class DailyNotificationAndroid implements DailyNotificationPlugin { - private options: DailyNotificationOptions = { - url: '', - notificationTime: '09:00', - title: 'Daily Update', - body: 'Your daily notification is ready' - }; - - /** - * Initialize the daily notification system for Android - * @param options Configuration options for the notification system - */ - async initialize(options: DailyNotificationOptions): Promise<void> { - if (Capacitor.getPlatform() !== 'android') { - throw new Error('This implementation is for Android only'); - } - this.options = options; - // TODO: Implement Android-specific initialization - } - - /** - * Check current permission status for notifications - * @returns Current permission status - */ - async checkPermissions(): Promise<PermissionStatus> { - if (Capacitor.getPlatform() !== 'android') { - throw new Error('This implementation is for Android only'); - } - // TODO: Implement Android-specific permission check - return { notifications: 'prompt' }; - } - - /** - * Request notification permissions from the user - * @returns Updated permission status after request - */ - async requestPermissions(): Promise<PermissionStatus> { - if (Capacitor.getPlatform() !== 'android') { - throw new Error('This implementation is for Android only'); - } - // TODO: Implement Android-specific permission request - return { notifications: 'prompt' }; - } -} \ No newline at end of file diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 669f043..414ed79 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ <?xml version='1.0' encoding='utf-8'?> <resources> - <string name="app_name">capacitor-daily-notification</string> - <string name="title_activity_main">capacitor-daily-notification</string> - <string name="package_name">com.example.app</string> - <string name="custom_url_scheme">com.example.app</string> + <string name="app_name">DailyNotificationPlugin</string> + <string name="title_activity_main">DailyNotificationPlugin</string> + <string name="package_name">com.timesafari.dailynotification</string> + <string name="custom_url_scheme">com.timesafari.dailynotification</string> </resources> diff --git a/android/app/src/test/java/com/timesafari/dailynotification/BatteryOptimizationSettingsTest.java b/android/app/src/test/java/com/timesafari/dailynotification/BatteryOptimizationSettingsTest.java deleted file mode 100644 index dce621b..0000000 --- a/android/app/src/test/java/com/timesafari/dailynotification/BatteryOptimizationSettingsTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/** - * BatteryOptimizationSettingsTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for battery optimization settings and power state management - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.BatteryManager; -import android.os.Build; -import android.os.PowerManager; -import android.provider.Settings; - -import androidx.work.WorkManager; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = {Build.VERSION_CODES.M}) -public class BatteryOptimizationSettingsTest { - - @Mock - private Context context; - - @Mock - private SharedPreferences settings; - - @Mock - private SharedPreferences.Editor editor; - - @Mock - private PowerManager powerManager; - - @Mock - private WorkManager workManager; - - private BatteryOptimizationSettings batterySettings; - - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - - when(context.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager); - when(settings.edit()).thenReturn(editor); - when(editor.putBoolean(anyString(), anyBoolean())).thenReturn(editor); - when(editor.putInt(anyString(), anyInt())).thenReturn(editor); - when(editor.putLong(anyString(), anyLong())).thenReturn(editor); - when(editor.apply()).thenReturn(true); - - batterySettings = new BatteryOptimizationSettings(context, settings); - } - - @Test - public void testRequestBatteryOptimizationExemption() { - // Test when already exempt - when(settings.getBoolean(anyString(), anyBoolean())).thenReturn(true); - assertTrue(batterySettings.requestBatteryOptimizationExemption()); - - // Test when not exempt - when(settings.getBoolean(anyString(), anyBoolean())).thenReturn(false); - when(context.getPackageName()).thenReturn("com.test.app"); - - Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); - intent.setData(android.net.Uri.parse("package:com.test.app")); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - batterySettings.requestBatteryOptimizationExemption(); - - verify(context).startActivity(eq(intent)); - verify(editor).putLong(eq("last_optimization_request"), anyLong()); - } - - @Test - public void testUpdatePowerState() { - when(powerManager.getPowerState()).thenReturn(PowerManager.POWER_STATE_SAVE); - - batterySettings.updatePowerState(); - - verify(editor).putInt(eq("power_state"), eq(PowerManager.POWER_STATE_SAVE)); - } - - @Test - public void testUpdateBatteryStatus() { - Intent batteryStatus = new Intent(Intent.ACTION_BATTERY_CHANGED); - batteryStatus.putExtra(BatteryManager.EXTRA_LEVEL, 80); - batteryStatus.putExtra(BatteryManager.EXTRA_SCALE, 100); - batteryStatus.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_HEALTH_CHARGING); - - when(context.registerReceiver(any(), any())).thenReturn(batteryStatus); - - batterySettings.updateBatteryStatus(); - - assertEquals(80, batterySettings.getBatteryLevel()); - assertTrue(batterySettings.isCharging()); - verify(editor).putInt(eq("last_battery_level"), eq(80)); - verify(editor).putBoolean(eq("last_charging_state"), eq(true)); - } - - @Test - public void testAdjustSchedulingForPowerState() { - // Test power save mode - when(powerManager.getPowerState()).thenReturn(PowerManager.POWER_STATE_SAVE); - batterySettings.updatePowerState(); - assertTrue(batterySettings.shouldCheckBattery()); - - // Test normal mode - when(powerManager.getPowerState()).thenReturn(PowerManager.POWER_STATE_NORMAL); - batterySettings.updatePowerState(); - assertTrue(batterySettings.shouldCheckBattery()); - - // Test optimized mode - when(powerManager.getPowerState()).thenReturn(PowerManager.POWER_STATE_OPTIMIZED); - batterySettings.updatePowerState(); - assertTrue(batterySettings.shouldCheckBattery()); - } - - @Test - public void testGetPowerStateString() { - assertEquals("POWER_SAVE", batterySettings.getPowerStateString(PowerManager.POWER_STATE_SAVE)); - assertEquals("NORMAL", batterySettings.getPowerStateString(PowerManager.POWER_STATE_NORMAL)); - assertEquals("OPTIMIZED", batterySettings.getPowerStateString(PowerManager.POWER_STATE_OPTIMIZED)); - assertEquals("UNKNOWN", batterySettings.getPowerStateString(999)); - } - - @Test - public void testShouldCheckBattery() { - // Test when check is needed - assertTrue(batterySettings.shouldCheckBattery()); - - // Test when check is not needed - when(settings.getLong(anyString(), anyLong())).thenReturn(System.currentTimeMillis()); - assertFalse(batterySettings.shouldCheckBattery()); - } -} \ No newline at end of file diff --git a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java b/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java deleted file mode 100644 index a94c4a5..0000000 --- a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationLoggerTest.java +++ /dev/null @@ -1,134 +0,0 @@ -/** - * DailyNotificationLoggerTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for logging functionality - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -import static org.junit.Assert.*; - -@RunWith(RobolectricTestRunner.class) -public class DailyNotificationLoggerTest { - - private DailyNotificationLogger logger; - - @Before - public void setUp() { - logger = new DailyNotificationLogger(); - } - - @Test - public void testLogWithInfoLevel() { - // Test info level logging - logger.log("Test info message", DailyNotificationLogger.Level.INFO); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.INFO, logger.getLastLogLevel()); - - // Verify message - assertTrue(logger.getLastLogMessage().contains("Test info message")); - } - - @Test - public void testLogWithWarningLevel() { - // Test warning level logging - logger.log("Test warning message", DailyNotificationLogger.Level.WARNING); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.WARNING, logger.getLastLogLevel()); - - // Verify message - assertTrue(logger.getLastLogMessage().contains("Test warning message")); - } - - @Test - public void testLogWithErrorLevel() { - // Test error level logging - logger.log("Test error message", DailyNotificationLogger.Level.ERROR); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.ERROR, logger.getLastLogLevel()); - - // Verify message - assertTrue(logger.getLastLogMessage().contains("Test error message")); - } - - @Test - public void testLogWithDebugLevel() { - // Test debug level logging - logger.log("Test debug message", DailyNotificationLogger.Level.DEBUG); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.DEBUG, logger.getLastLogLevel()); - - // Verify message - assertTrue(logger.getLastLogMessage().contains("Test debug message")); - } - - @Test - public void testLogWithException() { - // Create test exception - Exception testException = new RuntimeException("Test exception"); - - // Test logging with exception - logger.log("Test error with exception", DailyNotificationLogger.Level.ERROR, testException); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.ERROR, logger.getLastLogLevel()); - - // Verify message contains exception details - assertTrue(logger.getLastLogMessage().contains("Test error with exception")); - assertTrue(logger.getLastLogMessage().contains("Test exception")); - } - - @Test - public void testLogWithNullMessage() { - // Test logging with null message - logger.log(null, DailyNotificationLogger.Level.INFO); - - // Verify log level - assertEquals(DailyNotificationLogger.Level.INFO, logger.getLastLogLevel()); - - // Verify message is empty - assertTrue(logger.getLastLogMessage().isEmpty()); - } - - @Test - public void testLogWithNullLevel() { - // Test logging with null level - logger.log("Test message", null); - - // Verify default level is INFO - assertEquals(DailyNotificationLogger.Level.INFO, logger.getLastLogLevel()); - - // Verify message - assertTrue(logger.getLastLogMessage().contains("Test message")); - } - - @Test - public void testLogWithTimestamp() { - // Test logging with timestamp - logger.log("Test message with timestamp", DailyNotificationLogger.Level.INFO); - - // Verify message contains timestamp - assertTrue(logger.getLastLogMessage().matches("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.*")); - } - - @Test - public void testLogWithTag() { - // Test logging with tag - logger.log("Test message with tag", DailyNotificationLogger.Level.INFO, "TestTag"); - - // Verify message contains tag - assertTrue(logger.getLastLogMessage().contains("[TestTag]")); - } -} \ No newline at end of file diff --git a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java b/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java deleted file mode 100644 index 2f78b85..0000000 --- a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationPluginTest.java +++ /dev/null @@ -1,194 +0,0 @@ -/** - * DailyNotificationPluginTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for the main plugin functionality - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.app.AlarmManager; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Build; -import android.os.PowerManager; - -import com.getcapacitor.JSObject; -import com.getcapacitor.PluginCall; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = {Build.VERSION_CODES.M}) -public class DailyNotificationPluginTest { - - @Mock - private Context context; - - @Mock - private SharedPreferences settings; - - @Mock - private SharedPreferences.Editor editor; - - @Mock - private NotificationManager notificationManager; - - @Mock - private AlarmManager alarmManager; - - @Mock - private PowerManager powerManager; - - @Mock - private PluginCall pluginCall; - - private DailyNotificationPlugin plugin; - - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - - when(context.getSystemService(Context.NOTIFICATION_SERVICE)).thenReturn(notificationManager); - when(context.getSystemService(Context.ALARM_SERVICE)).thenReturn(alarmManager); - when(context.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager); - when(settings.edit()).thenReturn(editor); - when(editor.putBoolean(anyString(), anyBoolean())).thenReturn(editor); - when(editor.putString(anyString(), anyString())).thenReturn(editor); - when(editor.putLong(anyString(), anyLong())).thenReturn(editor); - when(editor.apply()).thenReturn(true); - - plugin = new DailyNotificationPlugin(); - plugin.load(); - } - - @Test - public void testScheduleDailyNotification() { - // Setup test data - when(pluginCall.getString("url")).thenReturn("https://example.com"); - when(pluginCall.getString("time")).thenReturn("09:00"); - when(pluginCall.getString("title")).thenReturn("Test Notification"); - when(pluginCall.getString("body")).thenReturn("Test Body"); - when(pluginCall.getBoolean("sound", true)).thenReturn(true); - when(pluginCall.getString("priority", "default")).thenReturn("default"); - - // Execute - plugin.scheduleDailyNotification(pluginCall); - - // Verify - verify(alarmManager).setExactAndAllowWhileIdle( - eq(AlarmManager.RTC_WAKEUP), - anyLong(), - any() - ); - verify(editor).putString(eq("scheduled_time"), eq("09:00")); - verify(editor).putString(eq("notification_url"), eq("https://example.com")); - } - - @Test - public void testCancelAllNotifications() { - // Execute - plugin.cancelAllNotifications(pluginCall); - - // Verify - verify(alarmManager).cancel(any()); - verify(notificationManager).cancelAll(); - } - - @Test - public void testGetNotificationStatus() { - // Setup - when(notificationManager.areNotificationsEnabled()).thenReturn(true); - - // Execute - plugin.getNotificationStatus(pluginCall); - - // Verify - verify(pluginCall).resolve(any(JSObject.class)); - } - - @Test - public void testUpdateSettings() { - // Setup - when(pluginCall.hasOption("sound")).thenReturn(true); - when(pluginCall.getBoolean("sound")).thenReturn(false); - when(pluginCall.hasOption("priority")).thenReturn(true); - when(pluginCall.getString("priority")).thenReturn("high"); - - // Execute - plugin.updateSettings(pluginCall); - - // Verify - verify(editor).putBoolean("sound", false); - verify(editor).putString("priority", "high"); - } - - @Test - public void testRequestBatteryOptimizationExemption() { - // Execute - plugin.requestBatteryOptimizationExemption(pluginCall); - - // Verify - verify(context).startActivity(any(Intent.class)); - } - - @Test - public void testGetBatteryStatus() { - // Execute - plugin.getBatteryStatus(pluginCall); - - // Verify - verify(pluginCall).resolve(any(JSObject.class)); - } - - @Test - public void testSetAdaptiveScheduling() { - // Setup - when(pluginCall.getBoolean("enabled", true)).thenReturn(true); - - // Execute - plugin.setAdaptiveScheduling(pluginCall); - - // Verify - verify(editor).putBoolean(eq("adaptive_scheduling"), eq(true)); - } - - @Test - public void testGetPowerState() { - // Execute - plugin.getPowerState(pluginCall); - - // Verify - verify(pluginCall).resolve(any(JSObject.class)); - } - - @Test - public void testHandleDozeMode() { - // Setup - when(powerManager.isDeviceIdleMode()).thenReturn(true); - - // Execute - plugin.handleDozeMode(); - - // Verify - verify(alarmManager).setAndAllowWhileIdle( - eq(AlarmManager.RTC_WAKEUP), - anyLong(), - any() - ); - } -} \ No newline at end of file diff --git a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java b/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java deleted file mode 100644 index 88a272e..0000000 --- a/android/app/src/test/java/com/timesafari/dailynotification/DailyNotificationReceiverTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * DailyNotificationReceiverTest.java - * Daily Notification Plugin for Capacitor - * - * Tests for notification receiver functionality - * - * @author Matthew Raymer - */ - -package com.timesafari.dailynotification; - -import android.app.Notification; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static org.junit.Assert.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -@RunWith(RobolectricTestRunner.class) -@Config(sdk = {Build.VERSION_CODES.M}) -public class DailyNotificationReceiverTest { - - @Mock - private Context context; - - @Mock - private NotificationManager notificationManager; - - @Mock - private NotificationManagerCompat notificationManagerCompat; - - private DailyNotificationReceiver receiver; - - @Before - public void setUp() { - MockitoAnnotations.openMocks(this); - - when(context.getSystemService(Context.NOTIFICATION_SERVICE)) - .thenReturn(notificationManager); - when(NotificationManagerCompat.from(context)) - .thenReturn(notificationManagerCompat); - - receiver = new DailyNotificationReceiver(); - } - - @Test - public void testOnReceive() { - // Setup test data - Intent intent = new Intent(); - intent.putExtra("url", "https://example.com"); - intent.putExtra("title", "Test Notification"); - intent.putExtra("body", "Test Body"); - intent.putExtra("sound", true); - intent.putExtra("priority", "high"); - - // Execute - receiver.onReceive(context, intent); - - // Verify - verify(notificationManagerCompat).notify( - eq("https://example.com".hashCode()), - any(Notification.class) - ); - } - - @Test - public void testOnReceiveWithMissingParameters() { - // Setup test data - Intent intent = new Intent(); - - // Execute - receiver.onReceive(context, intent); - - // Verify - verify(notificationManagerCompat, never()).notify(anyInt(), any(Notification.class)); - } - - @Test - public void testShowNotification() { - // Setup test data - String title = "Test Notification"; - String body = "Test Body"; - String url = "https://example.com"; - boolean sound = true; - String priority = "high"; - - // Execute - receiver.showNotification(context, title, body, url, sound, priority); - - // Verify - verify(notificationManagerCompat).notify( - eq(url.hashCode()), - any(Notification.class) - ); - } - - @Test - public void testAddCustomActions() { - // Setup test data - NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "test_channel"); - String url = "https://example.com"; - - // Execute - receiver.addCustomActions(builder, context, url); - - // Verify - verify(context, times(3)).getClass(); - } - - @Test - public void testGetNotificationPriority() { - // Test high priority - assertEquals( - NotificationCompat.PRIORITY_HIGH, - receiver.getNotificationPriority("high") - ); - - // Test low priority - assertEquals( - NotificationCompat.PRIORITY_LOW, - receiver.getNotificationPriority("low") - ); - - // Test default priority - assertEquals( - NotificationCompat.PRIORITY_DEFAULT, - receiver.getNotificationPriority("default") - ); - - // Test unknown priority - assertEquals( - NotificationCompat.PRIORITY_DEFAULT, - receiver.getNotificationPriority("unknown") - ); - } - - @Test - public void testCreateNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - // Execute - receiver.createNotificationChannel(context); - - // Verify - verify(notificationManager).createNotificationChannel(any(NotificationChannel.class)); - } - } -} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 1d3e084..9cc72cb 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,109 +1,29 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.0.0' + classpath 'com.google.gms:google-services:4.3.15' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files } } apply from: "variables.gradle" -apply plugin: 'com.android.library' - -ext { - compileSdkVersion = 33 - minSdkVersion = 21 - targetSdkVersion = 33 - buildToolsVersion = '33.0.0' -} - -android { - namespace "com.timesafari.dailynotification" - compileSdkVersion project.ext.compileSdkVersion - buildToolsVersion project.ext.buildToolsVersion - defaultConfig { - minSdkVersion project.ext.minSdkVersion - targetSdkVersion project.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - testOptions { - unitTests { - includeAndroidResources = true - } - } -} - allprojects { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" - options.compilerArgs << "-Xlint:deprecation" + repositories { + google() + mavenCentral() } } -repositories { - google() - mavenCentral() - maven { url "https://jitpack.io" } - maven { - url "${project.rootDir}/capacitor-cordova-android-plugins/src/main/libs" - } - maven { - url "${project.rootDir}/libs" - } +task clean(type: Delete) { + delete rootProject.buildDir } - -dependencies { - // AndroidX Core - implementation 'androidx.core:core:1.7.0' - implementation 'androidx.core:core-ktx:1.7.0' - - // WorkManager for background tasks - implementation 'androidx.work:work-runtime:2.7.1' - - // Capacitor dependencies - implementation project(':capacitor-android') - implementation project(':capacitor-core') - - // Testing dependencies - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:4.5.1' - testImplementation 'org.robolectric:robolectric:4.8' - testImplementation 'androidx.test:core:1.4.0' - testImplementation 'androidx.test:runner:1.4.0' - testImplementation 'androidx.test.ext:junit:1.1.3' - - // AndroidX Test - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' - - // AndroidX AppCompat - implementation 'androidx.appcompat:appcompat:1.6.1' - - // AndroidX Core App - implementation 'androidx.core:core-app:1.0.0' - - // AndroidX Core AppCompat - implementation 'androidx.core:core-appcompat:1.0.0' - - // AndroidX Core AppCompat Resources - implementation 'androidx.core:core-appcompat-resources:1.0.0' -} \ No newline at end of file diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index ebdcd0c..9a5fa87 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -1,3 +1,3 @@ // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN include ':capacitor-android' -project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') \ No newline at end of file +project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') diff --git a/android/gradlew.bat b/android/gradlew.bat index 6689b85..93e3f59 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -1,92 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/android/settings.gradle b/android/settings.gradle index b29c759..3b4431d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,10 +1,5 @@ -rootProject.name = 'daily-notification' - include ':app' -include ':capacitor-android' include ':capacitor-cordova-android-plugins' - -project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor') -project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins') +project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/') apply from: 'capacitor.settings.gradle' \ No newline at end of file diff --git a/android/variables.gradle b/android/variables.gradle index ba92956..5946ada 100644 --- a/android/variables.gradle +++ b/android/variables.gradle @@ -1,14 +1,13 @@ ext { - compileSdkVersion = 33 minSdkVersion = 22 + compileSdkVersion = 33 targetSdkVersion = 33 - buildToolsVersion = '33.0.0' + androidxActivityVersion = '1.7.0' androidxAppCompatVersion = '1.6.1' androidxCoordinatorLayoutVersion = '1.2.0' - coreSplashScreenVersion = '1.0.1' - androidxActivityVersion = '1.7.0' androidxCoreVersion = '1.10.0' androidxFragmentVersion = '1.5.6' + coreSplashScreenVersion = '1.0.0' androidxWebkitVersion = '1.6.1' junitVersion = '4.13.2' androidxJunitVersion = '1.1.5' diff --git a/capacitor.config.ts b/capacitor.config.ts index 4ab66ee..7a40700 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -1,8 +1,8 @@ import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { - appId: 'com.example.app', - appName: 'capacitor-daily-notification', + appId: 'com.timesafari.dailynotification', + appName: 'DailyNotificationPlugin', webDir: 'www', server: { androidScheme: 'https' diff --git a/package-lock.json b/package-lock.json index ba7b97b..0d26bf9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,34 +1,32 @@ { - "name": "capacitor-daily-notification", - "version": "0.0.1", + "name": "@timesafari/daily-notification-plugin", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "capacitor-daily-notification", - "version": "0.0.1", - "hasInstallScript": true, + "name": "@timesafari/daily-notification-plugin", + "version": "1.0.0", "license": "MIT", "dependencies": { - "@capacitor/android": "^5.0.0", - "@capacitor/core": "^5.0.0", - "@capacitor/ios": "^5.0.0" + "@capacitor/core": "^5.7.8" }, "devDependencies": { + "@capacitor/android": "^5.7.8", "@capacitor/cli": "^5.0.0", - "@jest/globals": "^29.5.0", - "@types/jest": "^29.5.14", - "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.0.0", + "@capacitor/ios": "^5.0.0", + "@types/jest": "^29.5.0", + "@types/node": "^18.15.0", + "@typescript-eslint/eslint-plugin": "^5.57.0", + "@typescript-eslint/parser": "^5.57.0", + "eslint": "^8.37.0", "jest": "^29.5.0", - "rimraf": "^5.0.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.0", + "rollup": "^3.20.0", + "rollup-plugin-typescript2": "^0.31.0", "ts-jest": "^29.1.0", "typescript": "^5.0.0" - }, - "peerDependencies": { - "@capacitor/core": "^5.0.0" } }, "node_modules/@ampproject/remapping": { @@ -582,6 +580,7 @@ "version": "5.7.8", "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-5.7.8.tgz", "integrity": "sha512-ooWclwcuW0dy3YfqgoozkHkjatX8H2fb2/RwRsJa3cew1P1lUXIXri3Dquuy4LdqFAJA7UHcJ19Bl/6UKdsZYA==", + "dev": true, "license": "MIT", "peerDependencies": { "@capacitor/core": "^5.7.0" @@ -620,80 +619,6 @@ "node": ">=16.0.0" } }, - "node_modules/@capacitor/cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@capacitor/cli/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@capacitor/cli/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@capacitor/cli/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@capacitor/cli/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@capacitor/core": { "version": "5.7.8", "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-5.7.8.tgz", @@ -707,6 +632,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-5.0.0.tgz", "integrity": "sha512-b1edQNe1cKiqnxoIR5WxbVjDlf3RWr2ZjaDxwEuBzwBAvvrFcweKdbw1ij45DWHKODaIymWoyAlAUN+vFOF5sw==", + "dev": true, "license": "MIT", "peerDependencies": { "@capacitor/core": "^5.0.0" @@ -987,109 +913,6 @@ "node": ">=16.0.0" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1612,15 +1435,18 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, "engines": { - "node": ">=14" + "node": ">= 8.0.0" } }, "node_modules/@sinclair/typebox": { @@ -1761,19 +1587,19 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.27.tgz", - "integrity": "sha512-U58sbKhDrthHlxHRJw7ZLiLDZGmAUOZUbpw0S6nL27sYUdhvgBLCRu/keSd6qcTsfArd1sRFCCBxzWATGr/0UA==", + "version": "18.19.84", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.84.tgz", + "integrity": "sha512-ACYy2HGcZPHxEeWTqowTF7dhXN+JU1o7Gr4b41klnn6pj2LD6rsiGqSZojMdk1Jh2ys3m76ap+ae1vvE4+5+vg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~5.26.4" } }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", "dev": true, "license": "MIT" }, @@ -1809,34 +1635,33 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1845,27 +1670,26 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1874,17 +1698,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1892,26 +1716,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "*" }, "peerDependenciesMeta": { "typescript": { @@ -1920,13 +1744,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1934,23 +1758,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1962,70 +1785,45 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -2049,6 +1847,31 @@ "node": ">=10.0.0" } }, + "node_modules/@yarn-tool/resolve-package": { + "version": "1.0.47", + "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz", + "integrity": "sha512-Zaw58gQxjQceJqhqybJi1oUDaORT8i2GTgwICPs8v/X/Pkx35FXQba69ldHVg5pQZ6YLKpROXgyHvBaCJOFXiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "pkg-dir": "< 6 >= 5", + "tslib": "^2", + "upath2": "^3.1.13" + } + }, + "node_modules/@yarn-tool/resolve-package/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", @@ -2640,6 +2463,13 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2797,13 +2627,6 @@ "node": ">=6.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -2960,6 +2783,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", @@ -3078,6 +2915,23 @@ "node": ">=4.0" } }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3278,6 +3132,50 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3356,36 +3254,6 @@ "dev": true, "license": "ISC" }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -3504,21 +3372,19 @@ } }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3548,9 +3414,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "license": "ISC", "dependencies": { @@ -3946,22 +3812,6 @@ "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -4871,13 +4721,13 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "license": "ISC", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, "node_modules/minizlib": { @@ -4960,6 +4810,13 @@ "dev": true, "license": "MIT" }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5101,13 +4958,6 @@ "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5160,6 +5010,16 @@ "node": ">=0.10.0" } }, + "node_modules/path-is-network-drive": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.21.tgz", + "integrity": "sha512-B1PzE3CgxNKY0/69Urjw3KNi4K+4q4IBsvq02TwURsdNLZj2YUn0HGw2o26IrGV4YUffg7IHZiwKJ/EDhXMQyg==", + "dev": true, + "license": "ISC", + "dependencies": { + "tslib": "^2" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5194,6 +5054,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-strip-sep": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.18.tgz", + "integrity": "sha512-IGC/vjHigvKV9RsE4ArZiGNkqNrb0tk1j/HO0TS49duEUqGSy1y464XhCWyTLFwqe7w7wFsdCX9fqUmAHoUaxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "tslib": "^2" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5335,6 +5215,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -5543,21 +5439,75 @@ } }, "node_modules/rimraf": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", - "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^10.3.7" + "glob": "^9.2.0" }, "bin": { - "rimraf": "dist/esm/bin.mjs" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.31.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz", + "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "@yarn-tool/resolve-package": "^1.0.40", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "resolve": "^1.20.0", + "tslib": "^2.3.1" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5788,22 +5738,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5817,20 +5751,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -6002,19 +5922,6 @@ "tree-kill": "cli.js" } }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, "node_modules/ts-jest": { "version": "29.3.0", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz", @@ -6084,6 +5991,29 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6135,9 +6065,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, "license": "MIT" }, @@ -6161,6 +6091,19 @@ "node": ">=8" } }, + "node_modules/upath2": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.20.tgz", + "integrity": "sha512-g+t9q+MrIsX60eJzF4I/YNYmRmrT0HJnnEaenbUy/FFO1lY04YQoiJ/qS4Ou+a+D9WUPxN0cVUYXkkX9b1EAMw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/node": "*", + "path-is-network-drive": "^1.0.21", + "path-strip-sep": "^1.0.18", + "tslib": "^2" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -6278,25 +6221,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index d14aa44..f5cf38c 100644 --- a/package.json +++ b/package.json @@ -1,65 +1,53 @@ { - "name": "capacitor-daily-notification", - "version": "0.0.1", - "description": "Capacitor plugin for daily notifications with network content", + "name": "@timesafari/daily-notification-plugin", + "version": "1.0.0", + "description": "A Capacitor plugin for scheduling and managing daily notifications on Android devices", "main": "dist/plugin.js", "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", + "types": "dist/esm/index.d.ts", "scripts": { - "build": "npm run clean && tsc", + "build": "npm run clean && tsc && rollup -c rollup.config.js", "clean": "rimraf ./dist", "watch": "tsc --watch", "prepublishOnly": "npm run build", - "build:android": "chmod +x scripts/build-native.sh && ./scripts/build-native.sh --platform android", - "build:ios": "chmod +x scripts/build-native.sh && ./scripts/build-native.sh --platform ios", - "build:native": "chmod +x scripts/build-native.sh && ./scripts/build-native.sh --platform all", - "test:android": "cd android && ./gradlew test", - "test:ios": "cd ios && xcodebuild test -scheme DailyNotificationPlugin -destination 'platform=iOS Simulator,name=iPhone 14'", "test": "jest", - "test:watch": "jest --watch", - "test:coverage": "jest --coverage", "lint": "eslint . --ext .ts", - "lint:fix": "eslint . --ext .ts --fix", - "validate": "npm run lint && npm run build && npm run test:android", - "validate:ios": "npm run lint && npm run build && npm run test:ios", - "preinstall": "node scripts/check-environment.js", - "postinstall": "node scripts/setup-native.js" + "format": "prettier --write \"src/**/*.ts\"" }, + "keywords": [ + "capacitor", + "android", + "notification", + "daily", + "plugin" + ], "author": "Matthew Raymer", "license": "MIT", "dependencies": { - "@capacitor/android": "^5.0.0", - "@capacitor/core": "^5.0.0", - "@capacitor/ios": "^5.0.0" + "@capacitor/core": "^5.7.8" }, "devDependencies": { + "@capacitor/android": "^5.7.8", "@capacitor/cli": "^5.0.0", - "@jest/globals": "^29.5.0", - "@types/jest": "^29.5.14", - "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.0.0", + "@capacitor/ios": "^5.0.0", + "@types/jest": "^29.5.0", + "@types/node": "^18.15.0", + "@typescript-eslint/eslint-plugin": "^5.57.0", + "@typescript-eslint/parser": "^5.57.0", + "eslint": "^8.37.0", "jest": "^29.5.0", - "rimraf": "^5.0.0", + "prettier": "^2.8.7", + "rimraf": "^4.4.0", + "rollup": "^3.20.0", + "rollup-plugin-typescript2": "^0.31.0", "ts-jest": "^29.1.0", "typescript": "^5.0.0" }, - "peerDependencies": { - "@capacitor/core": "^5.0.0" - }, "files": [ "dist/", "ios/", "android/", - "CapacitorDailyNotification.podspec" - ], - "keywords": [ - "capacitor", - "plugin", - "native", - "notification", - "daily" + "DailyNotificationPlugin.podspec" ], "capacitor": { "ios": { @@ -75,5 +63,17 @@ }, "bugs": { "url": "https://github.com/yourusername/capacitor-daily-notification/issues" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "moduleFileExtensions": [ + "ts", + "tsx", + "js", + "jsx", + "json", + "node" + ] } } diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..9f246f7 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,25 @@ +import typescript from 'rollup-plugin-typescript2'; + +export default { + input: 'src/index.ts', + output: [ + { + file: 'dist/plugin.js', + format: 'cjs', + sourcemap: true + }, + { + file: 'dist/esm/index.js', + format: 'es', + sourcemap: true + } + ], + external: ['@capacitor/core'], + plugins: [ + typescript({ + tsconfig: './tsconfig.json', + clean: true, + useTsconfigDeclarationDir: true + }) + ] +}; \ No newline at end of file diff --git a/src/definitions.ts b/src/definitions.ts index a8d9815..648da68 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -1,98 +1,61 @@ /** - * Interface definitions for the Daily Notification plugin + * Daily Notification Plugin Definitions + * + * TypeScript definitions for the Daily Notification Plugin + * + * @author Matthew Raymer */ -export interface NotificationOptions { - url: string; - time: string; - title?: string; - body?: string; - sound?: boolean; - vibrate?: boolean; - priority?: 'low' | 'normal' | 'high'; - retryCount?: number; - retryInterval?: number; - cacheDuration?: number; - headers?: Record<string, string>; - offlineFallback?: boolean; - timezone?: string; - contentHandler?: (response: Response) => Promise<{ - title: string; - body: string; - data?: any; - }>; -} - -export interface NotificationStatus { - isScheduled: boolean; - nextNotificationTime?: string; - lastNotificationTime?: string; - error?: string; -} - export interface NotificationResponse { title: string; body: string; - data?: any; - timestamp: string; } -export interface NotificationSettings { - time?: string; +export interface NotificationOptions { + title?: string; + body?: string; sound?: boolean; - vibrate?: boolean; - priority?: 'low' | 'normal' | 'high'; - timezone?: string; -} - -export interface NotificationEvent extends Event { - detail: { - id: string; - action: string; - data?: any; - }; + priority?: 'high' | 'low' | 'normal'; } export interface DailyNotificationPlugin { - /** - * Schedule a daily notification with the specified options - */ - scheduleDailyNotification(options: NotificationOptions): Promise<void>; - - /** - * Get the last notification that was delivered - */ + scheduleDailyNotification(options: NotificationOptions | ScheduleOptions): Promise<void>; getLastNotification(): Promise<NotificationResponse | null>; - - /** - * Cancel all scheduled notifications - */ cancelAllNotifications(): Promise<void>; - - /** - * Get the current status of notifications - */ getNotificationStatus(): Promise<NotificationStatus>; - - /** - * Update notification settings - */ updateSettings(settings: NotificationSettings): Promise<void>; + getBatteryStatus(): Promise<BatteryStatus>; + requestBatteryOptimizationExemption(): Promise<void>; + setAdaptiveScheduling(options: { enabled: boolean }): Promise<void>; + getPowerState(): Promise<PowerState>; +} - /** - * Check notification permissions - */ - checkPermissions(): Promise<PermissionStatus>; +export interface ScheduleOptions { + sound?: boolean; + priority?: 'high' | 'default' | 'low' | 'min' | 'max'; + timezone?: string; +} - /** - * Request notification permissions - */ - requestPermissions(): Promise<PermissionStatus>; +export interface NotificationSettings { + sound?: boolean; + priority?: string; + timezone?: string; +} + +export interface NotificationStatus { + lastNotificationTime: number; + nextNotificationTime: number; + settings: NotificationSettings; } -export interface PermissionStatus { - notifications: PermissionState; - backgroundRefresh?: PermissionState; // iOS only +export interface BatteryStatus { + level: number; + isCharging: boolean; + powerState: number; + isOptimizationExempt: boolean; } -export type PermissionState = 'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'; \ No newline at end of file +export interface PowerState { + powerState: number; + isOptimizationExempt: boolean; +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index ddd1949..ffde750 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,9 +5,10 @@ import { registerPlugin } from '@capacitor/core'; import type { DailyNotificationPlugin } from './definitions'; +import { DailyNotificationWeb } from './web'; const DailyNotification = registerPlugin<DailyNotificationPlugin>('DailyNotification', { - web: () => import('./web').then(m => new m.DailyNotificationWeb()), + web: async () => new DailyNotificationWeb(), }); export * from './definitions'; diff --git a/src/web.ts b/src/web.ts new file mode 100644 index 0000000..ddbe69e --- /dev/null +++ b/src/web.ts @@ -0,0 +1,63 @@ +/** + * Daily Notification Plugin Web Implementation + * + * Web implementation of the Daily Notification Plugin + * + * @author Matthew Raymer + */ + +import { DailyNotificationPlugin, NotificationOptions, NotificationResponse, NotificationSettings, NotificationStatus, BatteryStatus, PowerState, ScheduleOptions } from './definitions'; + +export class DailyNotificationWeb implements DailyNotificationPlugin { + async scheduleDailyNotification(options: NotificationOptions | ScheduleOptions): Promise<void> { + console.warn('Daily notifications are not supported on web'); + } + + async getLastNotification(): Promise<NotificationResponse | null> { + console.warn('Daily notifications are not supported on web'); + return null; + } + + async cancelAllNotifications(): Promise<void> { + console.warn('Daily notifications are not supported on web'); + } + + async getNotificationStatus(): Promise<NotificationStatus> { + console.warn('Daily notifications are not supported on web'); + return { + lastNotificationTime: 0, + nextNotificationTime: 0, + settings: {} + }; + } + + async updateSettings(settings: NotificationSettings): Promise<void> { + console.warn('Daily notifications are not supported on web'); + } + + async getBatteryStatus(): Promise<BatteryStatus> { + console.warn('Battery status is not supported on web'); + return { + level: 0, + isCharging: false, + powerState: 0, + isOptimizationExempt: false + }; + } + + async requestBatteryOptimizationExemption(): Promise<void> { + console.warn('Battery optimization is not supported on web'); + } + + async setAdaptiveScheduling(options: { enabled: boolean }): Promise<void> { + console.warn('Adaptive scheduling is not supported on web'); + } + + async getPowerState(): Promise<PowerState> { + console.warn('Power state is not supported on web'); + return { + powerState: 0, + isOptimizationExempt: false + }; + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index dcd50d3..096df5f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,25 @@ { "compilerOptions": { - "target": "es2017", - "module": "commonjs", - "lib": ["es2017", "dom"], + "allowUnreachableCode": false, + "allowUnusedLabels": false, "declaration": true, - "outDir": "./dist", - "strict": true, "esModuleInterop": true, - "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "types": ["node", "jest"] + "lib": ["dom", "es2017"], + "module": "es2020", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "dist/esm", + "rootDir": "src", + "strict": true, + "target": "es2017", + "skipLibCheck": true }, - "include": ["src/**/*", "tests/**/*"], - "exclude": ["node_modules", "dist"] + "include": ["src"], + "exclude": ["node_modules", "dist", "**/*.spec.ts"] }