mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-01-25 16:15:55 +01:00
Mi2: add hint about intermediate firmware 1.0.0.53
This commit is contained in:
parent
2d60beea1f
commit
5d96df3508
@ -224,6 +224,11 @@ public class FwAppInstallerActivity extends GBActivity implements InstallActivit
|
|||||||
fwAppInstallTextView.setText(text);
|
fwAppInstallTextView.setText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getInfoText() {
|
||||||
|
return fwAppInstallTextView.getText();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInstallEnabled(boolean enable) {
|
public void setInstallEnabled(boolean enable) {
|
||||||
boolean enabled = device != null && device.isConnected() && enable;
|
boolean enabled = device != null && device.isConnected() && enable;
|
||||||
|
@ -19,6 +19,8 @@ package nodomain.freeyourgadget.gadgetbridge.activities;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
import nodomain.freeyourgadget.gadgetbridge.model.ItemWithDetails;
|
||||||
|
|
||||||
public interface InstallActivity {
|
public interface InstallActivity {
|
||||||
|
CharSequence getInfoText();
|
||||||
|
|
||||||
void setInfoText(String text);
|
void setInfoText(String text);
|
||||||
|
|
||||||
void setInstallEnabled(boolean enable);
|
void setInstallEnabled(boolean enable);
|
||||||
@ -26,4 +28,5 @@ public interface InstallActivity {
|
|||||||
void clearInstallItems();
|
void clearInstallItems();
|
||||||
|
|
||||||
void setInstallItem(ItemWithDetails item);
|
void setInstallItem(ItemWithDetails item);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,14 @@ public abstract class AbstractMiBandFWInstallHandler implements InstallHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Context getContext() {
|
||||||
|
return mContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractMiBandFWHelper getHelper() {
|
||||||
|
return helper;
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException;
|
protected abstract AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException;
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,10 +24,14 @@ import org.slf4j.LoggerFactory;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.activities.InstallActivity;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWHelper;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWHelper;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWInstallHandler;
|
import nodomain.freeyourgadget.gadgetbridge.devices.miband.AbstractMiBandFWInstallHandler;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.FirmwareType;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.util.Version;
|
||||||
|
|
||||||
public class MiBand2FWInstallHandler extends AbstractMiBandFWInstallHandler {
|
public class MiBand2FWInstallHandler extends AbstractMiBandFWInstallHandler {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(MiBand2FWInstallHandler.class);
|
private static final Logger LOG = LoggerFactory.getLogger(MiBand2FWInstallHandler.class);
|
||||||
@ -36,6 +40,55 @@ public class MiBand2FWInstallHandler extends AbstractMiBandFWInstallHandler {
|
|||||||
super(uri, context);
|
super(uri, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validateInstallation(InstallActivity installActivity, GBDevice device) {
|
||||||
|
super.validateInstallation(installActivity, device);
|
||||||
|
maybeAddFw53Hint(installActivity, device);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void maybeAddFw53Hint(InstallActivity installActivity, GBDevice device) {
|
||||||
|
FirmwareType type = getFirmwareType();
|
||||||
|
if (type != FirmwareType.FIRMWARE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Version deviceVersion = getFirmwareVersionOf(device);
|
||||||
|
if (deviceVersion != null) {
|
||||||
|
Version v53 = new Version("1.0.0.53");
|
||||||
|
if (deviceVersion.compareTo(v53) < 0) {
|
||||||
|
String vInstall = getHelper().format(getHelper().getFirmwareVersion());
|
||||||
|
if (vInstall == null || new Version(vInstall).compareTo(v53) > 0) {
|
||||||
|
String newInfoText = getContext().getString(R.string.mi2_fw_installhandler_fw53_hint, v53.get()) + "\n\n" + installActivity.getInfoText();
|
||||||
|
installActivity.setInfoText(newInfoText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Version getFirmwareVersionOf(GBDevice device) {
|
||||||
|
String version = device.getFirmwareVersion();
|
||||||
|
if (version == null || version.length() == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (version.charAt(0) == 'V') {
|
||||||
|
version = version.substring(1);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new Version(version);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
LOG.error("Unable to parse version: " + version);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private FirmwareType getFirmwareType() {
|
||||||
|
AbstractMiBandFWHelper helper = getHelper();
|
||||||
|
if (helper instanceof MiBand2FWHelper) {
|
||||||
|
return ((MiBand2FWHelper) helper).getFirmwareInfo().getFirmwareType();
|
||||||
|
}
|
||||||
|
return FirmwareType.INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException {
|
protected AbstractMiBandFWHelper createHelper(Uri uri, Context context) throws IOException {
|
||||||
return new MiBand2FWHelper(uri, context);
|
return new MiBand2FWHelper(uri, context);
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.util;
|
package nodomain.freeyourgadget.gadgetbridge.util;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class CheckSums {
|
public class CheckSums {
|
||||||
public static int getCRC8(byte[] seq) {
|
public static int getCRC8(byte[] seq) {
|
||||||
int len = seq.length;
|
int len = seq.length;
|
||||||
@ -51,4 +58,31 @@ public class CheckSums {
|
|||||||
crc &= 0xffff;
|
crc &= 0xffff;
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
if (args == null || args.length == 0) {
|
||||||
|
throw new IllegalArgumentException("Pass the files to be checksummed as arguments");
|
||||||
|
}
|
||||||
|
for (String name : args) {
|
||||||
|
try (FileInputStream in = new FileInputStream(name)) {
|
||||||
|
byte[] bytes = readAll(in, 1000 * 1000);
|
||||||
|
System.out.println(name + " : " + getCRC16(bytes));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] readAll(InputStream in, long maxLen) throws IOException {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream(Math.max(8192, in.available()));
|
||||||
|
byte[] buf = new byte[8192];
|
||||||
|
int read = 0;
|
||||||
|
long totalRead = 0;
|
||||||
|
while ((read = in.read(buf)) > 0) {
|
||||||
|
out.write(buf, 0, read);
|
||||||
|
totalRead += read;
|
||||||
|
if (totalRead > maxLen) {
|
||||||
|
throw new IOException("Too much data to read into memory. Got already " + totalRead + buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out.toByteArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package nodomain.freeyourgadget.gadgetbridge.util;
|
||||||
|
|
||||||
|
// http://stackoverflow.com/questions/198431/how-do-you-compare-two-version-strings-in-java
|
||||||
|
public class Version implements Comparable<Version> {
|
||||||
|
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
public final String get() {
|
||||||
|
return this.version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Version(String version) {
|
||||||
|
if(version == null)
|
||||||
|
throw new IllegalArgumentException("Version can not be null");
|
||||||
|
if(!version.matches("[0-9]+(\\.[0-9]+)*"))
|
||||||
|
throw new IllegalArgumentException("Invalid version format");
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public int compareTo(Version that) {
|
||||||
|
if(that == null)
|
||||||
|
return 1;
|
||||||
|
String[] thisParts = this.get().split("\\.");
|
||||||
|
String[] thatParts = that.get().split("\\.");
|
||||||
|
int length = Math.max(thisParts.length, thatParts.length);
|
||||||
|
for(int i = 0; i < length; i++) {
|
||||||
|
int thisPart = i < thisParts.length ?
|
||||||
|
Integer.parseInt(thisParts[i]) : 0;
|
||||||
|
int thatPart = i < thatParts.length ?
|
||||||
|
Integer.parseInt(thatParts[i]) : 0;
|
||||||
|
if(thisPart < thatPart)
|
||||||
|
return -1;
|
||||||
|
if(thisPart > thatPart)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public boolean equals(Object that) {
|
||||||
|
if(this == that)
|
||||||
|
return true;
|
||||||
|
if(that == null)
|
||||||
|
return false;
|
||||||
|
if(this.getClass() != that.getClass())
|
||||||
|
return false;
|
||||||
|
return this.compareTo((Version) that) == 0;
|
||||||
|
}
|
||||||
|
}
|
@ -406,4 +406,5 @@
|
|||||||
<string name="StringUtils_sender"> (%1$s)</string>
|
<string name="StringUtils_sender"> (%1$s)</string>
|
||||||
<string name="find_device_you_found_it">You found it!</string>
|
<string name="find_device_you_found_it">You found it!</string>
|
||||||
<string name="miband2_prefs_timeformat">Mi2: Time Format</string>
|
<string name="miband2_prefs_timeformat">Mi2: Time Format</string>
|
||||||
|
<string name="mi2_fw_installhandler_fw53_hint">You need to install version %1$s before installing this firmware!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
Reference in New Issue
Block a user