android - Handle connection events and switch GPS use over

master
Martin Boonk 2023-01-07 11:41:01 +01:00
parent d74c2c4043
commit 4e991fb729
1 changed files with 42 additions and 15 deletions

View File

@ -141,7 +141,7 @@
Bangle.emit('GPS', event); Bangle.emit('GPS', event);
}, },
"is_gps_active": function() { "is_gps_active": function() {
gbSend({ t: "gps_power", status: Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0 }); gbSend({ t: "gps_power", status: Bangle.isGBGPSOn() });
} }
}; };
var h = HANDLERS[event.t]; var h = HANDLERS[event.t];
@ -207,27 +207,54 @@
}; };
// GPS overwrite logic // GPS overwrite logic
if (settings.overwriteGps) { // if the overwrite option is set../ if (settings.overwriteGps) { // if the overwrite option is set../
// Replace set GPS power logic to suppress activation of gps (and instead request it from the phone) const origIsGPSOn = Bangle.isGPSOn;
Bangle.setGPSPower = (o => (isOn, appID) => { const origSetGPSPower = Bangle.setGPSPower;
// if not connected, use old logic // migrate all GPS clients to the other variant on connection events
if (!NRF.getSecurityStatus().connected) return o(isOn, appID); let handleConnect = () => {
// Emulate old GPS power logic if (origIsGPSOn()){
for (let c of Bangle._PWR.GPS){
Bangle.setGBGPSPower(1, c);
origSetGPSPower(0, c);
}
}
};
let handleDisconnect = () => {
if (Bangle.isGBGPSOn()){
for (let c of Bangle._PWR.GBGPS){
origSetGPSPower(1, c);
Bangle.setGBGPSPower(0, c);
}
}
};
NRF.on('connect', handleConnect);
NRF.on('disconnect', handleDisconnect);
Bangle.setGBGPSPower = (isOn, appID) => {
if (!Bangle._PWR) Bangle._PWR={}; if (!Bangle._PWR) Bangle._PWR={};
if (!Bangle._PWR.GPS) Bangle._PWR.GPS=[]; if (!Bangle._PWR.GBGPS) Bangle._PWR.GBGPS=[];
if (!appID) appID="?"; if (!appID) appID="?";
if (isOn && !Bangle._PWR.GPS.includes(appID)) Bangle._PWR.GPS.push(appID); if (isOn && !Bangle._PWR.GBGPS.includes(appID)) Bangle._PWR.GBGPS.push(appID);
if (!isOn && Bangle._PWR.GPS.includes(appID)) Bangle._PWR.GPS.splice(Bangle._PWR.GPS.indexOf(appID),1); if (!isOn && Bangle._PWR.GBGPS.includes(appID)) Bangle._PWR.GBGPS.splice(Bangle._PWR.GBGPS.indexOf(appID),1);
let pwr = Bangle._PWR.GPS.length>0; let pwr = Bangle._PWR.GBGPS.length>0;
gbSend({ t: "gps_power", status: pwr }); gbSend({ t: "gps_power", status: pwr });
return pwr; return pwr;
})(Bangle.setGPSPower); };
// Replace check if the GPS is on to check the _PWR variable // Replace set GPS power logic to suppress activation of gps (and instead request it from the phone)
Bangle.setGPSPower = (isOn, appID) => {
// if not connected use internal GPS power function
if (!NRF.getSecurityStatus().connected) return origSetGPSPower(isOn, appID);
return Bangle.setGBGPSPower(isOn, appID);
};
// Allow checking for GPS via GadgetBridge
Bangle.isGBGPSOn = () => {
return !!(Bangle._PWR && Bangle._PWR.GBGPS && Bangle._PWR.GBGPS.length>0);
};
// Replace check if the GPS is on to check both internal and external GPS
Bangle.isGPSOn = () => { Bangle.isGPSOn = () => {
return Bangle._PWR && Bangle._PWR.GPS && Bangle._PWR.GPS.length>0; return Bangle.isGBGPSOn() || origIsGPSOn();
} };
// stop GPS on boot if not activated // stop GPS on boot if not activated
setTimeout(()=>{ setTimeout(()=>{
if (!Bangle.isGPSOn()) gbSend({ t: "gps_power", status: false }); if (!Bangle.isGBGPSOn()) gbSend({ t: "gps_power", status: false });
},3000); },3000);
} }