1
0
mirror of https://github.com/oliexdev/openScale.git synced 2025-08-26 01:43:59 +02:00

don't allow to add a duplicated measurement with the exact same date and time.

This commit is contained in:
OliE
2018-01-06 10:59:30 +01:00
parent 9df1d290d0
commit f1695d18dc
6 changed files with 13 additions and 18 deletions

View File

@@ -210,14 +210,15 @@ public class OpenScale {
scaleMeasurement.setFat(fatMetric.getFat(getScaleUser(scaleMeasurement.getUserId()), scaleMeasurement));
}
if (measurementDAO.get(scaleMeasurement.getDateTime(), scaleMeasurement.getUserId()) == null) {
measurementDAO.insert(scaleMeasurement);
if (measurementDAO.insert(scaleMeasurement) != -1) {
ScaleUser scaleUser = getScaleUser(scaleMeasurement.getUserId());
String infoText = String.format(context.getString(R.string.info_new_data_added), scaleMeasurement.getConvertedWeight(scaleUser.getScaleUnit()), scaleUser.UNIT_STRING[scaleUser.getScaleUnit()], dateTimeFormat.format(scaleMeasurement.getDateTime()), scaleUser.getUserName());
Toast.makeText(context, infoText, Toast.LENGTH_LONG).show();
alarmHandler.entryChanged(context, scaleMeasurement);
updateScaleData();
} else {
Toast.makeText(context, context.getString(R.string.info_new_data_duplicated), Toast.LENGTH_LONG).show();
}
return scaleMeasurement.getUserId();

View File

@@ -18,6 +18,7 @@ package com.health.openscale.core.database;
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;
@@ -46,10 +47,10 @@ public interface ScaleMeasurementDAO {
@Query("SELECT * FROM scaleMeasurements WHERE datetime >= :startYear AND datetime < :endYear AND userId = :userId AND enabled = 1 ORDER BY datetime DESC")
List<ScaleMeasurement> getAllInRange(Date startYear, Date endYear, int userId);
@Insert
void insert(ScaleMeasurement measurement);
@Insert (onConflict = OnConflictStrategy.IGNORE)
long insert(ScaleMeasurement measurement);
@Insert
@Insert (onConflict = OnConflictStrategy.IGNORE)
void insertAll(List<ScaleMeasurement> measurementList);
@Update

View File

@@ -298,7 +298,8 @@ public class DataEntryActivity extends Activity {
cal.setTime(dateMeasurement.getDateTime());
cal.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, time.get(Calendar.MINUTE));
cal.set(Calendar.SECOND, time.get(Calendar.SECOND));
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
ScaleMeasurement scaleMeasurement = new ScaleMeasurement();

View File

@@ -17,7 +17,6 @@ package com.health.openscale.junit;
import android.arch.persistence.room.Room;
import android.content.Context;
import android.database.sqlite.SQLiteConstraintException;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
@@ -40,7 +39,6 @@ import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
// run this test as an Android instrumented test!
@RunWith(AndroidJUnit4.class)
@@ -179,16 +177,8 @@ public class DatabaseTest {
assertEquals(25.0f, measurementDAO.getAll(user2).get(0).getWeight(), DELTA);
// don't allow insertion with the same date
if (measurementDAO.get(measurement11.getDateTime(), user1) == null) {
measurementDAO.insert(measurement11);
}
assertEquals(3, measurementDAO.getAll(user1).size());
// test if SQLiteConstraintException exception is thrown if we want to try to insert a measurement with the same date
try {
measurementDAO.insert(measurement11);
fail("SQLiteConstraintException was not thrown while inserting measurement with the same date");
} catch (SQLiteConstraintException e) {}
long id = measurementDAO.insert(measurement11);
assertEquals(-1 , id);
assertEquals(3, measurementDAO.getAll(user1).size());
// test get(datetime) method

View File

@@ -159,4 +159,5 @@
<string name="open_drawer">öffnen</string>
<string name="close_drawer">schließen</string>
<string name="info_bluetooth_no_device_set">Kein Bluetooth Gerät ausgewählt</string>
<string name="info_new_data_duplicated">Messung mit gleichen Datum und Uhrzeit exisitiert bereits</string>
</resources>

View File

@@ -109,6 +109,7 @@
<string name="info_bluetooth_init">Initialize Bluetooth device</string>
<string name="info_bluetooth_connection_error">Bluetooth has an unexpected error</string>
<string name="info_new_data_added">%1$.2f%2$s [%3$s] to %4$s added</string>
<string name="info_new_data_duplicated">measurement with the same date and time already exist</string>
<string name="info_enter_user_name">Enter your name</string>
<string name="info_no_selected_user">No user exists. Please create a new user in the settings.</string>