File size: 3,227 Bytes
3a08226 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | // 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);
} |