mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-11-25 19:36:50 +01:00
Amazfit GTR/S 3: Enable AGPS Updates
This commit is contained in:
parent
69ae0817cf
commit
606e20a065
@ -465,6 +465,10 @@ public abstract class Huami2021Coordinator extends HuamiCoordinator {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean sendAgpsAsFileTransfer() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean supportsGpxUploads() {
|
public boolean supportsGpxUploads() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,16 @@ public class AmazfitGTR3Coordinator extends Huami2021Coordinator {
|
|||||||
return new AmazfitGTR3FWInstallHandler(uri, context);
|
return new AmazfitGTR3FWInstallHandler(uri, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsAgpsUpdates() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendAgpsAsFileTransfer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsBluetoothPhoneCalls(final GBDevice device) {
|
public boolean supportsBluetoothPhoneCalls(final GBDevice device) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -61,6 +61,16 @@ public class AmazfitGTS3Coordinator extends Huami2021Coordinator {
|
|||||||
return new AmazfitGTS3FWInstallHandler(uri, context);
|
return new AmazfitGTS3FWInstallHandler(uri, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsAgpsUpdates() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sendAgpsAsFileTransfer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsBluetoothPhoneCalls(final GBDevice device) {
|
public boolean supportsBluetoothPhoneCalls(final GBDevice device) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -33,6 +33,7 @@ import java.io.IOException;
|
|||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -84,6 +85,7 @@ public abstract class Huami2021FirmwareInfo extends AbstractHuamiFirmwareInfo {
|
|||||||
return HuamiFirmwareType.INVALID;
|
return HuamiFirmwareType.INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Set<UIHHContainer.FileType> agpsEpoTypes = new HashSet<>();
|
||||||
UIHHContainer.FileEntry uihhFirmwareZipFile = null;
|
UIHHContainer.FileEntry uihhFirmwareZipFile = null;
|
||||||
boolean hasChangelog = false;
|
boolean hasChangelog = false;
|
||||||
for (final UIHHContainer.FileEntry file : uihh.getFiles()) {
|
for (final UIHHContainer.FileEntry file : uihh.getFiles()) {
|
||||||
@ -94,12 +96,18 @@ public abstract class Huami2021FirmwareInfo extends AbstractHuamiFirmwareInfo {
|
|||||||
case FIRMWARE_CHANGELOG:
|
case FIRMWARE_CHANGELOG:
|
||||||
hasChangelog = true;
|
hasChangelog = true;
|
||||||
continue;
|
continue;
|
||||||
|
case AGPS_EPO_GR_3:
|
||||||
|
case AGPS_EPO_GAL_7:
|
||||||
|
case AGPS_EPO_BDS_3:
|
||||||
|
agpsEpoTypes.add(file.getType());
|
||||||
|
continue;
|
||||||
default:
|
default:
|
||||||
LOG.warn("Unexpected file for {}", file.getType());
|
LOG.warn("Unexpected file for {}", file.getType());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uihhFirmwareZipFile != null && hasChangelog) {
|
if (uihhFirmwareZipFile != null && hasChangelog) {
|
||||||
|
// UIHH firmware update
|
||||||
final ZipFile zipFile = new ZipFile(uihhFirmwareZipFile.getContent());
|
final ZipFile zipFile = new ZipFile(uihhFirmwareZipFile.getContent());
|
||||||
final byte[] firmwareBin;
|
final byte[] firmwareBin;
|
||||||
try {
|
try {
|
||||||
@ -114,6 +122,11 @@ public abstract class Huami2021FirmwareInfo extends AbstractHuamiFirmwareInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (agpsEpoTypes.size() == 3) {
|
||||||
|
// AGPS EPO update
|
||||||
|
return HuamiFirmwareType.AGPS_UIHH;
|
||||||
|
}
|
||||||
|
|
||||||
return HuamiFirmwareType.INVALID;
|
return HuamiFirmwareType.INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
import nodomain.freeyourgadget.gadgetbridge.model.Reminder;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEOperation;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder;
|
||||||
@ -581,13 +582,34 @@ public abstract class Huami2021Support extends HuamiSupport implements ZeppOsFil
|
|||||||
final ZeppOsAgpsInstallHandler agpsHandler = new ZeppOsAgpsInstallHandler(uri, getContext());
|
final ZeppOsAgpsInstallHandler agpsHandler = new ZeppOsAgpsInstallHandler(uri, getContext());
|
||||||
if (agpsHandler.isValid()) {
|
if (agpsHandler.isValid()) {
|
||||||
try {
|
try {
|
||||||
new ZeppOsAgpsUpdateOperation(
|
if (getCoordinator().sendAgpsAsFileTransfer()) {
|
||||||
this,
|
LOG.info("Sending AGPS as file transfer");
|
||||||
agpsHandler.getFile(),
|
new ZeppOsAgpsUpdateOperation(
|
||||||
agpsService,
|
this,
|
||||||
fileTransferService,
|
agpsHandler.getFile(),
|
||||||
configService
|
agpsService,
|
||||||
).perform();
|
fileTransferService,
|
||||||
|
configService
|
||||||
|
).perform();
|
||||||
|
} else {
|
||||||
|
LOG.info("Sending AGPS as firmware update");
|
||||||
|
|
||||||
|
// Write the agps epo update to a temporary file in cache, so we can reuse the firmware update operation
|
||||||
|
final File cacheDir = getContext().getCacheDir();
|
||||||
|
final File agpsCacheDir = new File(cacheDir, "zepp-os-agps");
|
||||||
|
agpsCacheDir.mkdir();
|
||||||
|
final File uihhFile = new File(agpsCacheDir, "epo-agps.uihh");
|
||||||
|
|
||||||
|
try (FileOutputStream outputStream = new FileOutputStream(uihhFile)) {
|
||||||
|
outputStream.write(agpsHandler.getFile().getUihhBytes());
|
||||||
|
} catch (final IOException e) {
|
||||||
|
LOG.error("Failed to write agps bytes to temporary uihhFile", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
new UpdateFirmwareOperation2021(Uri.parse(uihhFile.toURI().toString()), this).perform();
|
||||||
|
}
|
||||||
|
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
GB.toast(getContext(), "AGPS file cannot be installed: " + e.getMessage(), Toast.LENGTH_LONG, GB.ERROR, e);
|
GB.toast(getContext(), "AGPS file cannot be installed: " + e.getMessage(), Toast.LENGTH_LONG, GB.ERROR, e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user