@use-voltra/expo-plugin 1.4.1 → 2.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -29
- package/build/cjs/constants.js +3 -43
- package/build/cjs/constants.js.map +1 -1
- package/build/cjs/index.js +23 -69
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/types.js +4 -0
- package/build/cjs/types.js.map +1 -1
- package/build/cjs/utils/localePick.js +48 -0
- package/build/cjs/utils/localePick.js.map +1 -0
- package/build/cjs/utils/prerender.js +15 -9
- package/build/cjs/utils/prerender.js.map +1 -1
- package/build/cjs/utils/widgetLabel.js +19 -0
- package/build/cjs/utils/widgetLabel.js.map +1 -0
- package/build/cjs/validation.js +75 -166
- package/build/cjs/validation.js.map +1 -1
- package/build/esm/constants.js +2 -42
- package/build/esm/constants.js.map +1 -1
- package/build/esm/index.js +8 -69
- package/build/esm/index.js.map +1 -1
- package/build/esm/types.js +4 -0
- package/build/esm/types.js.map +1 -1
- package/build/esm/utils/localePick.js +44 -0
- package/build/esm/utils/localePick.js.map +1 -0
- package/build/esm/utils/prerender.js +15 -9
- package/build/esm/utils/prerender.js.map +1 -1
- package/build/esm/utils/widgetLabel.js +15 -0
- package/build/esm/utils/widgetLabel.js.map +1 -0
- package/build/esm/validation.js +71 -163
- package/build/esm/validation.js.map +1 -1
- package/build/types/constants.d.ts +2 -26
- package/build/types/constants.d.ts.map +1 -1
- package/build/types/index.d.ts +10 -12
- package/build/types/index.d.ts.map +1 -1
- package/build/types/types.d.ts +9 -260
- package/build/types/types.d.ts.map +1 -1
- package/build/types/utils/localePick.d.ts +7 -0
- package/build/types/utils/localePick.d.ts.map +1 -0
- package/build/types/utils/prerender.d.ts +6 -3
- package/build/types/utils/prerender.d.ts.map +1 -1
- package/build/types/utils/widgetLabel.d.ts +8 -0
- package/build/types/utils/widgetLabel.d.ts.map +1 -0
- package/build/types/validation.d.ts +6 -14
- package/build/types/validation.d.ts.map +1 -1
- package/package.json +11 -11
- package/build/cjs/android/files/assets.js +0 -259
- package/build/cjs/android/files/assets.js.map +0 -1
- package/build/cjs/android/files/fonts.js +0 -69
- package/build/cjs/android/files/fonts.js.map +0 -1
- package/build/cjs/android/files/index.js +0 -81
- package/build/cjs/android/files/index.js.map +0 -1
- package/build/cjs/android/files/initialStates.js +0 -83
- package/build/cjs/android/files/initialStates.js.map +0 -1
- package/build/cjs/android/files/kotlin.js +0 -142
- package/build/cjs/android/files/kotlin.js.map +0 -1
- package/build/cjs/android/files/xml.js +0 -247
- package/build/cjs/android/files/xml.js.map +0 -1
- package/build/cjs/android/index.js +0 -33
- package/build/cjs/android/index.js.map +0 -1
- package/build/cjs/android/manifest.js +0 -92
- package/build/cjs/android/manifest.js.map +0 -1
- package/build/cjs/ios/eas.js +0 -28
- package/build/cjs/ios/eas.js.map +0 -1
- package/build/cjs/ios/entitlements.js +0 -46
- package/build/cjs/ios/entitlements.js.map +0 -1
- package/build/cjs/ios/index.js +0 -39
- package/build/cjs/ios/index.js.map +0 -1
- package/build/cjs/ios/infoPlist.js +0 -51
- package/build/cjs/ios/infoPlist.js.map +0 -1
- package/build/cjs/ios/pushNotifications.js +0 -22
- package/build/cjs/ios/pushNotifications.js.map +0 -1
- package/build/cjs/ios-widget/eas.js +0 -66
- package/build/cjs/ios-widget/eas.js.map +0 -1
- package/build/cjs/ios-widget/files/assets.js +0 -199
- package/build/cjs/ios-widget/files/assets.js.map +0 -1
- package/build/cjs/ios-widget/files/entitlements.js +0 -77
- package/build/cjs/ios-widget/files/entitlements.js.map +0 -1
- package/build/cjs/ios-widget/files/index.js +0 -92
- package/build/cjs/ios-widget/files/index.js.map +0 -1
- package/build/cjs/ios-widget/files/infoPlist.js +0 -91
- package/build/cjs/ios-widget/files/infoPlist.js.map +0 -1
- package/build/cjs/ios-widget/files/swift.js +0 -256
- package/build/cjs/ios-widget/files/swift.js.map +0 -1
- package/build/cjs/ios-widget/fonts.js +0 -151
- package/build/cjs/ios-widget/fonts.js.map +0 -1
- package/build/cjs/ios-widget/index.js +0 -46
- package/build/cjs/ios-widget/index.js.map +0 -1
- package/build/cjs/ios-widget/podfile.js +0 -43
- package/build/cjs/ios-widget/podfile.js.map +0 -1
- package/build/cjs/ios-widget/widgetPlist.js +0 -99
- package/build/cjs/ios-widget/widgetPlist.js.map +0 -1
- package/build/cjs/ios-widget/xcode/buildPhases.js +0 -245
- package/build/cjs/ios-widget/xcode/buildPhases.js.map +0 -1
- package/build/cjs/ios-widget/xcode/configurationList.js +0 -91
- package/build/cjs/ios-widget/xcode/configurationList.js.map +0 -1
- package/build/cjs/ios-widget/xcode/groups.js +0 -65
- package/build/cjs/ios-widget/xcode/groups.js.map +0 -1
- package/build/cjs/ios-widget/xcode/index.js +0 -155
- package/build/cjs/ios-widget/xcode/index.js.map +0 -1
- package/build/cjs/ios-widget/xcode/mainAppSettings.js +0 -71
- package/build/cjs/ios-widget/xcode/mainAppSettings.js.map +0 -1
- package/build/cjs/ios-widget/xcode/productFile.js +0 -74
- package/build/cjs/ios-widget/xcode/productFile.js.map +0 -1
- package/build/cjs/ios-widget/xcode/target.js +0 -113
- package/build/cjs/ios-widget/xcode/target.js.map +0 -1
- package/build/cjs/utils/fileDiscovery.js +0 -107
- package/build/cjs/utils/fileDiscovery.js.map +0 -1
- package/build/cjs/utils/urlScheme.js +0 -40
- package/build/cjs/utils/urlScheme.js.map +0 -1
- package/build/esm/android/files/assets.js +0 -223
- package/build/esm/android/files/assets.js.map +0 -1
- package/build/esm/android/files/fonts.js +0 -33
- package/build/esm/android/files/fonts.js.map +0 -1
- package/build/esm/android/files/index.js +0 -77
- package/build/esm/android/files/index.js.map +0 -1
- package/build/esm/android/files/initialStates.js +0 -44
- package/build/esm/android/files/initialStates.js.map +0 -1
- package/build/esm/android/files/kotlin.js +0 -103
- package/build/esm/android/files/kotlin.js.map +0 -1
- package/build/esm/android/files/xml.js +0 -206
- package/build/esm/android/files/xml.js.map +0 -1
- package/build/esm/android/index.js +0 -29
- package/build/esm/android/index.js.map +0 -1
- package/build/esm/android/manifest.js +0 -88
- package/build/esm/android/manifest.js.map +0 -1
- package/build/esm/ios/eas.js +0 -24
- package/build/esm/ios/eas.js.map +0 -1
- package/build/esm/ios/entitlements.js +0 -42
- package/build/esm/ios/entitlements.js.map +0 -1
- package/build/esm/ios/index.js +0 -34
- package/build/esm/ios/index.js.map +0 -1
- package/build/esm/ios/infoPlist.js +0 -47
- package/build/esm/ios/infoPlist.js.map +0 -1
- package/build/esm/ios/pushNotifications.js +0 -18
- package/build/esm/ios/pushNotifications.js.map +0 -1
- package/build/esm/ios-widget/eas.js +0 -62
- package/build/esm/ios-widget/eas.js.map +0 -1
- package/build/esm/ios-widget/files/assets.js +0 -163
- package/build/esm/ios-widget/files/assets.js.map +0 -1
- package/build/esm/ios-widget/files/entitlements.js +0 -37
- package/build/esm/ios-widget/files/entitlements.js.map +0 -1
- package/build/esm/ios-widget/files/index.js +0 -55
- package/build/esm/ios-widget/files/index.js.map +0 -1
- package/build/esm/ios-widget/files/infoPlist.js +0 -55
- package/build/esm/ios-widget/files/infoPlist.js.map +0 -1
- package/build/esm/ios-widget/files/swift.js +0 -217
- package/build/esm/ios-widget/files/swift.js.map +0 -1
- package/build/esm/ios-widget/fonts.js +0 -111
- package/build/esm/ios-widget/fonts.js.map +0 -1
- package/build/esm/ios-widget/index.js +0 -42
- package/build/esm/ios-widget/index.js.map +0 -1
- package/build/esm/ios-widget/podfile.js +0 -39
- package/build/esm/ios-widget/podfile.js.map +0 -1
- package/build/esm/ios-widget/widgetPlist.js +0 -92
- package/build/esm/ios-widget/widgetPlist.js.map +0 -1
- package/build/esm/ios-widget/xcode/buildPhases.js +0 -208
- package/build/esm/ios-widget/xcode/buildPhases.js.map +0 -1
- package/build/esm/ios-widget/xcode/configurationList.js +0 -87
- package/build/esm/ios-widget/xcode/configurationList.js.map +0 -1
- package/build/esm/ios-widget/xcode/groups.js +0 -61
- package/build/esm/ios-widget/xcode/groups.js.map +0 -1
- package/build/esm/ios-widget/xcode/index.js +0 -118
- package/build/esm/ios-widget/xcode/index.js.map +0 -1
- package/build/esm/ios-widget/xcode/mainAppSettings.js +0 -68
- package/build/esm/ios-widget/xcode/mainAppSettings.js.map +0 -1
- package/build/esm/ios-widget/xcode/productFile.js +0 -70
- package/build/esm/ios-widget/xcode/productFile.js.map +0 -1
- package/build/esm/ios-widget/xcode/target.js +0 -108
- package/build/esm/ios-widget/xcode/target.js.map +0 -1
- package/build/esm/utils/fileDiscovery.js +0 -71
- package/build/esm/utils/fileDiscovery.js.map +0 -1
- package/build/esm/utils/urlScheme.js +0 -37
- package/build/esm/utils/urlScheme.js.map +0 -1
- package/build/types/android/files/assets.d.ts +0 -26
- package/build/types/android/files/assets.d.ts.map +0 -1
- package/build/types/android/files/fonts.d.ts +0 -19
- package/build/types/android/files/fonts.d.ts.map +0 -1
- package/build/types/android/files/index.d.ts +0 -21
- package/build/types/android/files/index.d.ts.map +0 -1
- package/build/types/android/files/initialStates.d.ts +0 -14
- package/build/types/android/files/initialStates.d.ts.map +0 -1
- package/build/types/android/files/kotlin.d.ts +0 -11
- package/build/types/android/files/kotlin.d.ts.map +0 -1
- package/build/types/android/files/xml.d.ts +0 -25
- package/build/types/android/files/xml.d.ts.map +0 -1
- package/build/types/android/index.d.ts +0 -12
- package/build/types/android/index.d.ts.map +0 -1
- package/build/types/android/manifest.d.ts +0 -16
- package/build/types/android/manifest.d.ts.map +0 -1
- package/build/types/ios/eas.d.ts +0 -12
- package/build/types/ios/eas.d.ts.map +0 -1
- package/build/types/ios/entitlements.d.ts +0 -14
- package/build/types/ios/entitlements.d.ts.map +0 -1
- package/build/types/ios/index.d.ts +0 -19
- package/build/types/ios/index.d.ts.map +0 -1
- package/build/types/ios/infoPlist.d.ts +0 -21
- package/build/types/ios/infoPlist.d.ts.map +0 -1
- package/build/types/ios/pushNotifications.d.ts +0 -10
- package/build/types/ios/pushNotifications.d.ts.map +0 -1
- package/build/types/ios-widget/eas.d.ts +0 -15
- package/build/types/ios-widget/eas.d.ts.map +0 -1
- package/build/types/ios-widget/files/assets.d.ts +0 -13
- package/build/types/ios-widget/files/assets.d.ts.map +0 -1
- package/build/types/ios-widget/files/entitlements.d.ts +0 -17
- package/build/types/ios-widget/files/entitlements.d.ts.map +0 -1
- package/build/types/ios-widget/files/index.d.ts +0 -24
- package/build/types/ios-widget/files/index.d.ts.map +0 -1
- package/build/types/ios-widget/files/infoPlist.d.ts +0 -10
- package/build/types/ios-widget/files/infoPlist.d.ts.map +0 -1
- package/build/types/ios-widget/files/swift.d.ts +0 -15
- package/build/types/ios-widget/files/swift.d.ts.map +0 -1
- package/build/types/ios-widget/fonts.d.ts +0 -22
- package/build/types/ios-widget/fonts.d.ts.map +0 -1
- package/build/types/ios-widget/index.d.ts +0 -31
- package/build/types/ios-widget/index.d.ts.map +0 -1
- package/build/types/ios-widget/podfile.d.ts +0 -9
- package/build/types/ios-widget/podfile.d.ts.map +0 -1
- package/build/types/ios-widget/widgetPlist.d.ts +0 -20
- package/build/types/ios-widget/widgetPlist.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/buildPhases.d.ts +0 -25
- package/build/types/ios-widget/xcode/buildPhases.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/configurationList.d.ts +0 -20
- package/build/types/ios-widget/xcode/configurationList.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/groups.d.ts +0 -15
- package/build/types/ios-widget/xcode/groups.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/index.d.ts +0 -20
- package/build/types/ios-widget/xcode/index.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts +0 -15
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/productFile.d.ts +0 -14
- package/build/types/ios-widget/xcode/productFile.d.ts.map +0 -1
- package/build/types/ios-widget/xcode/target.d.ts +0 -42
- package/build/types/ios-widget/xcode/target.d.ts.map +0 -1
- package/build/types/utils/fileDiscovery.d.ts +0 -13
- package/build/types/utils/fileDiscovery.d.ts.map +0 -1
- package/build/types/utils/urlScheme.d.ts +0 -10
- package/build/types/utils/urlScheme.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../../src/android/files/assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Font configuration for Android widgets.
|
|
3
|
-
*
|
|
4
|
-
* Copies custom font files to the Android assets/fonts/ directory
|
|
5
|
-
* so they can be loaded by TextBitmapRenderer via Typeface.createFromAsset().
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import { resolveFontPaths } from '../../utils/fonts';
|
|
10
|
-
import { logger } from '../../utils/logger';
|
|
11
|
-
/**
|
|
12
|
-
* Copies custom font files to android/app/src/main/assets/fonts/.
|
|
13
|
-
*
|
|
14
|
-
* Resolves each path relative to the project root.
|
|
15
|
-
* If a path points to a directory, all .ttf/.otf files inside it are copied.
|
|
16
|
-
*/
|
|
17
|
-
export async function copyAndroidFonts(options) {
|
|
18
|
-
const { platformProjectRoot, projectRoot, fonts } = options;
|
|
19
|
-
if (!fonts || fonts.length === 0) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const fontsDir = path.join(platformProjectRoot, 'app', 'src', 'main', 'assets', 'fonts');
|
|
23
|
-
fs.mkdirSync(fontsDir, { recursive: true });
|
|
24
|
-
const resolvedPaths = await resolveFontPaths(fonts, projectRoot);
|
|
25
|
-
for (const fontPath of resolvedPaths) {
|
|
26
|
-
const fileName = path.basename(fontPath);
|
|
27
|
-
const dest = path.join(fontsDir, fileName);
|
|
28
|
-
fs.copyFileSync(fontPath, dest);
|
|
29
|
-
logger.info(`Copied font to Android assets: ${fileName}`);
|
|
30
|
-
}
|
|
31
|
-
logger.info(`Copied ${resolvedPaths.length} font(s) to Android assets/fonts/`);
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=fonts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../../src/android/files/fonts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAQ3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgC;IACrE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAE3D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxF,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE3C,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAEhE,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAE1C,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,UAAU,aAAa,CAAC,MAAM,mCAAmC,CAAC,CAAA;AAChF,CAAC"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { withDangerousMod } from '@expo/config-plugins';
|
|
2
|
-
import { generateAndroidAssets } from './assets';
|
|
3
|
-
import { copyAndroidFonts } from './fonts';
|
|
4
|
-
import { generateAndroidInitialStates } from './initialStates';
|
|
5
|
-
import { generateWidgetReceivers } from './kotlin';
|
|
6
|
-
import { generateWidgetInfoFiles, generateWidgetPlaceholderLayouts, generateWidgetPreviewLayouts } from './xml';
|
|
7
|
-
/**
|
|
8
|
-
* Plugin step that generates all Android widget files.
|
|
9
|
-
*
|
|
10
|
-
* This creates:
|
|
11
|
-
* - Kotlin receiver classes for each widget
|
|
12
|
-
* - res/xml/{widget_id}_info.xml (widget provider info)
|
|
13
|
-
* - res/layout/voltra_widget_placeholder.xml (placeholder layout)
|
|
14
|
-
* - res/values/voltra_widgets.xml (widget descriptions)
|
|
15
|
-
* - res/drawable/ images (user images as drawable resources)
|
|
16
|
-
*
|
|
17
|
-
* This should run before configureAndroidManifest so the files exist when the manifest is configured.
|
|
18
|
-
*/
|
|
19
|
-
export const generateAndroidWidgetFiles = (config, props) => {
|
|
20
|
-
const { widgets, userImagesPath, fonts } = props;
|
|
21
|
-
return withDangerousMod(config, [
|
|
22
|
-
'android',
|
|
23
|
-
async (config) => {
|
|
24
|
-
if (config.modRequest.introspect) {
|
|
25
|
-
return config;
|
|
26
|
-
}
|
|
27
|
-
const { platformProjectRoot, projectRoot } = config.modRequest;
|
|
28
|
-
const packageName = config.android?.package;
|
|
29
|
-
if (!packageName) {
|
|
30
|
-
throw new Error('Voltra config plugin requires expo.android.package to be set in app.json/app.config.* to configure Android widgets.');
|
|
31
|
-
}
|
|
32
|
-
// Generate assets (drawable images and preview images)
|
|
33
|
-
const previewImageMap = await generateAndroidAssets({
|
|
34
|
-
platformProjectRoot,
|
|
35
|
-
projectRoot,
|
|
36
|
-
userImagesPath,
|
|
37
|
-
widgets,
|
|
38
|
-
});
|
|
39
|
-
// Generate Kotlin receiver classes
|
|
40
|
-
await generateWidgetReceivers({
|
|
41
|
-
platformProjectRoot,
|
|
42
|
-
packageName,
|
|
43
|
-
widgets,
|
|
44
|
-
});
|
|
45
|
-
// Generate XML files (widget info, layouts, strings)
|
|
46
|
-
await generateWidgetInfoFiles({
|
|
47
|
-
platformProjectRoot,
|
|
48
|
-
widgets,
|
|
49
|
-
});
|
|
50
|
-
await generateWidgetPlaceholderLayouts({
|
|
51
|
-
platformProjectRoot,
|
|
52
|
-
});
|
|
53
|
-
await generateWidgetPreviewLayouts({
|
|
54
|
-
platformProjectRoot,
|
|
55
|
-
projectRoot,
|
|
56
|
-
widgets,
|
|
57
|
-
previewImageMap,
|
|
58
|
-
});
|
|
59
|
-
// Copy custom fonts to assets/fonts/
|
|
60
|
-
if (fonts && fonts.length > 0) {
|
|
61
|
-
await copyAndroidFonts({
|
|
62
|
-
platformProjectRoot,
|
|
63
|
-
projectRoot: config.modRequest.projectRoot,
|
|
64
|
-
fonts,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// Generate initial states (pre-rendered widgets)
|
|
68
|
-
await generateAndroidInitialStates({
|
|
69
|
-
platformProjectRoot,
|
|
70
|
-
projectRoot: config.modRequest.projectRoot,
|
|
71
|
-
widgets,
|
|
72
|
-
});
|
|
73
|
-
return config;
|
|
74
|
-
},
|
|
75
|
-
]);
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/android/files/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,4BAA4B,EAAE,MAAM,OAAO,CAAA;AAQ/G;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAkD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IACzG,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAEhD,OAAO,gBAAgB,CAAC,MAAM,EAAE;QAC9B,SAAS;QACT,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAA;YAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,qHAAqH,CACtH,CAAA;YACH,CAAC;YAED,uDAAuD;YACvD,MAAM,eAAe,GAAG,MAAM,qBAAqB,CAAC;gBAClD,mBAAmB;gBACnB,WAAW;gBACX,cAAc;gBACd,OAAO;aACR,CAAC,CAAA;YAEF,mCAAmC;YACnC,MAAM,uBAAuB,CAAC;gBAC5B,mBAAmB;gBACnB,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,qDAAqD;YACrD,MAAM,uBAAuB,CAAC;gBAC5B,mBAAmB;gBACnB,OAAO;aACR,CAAC,CAAA;YAEF,MAAM,gCAAgC,CAAC;gBACrC,mBAAmB;aACpB,CAAC,CAAA;YAEF,MAAM,4BAA4B,CAAC;gBACjC,mBAAmB;gBACnB,WAAW;gBACX,OAAO;gBACP,eAAe;aAChB,CAAC,CAAA;YAEF,qCAAqC;YACrC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,gBAAgB,CAAC;oBACrB,mBAAmB;oBACnB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW;oBAC1C,KAAK;iBACN,CAAC,CAAA;YACJ,CAAC;YAED,iDAAiD;YACjD,MAAM,4BAA4B,CAAC;gBACjC,mBAAmB;gBACnB,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW;gBAC1C,OAAO;aACR,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { logger } from '../../utils/logger';
|
|
4
|
-
import { prerenderWidgetState } from '../../utils/prerender';
|
|
5
|
-
/**
|
|
6
|
-
* Generates the initial states JSON file for Android widgets.
|
|
7
|
-
*
|
|
8
|
-
* This file (voltra_initial_states.json) is placed in the Android assets directory
|
|
9
|
-
* and contains the pre-rendered payloads for all widgets that have an initialStatePath.
|
|
10
|
-
*/
|
|
11
|
-
export async function generateAndroidInitialStates(options) {
|
|
12
|
-
const { widgets, projectRoot, platformProjectRoot } = options;
|
|
13
|
-
// Dynamic import for ESM module compatibility
|
|
14
|
-
// voltra/android/server is an ESM module, but the plugin is compiled to CommonJS
|
|
15
|
-
const androidServerModuleId = 'voltra/android/server';
|
|
16
|
-
const { renderAndroidWidgetToString } = (await import(androidServerModuleId));
|
|
17
|
-
// Prerender widget states
|
|
18
|
-
const prerenderedStates = await prerenderWidgetState(widgets, projectRoot, renderAndroidWidgetToString);
|
|
19
|
-
if (prerenderedStates.size === 0) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
// Create assets directory if it doesn't exist
|
|
23
|
-
const assetsDir = path.join(platformProjectRoot, 'app', 'src', 'main', 'assets');
|
|
24
|
-
if (!fs.existsSync(assetsDir)) {
|
|
25
|
-
fs.mkdirSync(assetsDir, { recursive: true });
|
|
26
|
-
}
|
|
27
|
-
// Convert Map to Object for JSON serialization
|
|
28
|
-
const statesObj = {};
|
|
29
|
-
for (const [id, stateJson] of prerenderedStates.entries()) {
|
|
30
|
-
try {
|
|
31
|
-
// Parse the JSON string so it's embedded as an object in the final JSON
|
|
32
|
-
statesObj[id] = JSON.parse(stateJson);
|
|
33
|
-
}
|
|
34
|
-
catch (e) {
|
|
35
|
-
logger.warn(`Failed to parse prerendered state for widget ${id}: ${e}`);
|
|
36
|
-
// If it's not valid JSON, we might skip it or include it as string?
|
|
37
|
-
// renderWidgetToString should return valid JSON.
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
const outputFilePath = path.join(assetsDir, 'voltra_initial_states.json');
|
|
41
|
-
fs.writeFileSync(outputFilePath, JSON.stringify(statesObj, null, 2));
|
|
42
|
-
logger.info(`Generated voltra_initial_states.json with ${Object.keys(statesObj).length} pre-rendered widget states`);
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=initialStates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"initialStates.js","sourceRoot":"","sources":["../../../../src/android/files/initialStates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAU5D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,OAAqC;IACtF,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAA;IAE7D,8CAA8C;IAC9C,iFAAiF;IACjF,MAAM,qBAAqB,GAAG,uBAAuB,CAAA;IACrD,MAAM,EAAE,2BAA2B,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAE3E,CAAA;IAED,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,2BAA2B,CAAC,CAAA;IAEvG,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACjC,OAAM;IACR,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAwB,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,wEAAwE;YACxE,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;YACvE,oEAAoE;YACpE,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAA;IACzE,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAEpE,MAAM,CAAC,IAAI,CAAC,6CAA6C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,6BAA6B,CAAC,CAAA;AACtH,CAAC"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import dedent from 'dedent';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
// ============================================================================
|
|
5
|
-
// Main Function
|
|
6
|
-
// ============================================================================
|
|
7
|
-
/**
|
|
8
|
-
* Generates Kotlin receiver classes for all configured widgets
|
|
9
|
-
*/
|
|
10
|
-
export async function generateWidgetReceivers(props) {
|
|
11
|
-
const { platformProjectRoot, packageName, widgets } = props;
|
|
12
|
-
// Determine the package path (e.g., com.example.app -> com/example/app)
|
|
13
|
-
const packagePath = packageName.replace(/\./g, '/');
|
|
14
|
-
const widgetDir = path.join(platformProjectRoot, 'app', 'src', 'main', 'java', packagePath, 'widget');
|
|
15
|
-
// Ensure the widget directory exists
|
|
16
|
-
if (!fs.existsSync(widgetDir)) {
|
|
17
|
-
fs.mkdirSync(widgetDir, { recursive: true });
|
|
18
|
-
}
|
|
19
|
-
// Generate a receiver class for each widget
|
|
20
|
-
for (const widget of widgets) {
|
|
21
|
-
const className = `VoltraWidget_${widget.id}Receiver`;
|
|
22
|
-
const filePath = path.join(widgetDir, `${className}.kt`);
|
|
23
|
-
const content = generateWidgetReceiverClass(widget, packageName);
|
|
24
|
-
fs.writeFileSync(filePath, content, 'utf8');
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Widget Receiver
|
|
29
|
-
// ============================================================================
|
|
30
|
-
/**
|
|
31
|
-
* Generates Kotlin code for a single widget receiver class.
|
|
32
|
-
* If the widget has serverUpdate configured, includes WorkManager scheduling.
|
|
33
|
-
*/
|
|
34
|
-
function generateWidgetReceiverClass(widget, packageName) {
|
|
35
|
-
const className = `VoltraWidget_${widget.id}Receiver`;
|
|
36
|
-
if (widget.serverUpdate) {
|
|
37
|
-
const refreshEnabled = widget.serverUpdate.refresh === true;
|
|
38
|
-
// Widget with server-driven updates: schedule WorkManager periodic task
|
|
39
|
-
return dedent `
|
|
40
|
-
package ${packageName}.widget
|
|
41
|
-
|
|
42
|
-
import android.appwidget.AppWidgetManager
|
|
43
|
-
import android.content.Context
|
|
44
|
-
import voltra.widget.VoltraWidgetReceiver
|
|
45
|
-
import voltra.widget.VoltraWidgetUpdateScheduler
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Auto-generated widget receiver for ${widget.displayName}
|
|
49
|
-
* Widget ID: ${widget.id}
|
|
50
|
-
* Server Update: ${widget.serverUpdate.url} (every ${widget.serverUpdate.intervalMinutes ?? 15} minutes)
|
|
51
|
-
* Refresh Button: ${refreshEnabled}
|
|
52
|
-
*/
|
|
53
|
-
class ${className} : VoltraWidgetReceiver() {
|
|
54
|
-
override val widgetId: String = "${widget.id}"
|
|
55
|
-
|
|
56
|
-
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
|
57
|
-
super.onUpdate(context, appWidgetManager, appWidgetIds)
|
|
58
|
-
|
|
59
|
-
// Schedule periodic server updates via WorkManager
|
|
60
|
-
VoltraWidgetUpdateScheduler.schedulePeriodicUpdate(
|
|
61
|
-
context = context,
|
|
62
|
-
widgetId = "${widget.id}",
|
|
63
|
-
serverUrl = "${widget.serverUpdate.url}",
|
|
64
|
-
intervalMinutes = ${widget.serverUpdate.intervalMinutes ?? 15}L,
|
|
65
|
-
refreshEnabled = ${refreshEnabled}
|
|
66
|
-
)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
override fun onDeleted(context: Context, appWidgetIds: IntArray) {
|
|
70
|
-
super.onDeleted(context, appWidgetIds)
|
|
71
|
-
|
|
72
|
-
// Cancel periodic updates when all instances of this widget are removed
|
|
73
|
-
val remaining = appWidgetManager(context, appWidgetIds)
|
|
74
|
-
if (remaining == 0) {
|
|
75
|
-
VoltraWidgetUpdateScheduler.cancelPeriodicUpdate(context, "${widget.id}")
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
private fun appWidgetManager(context: Context, deletedIds: IntArray): Int {
|
|
80
|
-
val manager = AppWidgetManager.getInstance(context)
|
|
81
|
-
val componentName = android.content.ComponentName(context, this::class.java)
|
|
82
|
-
val allIds = manager.getAppWidgetIds(componentName)
|
|
83
|
-
return allIds.count { it !in deletedIds }
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
`;
|
|
87
|
-
}
|
|
88
|
-
// Standard widget without server updates
|
|
89
|
-
return dedent `
|
|
90
|
-
package ${packageName}.widget
|
|
91
|
-
|
|
92
|
-
import voltra.widget.VoltraWidgetReceiver
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Auto-generated widget receiver for ${widget.displayName}
|
|
96
|
-
* Widget ID: ${widget.id}
|
|
97
|
-
*/
|
|
98
|
-
class ${className} : VoltraWidgetReceiver() {
|
|
99
|
-
override val widgetId: String = "${widget.id}"
|
|
100
|
-
}
|
|
101
|
-
`;
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=kotlin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kotlin.js","sourceRoot":"","sources":["../../../../src/android/files/kotlin.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAU5B,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAA+B;IAC3E,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAE3D,wEAAwE;IACxE,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAA;IAErG,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,4CAA4C;IAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,gBAAgB,MAAM,CAAC,EAAE,UAAU,CAAA;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,KAAK,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAEhE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,2BAA2B,CAAC,MAA2B,EAAE,WAAmB;IACnF,MAAM,SAAS,GAAG,gBAAgB,MAAM,CAAC,EAAE,UAAU,CAAA;IAErD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,KAAK,IAAI,CAAA;QAC3D,wEAAwE;QACxE,OAAO,MAAM,CAAA;gBACD,WAAW;;;;;;;;8CAQmB,MAAM,CAAC,WAAW;sBAC1C,MAAM,CAAC,EAAE;0BACL,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,MAAM,CAAC,YAAY,CAAC,eAAe,IAAI,EAAE;2BAC1E,cAAc;;cAE3B,SAAS;6CACsB,MAAM,CAAC,EAAE;;;;;;;;gCAQtB,MAAM,CAAC,EAAE;iCACR,MAAM,CAAC,YAAY,CAAC,GAAG;sCAClB,MAAM,CAAC,YAAY,CAAC,eAAe,IAAI,EAAE;qCAC1C,cAAc;;;;;;;;;;+EAU4B,MAAM,CAAC,EAAE;;;;;;;;;;;KAWnF,CAAA;IACH,CAAC;IAED,yCAAyC;IACzC,OAAO,MAAM,CAAA;cACD,WAAW;;;;;4CAKmB,MAAM,CAAC,WAAW;oBAC1C,MAAM,CAAC,EAAE;;YAEjB,SAAS;2CACsB,MAAM,CAAC,EAAE;;GAEjD,CAAA;AACH,CAAC"}
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import dedent from 'dedent';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { logger } from '../../utils/logger';
|
|
5
|
-
// ============================================================================
|
|
6
|
-
// Main Functions
|
|
7
|
-
// ============================================================================
|
|
8
|
-
/**
|
|
9
|
-
* Generates widget info XML files for all widgets
|
|
10
|
-
*/
|
|
11
|
-
export async function generateWidgetInfoFiles(props) {
|
|
12
|
-
const { platformProjectRoot, widgets } = props;
|
|
13
|
-
const xmlPath = path.join(platformProjectRoot, 'app', 'src', 'main', 'res', 'xml');
|
|
14
|
-
const valuesPath = path.join(platformProjectRoot, 'app', 'src', 'main', 'res', 'values');
|
|
15
|
-
// Ensure directories exist
|
|
16
|
-
if (!fs.existsSync(xmlPath)) {
|
|
17
|
-
fs.mkdirSync(xmlPath, { recursive: true });
|
|
18
|
-
}
|
|
19
|
-
if (!fs.existsSync(valuesPath)) {
|
|
20
|
-
fs.mkdirSync(valuesPath, { recursive: true });
|
|
21
|
-
}
|
|
22
|
-
// Generate string resources for all widgets
|
|
23
|
-
const stringsPath = path.join(valuesPath, 'voltra_widgets.xml');
|
|
24
|
-
const stringsContent = generateStringResourcesXml(widgets);
|
|
25
|
-
fs.writeFileSync(stringsPath, stringsContent, 'utf8');
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Generates placeholder layout XML
|
|
29
|
-
*/
|
|
30
|
-
export async function generateWidgetPlaceholderLayouts(props) {
|
|
31
|
-
const layoutPath = path.join(props.platformProjectRoot, 'app', 'src', 'main', 'res', 'layout');
|
|
32
|
-
if (!fs.existsSync(layoutPath)) {
|
|
33
|
-
fs.mkdirSync(layoutPath, { recursive: true });
|
|
34
|
-
}
|
|
35
|
-
const placeholderLayoutPath = path.join(layoutPath, 'voltra_widget_placeholder.xml');
|
|
36
|
-
const placeholderLayoutContent = generatePlaceholderLayoutXml();
|
|
37
|
-
fs.writeFileSync(placeholderLayoutPath, placeholderLayoutContent, 'utf8');
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Generates preview layouts for widgets
|
|
41
|
-
*/
|
|
42
|
-
export async function generateWidgetPreviewLayouts(props) {
|
|
43
|
-
const { platformProjectRoot, projectRoot, widgets, previewImageMap } = props;
|
|
44
|
-
const layoutPath = path.join(platformProjectRoot, 'app', 'src', 'main', 'res', 'layout');
|
|
45
|
-
const xmlPath = path.join(platformProjectRoot, 'app', 'src', 'main', 'res', 'xml');
|
|
46
|
-
if (!fs.existsSync(layoutPath)) {
|
|
47
|
-
fs.mkdirSync(layoutPath, { recursive: true });
|
|
48
|
-
}
|
|
49
|
-
// Generate preview layouts and get the map
|
|
50
|
-
const previewLayoutMap = await generatePreviewLayouts(widgets, projectRoot, layoutPath, previewImageMap);
|
|
51
|
-
// Write widget info XML for all widgets, including preview references where available
|
|
52
|
-
for (const widget of widgets) {
|
|
53
|
-
const widgetInfoPath = path.join(xmlPath, `voltra_widget_${widget.id}_info.xml`);
|
|
54
|
-
const previewImageResourceName = previewImageMap.get(widget.id);
|
|
55
|
-
const previewLayoutResourceName = previewLayoutMap.get(widget.id);
|
|
56
|
-
const widgetInfoContent = generateWidgetInfoXml(widget, previewImageResourceName, previewLayoutResourceName);
|
|
57
|
-
fs.writeFileSync(widgetInfoPath, widgetInfoContent, 'utf8');
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
// ============================================================================
|
|
61
|
-
// Widget Info XML
|
|
62
|
-
// ============================================================================
|
|
63
|
-
/**
|
|
64
|
-
* Generates widget provider info XML for a single widget
|
|
65
|
-
*/
|
|
66
|
-
function generateWidgetInfoXml(widget, previewImageResourceName, previewLayoutResourceName) {
|
|
67
|
-
const { targetCellWidth, targetCellHeight } = widget;
|
|
68
|
-
const resizeMode = widget.resizeMode || 'horizontal|vertical';
|
|
69
|
-
const widgetCategory = widget.widgetCategory || 'home_screen';
|
|
70
|
-
let minWidth = widget.minWidth;
|
|
71
|
-
if (minWidth === undefined && widget.minCellWidth !== undefined) {
|
|
72
|
-
minWidth = widget.minCellWidth * 70 - 30;
|
|
73
|
-
}
|
|
74
|
-
let minHeight = widget.minHeight;
|
|
75
|
-
if (minHeight === undefined && widget.minCellHeight !== undefined) {
|
|
76
|
-
minHeight = widget.minCellHeight * 70 - 30;
|
|
77
|
-
}
|
|
78
|
-
const minWidthAttr = minWidth !== undefined ? `\n android:minWidth="${minWidth}dp"` : '';
|
|
79
|
-
const minHeightAttr = minHeight !== undefined ? `\n android:minHeight="${minHeight}dp"` : '';
|
|
80
|
-
const previewImageAttr = previewImageResourceName
|
|
81
|
-
? `\n android:previewImage="@drawable/${previewImageResourceName}"`
|
|
82
|
-
: '';
|
|
83
|
-
const previewLayoutAttr = previewLayoutResourceName
|
|
84
|
-
? `\n android:previewLayout="@layout/${previewLayoutResourceName}"`
|
|
85
|
-
: '';
|
|
86
|
-
return dedent `
|
|
87
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
88
|
-
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"${minWidthAttr}${minHeightAttr}
|
|
89
|
-
android:targetCellWidth="${targetCellWidth}"
|
|
90
|
-
android:targetCellHeight="${targetCellHeight}"
|
|
91
|
-
android:updatePeriodMillis="0"
|
|
92
|
-
android:initialLayout="@layout/voltra_widget_placeholder"
|
|
93
|
-
android:resizeMode="${resizeMode}"
|
|
94
|
-
android:widgetCategory="${widgetCategory}"
|
|
95
|
-
android:description="@string/voltra_widget_${widget.id}_description"${previewImageAttr}${previewLayoutAttr}>
|
|
96
|
-
</appwidget-provider>
|
|
97
|
-
`;
|
|
98
|
-
}
|
|
99
|
-
// ============================================================================
|
|
100
|
-
// String Resources XML
|
|
101
|
-
// ============================================================================
|
|
102
|
-
/**
|
|
103
|
-
* Generates string resources for widget display names and descriptions
|
|
104
|
-
*/
|
|
105
|
-
function generateStringResourcesXml(widgets) {
|
|
106
|
-
const stringEntries = widgets
|
|
107
|
-
.map((widget) => `<string name="voltra_widget_${widget.id}_label">${widget.displayName}</string>\n <string name="voltra_widget_${widget.id}_description">${widget.description}</string>`)
|
|
108
|
-
.join('\n ');
|
|
109
|
-
return dedent `
|
|
110
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
111
|
-
<resources>
|
|
112
|
-
<!-- Voltra Widget Labels and Descriptions (Auto-generated) -->
|
|
113
|
-
${stringEntries}
|
|
114
|
-
</resources>
|
|
115
|
-
`;
|
|
116
|
-
}
|
|
117
|
-
// ============================================================================
|
|
118
|
-
// Placeholder Layout XML
|
|
119
|
-
// ============================================================================
|
|
120
|
-
/**
|
|
121
|
-
* Generates placeholder layout XML for widgets
|
|
122
|
-
* This will be replaced by Glance at runtime
|
|
123
|
-
*/
|
|
124
|
-
function generatePlaceholderLayoutXml() {
|
|
125
|
-
return dedent `
|
|
126
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
127
|
-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
128
|
-
android:layout_width="match_parent"
|
|
129
|
-
android:layout_height="match_parent"
|
|
130
|
-
android:background="?android:attr/colorBackground">
|
|
131
|
-
<TextView
|
|
132
|
-
android:layout_width="wrap_content"
|
|
133
|
-
android:layout_height="wrap_content"
|
|
134
|
-
android:layout_gravity="center"
|
|
135
|
-
android:text="Loading..."
|
|
136
|
-
android:textColor="?android:attr/textColorPrimary" />
|
|
137
|
-
</FrameLayout>
|
|
138
|
-
`;
|
|
139
|
-
}
|
|
140
|
-
// ============================================================================
|
|
141
|
-
// Preview Layout
|
|
142
|
-
// ============================================================================
|
|
143
|
-
/**
|
|
144
|
-
* Generates an auto-layout XML for image-based preview.
|
|
145
|
-
* This is used when previewImage is provided but no custom previewLayout.
|
|
146
|
-
*/
|
|
147
|
-
function generateAutoImagePreviewLayout(widgetId, drawableResourceName) {
|
|
148
|
-
return dedent `
|
|
149
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
150
|
-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
151
|
-
android:layout_width="match_parent"
|
|
152
|
-
android:layout_height="match_parent">
|
|
153
|
-
<ImageView
|
|
154
|
-
android:layout_width="match_parent"
|
|
155
|
-
android:layout_height="match_parent"
|
|
156
|
-
android:src="@drawable/${drawableResourceName}"
|
|
157
|
-
android:scaleType="centerCrop"
|
|
158
|
-
android:contentDescription="@string/voltra_widget_${widgetId}_description" />
|
|
159
|
-
</FrameLayout>
|
|
160
|
-
`;
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Generates preview layout XML files for all widgets.
|
|
164
|
-
* Returns a map of widgetId to layout resource name.
|
|
165
|
-
*
|
|
166
|
-
* Strategy:
|
|
167
|
-
* - If previewLayout is provided: copy user's custom XML
|
|
168
|
-
* - Else if previewImage is provided: generate auto-layout with ImageView
|
|
169
|
-
* - Otherwise: no preview layout generated
|
|
170
|
-
*/
|
|
171
|
-
async function generatePreviewLayouts(widgets, projectRoot, layoutPath, previewImageMap) {
|
|
172
|
-
const previewLayoutMap = new Map();
|
|
173
|
-
// Ensure layout directory exists
|
|
174
|
-
if (!fs.existsSync(layoutPath)) {
|
|
175
|
-
fs.mkdirSync(layoutPath, { recursive: true });
|
|
176
|
-
}
|
|
177
|
-
for (const widget of widgets) {
|
|
178
|
-
let layoutContent = null;
|
|
179
|
-
const layoutResourceName = `voltra_widget_${widget.id}_preview`;
|
|
180
|
-
const layoutFilePath = path.join(layoutPath, `${layoutResourceName}.xml`);
|
|
181
|
-
// Strategy 1: User provided custom preview layout
|
|
182
|
-
if (widget.previewLayout) {
|
|
183
|
-
const sourcePath = path.join(projectRoot, widget.previewLayout);
|
|
184
|
-
if (!fs.existsSync(sourcePath)) {
|
|
185
|
-
logger.warn(`Preview layout not found for widget '${widget.id}' at ${widget.previewLayout}`);
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
// Copy user's custom XML
|
|
189
|
-
layoutContent = fs.readFileSync(sourcePath, 'utf8');
|
|
190
|
-
logger.info(`Using custom preview layout for widget '${widget.id}'`);
|
|
191
|
-
}
|
|
192
|
-
// Strategy 2: Auto-generate layout from preview image
|
|
193
|
-
else if (widget.previewImage && previewImageMap.has(widget.id)) {
|
|
194
|
-
const drawableResourceName = previewImageMap.get(widget.id);
|
|
195
|
-
layoutContent = generateAutoImagePreviewLayout(widget.id, drawableResourceName);
|
|
196
|
-
logger.info(`Generated auto preview layout for widget '${widget.id}' from preview image`);
|
|
197
|
-
}
|
|
198
|
-
// Write layout file if we have content
|
|
199
|
-
if (layoutContent) {
|
|
200
|
-
fs.writeFileSync(layoutFilePath, layoutContent, 'utf8');
|
|
201
|
-
previewLayoutMap.set(widget.id, layoutResourceName);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return previewLayoutMap;
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=xml.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../../src/android/files/xml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { withPlugins } from '@expo/config-plugins';
|
|
2
|
-
import { validateAndroidWidgetConfig } from '../validation';
|
|
3
|
-
import { generateAndroidWidgetFiles } from './files';
|
|
4
|
-
import { configureAndroidManifest } from './manifest';
|
|
5
|
-
/**
|
|
6
|
-
* Main Android configuration plugin.
|
|
7
|
-
*
|
|
8
|
-
* This orchestrates all Android-related configuration in the correct order:
|
|
9
|
-
* 1. Validate widget configurations with file existence checks
|
|
10
|
-
* 2. Generate widget files (Kotlin receivers, XML metadata, resources)
|
|
11
|
-
* 3. Configure AndroidManifest (receiver entries)
|
|
12
|
-
*/
|
|
13
|
-
export const withAndroid = (config, props) => {
|
|
14
|
-
const { enableNotifications, widgets, userImagesPath, fonts } = props;
|
|
15
|
-
if (!config.android?.package) {
|
|
16
|
-
throw new Error('Voltra config plugin requires expo.android.package to be set in app.json/app.config.* to configure Android widgets.');
|
|
17
|
-
}
|
|
18
|
-
// Get project root from modRequest if available, otherwise validation will skip file checks
|
|
19
|
-
const projectRoot = config.modRequest?.projectRoot;
|
|
20
|
-
// Validate Android widgets with file existence checks
|
|
21
|
-
widgets.forEach((widget) => validateAndroidWidgetConfig(widget, projectRoot));
|
|
22
|
-
return withPlugins(config, [
|
|
23
|
-
// 1. Generate widget files (must run first so files exist)
|
|
24
|
-
[generateAndroidWidgetFiles, { widgets, userImagesPath, fonts }],
|
|
25
|
-
// 2. Configure AndroidManifest (must run after files are generated)
|
|
26
|
-
[configureAndroidManifest, { enableNotifications, widgets }],
|
|
27
|
-
]);
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/android/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAErD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7E,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAErE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,qHAAqH,CACtH,CAAA;IACH,CAAC;IAED,4FAA4F;IAC5F,MAAM,WAAW,GAAI,MAAc,CAAC,UAAU,EAAE,WAAW,CAAA;IAE3D,sDAAsD;IACtD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAE7E,OAAO,WAAW,CAAC,MAAM,EAAE;QACzB,2DAA2D;QAC3D,CAAC,0BAA0B,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;QAEhE,oEAAoE;QACpE,CAAC,wBAAwB,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;KAC7D,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { withAndroidManifest } from '@expo/config-plugins';
|
|
2
|
-
import { AndroidConfig } from 'expo/config-plugins';
|
|
3
|
-
/**
|
|
4
|
-
* Plugin step that adds widget receiver entries to AndroidManifest.xml
|
|
5
|
-
*
|
|
6
|
-
* This adds a <receiver> entry for each widget with:
|
|
7
|
-
* - The generated receiver class name
|
|
8
|
-
* - APPWIDGET_UPDATE intent filter
|
|
9
|
-
* - Widget provider metadata reference
|
|
10
|
-
*/
|
|
11
|
-
export const configureAndroidManifest = (config, props) => {
|
|
12
|
-
const { enableNotifications, widgets } = props;
|
|
13
|
-
return withAndroidManifest(config, (config) => {
|
|
14
|
-
const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
|
|
15
|
-
const usesPermissions = (config.modResults.manifest['uses-permission'] || []);
|
|
16
|
-
const ensurePermission = (permissionName) => {
|
|
17
|
-
const exists = usesPermissions.some((permission) => permission.$?.['android:name'] === permissionName);
|
|
18
|
-
if (!exists) {
|
|
19
|
-
usesPermissions.push({
|
|
20
|
-
$: {
|
|
21
|
-
'android:name': permissionName,
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
if (enableNotifications) {
|
|
27
|
-
ensurePermission('android.permission.POST_NOTIFICATIONS');
|
|
28
|
-
ensurePermission('android.permission.POST_PROMOTED_NOTIFICATIONS');
|
|
29
|
-
}
|
|
30
|
-
config.modResults.manifest['uses-permission'] = usesPermissions;
|
|
31
|
-
const existingReceivers = (mainApplication.receiver || []);
|
|
32
|
-
const ongoingNotificationReceiverName = 'voltra.VoltraOngoingNotificationDismissedReceiver';
|
|
33
|
-
if (enableNotifications) {
|
|
34
|
-
const hasOngoingNotificationReceiver = existingReceivers.some((receiver) => receiver.$?.['android:name'] === ongoingNotificationReceiverName);
|
|
35
|
-
if (!hasOngoingNotificationReceiver) {
|
|
36
|
-
existingReceivers.push({
|
|
37
|
-
$: {
|
|
38
|
-
'android:name': ongoingNotificationReceiverName,
|
|
39
|
-
'android:exported': 'false',
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
mainApplication.receiver = existingReceivers;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Add a receiver for each widget
|
|
46
|
-
for (const widget of widgets) {
|
|
47
|
-
const receiverClassName = `.widget.VoltraWidget_${widget.id}Receiver`;
|
|
48
|
-
// Check if receiver already exists
|
|
49
|
-
const alreadyExists = existingReceivers.some((receiver) => receiver.$?.['android:name'] === receiverClassName);
|
|
50
|
-
if (!alreadyExists) {
|
|
51
|
-
// Create the receiver entry
|
|
52
|
-
const receiver = {
|
|
53
|
-
$: {
|
|
54
|
-
'android:name': receiverClassName,
|
|
55
|
-
'android:exported': 'true',
|
|
56
|
-
'android:label': `@string/voltra_widget_${widget.id}_label`,
|
|
57
|
-
},
|
|
58
|
-
'intent-filter': [
|
|
59
|
-
{
|
|
60
|
-
action: [
|
|
61
|
-
{
|
|
62
|
-
$: {
|
|
63
|
-
'android:name': 'android.appwidget.action.APPWIDGET_UPDATE',
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
'meta-data': [
|
|
70
|
-
{
|
|
71
|
-
$: {
|
|
72
|
-
'android:name': 'android.appwidget.provider',
|
|
73
|
-
'android:resource': `@xml/voltra_widget_${widget.id}_info`,
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
};
|
|
78
|
-
// Add the receiver to the application
|
|
79
|
-
if (!mainApplication.receiver) {
|
|
80
|
-
mainApplication.receiver = [];
|
|
81
|
-
}
|
|
82
|
-
mainApplication.receiver.push(receiver);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return config;
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/android/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AASnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAgD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IACrG,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAE9C,OAAO,mBAAmB,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QAC5C,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAQ,CAAA;QAElG,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAU,CAAA;QACtF,MAAM,gBAAgB,GAAG,CAAC,cAAsB,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,cAAc,CAAC,CAAA;YACtG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,eAAe,CAAC,IAAI,CAAC;oBACnB,CAAC,EAAE;wBACD,cAAc,EAAE,cAAc;qBAC/B;iBACF,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAA;QAED,IAAI,mBAAmB,EAAE,CAAC;YACxB,gBAAgB,CAAC,uCAAuC,CAAC,CAAA;YACzD,gBAAgB,CAAC,gDAAgD,CAAC,CAAA;QACpE,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,eAAe,CAAA;QAE/D,MAAM,iBAAiB,GAAG,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAU,CAAA;QACnE,MAAM,+BAA+B,GAAG,mDAAmD,CAAA;QAE3F,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,8BAA8B,GAAG,iBAAiB,CAAC,IAAI,CAC3D,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,+BAA+B,CACpF,CAAA;YAED,IAAI,CAAC,8BAA8B,EAAE,CAAC;gBACpC,iBAAiB,CAAC,IAAI,CAAC;oBACrB,CAAC,EAAE;wBACD,cAAc,EAAE,+BAA+B;wBAC/C,kBAAkB,EAAE,OAAO;qBAC5B;iBACF,CAAC,CAAA;gBACF,eAAe,CAAC,QAAQ,GAAG,iBAAiB,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,iBAAiB,GAAG,wBAAwB,MAAM,CAAC,EAAE,UAAU,CAAA;YAErE,mCAAmC;YACnC,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAC1C,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,iBAAiB,CACtE,CAAA;YAED,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,4BAA4B;gBAC5B,MAAM,QAAQ,GAAG;oBACf,CAAC,EAAE;wBACD,cAAc,EAAE,iBAAiB;wBACjC,kBAAkB,EAAE,MAAe;wBACnC,eAAe,EAAE,yBAAyB,MAAM,CAAC,EAAE,QAAQ;qBAC5D;oBACD,eAAe,EAAE;wBACf;4BACE,MAAM,EAAE;gCACN;oCACE,CAAC,EAAE;wCACD,cAAc,EAAE,2CAA2C;qCAC5D;iCACF;6BACF;yBACF;qBACF;oBACD,WAAW,EAAE;wBACX;4BACE,CAAC,EAAE;gCACD,cAAc,EAAE,4BAA4B;gCAC5C,kBAAkB,EAAE,sBAAsB,MAAM,CAAC,EAAE,OAAO;6BAC3D;yBACF;qBACF;iBACF,CAAA;gBAED,sCAAsC;gBACtC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;oBAC9B,eAAe,CAAC,QAAQ,GAAG,EAAE,CAAA;gBAC/B,CAAC;gBACD,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|