// Settings Worker - Handles Android system settings in parallel self.addEventListener('message', async (e) => { const { action, settings } = e.data; switch (action) { case 'READ_ALL': const allSettings = await readAllSettings(); self.postMessage({ type: 'SETTINGS_BULK', settings: allSettings }); break; case 'READ': const value = await readSetting(settings.key); self.postMessage({ type: 'SETTING_VALUE', key: settings.key, value }); break; case 'WRITE': await writeSetting(settings.key, settings.value); self.postMessage({ type: 'SETTING_SAVED', key: settings.key }); break; case 'WATCH': await watchSetting(settings.key); break; } }); const ANDROID_SETTINGS = { // Display 'display_brightness': 'system.SCREEN_BRIGHTNESS', 'display_auto_rotate': 'system.ACCELEROMETER_ROTATION', 'display_font_size': 'system.FONT_SCALE', 'display_screen_timeout': 'system.SCREEN_OFF_TIMEOUT', 'display_night_mode': 'secure.UI_NIGHT_MODE', // Sound 'sound_volume_ring': 'system.VOLUME_RING', 'sound_volume_media': 'system.VOLUME_MUSIC', 'sound_volume_alarm': 'system.VOLUME_ALARM', 'sound_vibrate_mode': 'system.VIBRATE_WHEN_RINGING', 'sound_dnd': 'global.ZEN_MODE', // Notifications 'notification_enabled': 'global.ENABLED_NOTIFICATION_LISTENERS', 'notification_badging': 'secure.NOTIFICATION_BADGING', 'notification_heads_up': 'global.HEADS_UP_NOTIFICATIONS_ENABLED', // Connectivity 'wifi_enabled': 'global.WIFI_ON', 'mobile_data': 'global.MOBILE_DATA', 'airplane_mode': 'global.AIRPLANE_MODE_ON', 'bluetooth_enabled': 'global.BLUETOOTH_ON', // Location 'location_mode': 'secure.LOCATION_MODE', // Privacy 'camera_disabled': 'secure.CAMERA_DISABLED', 'microphone_disabled': 'secure.MICROPHONE_DISABLED', }; async function readAllSettings() { const results = {}; const batch = []; // Read in parallel batches of 4 const entries = Object.entries(ANDROID_SETTINGS); for (let i = 0; i < entries.length; i += 4) { const batch = entries.slice(i, i + 4).map(([key, uri]) => readSetting(key)); await Promise.all(batch); } return results; } async function readSetting(key) { // Try to access via Android interface or fallback if (self.Android?.Settings?.get) { return self.Android.Settings.get(ANDROID_SETTINGS[key]); } // Fallback for PWA testing return localStorage.getItem(`arch_setting_${key}`) ?? getDefaultSetting(key); } async function writeSetting(key, value) { if (self.Android?.Settings?.put) { self.Android.Settings.put(ANDROID_SETTINGS[key], value); } localStorage.setItem(`arch_setting_${key}`, value); } function getDefaultSetting(key) { const defaults = { 'display_brightness': 128, 'display_auto_rotate': 1, 'display_screen_timeout': 30000, 'sound_volume_media': 80, 'wifi_enabled': 1, 'location_mode': 3 }; return defaults[key] ?? null; } async function watchSetting(key) { // Set up content observer simulation setInterval(async () => { const value = await readSetting(key); self.postMessage({ type: 'SETTING_CHANGED', key, value }); }, 1000); }