VulpesOS/assets/webapps/settings.gaiamobile.org/js/panels/findmydevice/panel.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

7 lines
No EOL
6.1 KiB
JavaScript

const IAC_API_WAKEUP_REASON_ENABLED_CHANGED=0;const IAC_API_WAKEUP_REASON_STALE_REGISTRATION=1;const IAC_API_WAKEUP_REASON_LOGIN=2;const IAC_API_WAKEUP_REASON_LOGOUT=3;const IAC_API_WAKEUP_REASON_TRY_DISABLE=4;const IAC_API_WAKEUP_REASON_LOCKSCREEN_CLOSED=5;function wakeUpFindMyDevice(reason){navigator.mozApps.getSelf().onsuccess=function(){var app=this.result;app.connect('findmydevice-wakeup').then(function(ports){ports[0].postMessage(reason);});};};define("shared/findmydevice_iac_api",(function(global){return function(){var ret,fn;return ret||global.wakeUpFindMyDevice;};}(this)));define('panels/findmydevice/findmydevice',['require','modules/settings_utils','shared/settings_listener','shared/settings_helper','shared/findmydevice_iac_api','shared/lazy_loader'],function(require){var SettingsUtils=require('modules/settings_utils');var SettingsListener=require('shared/settings_listener');var SettingsHelper=require('shared/settings_helper');var wakeUpFindMyDevice=require('shared/findmydevice_iac_api');var LazyLoader=require('shared/lazy_loader');var FindMyDevice=function(){this._interactiveLogin=false;this._enabledHelper=SettingsHelper('findmydevice.enabled');this._loggedInHelper=SettingsHelper('findmydevice.logged-in');this._registeredHelper=SettingsHelper('findmydevice.registered');this._boundSetTracked=this._boundSetTracked||this._setTracked.bind(this);this._boundSetEnabled=this._boundSetEnabled||this._setEnabled.bind(this);this._boundSetCanDisable=this._boundSetCanDisable||this._setCanDisable.bind(this);this._boundLoginClick=this._boundLoginClick||this._onLoginClick.bind(this);this._boundCheckboxChanged=this._boundCheckboxChanged||this._onCheckboxChanged.bind(this);};FindMyDevice.prototype={onInit:function fmd_init(elements){this._elements=elements;SettingsUtils.runHeaderFontFit(this._elements.header);LazyLoader.getJSON('/resources/findmydevice.json').then((data)=>{SettingsListener.observe('findmydevice.logged-in',false,this._togglePanel.bind(this));navigator.mozId.watch({wantIssuer:'firefox-accounts',audience:data.api_url,onlogin:this._onChangeLoginState.bind(this,true),onlogout:this._onChangeLoginState.bind(this,false),onready:()=>{this._elements.loginButton.removeAttribute('disabled');console.log('Find My Device: onready fired');},onerror:(err)=>{console.error('Find My Device: onerror fired: '+err);this._interactiveLogin=false;this._elements.loginButton.removeAttribute('disabled');var errorName=JSON.parse(err).name;if(errorName!=='OFFLINE'){if(errorName==='UNVERIFIED_ACCOUNT'){this._elements.unverifiedError.hidden=false;this._elements.login.hidden=true;}
this._loggedInHelper.set(false);}}});});},onBeforeShow:function fmd_onBeforeShow(){SettingsListener.observe('findmydevice.tracking',false,this._boundSetTracked);SettingsListener.observe('findmydevice.enabled',false,this._boundSetEnabled);SettingsListener.observe('findmydevice.can-disable',true,this._boundSetCanDisable);this._elements.loginButton.addEventListener('click',this._boundLoginClick);this._elements.checkbox.addEventListener('change',this._boundCheckboxChanged);},onBeforeHide:function fmd_onBeforeHide(){SettingsListener.unobserve('findmydevice.tracking',this._boundSetTracked);SettingsListener.unobserve('findmydevice.enabled',this._boundSetEnabled);SettingsListener.unobserve('findmydevice.can-disable',this._boundSetCanDisable);this._elements.loginButton.removeEventListener('click',this._boundLoginClick);this._elements.checkbox.removeEventListener('change',this._boundCheckboxChanged);},_onLoginClick:function fmd_on_login_click(e){e.stopPropagation();e.preventDefault();if(this._elements.loginButton.disabled){return;}
if(!window.navigator.onLine){document.l10n.formatValue('findmydevice-enable-network').then((msg)=>window.alert(msg));return;}
this._interactiveLogin=true;navigator.mozId.request({oncancel:()=>{this._interactiveLogin=false;console.log('Find My Device: oncancel fired');}});},_setEnabled:function fmd_set_enabled(value){this._elements.checkbox.checked=value;this._elements.status.hidden=!value;},_setTracked:function fmd_set_tracked(value){this._elements.status.setAttribute('data-l10n-id',value?'findmydevice-active-tracking':'findmydevice-not-tracking');},_setCanDisable:function fmd_set_can_disable(value){this._elements.checkbox.disabled=!value;},_togglePanel:function fmd_toggle_panel(loggedIn){this._elements.signin.hidden=loggedIn;this._elements.settings.hidden=!loggedIn;},_onChangeLoginState:function fmd_on_change_login_state(loggedIn){console.log('settings, logged in: '+loggedIn);if(this._interactiveLogin){this._registeredHelper.get(registered=>{if(!registered){this._enabledHelper.set(true);}});}
this._interactiveLogin=false;this._loggedInHelper.set(loggedIn);this._elements.unverifiedError.hidden=true;this._elements.login.hidden=false;},_onCheckboxChanged:function fmd_on_checkbox_changed(event){event.preventDefault();if(!window.navigator.onLine){document.l10n.formatValue('findmydevice-enable-network').then(msg=>window.alert(msg));return;}
this._elements.checkbox.disabled=true;if(this._elements.checkbox.checked===false){wakeUpFindMyDevice(IAC_API_WAKEUP_REASON_TRY_DISABLE);}else{this._enabledHelper.set(true,()=>{this._elements.checkbox.disabled=false;});}}};return function ctor_findmydevice(){return new FindMyDevice();};});define('panels/findmydevice/panel',['require','modules/settings_panel','panels/findmydevice/findmydevice'],function(require){var SettingsPanel=require('modules/settings_panel');var FindMyDevice=require('panels/findmydevice/findmydevice');return function ctor_findmydevice_panel(){var elements;var findmydevice=FindMyDevice();return SettingsPanel({onInit:function(panel){elements={header:panel.querySelector('gaia-header'),login:panel.querySelector('.findmydevice-login'),loginButton:panel.querySelector('.findmydevice-login > button'),unverifiedError:panel.querySelector('.findmydevice-fxa-unverified-error'),checkbox:panel.querySelector('.findmydevice-enabled gaia-switch'),status:panel.querySelector('.findmydevice-tracking'),signin:panel.querySelector('.findmydevice-signin'),settings:panel.querySelector('.findmydevice-settings')};findmydevice.onInit(elements);},onBeforeShow:function(){findmydevice.onBeforeShow();},onBeforeHide:function(){findmydevice.onBeforeHide();}});};});