diff --git a/apps/rebreak-native/plugins/with-rebreak-protection-android.js b/apps/rebreak-native/plugins/with-rebreak-protection-android.js index f9b3111..d8e9ff8 100644 --- a/apps/rebreak-native/plugins/with-rebreak-protection-android.js +++ b/apps/rebreak-native/plugins/with-rebreak-protection-android.js @@ -27,8 +27,12 @@ const { withAndroidManifest, + withStringsXml, + withDangerousMod, AndroidConfig, } = require('@expo/config-plugins'); +const fs = require('fs'); +const path = require('path'); const VPN_SERVICE_CLASS = 'expo.modules.rebreakprotection.vpn.RebreakVpnService'; @@ -113,15 +117,69 @@ function ensureAccessibilityService(manifest) { }); } +// ─── 4) String resource für a11y-service-summary ──────────────────────────── + +const A11Y_SUMMARY_TEXT = + 'ReBreak schützt vor Glücksspiel-Seiten in Browsern. Liest URLs in der Adressleiste, um Casino-Domains zu erkennen und zu blocken.'; + +function withA11yStringResource(config) { + return withStringsXml(config, (cfg) => { + cfg.modResults = AndroidConfig.Strings.setStringItem( + [ + { + $: { name: 'accessibility_service_summary', translatable: 'false' }, + _: A11Y_SUMMARY_TEXT, + }, + ], + cfg.modResults, + ); + return cfg; + }); +} + +// ─── 5) XML-config für AccessibilityService ───────────────────────────────── + +const A11Y_CONFIG_XML = ` + +`; + +function withA11yConfigXml(config) { + return withDangerousMod(config, [ + 'android', + async (cfg) => { + const xmlDir = path.join( + cfg.modRequest.platformProjectRoot, + 'app/src/main/res/xml', + ); + fs.mkdirSync(xmlDir, { recursive: true }); + fs.writeFileSync( + path.join(xmlDir, 'accessibility_service_config.xml'), + A11Y_CONFIG_XML, + 'utf8', + ); + return cfg; + }, + ]); +} + // ─── Composition ──────────────────────────────────────────────────────────── function withRebreakProtectionAndroid(config) { - return withAndroidManifest(config, (cfg) => { + config = withAndroidManifest(config, (cfg) => { ensureToolsNamespace(cfg.modResults); ensureVpnService(cfg.modResults); ensureAccessibilityService(cfg.modResults); return cfg; }); + config = withA11yStringResource(config); + config = withA11yConfigXml(config); + return config; } module.exports = withRebreakProtectionAndroid;