Make temperature location and types non-null

This commit is contained in:
José Rebelo
2025-10-19 23:37:29 +01:00
parent d10ad8b650
commit ab3f543daf
9 changed files with 63 additions and 40 deletions
@@ -643,9 +643,9 @@ public class GBDaoGenerator {
private static Entity addColmiTemperatureSample(Schema schema, Entity user, Entity device) {
Entity sample = addEntity(schema, "ColmiTemperatureSample");
addCommonTimeSampleProperties("AbstractTemperatureSample", sample, user, device);
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull();
sample.addIntProperty("temperatureType");
sample.addIntProperty("temperatureLocation");
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureType").notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureLocation").notNull().codeBeforeGetter(OVERRIDE);
return sample;
}
@@ -1608,8 +1608,8 @@ public class GBDaoGenerator {
addCommonTimeSampleProperties("AbstractTemperatureSample", sample, user, device);
sample.addLongProperty("lastTimestamp").notNull().index();
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull();
sample.addIntProperty("temperatureType").primaryKey();
sample.addIntProperty("temperatureLocation");
sample.addIntProperty("temperatureType").notNull().primaryKey().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureLocation").notNull().codeBeforeGetter(OVERRIDE);
return sample;
}
@@ -1902,10 +1902,10 @@ public class GBDaoGenerator {
private static Entity addFemometerVinca2TemperatureSample(Schema schema, Entity user, Entity device) {
Entity sample = addEntity(schema, "FemometerVinca2TemperatureSample");
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull();
sample.addIntProperty("temperatureType");
sample.addIntProperty("temperatureLocation");
addCommonTimeSampleProperties("AbstractTemperatureSample", sample, user, device);
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureType").notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureLocation").notNull().codeBeforeGetter(OVERRIDE);
return sample;
}
@@ -1914,8 +1914,8 @@ public class GBDaoGenerator {
addCommonTimeSampleProperties("AbstractTemperatureSample", sample, user, device);
sample.addFloatProperty(SAMPLE_TEMPERATURE).notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("humidity").notNull();
sample.addIntProperty("temperatureType");
sample.addIntProperty("temperatureLocation");
sample.addIntProperty("temperatureType").notNull().codeBeforeGetter(OVERRIDE);
sample.addIntProperty("temperatureLocation").notNull().codeBeforeGetter(OVERRIDE);
return sample;
}
@@ -1967,9 +1967,9 @@ public class GBDaoGenerator {
private static Entity addGenericTemperatureSample(Schema schema, Entity user, Entity device) {
Entity temperatureSample = addEntity(schema, "GenericTemperatureSample");
addCommonTimeSampleProperties("AbstractTemperatureSample", temperatureSample, user, device);
temperatureSample.addFloatProperty(SAMPLE_TEMPERATURE).notNull();
temperatureSample.addIntProperty("temperatureType");
temperatureSample.addIntProperty("temperatureLocation");
temperatureSample.addFloatProperty(SAMPLE_TEMPERATURE).notNull().codeBeforeGetter(OVERRIDE);
temperatureSample.addIntProperty("temperatureType").notNull().codeBeforeGetter(OVERRIDE);
temperatureSample.addIntProperty("temperatureLocation").notNull().codeBeforeGetter(OVERRIDE);
return temperatureSample;
}
@@ -12,24 +12,42 @@ import nodomain.freeyourgadget.gadgetbridge.entities.MijiaLywsdRealtimeSampleDao
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
public class GadgetbridgeUpdate_118 implements DBUpdateScript {
private void addColumnIfNotExists(final SQLiteDatabase database,
final String tableName,
final String columnName,
final int defaultValue) {
if (!DBHelper.existsColumn(tableName, columnName, database)) {
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + columnName + " INTEGER NOT NULL DEFAULT " + defaultValue + ";");
}
}
private void addTemperatureColumnsIfNotExists(SQLiteDatabase database, String tableName, int defaultTemperatureType, int defaultTemperatureLocation) {
// Add TemperatureType column if it doesn't exist
if (!DBHelper.existsColumn(tableName, GenericTemperatureSampleDao.Properties.TemperatureType.columnName, database)) {
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + GenericTemperatureSampleDao.Properties.TemperatureType.columnName + " INTEGER DEFAULT " + defaultTemperatureType);
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + GenericTemperatureSampleDao.Properties.TemperatureType.columnName + " INTEGER NOT NULL DEFAULT " + defaultTemperatureType);
}
// Add TemperatureLocation column if it doesn't exist
if (!DBHelper.existsColumn(tableName, GenericTemperatureSampleDao.Properties.TemperatureLocation.columnName, database)) {
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + GenericTemperatureSampleDao.Properties.TemperatureLocation.columnName + " INTEGER DEFAULT " + defaultTemperatureLocation);
database.execSQL("ALTER TABLE " + tableName + " ADD COLUMN " + GenericTemperatureSampleDao.Properties.TemperatureLocation.columnName + " INTEGER NOT NULL DEFAULT " + defaultTemperatureLocation);
}
}
@Override
public void upgradeSchema(SQLiteDatabase database) {
addTemperatureColumnsIfNotExists(database, HuaweiTemperatureSampleDao.TABLENAME, TemperatureSample.TYPE_SKIN, TemperatureSample.LOCATION_WRIST);
addTemperatureColumnsIfNotExists(database, ColmiTemperatureSampleDao.TABLENAME, TemperatureSample.TYPE_SKIN, TemperatureSample.LOCATION_WRIST);
addTemperatureColumnsIfNotExists(database, FemometerVinca2TemperatureSampleDao.TABLENAME, TemperatureSample.TYPE_BODY, TemperatureSample.LOCATION_MOUTH);
addTemperatureColumnsIfNotExists(database, MijiaLywsdRealtimeSampleDao.TABLENAME, TemperatureSample.TYPE_AMBIENT, TemperatureSample.LOCATION_UNKNOWN);
addTemperatureColumnsIfNotExists(database, GenericTemperatureSampleDao.TABLENAME, TemperatureSample.TYPE_UNKNOWN, TemperatureSample.LOCATION_UNKNOWN);
addColumnIfNotExists(database, HuaweiTemperatureSampleDao.TABLENAME, HuaweiTemperatureSampleDao.Properties.TemperatureType.columnName, TemperatureSample.TYPE_SKIN);
addColumnIfNotExists(database, HuaweiTemperatureSampleDao.TABLENAME, HuaweiTemperatureSampleDao.Properties.TemperatureLocation.columnName, TemperatureSample.LOCATION_WRIST);
addColumnIfNotExists(database, ColmiTemperatureSampleDao.TABLENAME, ColmiTemperatureSampleDao.Properties.TemperatureType.columnName, TemperatureSample.TYPE_SKIN);
addColumnIfNotExists(database, ColmiTemperatureSampleDao.TABLENAME, ColmiTemperatureSampleDao.Properties.TemperatureLocation.columnName, TemperatureSample.LOCATION_WRIST);
addColumnIfNotExists(database, FemometerVinca2TemperatureSampleDao.TABLENAME, FemometerVinca2TemperatureSampleDao.Properties.TemperatureType.columnName, TemperatureSample.TYPE_BODY);
addColumnIfNotExists(database, FemometerVinca2TemperatureSampleDao.TABLENAME, FemometerVinca2TemperatureSampleDao.Properties.TemperatureLocation.columnName, TemperatureSample.LOCATION_MOUTH);
addColumnIfNotExists(database, MijiaLywsdRealtimeSampleDao.TABLENAME, MijiaLywsdRealtimeSampleDao.Properties.TemperatureType.columnName, TemperatureSample.TYPE_AMBIENT);
addColumnIfNotExists(database, MijiaLywsdRealtimeSampleDao.TABLENAME, MijiaLywsdRealtimeSampleDao.Properties.TemperatureLocation.columnName, TemperatureSample.LOCATION_UNKNOWN);
addColumnIfNotExists(database, GenericTemperatureSampleDao.TABLENAME, GenericTemperatureSampleDao.Properties.TemperatureType.columnName, TemperatureSample.TYPE_UNKNOWN);
addColumnIfNotExists(database, GenericTemperatureSampleDao.TABLENAME, GenericTemperatureSampleDao.Properties.TemperatureLocation.columnName, TemperatureSample.LOCATION_UNKNOWN);
}
@Override
@@ -36,16 +36,16 @@ public class SchemaMigration {
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LOG.info("ActivityDatabase: schema upgrade requested from " + oldVersion + " to " + newVersion);
LOG.info("ActivityDatabase: schema upgrade requested from {} to {}", oldVersion, newVersion);
try {
for (int i = oldVersion + 1; i <= newVersion; i++) {
DBUpdateScript updater = getUpdateScript(db, i);
if (updater != null) {
LOG.info("upgrading activity database to version " + i);
LOG.info("upgrading activity database to version {}", i);
updater.upgradeSchema(db);
}
}
LOG.info("activity database is now at version " + newVersion);
LOG.info("activity database is now at version {}", newVersion);
} catch (RuntimeException ex) {
GB.toast("Error upgrading database.", Toast.LENGTH_SHORT, GB.ERROR, ex);
throw ex; // reject upgrade
@@ -53,16 +53,16 @@ public class SchemaMigration {
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LOG.info("ActivityDatabase: schema downgrade requested from " + oldVersion + " to " + newVersion);
LOG.info("ActivityDatabase: schema downgrade requested from {} to {}", oldVersion, newVersion);
try {
for (int i = oldVersion; i >= newVersion; i--) {
DBUpdateScript updater = getUpdateScript(db, i);
if (updater != null) {
LOG.info("downgrading activity database to version " + (i - 1));
LOG.info("downgrading activity database to version {}", i - 1);
updater.downgradeSchema(db);
}
}
LOG.info("activity database is now at version " + newVersion);
LOG.info("activity database is now at version {}", newVersion);
} catch (RuntimeException ex) {
GB.toast("Error downgrading database.", Toast.LENGTH_SHORT, GB.ERROR, ex);
throw ex; // reject downgrade
@@ -33,8 +33,8 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample;
public class GenericTemperatureSampleProvider extends AbstractTimeSampleProvider<GenericTemperatureSample> {
private final Integer defaultType;
private final Integer defaultLocation;
private final int defaultType;
private final int defaultLocation;
public GenericTemperatureSampleProvider(final GBDevice device, final DaoSession session) {
this(device, session, TemperatureSample.TYPE_UNKNOWN, TemperatureSample.LOCATION_UNKNOWN);
@@ -42,8 +42,8 @@ public class GenericTemperatureSampleProvider extends AbstractTimeSampleProvider
public GenericTemperatureSampleProvider(final GBDevice device,
final DaoSession session,
final Integer defaultType,
final Integer defaultLocation) {
final int defaultType,
final int defaultLocation) {
super(device, session);
this.defaultType = defaultType;
this.defaultLocation = defaultLocation;
@@ -51,10 +51,10 @@ public class GenericTemperatureSampleProvider extends AbstractTimeSampleProvider
private GenericTemperatureSample applyDefaults(final GenericTemperatureSample sample) {
if (sample != null) {
if (defaultType != -1 && (sample.getTemperatureType() == null || sample.getTemperatureType() == 0)) {
if (defaultType != TemperatureSample.TYPE_UNKNOWN && sample.getTemperatureType() == TemperatureSample.TYPE_UNKNOWN) {
sample.setTemperatureType(defaultType);
}
if (defaultLocation != -1 && (sample.getTemperatureLocation() == null || sample.getTemperatureLocation() == 0)) {
if (defaultLocation != TemperatureSample.LOCATION_UNKNOWN && sample.getTemperatureLocation() == TemperatureSample.LOCATION_UNKNOWN) {
sample.setTemperatureLocation(defaultLocation);
}
}
@@ -81,7 +81,10 @@ public class GenericTemperatureSampleProvider extends AbstractTimeSampleProvider
@Override
public GenericTemperatureSample createSample() {
return new GenericTemperatureSample();
final GenericTemperatureSample sample = new GenericTemperatureSample();
sample.setTemperatureType(defaultType);
sample.setTemperatureLocation(defaultLocation);
return sample;
}
@NonNull
@@ -53,7 +53,7 @@ public class FemometerVinca2SampleProvider extends AbstractTimeSampleProvider<Fe
@Override
public FemometerVinca2TemperatureSample createSample() {
FemometerVinca2TemperatureSample sample=new FemometerVinca2TemperatureSample();
FemometerVinca2TemperatureSample sample = new FemometerVinca2TemperatureSample();
sample.setTemperatureType(TemperatureSample.TYPE_BODY);
sample.setTemperatureLocation(TemperatureSample.LOCATION_MOUTH);
return sample;
@@ -52,7 +52,7 @@ public class MijiaLywsdRealtimeSampleProvider extends AbstractTimeSampleProvider
@Override
public MijiaLywsdRealtimeSample createSample() {
MijiaLywsdRealtimeSample sample=new MijiaLywsdRealtimeSample();
MijiaLywsdRealtimeSample sample = new MijiaLywsdRealtimeSample();
sample.setTemperatureType(TemperatureSample.TYPE_AMBIENT);
sample.setTemperatureLocation(TemperatureSample.LOCATION_UNKNOWN);
return sample;
@@ -119,12 +119,12 @@ public class XiaomiTemperatureSampleProvider implements TimeSampleProvider<Tempe
}
@Override
public Integer getTemperatureType() {
public int getTemperatureType() {
return TemperatureSample.TYPE_SKIN;
}
@Override
public Integer getTemperatureLocation() {
public int getTemperatureLocation() {
return TemperatureSample.LOCATION_WRIST;
}
}
@@ -37,17 +37,18 @@ public interface TemperatureSample extends TimeSample {
* Returns the temperature value.
*/
float getTemperature();
/**
* Returns the temperature type (the position on the body where the measurement was taken).
*/
default Integer getTemperatureType() {
default int getTemperatureType() {
return TYPE_UNKNOWN;
}
/**
* Returns the temperature measurement location (the position on the body where the measurement was taken).
*/
default Integer getTemperatureLocation() {
default int getTemperatureLocation() {
return LOCATION_UNKNOWN;
}
}
@@ -83,7 +83,8 @@ public class FetchTemperatureOperation extends AbstractRepeatingFetchOperation {
final GenericTemperatureSample sample = new GenericTemperatureSample();
sample.setTimestamp(timestamp.getTimeInMillis());
sample.setTemperature(temperature / 100f);
sample.setTemperatureType(0);
sample.setTemperatureLocation(GenericTemperatureSample.LOCATION_WRIST);
sample.setTemperatureType(GenericTemperatureSample.TYPE_SKIN);
samples.add(sample);
timestamp.add(Calendar.MINUTE, 1);