xonecode 0.1.0
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 +167 -0
- package/dist/agent/authEnDisco.js +56 -0
- package/dist/agent/authEnDisco.js.map +1 -0
- package/dist/agent/configEnDisco.js +109 -0
- package/dist/agent/configEnDisco.js.map +1 -0
- package/dist/agent/crearProyecto.js +34 -0
- package/dist/agent/crearProyecto.js.map +1 -0
- package/dist/agent/entorno.js +124 -0
- package/dist/agent/entorno.js.map +1 -0
- package/dist/agent/guionizado.js +53 -0
- package/dist/agent/guionizado.js.map +1 -0
- package/dist/agent/instantanea.js +129 -0
- package/dist/agent/instantanea.js.map +1 -0
- package/dist/agent/interrupts.js +83 -0
- package/dist/agent/interrupts.js.map +1 -0
- package/dist/agent/mensajes.js +24 -0
- package/dist/agent/mensajes.js.map +1 -0
- package/dist/agent/modelos.js +42 -0
- package/dist/agent/modelos.js.map +1 -0
- package/dist/agent/normalizar.js +20 -0
- package/dist/agent/normalizar.js.map +1 -0
- package/dist/agent/perfiles.js +103 -0
- package/dist/agent/perfiles.js.map +1 -0
- package/dist/agent/proyecto.js +107 -0
- package/dist/agent/proyecto.js.map +1 -0
- package/dist/agent/puente.js +142 -0
- package/dist/agent/puente.js.map +1 -0
- package/dist/agent/resumenDeTool.js +48 -0
- package/dist/agent/resumenDeTool.js.map +1 -0
- package/dist/agent/skills.js +65 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/textoDeTool.js +113 -0
- package/dist/agent/textoDeTool.js.map +1 -0
- package/dist/agent/turnoReal.js +173 -0
- package/dist/agent/turnoReal.js.map +1 -0
- package/dist/agent/verificador.js +65 -0
- package/dist/agent/verificador.js.map +1 -0
- package/dist/agent/xoneAgent.js +106 -0
- package/dist/agent/xoneAgent.js.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/aprobar.js +82 -0
- package/dist/cli/aprobar.js.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consola.js +346 -0
- package/dist/cli/consola.js.map +1 -0
- package/dist/cli/describe.js +53 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/doctor.js +45 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/main.js +520 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/markdown.js +90 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/run.js +164 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/spinner.js +89 -0
- package/dist/cli/spinner.js.map +1 -0
- package/dist/cli/stdio.js +193 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/tema.js +40 -0
- package/dist/cli/tema.js.map +1 -0
- package/dist/cli/verify.js +62 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/core/bitacora.js +30 -0
- package/dist/core/bitacora.js.map +1 -0
- package/dist/core/config.js +236 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextos.js +56 -0
- package/dist/core/contextos.js.map +1 -0
- package/dist/core/deps.js +51 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/diff.js +79 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/esqueleto.js +366 -0
- package/dist/core/esqueleto.js.map +1 -0
- package/dist/core/events.js +2 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/modelos.js +85 -0
- package/dist/core/modelos.js.map +1 -0
- package/dist/core/notify.js +106 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/ports.js +114 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/turno.js +127 -0
- package/dist/core/turno.js.map +1 -0
- package/dist/vendor/hitl.js +103 -0
- package/dist/vendor/hitl.js.map +1 -0
- package/dist/vendor/skillLoaders/catalog.js +74 -0
- package/dist/vendor/skillLoaders/catalog.js.map +1 -0
- package/dist/vendor/tokenTracking.js +58 -0
- package/dist/vendor/tokenTracking.js.map +1 -0
- package/package.json +41 -0
- package/skills/xone-debugging/SKILL.md +52 -0
- package/skills/xone-debugging/references/faq.md +561 -0
- package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
- package/skills/xone-development/SKILL.md +105 -0
- package/skills/xone-development/references/anti-patrones.md +94 -0
- package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
- package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
- package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
- package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
- package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
- package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
- package/skills/xone-development/references/datos/appdata.md +611 -0
- package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
- package/skills/xone-development/references/datos/http.md +366 -0
- package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
- package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
- package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
- package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
- package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
- package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
- package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
- package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
- package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
- package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
- package/skills/xone-development/references/indice-completo.md +77 -0
- package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
- package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
- package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
- package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
- package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
- package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
- package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
- package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
- package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
- package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
- package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
- package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
- package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
- package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
- package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
- package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
- package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
- package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
- package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
- package/skills/xone-development/references/tipos-de-prop.md +28 -0
- package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
- package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
- package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
- package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
- package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
- package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
- package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
- package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
- package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
- package/skills/xone-development/references/xml-ui/mapas.md +685 -0
- package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
- package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
- package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
- package/skills/xone-plan-builder/SKILL.md +183 -0
- package/skills/xone-plan-builder/agents/openai.yaml +5 -0
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
- package/skills/xone-project-generator/SKILL.md +111 -0
- package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
- package/skills/xone-project-generator/references/colecciones-base.md +16 -0
- package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
- package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
- package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
- package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
- package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
- package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
- package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
- package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
- package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
- package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
- package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
- package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
- package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
- package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
- package/skills/xone-review/SKILL.md +189 -0
- package/skills/xone-spec-builder/SKILL.md +235 -0
- package/skills/xone-spec-builder/agents/openai.yaml +5 -0
- package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
- package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
- package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
# XOne — Biometría, ImageDrawing y otros objetos utilitarios
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-project-generator/references/xone-javascript-patterns-d-createobject.md` §2.11 · `xone/v2/xone-project-generator/references/xone-javascript-patterns-d-createobject.md` §2.12.15–§2.12.17. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §2.11 biometricsManager · §2.12.15 ImageDrawing · §2.12.16 otros objetos utilitarios · §2.12.17 tabla resumen de objetos complementarios
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### 2.11 Biometrics Manager
|
|
10
|
+
|
|
11
|
+
```javascript
|
|
12
|
+
if (!biometricsManager.isHardwareAvailable()) {
|
|
13
|
+
ui.showToast("Biometria no disponible");
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (!biometricsManager.hasEnrolledFingerprints()) {
|
|
18
|
+
biometricsManager.launchSecuritySettings();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
biometricsManager.setCallback({
|
|
23
|
+
title: "Autenticacion", subtitle: "Verificar identidad",
|
|
24
|
+
description: "Coloque su dedo en el sensor",
|
|
25
|
+
negativeButtonText: "Cancelar",
|
|
26
|
+
onSuccess: function(result) {
|
|
27
|
+
let sPublicKey = result.getPublicKey();
|
|
28
|
+
ui.showToast("Autenticación exitosa");
|
|
29
|
+
},
|
|
30
|
+
onFailure: function(nError, sErrorMessage) {
|
|
31
|
+
ui.showToast("Error: " + sErrorMessage);
|
|
32
|
+
}
|
|
33
|
+
// Nota: `onHelp` no existe — la API moderna BiometricPrompt no expone callback de "help".
|
|
34
|
+
});
|
|
35
|
+
biometricsManager.launch();
|
|
36
|
+
|
|
37
|
+
// Firma digital con biometria
|
|
38
|
+
biometricsManager.setCallback({
|
|
39
|
+
title: "Firma digital",
|
|
40
|
+
onSuccess: function(result) {
|
|
41
|
+
let sSigned = result.signWithPrivateKey("datos a firmar");
|
|
42
|
+
self.MAP_FIRMA_DIGITAL = sSigned;
|
|
43
|
+
self.save();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
biometricsManager.launch();
|
|
47
|
+
|
|
48
|
+
// Verificar firma
|
|
49
|
+
result.verify(publicKey, signature, "datos originales");
|
|
50
|
+
|
|
51
|
+
// Firmar/verificar archivos
|
|
52
|
+
result.signFileWithPrivateKey("documento.pdf", "documento_firmado.pdf");
|
|
53
|
+
result.verifyFile(publicKey, "documento_firmado.pdf", "documento.pdf");
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### 2.12.15 ImageDrawing - Edición de Imágenes
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
var imageDrawing = new ImageDrawing();
|
|
60
|
+
var info = imageDrawing.getImageInfo(appData.getFilesPath() + "foto.jpg");
|
|
61
|
+
imageDrawing.create(info.getWidth(), info.getHeight());
|
|
62
|
+
imageDrawing.setBackground(appData.getFilesPath() + "foto.jpg");
|
|
63
|
+
imageDrawing.setFontSize(64);
|
|
64
|
+
imageDrawing.setFontColor("#FF0000");
|
|
65
|
+
imageDrawing.addTextSetXY(new Date().toString(), 100, 200, 0);
|
|
66
|
+
imageDrawing.addImageSetXY("marca_agua.png", 50, 50);
|
|
67
|
+
imageDrawing.save(appData.getFilesPath() + "foto_editada.jpg");
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### 2.12.16 Otros Objetos Utilitarios
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
// === AndroidIntent (solo Android) ===
|
|
74
|
+
var intent = new AndroidIntent();
|
|
75
|
+
intent.setAction("android.content.Intent", "ACTION_VIEW");
|
|
76
|
+
intent.setData("https://www.youtube.com/watch?v=VIDEO_ID");
|
|
77
|
+
intent.startActivity();
|
|
78
|
+
|
|
79
|
+
// Lanzar otra aplicación
|
|
80
|
+
intent.getLaunchIntentForPackage("com.app.package");
|
|
81
|
+
intent.startActivity();
|
|
82
|
+
|
|
83
|
+
// === IniParser - Lectura/escritura de archivos .ini ===
|
|
84
|
+
var ini = new IniParser();
|
|
85
|
+
ini.parseFromFile("license.ini");
|
|
86
|
+
var valor = ini.getValue("UsePush");
|
|
87
|
+
ini.setValue("UsePush", false);
|
|
88
|
+
ini.save("license.ini");
|
|
89
|
+
|
|
90
|
+
// === DOMParser - Parsear XML ===
|
|
91
|
+
// Parsear desde string XML
|
|
92
|
+
let domParser = new DOMParser();
|
|
93
|
+
let xmlDoc = domParser.parseFromString(sXml);
|
|
94
|
+
|
|
95
|
+
// Parsear desde fichero XML (en la carpeta de la app)
|
|
96
|
+
let xmlDoc2 = domParser.parseFromFile("MiFichero.xml");
|
|
97
|
+
|
|
98
|
+
// Navegar el documento
|
|
99
|
+
let nodeList = xmlDoc.getElementsByTagName("urn:Usuario"); // Soporta namespaces
|
|
100
|
+
let nodo = nodeList[0];
|
|
101
|
+
let sTexto = nodo.getTextContent(); // Texto del nodo
|
|
102
|
+
|
|
103
|
+
// Ejemplo completo: parsear respuesta SOAP
|
|
104
|
+
function parseFromString() {
|
|
105
|
+
let sXml = "<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope""
|
|
106
|
+
+ " xmlns:urn="urn:MiServicio">"
|
|
107
|
+
+ "<soap:Body>"
|
|
108
|
+
+ "<urn:Check_User>"
|
|
109
|
+
+ "<urn:Usuario>Admin</urn:Usuario>"
|
|
110
|
+
+ "<urn:Password>1234</urn:Password>"
|
|
111
|
+
+ "</urn:Check_User>"
|
|
112
|
+
+ "</soap:Body>"
|
|
113
|
+
+ "</soap:Envelope>";
|
|
114
|
+
let doc = new DOMParser().parseFromString(sXml);
|
|
115
|
+
let usuarios = doc.getElementsByTagName("urn:Usuario");
|
|
116
|
+
let sUser = usuarios[0].getTextContent(); // "Admin"
|
|
117
|
+
ui.showToast("Usuario: " + sUser);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Ejemplo completo: parsear desde fichero
|
|
121
|
+
function parseFromFile() {
|
|
122
|
+
let doc = new DOMParser().parseFromFile("FileXML.xml");
|
|
123
|
+
let usuarios = doc.getElementsByTagName("urn:Usuario");
|
|
124
|
+
let sUser = usuarios[0].getTextContent();
|
|
125
|
+
ui.showToast("Usuario: " + sUser);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// === DebugTools - Envio de logs ===
|
|
129
|
+
var debugTools = new DebugTools();
|
|
130
|
+
var nResult = debugTools.sendLog();
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### 2.12.16b systemSettings - Configuración y Estado del Sistema
|
|
134
|
+
|
|
135
|
+
`systemSettings` es un **singleton global** (no requiere instanciacion). Solo Android salvo indicacion.
|
|
136
|
+
|
|
137
|
+
##### Pantalla y brillo
|
|
138
|
+
|
|
139
|
+
```javascript
|
|
140
|
+
systemSettings.setBrightness(75); // 0-100 (se clampa)
|
|
141
|
+
let nBrillo = systemSettings.getBrightness(); // 0-100 (no 0-1)
|
|
142
|
+
systemSettings.setBrightnessMode("automatic"); // Brillo automático
|
|
143
|
+
systemSettings.setBrightnessMode("manual"); // Brillo manual
|
|
144
|
+
let sModoBrillo = systemSettings.getBrightnessMode(); // "manual" o "automatic"
|
|
145
|
+
|
|
146
|
+
// Color de la barra de estado (status bar)
|
|
147
|
+
let ventana = ui.getView(self);
|
|
148
|
+
ventana.setStatusBarColor("#00FF00"); // Color RRGGBB
|
|
149
|
+
ventana.setStatusBarColor(null); // Restaurar color por defecto
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
##### Red y conectividad
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
let bAvion = systemSettings.isAirplaneMode(); // true si modo avion activo
|
|
156
|
+
let bDatosMov = systemSettings.isMobileDataEnabled(); // Puede mentir en algunos dispositivos
|
|
157
|
+
let bHttp = systemSettings.isClearTextTrafficAllowed(); // true si HTTP sin cifrar esta permitido
|
|
158
|
+
|
|
159
|
+
// Hora de red (NTP)
|
|
160
|
+
let fecha = systemSettings.getNetworkTime();
|
|
161
|
+
// Con servidor NTP personalizado:
|
|
162
|
+
// let fecha = systemSettings.getNetworkTime({ ntpServer: "time.google.com" });
|
|
163
|
+
ui.showToast(fecha.toString());
|
|
164
|
+
|
|
165
|
+
// Proveedores de localización disponibles
|
|
166
|
+
let bLocalizacion = systemSettings.hasLocationFeature();
|
|
167
|
+
let bRedLoc = systemSettings.hasNetworkLocationFeature();
|
|
168
|
+
let bGpsLoc = systemSettings.hasGpsLocationFeature();
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
##### Batería y optimizaciones
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
// Comprobar si la app esta exenta de optimizaciones de bateria
|
|
175
|
+
let bExenta = systemSettings.isIgnoringBatteryOptimizations();
|
|
176
|
+
|
|
177
|
+
// Pedir al usuario que exima la app (muestra dialogo del sistema)
|
|
178
|
+
if (!systemSettings.isIgnoringBatteryOptimizations()) {
|
|
179
|
+
systemSettings.requestIgnoreBatteryOptimizations(true);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Optimizaciones especificas de fabricante (Xiaomi, Huawei, etc.)
|
|
183
|
+
// No se puede consultar el estado, solo solicitar la exencion
|
|
184
|
+
systemSettings.requestIgnoreSpecialBatteryOptimizations();
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
##### Permisos en runtime
|
|
188
|
+
|
|
189
|
+
```javascript
|
|
190
|
+
// Consultar permisos declarados/concedidos/no concedidos
|
|
191
|
+
let aTodos = systemSettings.getDeclaredPermissions(); // array de strings
|
|
192
|
+
let aConcedidos = systemSettings.getGrantedPermissions();
|
|
193
|
+
let aNoConcedidos= systemSettings.getNotGrantedPermissions();
|
|
194
|
+
|
|
195
|
+
// Comprobar un permiso concreto (nombre corto XOne o nombre completo Android)
|
|
196
|
+
let bCamara = systemSettings.isPermissionGranted("camera");
|
|
197
|
+
let bBateria= systemSettings.isPermissionGranted("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS");
|
|
198
|
+
|
|
199
|
+
// Solicitar permisos en runtime
|
|
200
|
+
let future = systemSettings.requestPermissions({
|
|
201
|
+
requestMessage: "Por favor habilite estos permisos para usar la aplicación",
|
|
202
|
+
mandatory : false, // false = puede continuar sin concederlos
|
|
203
|
+
permissions : ["bluetooth"] // nombres cortos XOne
|
|
204
|
+
});
|
|
205
|
+
let bConcedidos = future.get(); // bloquea hasta respuesta del usuario
|
|
206
|
+
|
|
207
|
+
// Revocar permisos (Android >= 13)
|
|
208
|
+
systemSettings.revokePermissions("microphone", "camera", "phone");
|
|
209
|
+
|
|
210
|
+
// Permiso de almacenamiento externo completo (Android >= 11)
|
|
211
|
+
let futureStorage = systemSettings.requestExternalStoragePermission();
|
|
212
|
+
let bStorage = futureStorage.get();
|
|
213
|
+
|
|
214
|
+
// Permiso overlay (dibujar sobre otras apps): consultar antes de solicitar
|
|
215
|
+
let bOverlay = systemSettings.hasOverlayPermission();
|
|
216
|
+
if (!bOverlay) {
|
|
217
|
+
let futureOverlay = systemSettings.requestOverlayPermission();
|
|
218
|
+
bOverlay = futureOverlay.get();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Permiso alarmas exactas
|
|
222
|
+
let futureAlarm = systemSettings.requestScheduleExactAlarmPermission();
|
|
223
|
+
let bAlarm = futureAlarm.get();
|
|
224
|
+
|
|
225
|
+
// Auto-revocacion de permisos (Android apaga permisos de apps sin uso)
|
|
226
|
+
let bAutoRevoke = systemSettings.isPermissionAutoRevokeEnabled();
|
|
227
|
+
if (bAutoRevoke) {
|
|
228
|
+
systemSettings.requestDisablePermissionAutoRevoke();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Comprobar si tiene gestion completa de almacenamiento externo
|
|
232
|
+
let bManager = systemSettings.isExternalStorageManager();
|
|
233
|
+
let bManagerPath = systemSettings.isExternalStorageManager("/sdcard/");
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
##### Memoria y rendimiento
|
|
237
|
+
|
|
238
|
+
```javascript
|
|
239
|
+
// Nivel de memoria actual del dispositivo
|
|
240
|
+
let sLevel = systemSettings.getMemoryLevel();
|
|
241
|
+
// Valores posibles:
|
|
242
|
+
// "background" -> Uso muy ligero, app prescindible
|
|
243
|
+
// "moderate" -> Uso moderado, app prescindible
|
|
244
|
+
// "ui_hidden" -> Uso ligero, limpiar algunos recursos
|
|
245
|
+
// "running_moderate" -> Uso moderado, app visible
|
|
246
|
+
// "running_low" -> Uso alto, app visible
|
|
247
|
+
// "running_critical" -> Uso muy alto, app visible
|
|
248
|
+
// "complete" -> Dispositivo casi sin memoria
|
|
249
|
+
|
|
250
|
+
// Patron comun: solo actuar en niveles criticos
|
|
251
|
+
try {
|
|
252
|
+
let sNivel = systemSettings.getMemoryLevel();
|
|
253
|
+
if (sNivel === "running_low" || sNivel === "running_critical" || sNivel === "complete") {
|
|
254
|
+
ui.showToast("El dispositivo se esta quedando sin memoria");
|
|
255
|
+
}
|
|
256
|
+
} catch(err) {
|
|
257
|
+
// Puede no estar disponible en todas las versiones
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Memoria de la JVM (en bytes)
|
|
261
|
+
let nMax = systemSettings.getMaxMemory();
|
|
262
|
+
let nFree = systemSettings.getFreeMemory();
|
|
263
|
+
let sMsg = "Max: " + Math.round(nMax / 1024 / 1024) + " MB"
|
|
264
|
+
+ " | Libre: " + Math.round(nFree / 1024 / 1024) + " MB";
|
|
265
|
+
|
|
266
|
+
// RAM física del dispositivo (en bytes)
|
|
267
|
+
let nRamTotal = systemSettings.getTotalMemory(); // RAM física total instalada
|
|
268
|
+
let nRamLibre = systemSettings.getAvailableMemory(); // RAM física disponible ahora
|
|
269
|
+
|
|
270
|
+
// Espacio en disco (en bytes) — comprobar antes de descargas/exportaciones grandes
|
|
271
|
+
let nDiscoLibre = systemSettings.getInternalFreeSpace(); // libre en almacenamiento interno (app + BD)
|
|
272
|
+
let nDiscoTotal = systemSettings.getInternalTotalSpace(); // total del almacenamiento interno
|
|
273
|
+
let nExtLibre = systemSettings.getExternalFreeSpace(); // libre en almacenamiento externo (0 si no está montado)
|
|
274
|
+
let nExtTotal = systemSettings.getExternalTotalSpace(); // total del almacenamiento externo
|
|
275
|
+
|
|
276
|
+
let nMbLibres = Math.round(systemSettings.getInternalFreeSpace() / 1024 / 1024);
|
|
277
|
+
if (nMbLibres < 100) {
|
|
278
|
+
ui.showToast("Quedan solo " + nMbLibres + " MB libres en disco");
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Forzar garbage collector (solicitud, no garantiza ejecución inmediata)
|
|
282
|
+
systemSettings.garbageCollect();
|
|
283
|
+
|
|
284
|
+
// Limpiar cache de todas las apps (requiere permiso de sistema)
|
|
285
|
+
systemSettings.clearAllAppsCache();
|
|
286
|
+
|
|
287
|
+
// Borrar todos los datos de la app (equivale a "Borrar datos" en ajustes)
|
|
288
|
+
systemSettings.clearApplicationData();
|
|
289
|
+
|
|
290
|
+
// Limpiar caches internas del framework
|
|
291
|
+
systemSettings.clearJavascriptCache();
|
|
292
|
+
systemSettings.clearBitmapCache();
|
|
293
|
+
|
|
294
|
+
// Compactar los .dex cacheados del motor JS (optimización del arranque tras muchos scripts nuevos)
|
|
295
|
+
systemSettings.mergeJavascriptCache();
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
##### Información del dispositivo y hardware
|
|
299
|
+
|
|
300
|
+
```javascript
|
|
301
|
+
// IDs de hardware
|
|
302
|
+
let ids = systemSettings.getHardwareIds();
|
|
303
|
+
// ids.deviceIdCount -> número de IDs de dispositivo
|
|
304
|
+
// ids.deviceId0, ids.deviceId1, ... -> IMEI u otros IDs
|
|
305
|
+
// ids.wifiMacAddress -> MAC WiFi (puede ser null)
|
|
306
|
+
// ids.androidId -> Android ID unico por instalacion
|
|
307
|
+
|
|
308
|
+
// Device ID propio del framework XOne
|
|
309
|
+
let sDeviceId = systemSettings.getDeviceId();
|
|
310
|
+
systemSettings.setDeviceId("nuevo_id"); // Solo para casos especiales
|
|
311
|
+
|
|
312
|
+
// Tiempo encendido del dispositivo
|
|
313
|
+
let uptime = systemSettings.getDeviceUptime();
|
|
314
|
+
// uptime.ms, uptime.days, uptime.hours, uptime.minutes
|
|
315
|
+
|
|
316
|
+
// Features del hardware disponibles (array de strings tipo "android.hardware.camera")
|
|
317
|
+
let aFeatures = systemSettings.getFeatures();
|
|
318
|
+
|
|
319
|
+
// Teclado fisico
|
|
320
|
+
let bTeclado = systemSettings.hasHardwareKeyboard(); // Tiene teclado fisico
|
|
321
|
+
let bQwerty = systemSettings.hasQwertyKeyboard(); // Es estilo QWERTY
|
|
322
|
+
let b12Teclas = systemSettings.hasTwelveKeysKeyboard();// Es estilo 12 teclas
|
|
323
|
+
// Devuelven true si tiene el hardware, independientemente de si usa el virtual
|
|
324
|
+
|
|
325
|
+
// Arquitectura del proceso
|
|
326
|
+
let b64Bit = systemSettings.is64Bit(); // true en Android M+ con proceso 64 bits
|
|
327
|
+
|
|
328
|
+
// Nombres de la app
|
|
329
|
+
let sPackage = systemSettings.getPackageName(); // ej: "com.empresa.app"
|
|
330
|
+
let sSharedUserId= systemSettings.getSharedUserId();
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
##### Versiones de SO y de la app
|
|
334
|
+
|
|
335
|
+
```javascript
|
|
336
|
+
let nApiLevel = systemSettings.getApiLevel(); // API level del SO (Build.VERSION.SDK_INT)
|
|
337
|
+
let sAndroidVer = systemSettings.getAndroidVersion(); // Versión Android (Build.VERSION.RELEASE, ej: "14")
|
|
338
|
+
let nTargetSdk = systemSettings.getTargetSdkVersion(); // targetSdk declarado por el APK
|
|
339
|
+
let nMinSdk = systemSettings.getMinSdkVersion(); // minSdk del APK (Android >= 7 / API 24, lanza si menor)
|
|
340
|
+
let nVersionCode = systemSettings.getVersionCode(); // versionCode entero del APK instalado
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
##### Proceso del sistema
|
|
344
|
+
|
|
345
|
+
```javascript
|
|
346
|
+
let nPid = systemSettings.getPid(); // ID del proceso actual (Process.myPid)
|
|
347
|
+
let nUid = systemSettings.getUid(); // UID Linux del proceso (Process.myUid)
|
|
348
|
+
let nTid = systemSettings.getTid(); // ID del hilo actual (Process.myTid)
|
|
349
|
+
let nPriority = systemSettings.getThreadPriority(); // Prioridad nice del hilo actual
|
|
350
|
+
|
|
351
|
+
// Matar un proceso por PID (uso avanzado: tareas de mantenimiento, reinicios programáticos)
|
|
352
|
+
systemSettings.killProcess(nPid);
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
##### Seguridad del dispositivo
|
|
356
|
+
|
|
357
|
+
```javascript
|
|
358
|
+
// Dispositivo con PIN/patron/password de bloqueo configurado.
|
|
359
|
+
// Si la app es Device Owner/Profile Owner consulta DevicePolicyManager;
|
|
360
|
+
// si no, usa KeyguardManager.isDeviceSecure().
|
|
361
|
+
let bSecured = systemSettings.isPasswordSecured();
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
##### Rutas del sistema de ficheros
|
|
365
|
+
|
|
366
|
+
```javascript
|
|
367
|
+
let sExternal = systemSettings.getExternalStoragePath();
|
|
368
|
+
let sGaleria = systemSettings.getGalleryPath();
|
|
369
|
+
let sDocumentos = systemSettings.getDocumentsPath();
|
|
370
|
+
let sMusica = systemSettings.getMusicPath();
|
|
371
|
+
let sDescargas = systemSettings.getDownloadsPath();
|
|
372
|
+
let sCapturas = systemSettings.getScreenshotsPath();
|
|
373
|
+
let sTonos = systemSettings.getRingtonesPath();
|
|
374
|
+
let sAlarmas = systemSettings.getAlarmsPath();
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
##### Wallpaper
|
|
378
|
+
|
|
379
|
+
```javascript
|
|
380
|
+
systemSettings.setWallpaper("wallpaper.png"); // Fichero en carpeta de la app
|
|
381
|
+
systemSettings.getWallpaper(appData.getAppPath() + "files/wallpaper_guardado.png");
|
|
382
|
+
// getWallpaper guarda el wallpaper actual en la ruta indicada
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
##### Acceso directo en pantalla de inicio (Pin Shortcut)
|
|
386
|
+
|
|
387
|
+
```javascript
|
|
388
|
+
systemSettings.addPinShortcut({
|
|
389
|
+
id : 1000,
|
|
390
|
+
label: "Nombre del acceso directo",
|
|
391
|
+
icon : "icono.png", // Fichero PNG en carpeta de la app
|
|
392
|
+
extras: { // Datos extra que recibira la app al pulsar
|
|
393
|
+
parametro1: "valor1",
|
|
394
|
+
parametro2: "valor2"
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
##### Estado de la app y restricciones
|
|
400
|
+
|
|
401
|
+
```javascript
|
|
402
|
+
let bRestringida = systemSettings.isBackgroundRestricted(); // Ejecución en background restringida
|
|
403
|
+
let bDatosRestr = systemSettings.isBackgroundDataDisabled(); // Datos en background restringidos
|
|
404
|
+
let bInactiva = systemSettings.isAppInactive(); // App marcada como inactiva por el SO
|
|
405
|
+
let sRestriction = systemSettings.getAppRestrictionStatus(); // Estado de restriccion de la app
|
|
406
|
+
systemSettings.showAppSettingsWindow(); // Abre los ajustes de la app en el sistema (devuelve el propio systemSettings, encadenable)
|
|
407
|
+
|
|
408
|
+
// Actualizacion desde Google Play
|
|
409
|
+
// Devuelve true si hay actualizacion pendiente (y lanza el dialogo de actualizacion)
|
|
410
|
+
// Detener el script si devuelve true para no continuar con la app desactualizada
|
|
411
|
+
// Parametro opcional: "immediate" (obligatoria) o "flexible" (se puede posponer)
|
|
412
|
+
let bUpdate = systemSettings.checkMarketUpdate();
|
|
413
|
+
// let bUpdate = systemSettings.checkMarketUpdate("flexible");
|
|
414
|
+
if (bUpdate) {
|
|
415
|
+
return; // Detener ejecución hasta que el usuario actualice
|
|
416
|
+
}
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
##### Perfil de trabajo y MDM
|
|
420
|
+
|
|
421
|
+
```javascript
|
|
422
|
+
let bWorkProfile = systemSettings.isRunningInWorkProfile(); // MDM con perfil de trabajo XOne
|
|
423
|
+
let bDeviceOwner = systemSettings.isRunningWithDeviceOwner(); // MDM en modo kiosko XOne
|
|
424
|
+
let bHayMdm = systemSettings.isRunningInMdm(); // Cualquier MDM activo
|
|
425
|
+
let bIntune = systemSettings.isRunningInMdm("com.microsoft.windowsintune.companyportal");
|
|
426
|
+
let bXoneMdm = systemSettings.isRunningInMdm("com.xone.live.services");
|
|
427
|
+
// isRunningInMdm acepta el package name del MDM a comprobar
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
##### XOneLive: widgets y configuración
|
|
431
|
+
|
|
432
|
+
```javascript
|
|
433
|
+
// Widgets de la barra de notificaciones
|
|
434
|
+
systemSettings.enableReplicatorWidget();
|
|
435
|
+
systemSettings.disableReplicatorWidget();
|
|
436
|
+
systemSettings.enableLiveWidget();
|
|
437
|
+
systemSettings.disableLiveWidget();
|
|
438
|
+
|
|
439
|
+
// Configuración actual de XOneLive (objeto JS con todos los parametros)
|
|
440
|
+
let jsConfig = systemSettings.getLiveConfig();
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
##### Depuracion e integridad
|
|
444
|
+
|
|
445
|
+
```javascript
|
|
446
|
+
// Integridad del dispositivo (detecta root, emuladores, manipulacion)
|
|
447
|
+
let bIntegro = systemSettings.isDeviceIntegrityOk();
|
|
448
|
+
|
|
449
|
+
// Token de integridad de Google Play (para verificar en servidor)
|
|
450
|
+
let sToken = systemSettings.getIntegrityToken("nonce_unico_por_peticion");
|
|
451
|
+
|
|
452
|
+
// Depurador conectado (util para detectar manipulacion en produccion)
|
|
453
|
+
let bDebugger = systemSettings.isDebuggerConnected();
|
|
454
|
+
|
|
455
|
+
// Activar/desactivar modo debug del framework en tiempo de ejecución
|
|
456
|
+
let bDebugMode = !appData.isDebugMode();
|
|
457
|
+
appData.setDebugMode(bDebugMode);
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
##### Accesibilidad
|
|
461
|
+
|
|
462
|
+
```javascript
|
|
463
|
+
let bAccesibilidad = systemSettings.isAccessibilityEnabled();
|
|
464
|
+
let bTalkBack = systemSettings.isTouchExplorationEnabled(); // TalkBack activo
|
|
465
|
+
let bAutoStart = systemSettings.isAutoStartEnabled(); // App en autoarranque
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
##### Ajustes del sistema (propiedades directas)
|
|
469
|
+
|
|
470
|
+
```javascript
|
|
471
|
+
// AUTO_TIME: hora automática de red
|
|
472
|
+
// Solo se puede escribir en Android < 4.2 (SDK < 17). En versiones superiores es de solo lectura.
|
|
473
|
+
let nSdkVersion = appData.getGlobalMacro("##DEVICE_OSSDKCODE##");
|
|
474
|
+
if (nSdkVersion < 17) {
|
|
475
|
+
systemSettings.AUTO_TIME = 1; // Forzar hora automática
|
|
476
|
+
} else {
|
|
477
|
+
let nAutoTime = systemSettings.AUTO_TIME; // Solo lectura
|
|
478
|
+
// Equivalente: systemSettings.isNetworkAutoTimeEnabled()
|
|
479
|
+
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
##### Certificados (solo Android < 11)
|
|
483
|
+
|
|
484
|
+
```javascript
|
|
485
|
+
systemSettings.installCertificate({
|
|
486
|
+
name: "Nombre descriptivo del certificado",
|
|
487
|
+
file: "certificado.pem" // Fichero en carpeta de la app
|
|
488
|
+
});
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
##### Intune (Microsoft Intune MDM)
|
|
492
|
+
|
|
493
|
+
```javascript
|
|
494
|
+
let bIntune = systemSettings.isIntuneCompilation(); // App compilada con soporte Intune
|
|
495
|
+
let sPinRequired = systemSettings.isIntunePinRequired(); // PIN de Intune requerido
|
|
496
|
+
let sIntuneId = systemSettings.getIntuneId(); // ID del dispositivo en Intune
|
|
497
|
+
let bOutdated = systemSettings.isIntuneAgentOutdated(); // Agente Intune desactualizado
|
|
498
|
+
let sMsg = systemSettings.getIntuneAgentOutdatedMessage(); // Mensaje de actualizacion
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
##### Firebase Analytics
|
|
502
|
+
|
|
503
|
+
Sólo funciona en flavors compilados con Firebase Analytics. En builds sin Analytics ambos métodos devuelven `false` y registran un aviso en log.
|
|
504
|
+
|
|
505
|
+
```javascript
|
|
506
|
+
// Activar / desactivar Analytics en runtime (cumplir RGPD/opt-out del usuario)
|
|
507
|
+
systemSettings.setAnalyticsEnabled(true);
|
|
508
|
+
systemSettings.setAnalyticsEnabled(false);
|
|
509
|
+
|
|
510
|
+
// Registrar evento personalizado:
|
|
511
|
+
// - La clave "eventTag" del objeto es el nombre del evento Firebase
|
|
512
|
+
// - El resto de claves se envían como parámetros del evento
|
|
513
|
+
systemSettings.logAnalyticsEvent({
|
|
514
|
+
eventTag : "purchase_completed",
|
|
515
|
+
sku : "item_001",
|
|
516
|
+
amount : 9.99,
|
|
517
|
+
currency : "EUR"
|
|
518
|
+
});
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
#### 2.12.17 Tabla Resumen de Objetos Complementarios
|
|
522
|
+
|
|
523
|
+
| Objeto | Creación | Uso Principal |
|
|
524
|
+
|--------|----------|---------------|
|
|
525
|
+
| `FileManager` | `new FileManager()` | Descarga, lectura, escritura, compresión de archivos |
|
|
526
|
+
| `XOnePDF` | `new XOnePDF()` | Generación de documentos PDF |
|
|
527
|
+
| `XOnePrinter` | `new XOnePrinter()` | Impresion en impresoras Bluetooth |
|
|
528
|
+
| `BarcodeGenerator` | `new BarcodeGenerator()` | Generación de códigos de barras/QR |
|
|
529
|
+
| `XOneNFC` | `new XOneNFC()` | NFC y DNI electrónico |
|
|
530
|
+
| `XOneOCR` | `new XOneOCR()` | Reconocimiento optico de caracteres |
|
|
531
|
+
| `BluetoothSerialPort` | Singleton `bluetoothSerial` | Puerto serie Bluetooth |
|
|
532
|
+
| `WifiManager` | `new WifiManager()` | Gestion de redes WiFi |
|
|
533
|
+
| `Animation` | `new Animation()` | Animaciones de controles UI |
|
|
534
|
+
| `deviceInfo` | Singleton global | Información del dispositivo (batería, red, señal móvil) |
|
|
535
|
+
| `GpsTools` | `new GpsTools()` | Distancias, geocoding, poligonos |
|
|
536
|
+
| `OAuth2` | `new OAuth2()` | Autenticación OAuth 2.0 |
|
|
537
|
+
| `WebSocket` | `new WebSocket(config)` | Comunicación en tiempo real |
|
|
538
|
+
| `fingerprintManager` | Singleton global | Huella dactilar (legacy) |
|
|
539
|
+
| `ImageDrawing` | `new ImageDrawing()` | Edición básica de imágenes |
|
|
540
|
+
| `AndroidIntent` | `new AndroidIntent()` | Intents de Android |
|
|
541
|
+
| `systemSettings` | Singleton global | Brillo, permisos, memoria, MDM, batería, rutas, Intune |
|
|
542
|
+
| `IniParser` | `new IniParser()` | Archivos de configuración .ini |
|
|
543
|
+
| `DOMParser` | `new DOMParser()` | Parseo de XML |
|
|
544
|
+
|