Add native Android components for daily notification plugin integration: - TimeSafariApplication: Custom Application class to register native fetcher - TimeSafariNativeFetcher: Implements NativeNotificationContentFetcher interface - network_security_config.xml: Allow cleartext for local development Configuration updates: - AndroidManifest.xml: Link custom Application class, add required permissions - build.gradle: Add Java 17 compile options and required dependencies - capacitor.config.ts: Add DailyNotification plugin configuration - NativeNotificationService.ts: Use "daily_" prefixed ID for schedule rollover Note: Subsequent notification scheduling after first fire still has issues that require further investigation. Co-authored-by: Cursor <cursoragent@cursor.com>
147 lines
2.8 KiB
JSON
147 lines
2.8 KiB
JSON
{
|
|
"appId": "app.timesafari",
|
|
"appName": "TimeSafari",
|
|
"webDir": "dist",
|
|
"server": {
|
|
"cleartext": true
|
|
},
|
|
"plugins": {
|
|
"App": {
|
|
"appUrlOpen": {
|
|
"handlers": [
|
|
{
|
|
"url": "timesafari://*",
|
|
"autoVerify": true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"SplashScreen": {
|
|
"launchShowDuration": 3000,
|
|
"launchAutoHide": true,
|
|
"backgroundColor": "#ffffff",
|
|
"androidSplashResourceName": "splash",
|
|
"androidScaleType": "CENTER_CROP",
|
|
"showSpinner": false,
|
|
"androidSpinnerStyle": "large",
|
|
"iosSpinnerStyle": "small",
|
|
"spinnerColor": "#999999",
|
|
"splashFullScreen": true,
|
|
"splashImmersive": true
|
|
},
|
|
"CapSQLite": {
|
|
"iosDatabaseLocation": "Library/CapacitorDatabase",
|
|
"iosIsEncryption": false,
|
|
"iosBiometric": {
|
|
"biometricAuth": false,
|
|
"biometricTitle": "Biometric login for TimeSafari"
|
|
},
|
|
"androidIsEncryption": false,
|
|
"androidBiometric": {
|
|
"biometricAuth": false,
|
|
"biometricTitle": "Biometric login for TimeSafari"
|
|
},
|
|
"electronIsEncryption": false
|
|
},
|
|
"DailyNotification": {
|
|
"debugMode": true,
|
|
"enableNotifications": true,
|
|
"timesafariConfig": {
|
|
"activeDid": "",
|
|
"endpoints": {
|
|
"projectsLastUpdated": "https://api.endorser.ch/api/v2/report/plansLastUpdatedBetween"
|
|
},
|
|
"starredProjectsConfig": {
|
|
"enabled": true,
|
|
"starredPlanHandleIds": [],
|
|
"fetchInterval": "0 8 * * *"
|
|
}
|
|
},
|
|
"networkConfig": {
|
|
"timeout": 30000,
|
|
"retryAttempts": 3,
|
|
"retryDelay": 1000
|
|
},
|
|
"contentFetch": {
|
|
"enabled": true,
|
|
"schedule": "0 8 * * *",
|
|
"fetchLeadTimeMinutes": 5
|
|
}
|
|
}
|
|
},
|
|
"ios": {
|
|
"contentInset": "never",
|
|
"allowsLinkPreview": true,
|
|
"scrollEnabled": true,
|
|
"limitsNavigationsToAppBoundDomains": true,
|
|
"backgroundColor": "#ffffff",
|
|
"allowNavigation": [
|
|
"*.timesafari.app",
|
|
"*.jsdelivr.net",
|
|
"api.endorser.ch"
|
|
]
|
|
},
|
|
"android": {
|
|
"allowMixedContent": true,
|
|
"captureInput": true,
|
|
"webContentsDebuggingEnabled": false,
|
|
"allowNavigation": [
|
|
"*.timesafari.app",
|
|
"*.jsdelivr.net",
|
|
"api.endorser.ch",
|
|
"10.0.2.2:3000"
|
|
]
|
|
},
|
|
"electron": {
|
|
"deepLinking": {
|
|
"schemes": [
|
|
"timesafari"
|
|
]
|
|
},
|
|
"buildOptions": {
|
|
"appId": "app.timesafari",
|
|
"productName": "TimeSafari",
|
|
"directories": {
|
|
"output": "dist-electron-packages"
|
|
},
|
|
"files": [
|
|
"dist/**/*",
|
|
"electron/**/*"
|
|
],
|
|
"mac": {
|
|
"category": "public.app-category.productivity",
|
|
"target": [
|
|
{
|
|
"target": "dmg",
|
|
"arch": [
|
|
"x64",
|
|
"arm64"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"win": {
|
|
"target": [
|
|
{
|
|
"target": "nsis",
|
|
"arch": [
|
|
"x64"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"linux": {
|
|
"target": [
|
|
{
|
|
"target": "AppImage",
|
|
"arch": [
|
|
"x64"
|
|
]
|
|
}
|
|
],
|
|
"category": "Utility"
|
|
}
|
|
}
|
|
}
|
|
}
|